| include(BuiltinTests) |
| include(CheckCSourceCompiles) |
| |
| # Make all the tests only check the compiler |
| set(TEST_COMPILE_ONLY On) |
| |
| # Check host compiler support for certain flags |
| builtin_check_c_compiler_flag(-fPIC COMPILER_RT_HAS_FPIC_FLAG) |
| builtin_check_c_compiler_flag(-fPIE COMPILER_RT_HAS_FPIE_FLAG) |
| builtin_check_c_compiler_flag(-fno-builtin COMPILER_RT_HAS_FNO_BUILTIN_FLAG) |
| builtin_check_c_compiler_flag(-std=c11 COMPILER_RT_HAS_STD_C11_FLAG) |
| builtin_check_c_compiler_flag(-fvisibility=hidden COMPILER_RT_HAS_VISIBILITY_HIDDEN_FLAG) |
| builtin_check_c_compiler_flag(-fomit-frame-pointer COMPILER_RT_HAS_OMIT_FRAME_POINTER_FLAG) |
| builtin_check_c_compiler_flag(-ffreestanding COMPILER_RT_HAS_FREESTANDING_FLAG) |
| builtin_check_c_compiler_flag(-fxray-instrument COMPILER_RT_HAS_XRAY_COMPILER_FLAG) |
| |
| builtin_check_c_compiler_source(COMPILER_RT_HAS_ATOMIC_KEYWORD |
| " |
| int foo(int x, int y) { |
| _Atomic int result = x * y; |
| return result; |
| } |
| ") |
| |
| |
| set(ARM64 aarch64) |
| set(ARM32 arm armhf armv6m armv7m armv7em armv7 armv7s armv7k) |
| set(HEXAGON hexagon) |
| set(X86 i386) |
| set(X86_64 x86_64) |
| set(MIPS32 mips mipsel) |
| set(MIPS64 mips64 mips64el) |
| set(PPC64 powerpc64 powerpc64le) |
| set(RISCV32 riscv32) |
| set(RISCV64 riscv64) |
| set(WASM32 wasm32) |
| set(WASM64 wasm64) |
| |
| if(APPLE) |
| set(ARM64 arm64) |
| set(ARM32 armv7 armv7k armv7s) |
| set(X86_64 x86_64 x86_64h) |
| endif() |
| |
| set(ALL_BUILTIN_SUPPORTED_ARCH ${X86} ${X86_64} ${ARM32} ${ARM64} |
| ${HEXAGON} ${MIPS32} ${MIPS64} ${PPC64} ${RISCV32} ${RISCV64} ${WASM32} ${WASM64}) |
| |
| include(CompilerRTUtils) |
| include(CompilerRTDarwinUtils) |
| |
| if(APPLE) |
| |
| find_darwin_sdk_dir(DARWIN_osx_SYSROOT macosx) |
| find_darwin_sdk_dir(DARWIN_iossim_SYSROOT iphonesimulator) |
| find_darwin_sdk_dir(DARWIN_ios_SYSROOT iphoneos) |
| find_darwin_sdk_dir(DARWIN_watchossim_SYSROOT watchsimulator) |
| find_darwin_sdk_dir(DARWIN_watchos_SYSROOT watchos) |
| find_darwin_sdk_dir(DARWIN_tvossim_SYSROOT appletvsimulator) |
| find_darwin_sdk_dir(DARWIN_tvos_SYSROOT appletvos) |
| |
| set(DARWIN_EMBEDDED_PLATFORMS) |
| set(DARWIN_osx_BUILTIN_MIN_VER 10.5) |
| set(DARWIN_osx_BUILTIN_MIN_VER_FLAG |
| -mmacosx-version-min=${DARWIN_osx_BUILTIN_MIN_VER}) |
| |
| if(COMPILER_RT_ENABLE_IOS) |
| list(APPEND DARWIN_EMBEDDED_PLATFORMS ios) |
| set(DARWIN_ios_MIN_VER_FLAG -miphoneos-version-min) |
| set(DARWIN_ios_BUILTIN_MIN_VER 6.0) |
| set(DARWIN_ios_BUILTIN_MIN_VER_FLAG |
| ${DARWIN_ios_MIN_VER_FLAG}=${DARWIN_ios_BUILTIN_MIN_VER}) |
| endif() |
| if(COMPILER_RT_ENABLE_WATCHOS) |
| list(APPEND DARWIN_EMBEDDED_PLATFORMS watchos) |
| set(DARWIN_watchos_MIN_VER_FLAG -mwatchos-version-min) |
| set(DARWIN_watchos_BUILTIN_MIN_VER 2.0) |
| set(DARWIN_watchos_BUILTIN_MIN_VER_FLAG |
| ${DARWIN_watchos_MIN_VER_FLAG}=${DARWIN_watchos_BUILTIN_MIN_VER}) |
| endif() |
| if(COMPILER_RT_ENABLE_TVOS) |
| list(APPEND DARWIN_EMBEDDED_PLATFORMS tvos) |
| set(DARWIN_tvos_MIN_VER_FLAG -mtvos-version-min) |
| set(DARWIN_tvos_BUILTIN_MIN_VER 9.0) |
| set(DARWIN_tvos_BUILTIN_MIN_VER_FLAG |
| ${DARWIN_tvos_MIN_VER_FLAG}=${DARWIN_tvos_BUILTIN_MIN_VER}) |
| endif() |
| |
| set(BUILTIN_SUPPORTED_OS osx) |
| |
| # We're setting the flag manually for each target OS |
| set(CMAKE_OSX_DEPLOYMENT_TARGET "") |
| |
| if(NOT DARWIN_osx_ARCHS) |
| set(DARWIN_osx_ARCHS i386 x86_64 x86_64h) |
| endif() |
| |
| set(DARWIN_sim_ARCHS i386 x86_64) |
| set(DARWIN_device_ARCHS armv7 armv7s armv7k arm64) |
| |
| message(STATUS "OSX supported arches: ${DARWIN_osx_ARCHS}") |
| foreach(arch ${DARWIN_osx_ARCHS}) |
| list(APPEND COMPILER_RT_SUPPORTED_ARCH ${arch}) |
| set(CAN_TARGET_${arch} 1) |
| endforeach() |
| |
| # Need to build a 10.4 compatible libclang_rt |
| set(DARWIN_10.4_SYSROOT ${DARWIN_osx_SYSROOT}) |
| set(DARWIN_10.4_BUILTIN_MIN_VER 10.4) |
| set(DARWIN_10.4_BUILTIN_MIN_VER_FLAG |
| -mmacosx-version-min=${DARWIN_10.4_BUILTIN_MIN_VER}) |
| set(DARWIN_10.4_SKIP_CC_KEXT On) |
| darwin_test_archs(10.4 DARWIN_10.4_ARCHS i386 x86_64) |
| message(STATUS "OSX 10.4 supported builtin arches: ${DARWIN_10.4_ARCHS}") |
| if(DARWIN_10.4_ARCHS) |
| # don't include the Haswell slice in the 10.4 compatibility library |
| list(REMOVE_ITEM DARWIN_10.4_ARCHS x86_64h) |
| list(APPEND BUILTIN_SUPPORTED_OS 10.4) |
| endif() |
| |
| foreach(platform ${DARWIN_EMBEDDED_PLATFORMS}) |
| if(DARWIN_${platform}sim_SYSROOT) |
| set(DARWIN_${platform}sim_BUILTIN_MIN_VER |
| ${DARWIN_${platform}_BUILTIN_MIN_VER}) |
| set(DARWIN_${platform}sim_BUILTIN_MIN_VER_FLAG |
| ${DARWIN_${platform}_BUILTIN_MIN_VER_FLAG}) |
| |
| set(DARWIN_${platform}sim_SKIP_CC_KEXT On) |
| |
| set(test_arches ${DARWIN_sim_ARCHS}) |
| if(DARWIN_${platform}sim_ARCHS) |
| set(test_arches DARWIN_${platform}sim_ARCHS) |
| endif() |
| |
| darwin_test_archs(${platform}sim |
| DARWIN_${platform}sim_ARCHS |
| ${test_arches}) |
| message(STATUS "${platform} Simulator supported builtin arches: ${DARWIN_${platform}sim_ARCHS}") |
| if(DARWIN_${platform}sim_ARCHS) |
| list(APPEND BUILTIN_SUPPORTED_OS ${platform}sim) |
| endif() |
| foreach(arch ${DARWIN_${platform}sim_ARCHS}) |
| list(APPEND COMPILER_RT_SUPPORTED_ARCH ${arch}) |
| set(CAN_TARGET_${arch} 1) |
| endforeach() |
| endif() |
| |
| if(DARWIN_${platform}_SYSROOT) |
| set(test_arches ${DARWIN_device_ARCHS}) |
| if(DARWIN_${platform}_ARCHS) |
| set(test_arches DARWIN_${platform}_ARCHS) |
| endif() |
| |
| darwin_test_archs(${platform} |
| DARWIN_${platform}_ARCHS |
| ${test_arches}) |
| message(STATUS "${platform} supported builtin arches: ${DARWIN_${platform}_ARCHS}") |
| if(DARWIN_${platform}_ARCHS) |
| list(APPEND BUILTIN_SUPPORTED_OS ${platform}) |
| endif() |
| foreach(arch ${DARWIN_${platform}_ARCHS}) |
| list(APPEND COMPILER_RT_SUPPORTED_ARCH ${arch}) |
| set(CAN_TARGET_${arch} 1) |
| endforeach() |
| endif() |
| endforeach() |
| |
| list_intersect(BUILTIN_SUPPORTED_ARCH ALL_BUILTIN_SUPPORTED_ARCH COMPILER_RT_SUPPORTED_ARCH) |
| |
| else() |
| # If we're not building the builtins standalone, just rely on the tests in |
| # config-ix.cmake to tell us what to build. Otherwise we need to do some leg |
| # work here... |
| if(COMPILER_RT_BUILTINS_STANDALONE_BUILD) |
| test_targets() |
| endif() |
| # Architectures supported by compiler-rt libraries. |
| filter_available_targets(BUILTIN_SUPPORTED_ARCH |
| ${ALL_BUILTIN_SUPPORTED_ARCH}) |
| endif() |
| |
| message(STATUS "Builtin supported architectures: ${BUILTIN_SUPPORTED_ARCH}") |