2 include(CheckCSourceCompiles)
4 # Make all the tests only check the compiler
5 set(TEST_COMPILE_ONLY On)
7 # Check host compiler support for certain flags
8 builtin_check_c_compiler_flag(-fPIC COMPILER_RT_HAS_FPIC_FLAG)
9 builtin_check_c_compiler_flag(-fPIE COMPILER_RT_HAS_FPIE_FLAG)
10 builtin_check_c_compiler_flag(-fno-builtin COMPILER_RT_HAS_FNO_BUILTIN_FLAG)
11 builtin_check_c_compiler_flag(-std=c11 COMPILER_RT_HAS_STD_C11_FLAG)
12 builtin_check_c_compiler_flag(-fvisibility=hidden COMPILER_RT_HAS_VISIBILITY_HIDDEN_FLAG)
13 builtin_check_c_compiler_flag(-fomit-frame-pointer COMPILER_RT_HAS_OMIT_FRAME_POINTER_FLAG)
14 builtin_check_c_compiler_flag(-ffreestanding COMPILER_RT_HAS_FREESTANDING_FLAG)
15 builtin_check_c_compiler_flag(-fxray-instrument COMPILER_RT_HAS_XRAY_COMPILER_FLAG)
17 builtin_check_c_compiler_source(COMPILER_RT_HAS_ATOMIC_KEYWORD
19 int foo(int x, int y) {
20 _Atomic int result = x * y;
27 set(ARM32 arm armhf armv6m armv7m armv7em armv7 armv7s armv7k)
31 set(MIPS32 mips mipsel)
32 set(MIPS64 mips64 mips64el)
33 set(PPC64 powerpc64 powerpc64le)
41 set(ARM32 armv7 armv7k armv7s)
42 set(X86_64 x86_64 x86_64h)
45 set(ALL_BUILTIN_SUPPORTED_ARCH ${X86} ${X86_64} ${ARM32} ${ARM64}
46 ${HEXAGON} ${MIPS32} ${MIPS64} ${PPC64} ${RISCV32} ${RISCV64} ${WASM32} ${WASM64})
48 include(CompilerRTUtils)
49 include(CompilerRTDarwinUtils)
53 find_darwin_sdk_dir(DARWIN_osx_SYSROOT macosx)
54 find_darwin_sdk_dir(DARWIN_iossim_SYSROOT iphonesimulator)
55 find_darwin_sdk_dir(DARWIN_ios_SYSROOT iphoneos)
56 find_darwin_sdk_dir(DARWIN_watchossim_SYSROOT watchsimulator)
57 find_darwin_sdk_dir(DARWIN_watchos_SYSROOT watchos)
58 find_darwin_sdk_dir(DARWIN_tvossim_SYSROOT appletvsimulator)
59 find_darwin_sdk_dir(DARWIN_tvos_SYSROOT appletvos)
61 set(DARWIN_EMBEDDED_PLATFORMS)
62 set(DARWIN_osx_BUILTIN_MIN_VER 10.5)
63 set(DARWIN_osx_BUILTIN_MIN_VER_FLAG
64 -mmacosx-version-min=${DARWIN_osx_BUILTIN_MIN_VER})
66 if(COMPILER_RT_ENABLE_IOS)
67 list(APPEND DARWIN_EMBEDDED_PLATFORMS ios)
68 set(DARWIN_ios_MIN_VER_FLAG -miphoneos-version-min)
69 set(DARWIN_ios_BUILTIN_MIN_VER 6.0)
70 set(DARWIN_ios_BUILTIN_MIN_VER_FLAG
71 ${DARWIN_ios_MIN_VER_FLAG}=${DARWIN_ios_BUILTIN_MIN_VER})
73 if(COMPILER_RT_ENABLE_WATCHOS)
74 list(APPEND DARWIN_EMBEDDED_PLATFORMS watchos)
75 set(DARWIN_watchos_MIN_VER_FLAG -mwatchos-version-min)
76 set(DARWIN_watchos_BUILTIN_MIN_VER 2.0)
77 set(DARWIN_watchos_BUILTIN_MIN_VER_FLAG
78 ${DARWIN_watchos_MIN_VER_FLAG}=${DARWIN_watchos_BUILTIN_MIN_VER})
80 if(COMPILER_RT_ENABLE_TVOS)
81 list(APPEND DARWIN_EMBEDDED_PLATFORMS tvos)
82 set(DARWIN_tvos_MIN_VER_FLAG -mtvos-version-min)
83 set(DARWIN_tvos_BUILTIN_MIN_VER 9.0)
84 set(DARWIN_tvos_BUILTIN_MIN_VER_FLAG
85 ${DARWIN_tvos_MIN_VER_FLAG}=${DARWIN_tvos_BUILTIN_MIN_VER})
88 set(BUILTIN_SUPPORTED_OS osx)
90 # We're setting the flag manually for each target OS
91 set(CMAKE_OSX_DEPLOYMENT_TARGET "")
93 if(NOT DARWIN_osx_ARCHS)
94 set(DARWIN_osx_ARCHS i386 x86_64 x86_64h)
97 set(DARWIN_sim_ARCHS i386 x86_64)
98 set(DARWIN_device_ARCHS armv7 armv7s armv7k arm64)
100 message(STATUS "OSX supported arches: ${DARWIN_osx_ARCHS}")
101 foreach(arch ${DARWIN_osx_ARCHS})
102 list(APPEND COMPILER_RT_SUPPORTED_ARCH ${arch})
103 set(CAN_TARGET_${arch} 1)
106 foreach(platform ${DARWIN_EMBEDDED_PLATFORMS})
107 if(DARWIN_${platform}sim_SYSROOT)
108 set(DARWIN_${platform}sim_BUILTIN_MIN_VER
109 ${DARWIN_${platform}_BUILTIN_MIN_VER})
110 set(DARWIN_${platform}sim_BUILTIN_MIN_VER_FLAG
111 ${DARWIN_${platform}_BUILTIN_MIN_VER_FLAG})
113 set(DARWIN_${platform}sim_SKIP_CC_KEXT On)
115 set(test_arches ${DARWIN_sim_ARCHS})
116 if(DARWIN_${platform}sim_ARCHS)
117 set(test_arches DARWIN_${platform}sim_ARCHS)
120 darwin_test_archs(${platform}sim
121 DARWIN_${platform}sim_ARCHS
123 message(STATUS "${platform} Simulator supported builtin arches: ${DARWIN_${platform}sim_ARCHS}")
124 if(DARWIN_${platform}sim_ARCHS)
125 list(APPEND BUILTIN_SUPPORTED_OS ${platform}sim)
127 foreach(arch ${DARWIN_${platform}sim_ARCHS})
128 list(APPEND COMPILER_RT_SUPPORTED_ARCH ${arch})
129 set(CAN_TARGET_${arch} 1)
133 if(DARWIN_${platform}_SYSROOT)
134 set(test_arches ${DARWIN_device_ARCHS})
135 if(DARWIN_${platform}_ARCHS)
136 set(test_arches DARWIN_${platform}_ARCHS)
139 darwin_test_archs(${platform}
140 DARWIN_${platform}_ARCHS
142 message(STATUS "${platform} supported builtin arches: ${DARWIN_${platform}_ARCHS}")
143 if(DARWIN_${platform}_ARCHS)
144 list(APPEND BUILTIN_SUPPORTED_OS ${platform})
146 foreach(arch ${DARWIN_${platform}_ARCHS})
147 list(APPEND COMPILER_RT_SUPPORTED_ARCH ${arch})
148 set(CAN_TARGET_${arch} 1)
153 list_intersect(BUILTIN_SUPPORTED_ARCH ALL_BUILTIN_SUPPORTED_ARCH COMPILER_RT_SUPPORTED_ARCH)
156 # If we're not building the builtins standalone, just rely on the tests in
157 # config-ix.cmake to tell us what to build. Otherwise we need to do some leg
159 if(COMPILER_RT_BUILTINS_STANDALONE_BUILD)
162 # Architectures supported by compiler-rt libraries.
163 filter_available_targets(BUILTIN_SUPPORTED_ARCH
164 ${ALL_BUILTIN_SUPPORTED_ARCH})
167 message(STATUS "Builtin supported architectures: ${BUILTIN_SUPPORTED_ARCH}")