mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-27 15:41:46 +00:00
cd173cbd7c
The orginal single folder layout produced libraries in the form: lib/linux/<libname>-<archname>.a That archname for Arm depended on whether you had hard or soft float. This is sometimes shown as "arm" (soft) vs. "armhf" (hard). If this is set in a triple we do it in the final portion, the ABI. "gnueabi" for soft float, "gnueabihf" for hard float. Meaning that the expected triple is: arm-unknown-linux-gnueabihf Not this: armhf-unknown-linux-gnueabihf For the per target layout I have decided to rely on the ABI portion of the triple instead of the arch name used for the old layout (doing that would produce the invalid triple above). This means that building with triple: armv8l-unknown-linux-gnueabihf Will result in libraries in: lib/arm-unknown-linux-gnueabihf/ And clang will now know to look for "arm" instead of "armv8l". Meaning that we can share libraries between an armv8 and armv7 build as we did with the previous layout. In addition to handling spelling differences e.g. "armv8l" with an "l" on some Linux distros. compiler-rt will autodetect that the "armhf" and/or "arm" architecture can be built. We then replace the given triple's architecture with that. Then if the triple's float ABI doesn't match, we change that. That new triple is then used as the folder name. If you select to build only the given triple, with COMPILER_RT_DEFAULT_TARGET_ONLY, compiler-rt will not autodetect the architecture and for that I assume you know what you're doing. In that case the library path will use the unomdified triple. From what I can tell, this is how most large builds e.g Android and Arm's Embedded Toolchain for llvm do things. I assume that big endian "armeb" builds would end up doing this too. Bare metal builds will not be using per target runtime dirs so they remain as they were. Depends on D139536 Reviewed By: MaskRay, phosek Differential Revision: https://reviews.llvm.org/D140011
34 lines
2.0 KiB
C
34 lines
2.0 KiB
C
/// Check that libraries built with the per target runtime directory layout
|
|
/// are selected correctly when using variations of Arm triples.
|
|
|
|
// REQUIRES: arm-registered-target
|
|
|
|
// RUN: %clang %s --target=arm-unknown-linux-gnueabihf -print-runtime-dir \
|
|
// RUN: -resource-dir=%S/Inputs/arm_float_abi_runtime_path 2>&1 | FileCheck -check-prefix=ARMHF %s
|
|
/// "armv7l" should be normalised to just "arm".
|
|
// RUN: %clang %s --target=armv7l-unknown-linux-gnueabihf -print-runtime-dir \
|
|
// RUN: -resource-dir=%S/Inputs/arm_float_abi_runtime_path 2>&1 | FileCheck -check-prefix=ARMHF %s
|
|
|
|
// RUN: %clang %s --target=arm-unknown-linux-gnueabi -print-runtime-dir \
|
|
// RUN: -resource-dir=%S/Inputs/arm_float_abi_runtime_path 2>&1 | FileCheck -check-prefix=ARM %s
|
|
// RUN: %clang %s --target=armv7l-unknown-linux-gnueabi -print-runtime-dir \
|
|
// RUN: -resource-dir=%S/Inputs/arm_float_abi_runtime_path 2>&1 | FileCheck -check-prefix=ARM %s
|
|
|
|
/// armeb triples should be unmodified.
|
|
// RUN: %clang %s --target=armeb-unknown-linux-gnueabihf -print-runtime-dir \
|
|
// RUN: -resource-dir=%S/Inputs/arm_float_abi_runtime_path 2>&1 | FileCheck -check-prefix=ARMEBHF %s
|
|
// RUN: %clang %s --target=armeb-unknown-linux-gnueabi -print-runtime-dir \
|
|
// RUN: -resource-dir=%S/Inputs/arm_float_abi_runtime_path 2>&1 | FileCheck -check-prefix=ARMEB %s
|
|
|
|
// RUN: %clang %s --target=arm-pc-windows-msvc -print-runtime-dir \
|
|
// RUN: -resource-dir=%S/Inputs/arm_float_abi_runtime_path 2>&1 | FileCheck -check-prefix=WINDOWS %s
|
|
/// armhf-pc... isn't recognised so just check that the float-abi option is ignored
|
|
// RUN: %clang %s --target=arm-pc-windows-msvc -mfloat-abi=hard -print-runtime-dir \
|
|
// RUN: -resource-dir=%S/Inputs/arm_float_abi_runtime_path 2>&1 | FileCheck -check-prefix=WINDOWS %s
|
|
|
|
// ARMHF: lib{{/|\\}}arm-unknown-linux-gnueabihf{{$}}
|
|
// ARM: lib{{/|\\}}arm-unknown-linux-gnueabi{{$}}
|
|
// ARMEBHF: lib{{/|\\}}armeb-unknown-linux-gnueabihf{{$}}
|
|
// ARMEB: lib{{/|\\}}armeb-unknown-linux-gnueabi{{$}}
|
|
// WINDOWS: lib{{/|\\}}arm-pc-windows-msvc{{$}}
|