1include(BuiltinTests) 2include(CheckCSourceCompiles) 3 4# Make all the tests only check the compiler 5set(TEST_COMPILE_ONLY On) 6 7# Check host compiler support for certain flags 8builtin_check_c_compiler_flag(-fPIC COMPILER_RT_HAS_FPIC_FLAG) 9builtin_check_c_compiler_flag(-fPIE COMPILER_RT_HAS_FPIE_FLAG) 10builtin_check_c_compiler_flag(-fno-builtin COMPILER_RT_HAS_FNO_BUILTIN_FLAG) 11builtin_check_c_compiler_flag(-std=c11 COMPILER_RT_HAS_STD_C11_FLAG) 12builtin_check_c_compiler_flag(-fvisibility=hidden COMPILER_RT_HAS_VISIBILITY_HIDDEN_FLAG) 13builtin_check_c_compiler_flag(-fomit-frame-pointer COMPILER_RT_HAS_OMIT_FRAME_POINTER_FLAG) 14builtin_check_c_compiler_flag(-ffreestanding COMPILER_RT_HAS_FREESTANDING_FLAG) 15builtin_check_c_compiler_flag(-fxray-instrument COMPILER_RT_HAS_XRAY_COMPILER_FLAG) 16 17builtin_check_c_compiler_source(COMPILER_RT_HAS_ATOMIC_KEYWORD 18" 19int foo(int x, int y) { 20 _Atomic int result = x * y; 21 return result; 22} 23") 24 25 26set(ARM64 aarch64) 27set(ARM32 arm armhf armv6m armv7m armv7em armv7 armv7s armv7k) 28set(HEXAGON hexagon) 29set(X86 i386) 30set(X86_64 x86_64) 31set(MIPS32 mips mipsel) 32set(MIPS64 mips64 mips64el) 33set(PPC64 powerpc64 powerpc64le) 34set(RISCV32 riscv32) 35set(RISCV64 riscv64) 36set(SPARC sparc) 37set(SPARCV9 sparcv9) 38set(WASM32 wasm32) 39set(WASM64 wasm64) 40 41if(APPLE) 42 set(ARM64 arm64) 43 set(ARM32 armv7 armv7k armv7s) 44 set(X86_64 x86_64 x86_64h) 45endif() 46 47set(ALL_BUILTIN_SUPPORTED_ARCH ${X86} ${X86_64} ${ARM32} ${ARM64} 48 ${HEXAGON} ${MIPS32} ${MIPS64} ${PPC64} ${RISCV32} ${RISCV64} ${SPARC} ${SPARCV9} ${WASM32} ${WASM64}) 49 50include(CompilerRTUtils) 51include(CompilerRTDarwinUtils) 52 53if(APPLE) 54 55 find_darwin_sdk_dir(DARWIN_osx_SYSROOT macosx) 56 find_darwin_sdk_dir(DARWIN_iossim_SYSROOT iphonesimulator) 57 find_darwin_sdk_dir(DARWIN_ios_SYSROOT iphoneos) 58 find_darwin_sdk_dir(DARWIN_watchossim_SYSROOT watchsimulator) 59 find_darwin_sdk_dir(DARWIN_watchos_SYSROOT watchos) 60 find_darwin_sdk_dir(DARWIN_tvossim_SYSROOT appletvsimulator) 61 find_darwin_sdk_dir(DARWIN_tvos_SYSROOT appletvos) 62 63 set(DARWIN_EMBEDDED_PLATFORMS) 64 set(DARWIN_osx_BUILTIN_MIN_VER 10.5) 65 set(DARWIN_osx_BUILTIN_MIN_VER_FLAG 66 -mmacosx-version-min=${DARWIN_osx_BUILTIN_MIN_VER}) 67 set(DARWIN_osx_BUILTIN_ALL_POSSIBLE_ARCHS ${X86} ${X86_64}) 68 69 if(COMPILER_RT_ENABLE_IOS) 70 list(APPEND DARWIN_EMBEDDED_PLATFORMS ios) 71 set(DARWIN_ios_MIN_VER_FLAG -miphoneos-version-min) 72 set(DARWIN_ios_BUILTIN_MIN_VER 6.0) 73 set(DARWIN_ios_BUILTIN_MIN_VER_FLAG 74 ${DARWIN_ios_MIN_VER_FLAG}=${DARWIN_ios_BUILTIN_MIN_VER}) 75 set(DARWIN_ios_BUILTIN_ALL_POSSIBLE_ARCHS ${ARM64} ${ARM32}) 76 set(DARWIN_iossim_BUILTIN_ALL_POSSIBLE_ARCHS ${X86} ${X86_64}) 77 endif() 78 if(COMPILER_RT_ENABLE_WATCHOS) 79 list(APPEND DARWIN_EMBEDDED_PLATFORMS watchos) 80 set(DARWIN_watchos_MIN_VER_FLAG -mwatchos-version-min) 81 set(DARWIN_watchos_BUILTIN_MIN_VER 2.0) 82 set(DARWIN_watchos_BUILTIN_MIN_VER_FLAG 83 ${DARWIN_watchos_MIN_VER_FLAG}=${DARWIN_watchos_BUILTIN_MIN_VER}) 84 set(DARWIN_watchos_BUILTIN_ALL_POSSIBLE_ARCHS armv7 armv7k) 85 set(DARWIN_watchossim_BUILTIN_ALL_POSSIBLE_ARCHS ${X86}) 86 endif() 87 if(COMPILER_RT_ENABLE_TVOS) 88 list(APPEND DARWIN_EMBEDDED_PLATFORMS tvos) 89 set(DARWIN_tvos_MIN_VER_FLAG -mtvos-version-min) 90 set(DARWIN_tvos_BUILTIN_MIN_VER 9.0) 91 set(DARWIN_tvos_BUILTIN_MIN_VER_FLAG 92 ${DARWIN_tvos_MIN_VER_FLAG}=${DARWIN_tvos_BUILTIN_MIN_VER}) 93 set(DARWIN_tvos_BUILTIN_ALL_POSSIBLE_ARCHS armv7 arm64) 94 set(DARWIN_tvossim_BUILTIN_ALL_POSSIBLE_ARCHS ${X86} ${X86_64}) 95 endif() 96 97 set(BUILTIN_SUPPORTED_OS osx) 98 99 # We're setting the flag manually for each target OS 100 set(CMAKE_OSX_DEPLOYMENT_TARGET "") 101 102 # NOTE: We deliberately avoid using `DARWIN_<os>_ARCHS` here because that is 103 # used by `config-ix.cmake` in the context of building the rest of 104 # compiler-rt where the global `${TEST_COMPILE_ONLY}` (used by 105 # `darwin_test_archs()`) has a different value. 106 darwin_test_archs(osx 107 DARWIN_osx_BUILTIN_ARCHS 108 ${DARWIN_osx_BUILTIN_ALL_POSSIBLE_ARCHS} 109 ) 110 message(STATUS "OSX supported builtin arches: ${DARWIN_osx_BUILTIN_ARCHS}") 111 foreach(arch ${DARWIN_osx_BUILTIN_ARCHS}) 112 list(APPEND COMPILER_RT_SUPPORTED_ARCH ${arch}) 113 set(CAN_TARGET_${arch} 1) 114 endforeach() 115 116 foreach(platform ${DARWIN_EMBEDDED_PLATFORMS}) 117 if(DARWIN_${platform}sim_SYSROOT) 118 set(DARWIN_${platform}sim_BUILTIN_MIN_VER 119 ${DARWIN_${platform}_BUILTIN_MIN_VER}) 120 set(DARWIN_${platform}sim_BUILTIN_MIN_VER_FLAG 121 ${DARWIN_${platform}_BUILTIN_MIN_VER_FLAG}) 122 123 set(DARWIN_${platform}sim_SKIP_CC_KEXT On) 124 125 darwin_test_archs(${platform}sim 126 DARWIN_${platform}sim_BUILTIN_ARCHS 127 ${DARWIN_${platform}sim_BUILTIN_ALL_POSSIBLE_ARCHS} 128 ) 129 message(STATUS "${platform} Simulator supported builtin arches: ${DARWIN_${platform}sim_BUILTIN_ARCHS}") 130 if(DARWIN_${platform}sim_BUILTIN_ARCHS) 131 list(APPEND BUILTIN_SUPPORTED_OS ${platform}sim) 132 endif() 133 foreach(arch ${DARWIN_${platform}sim_BUILTIN_ARCHS}) 134 list(APPEND COMPILER_RT_SUPPORTED_ARCH ${arch}) 135 set(CAN_TARGET_${arch} 1) 136 endforeach() 137 endif() 138 139 if(DARWIN_${platform}_SYSROOT) 140 darwin_test_archs(${platform} 141 DARWIN_${platform}_BUILTIN_ARCHS 142 ${DARWIN_${platform}_BUILTIN_ALL_POSSIBLE_ARCHS} 143 ) 144 message(STATUS "${platform} supported builtin arches: ${DARWIN_${platform}_BUILTIN_ARCHS}") 145 if(DARWIN_${platform}_BUILTIN_ARCHS) 146 list(APPEND BUILTIN_SUPPORTED_OS ${platform}) 147 endif() 148 foreach(arch ${DARWIN_${platform}_BUILTIN_ARCHS}) 149 list(APPEND COMPILER_RT_SUPPORTED_ARCH ${arch}) 150 set(CAN_TARGET_${arch} 1) 151 endforeach() 152 endif() 153 endforeach() 154 155 list_intersect(BUILTIN_SUPPORTED_ARCH ALL_BUILTIN_SUPPORTED_ARCH COMPILER_RT_SUPPORTED_ARCH) 156 157else() 158 # If we're not building the builtins standalone, just rely on the tests in 159 # config-ix.cmake to tell us what to build. Otherwise we need to do some leg 160 # work here... 161 if(COMPILER_RT_BUILTINS_STANDALONE_BUILD) 162 test_targets() 163 endif() 164 # Architectures supported by compiler-rt libraries. 165 filter_available_targets(BUILTIN_SUPPORTED_ARCH 166 ${ALL_BUILTIN_SUPPORTED_ARCH}) 167endif() 168 169message(STATUS "Builtin supported architectures: ${BUILTIN_SUPPORTED_ARCH}") 170