[Github] Label lldb-dap PRs (#125139)
[llvm-project.git] / compiler-rt / cmake / builtin-config-ix.cmake
blobb1bde47ec8555f1c39f66098c6f8299d700cb475
1 include(BuiltinTests)
2 include(CheckIncludeFiles)
3 include(CheckCSourceCompiles)
5 # Make all the tests only check the compiler
6 set(TEST_COMPILE_ONLY On)
8 # Check host compiler support for certain flags
9 builtin_check_c_compiler_flag(-fPIC                 COMPILER_RT_HAS_FPIC_FLAG)
10 builtin_check_c_compiler_flag(-fPIE                 COMPILER_RT_HAS_FPIE_FLAG)
11 builtin_check_c_compiler_flag(-fno-builtin          COMPILER_RT_HAS_FNO_BUILTIN_FLAG)
12 builtin_check_c_compiler_flag(-std=c11              COMPILER_RT_HAS_STD_C11_FLAG)
13 builtin_check_c_compiler_flag(-fvisibility=hidden   COMPILER_RT_HAS_VISIBILITY_HIDDEN_FLAG)
14 builtin_check_c_compiler_flag(-fomit-frame-pointer  COMPILER_RT_HAS_OMIT_FRAME_POINTER_FLAG)
15 builtin_check_c_compiler_flag(-ffreestanding        COMPILER_RT_HAS_FFREESTANDING_FLAG)
16 builtin_check_c_compiler_flag(-fxray-instrument     COMPILER_RT_HAS_XRAY_COMPILER_FLAG)
17 builtin_check_c_compiler_flag(-fno-lto              COMPILER_RT_HAS_FNO_LTO_FLAG)
18 builtin_check_c_compiler_flag(-fno-profile-generate COMPILER_RT_HAS_FNO_PROFILE_GENERATE_FLAG)
19 builtin_check_c_compiler_flag(-fno-profile-instr-generate COMPILER_RT_HAS_FNO_PROFILE_INSTR_GENERATE_FLAG)
20 builtin_check_c_compiler_flag(-fno-profile-instr-use COMPILER_RT_HAS_FNO_PROFILE_INSTR_USE_FLAG)
21 builtin_check_c_compiler_flag(-Wno-pedantic         COMPILER_RT_HAS_WNO_PEDANTIC)
22 builtin_check_c_compiler_flag(-nogpulib             COMPILER_RT_HAS_NOGPULIB_FLAG)
23 builtin_check_c_compiler_flag(-flto                 COMPILER_RT_HAS_FLTO_FLAG)
24 builtin_check_c_compiler_flag(-fconvergent-functions COMPILER_RT_HAS_FCONVERGENT_FUNCTIONS_FLAG)
25 builtin_check_c_compiler_flag("-Xclang -mcode-object-version=none" COMPILER_RT_HAS_CODE_OBJECT_VERSION_FLAG)
26 builtin_check_c_compiler_flag(-Wbuiltin-declaration-mismatch COMPILER_RT_HAS_WBUILTIN_DECLARATION_MISMATCH_FLAG)
27 builtin_check_c_compiler_flag(/Zl COMPILER_RT_HAS_ZL_FLAG)
29 builtin_check_c_compiler_source(COMPILER_RT_HAS_ATOMIC_KEYWORD
31 int foo(int x, int y) {
32  _Atomic int result = x * y;
33  return result;
37 builtin_check_c_compiler_source(COMPILER_RT_HAS_ASM_LSE
39 asm(\".arch armv8-a+lse\");
40 asm(\"cas w0, w1, [x2]\");
43 builtin_check_c_compiler_source(COMPILER_RT_HAS_AARCH64_SME
45 void foo(void)  __arm_streaming_compatible {
46   asm(\".arch armv9-a+sme2\\n\"
47       \"smstart\\n\"
48       \"ldr zt0, [sp]\");
52 check_include_files("sys/auxv.h"    COMPILER_RT_HAS_AUXV)
54 if(ANDROID)
55   set(OS_NAME "Android")
56 else()
57   set(OS_NAME "${CMAKE_SYSTEM_NAME}")
58 endif()
60 set(AMDGPU amdgcn)
61 set(ARM64 aarch64)
62 set(ARM32 arm armhf armv4t armv5te armv6 armv6m armv7m armv7em armv7 armv7s armv7k armv8m.base armv8m.main armv8.1m.main)
63 set(AVR avr)
64 set(HEXAGON hexagon)
65 set(X86 i386)
66 set(X86_64 x86_64)
67 set(LOONGARCH64 loongarch64)
68 set(MIPS32 mips mipsel)
69 set(MIPS64 mips64 mips64el)
70 set(NVPTX nvptx64)
71 set(PPC32 powerpc powerpcspe)
72 set(PPC64 powerpc64 powerpc64le)
73 set(RISCV32 riscv32)
74 set(RISCV64 riscv64)
75 set(SPARC sparc)
76 set(SPARCV9 sparcv9)
77 set(WASM32 wasm32)
78 set(WASM64 wasm64)
79 set(VE ve)
81 if(APPLE)
82   set(ARM64 arm64 arm64e)
83   set(ARM32 armv7 armv7k armv7s)
84   set(X86_64 x86_64 x86_64h)
85 endif()
87 set(ALL_BUILTIN_SUPPORTED_ARCH
88   ${X86} ${X86_64} ${AMDGPU} ${ARM32} ${ARM64} ${AVR}
89   ${HEXAGON} ${MIPS32} ${MIPS64} ${NVPTX} ${PPC32} ${PPC64}
90   ${RISCV32} ${RISCV64} ${SPARC} ${SPARCV9}
91   ${WASM32} ${WASM64} ${VE} ${LOONGARCH64})
93 include(CompilerRTUtils)
94 include(CompilerRTDarwinUtils)
96 if(APPLE)
98   find_darwin_sdk_dir(DARWIN_osx_SYSROOT macosx)
99   find_darwin_sdk_dir(DARWIN_iossim_SYSROOT iphonesimulator)
100   find_darwin_sdk_dir(DARWIN_ios_SYSROOT iphoneos)
101   find_darwin_sdk_dir(DARWIN_watchossim_SYSROOT watchsimulator)
102   find_darwin_sdk_dir(DARWIN_watchos_SYSROOT watchos)
103   find_darwin_sdk_dir(DARWIN_tvossim_SYSROOT appletvsimulator)
104   find_darwin_sdk_dir(DARWIN_tvos_SYSROOT appletvos)
105   find_darwin_sdk_dir(DARWIN_xrossim_SYSROOT xrsimulator)
106   find_darwin_sdk_dir(DARWIN_xros_SYSROOT xros)
108   # Get supported architecture from SDKSettings.
109   function(sdk_has_arch_support sdk_path os arch has_support)
110     execute_process(COMMAND
111         /usr/libexec/PlistBuddy -c "Print :SupportedTargets:${os}:Archs" ${sdk_path}/SDKSettings.plist
112       OUTPUT_VARIABLE SDK_SUPPORTED_ARCHS
113       RESULT_VARIABLE PLIST_ERROR
114       ERROR_QUIET)
115     if (PLIST_ERROR EQUAL 0 AND
116         SDK_SUPPORTED_ARCHS MATCHES " ${arch}\n")
117       message(STATUS "Found ${arch} support in ${sdk_path}/SDKSettings.plist")
118       set("${has_support}" On PARENT_SCOPE)
119     else()
120       message(STATUS "No ${arch} support in ${sdk_path}/SDKSettings.plist")
121       set("${has_support}" Off PARENT_SCOPE)
122     endif()
123   endfunction()
125   set(DARWIN_EMBEDDED_PLATFORMS)
126   set(DARWIN_osx_BUILTIN_MIN_VER 10.7)
127   set(DARWIN_osx_BUILTIN_MIN_VER_FLAG
128       -mmacosx-version-min=${DARWIN_osx_BUILTIN_MIN_VER})
129   set(DARWIN_osx_BUILTIN_ALL_POSSIBLE_ARCHS ${X86} ${X86_64})
130   # Add support for arm64 macOS if available in SDK.
131   foreach(arch ${ARM64})
132     sdk_has_arch_support(${DARWIN_osx_SYSROOT} macosx ${arch} MACOS_ARM_SUPPORT)
133     if (MACOS_ARM_SUPPORT)
134      list(APPEND DARWIN_osx_BUILTIN_ALL_POSSIBLE_ARCHS ${arch})
135     endif()
136   endforeach(arch)
138   if(COMPILER_RT_ENABLE_IOS)
139     list(APPEND DARWIN_EMBEDDED_PLATFORMS ios)
140     set(DARWIN_ios_MIN_VER_FLAG -miphoneos-version-min)
141     set(DARWIN_ios_BUILTIN_MIN_VER 6.0)
142     set(DARWIN_ios_BUILTIN_MIN_VER_FLAG
143       ${DARWIN_ios_MIN_VER_FLAG}=${DARWIN_ios_BUILTIN_MIN_VER})
144     set(DARWIN_ios_BUILTIN_ALL_POSSIBLE_ARCHS ${ARM64} ${ARM32})
145     set(DARWIN_iossim_BUILTIN_ALL_POSSIBLE_ARCHS ${X86} ${X86_64})
146     find_darwin_sdk_version(iossim_sdk_version "iphonesimulator")
147     if ("${iossim_sdk_version}" VERSION_GREATER 14.0 OR "${iossim_sdk_version}" VERSION_EQUAL 14.0)
148       list(APPEND DARWIN_iossim_BUILTIN_ALL_POSSIBLE_ARCHS arm64)
149     endif()
150   endif()
151   if(COMPILER_RT_ENABLE_WATCHOS)
152     list(APPEND DARWIN_EMBEDDED_PLATFORMS watchos)
153     set(DARWIN_watchos_MIN_VER_FLAG -mwatchos-version-min)
154     set(DARWIN_watchos_BUILTIN_MIN_VER 2.0)
155     set(DARWIN_watchos_BUILTIN_MIN_VER_FLAG
156       ${DARWIN_watchos_MIN_VER_FLAG}=${DARWIN_watchos_BUILTIN_MIN_VER})
157     set(DARWIN_watchos_BUILTIN_ALL_POSSIBLE_ARCHS armv7 armv7k arm64_32)
158     set(DARWIN_watchossim_BUILTIN_ALL_POSSIBLE_ARCHS ${X86})
159     find_darwin_sdk_version(watchossim_sdk_version "watchsimulator")
160     if ("${watchossim_sdk_version}" VERSION_GREATER 7.0 OR "${watchossim_sdk_version}" VERSION_EQUAL 7.0)
161       list(APPEND DARWIN_watchossim_BUILTIN_ALL_POSSIBLE_ARCHS arm64)
162     endif()
163   endif()
164   if(COMPILER_RT_ENABLE_TVOS)
165     list(APPEND DARWIN_EMBEDDED_PLATFORMS tvos)
166     set(DARWIN_tvos_MIN_VER_FLAG -mtvos-version-min)
167     set(DARWIN_tvos_BUILTIN_MIN_VER 9.0)
168     set(DARWIN_tvos_BUILTIN_MIN_VER_FLAG
169       ${DARWIN_tvos_MIN_VER_FLAG}=${DARWIN_tvos_BUILTIN_MIN_VER})
170     set(DARWIN_tvos_BUILTIN_ALL_POSSIBLE_ARCHS armv7 arm64)
171     set(DARWIN_tvossim_BUILTIN_ALL_POSSIBLE_ARCHS ${X86} ${X86_64})
172     find_darwin_sdk_version(tvossim_sdk_version "appletvsimulator")
173     if ("${tvossim_sdk_version}" VERSION_GREATER 14.0 OR "${tvossim_sdk_version}" VERSION_EQUAL 14.0)
174       list(APPEND DARWIN_tvossim_BUILTIN_ALL_POSSIBLE_ARCHS arm64)
175     endif()
176   endif()
177   if(COMPILER_RT_ENABLE_XROS)
178     list(APPEND DARWIN_EMBEDDED_PLATFORMS xros)
179     set(DARWIN_xros_BUILTIN_ALL_POSSIBLE_ARCHS ${ARM64} ${ARM32})
180     set(DARWIN_xrossim_BUILTIN_ALL_POSSIBLE_ARCHS arm64)
181   endif()
183   set(BUILTIN_SUPPORTED_OS osx)
185   # We're setting the flag manually for each target OS
186   set(CMAKE_OSX_DEPLOYMENT_TARGET "")
188   # NOTE: We deliberately avoid using `DARWIN_<os>_ARCHS` here because that is
189   # used by `config-ix.cmake` in the context of building the rest of
190   # compiler-rt where the global `${TEST_COMPILE_ONLY}` (used by
191   # `darwin_test_archs()`) has a different value.
192   darwin_test_archs(osx
193     DARWIN_osx_BUILTIN_ARCHS
194     ${DARWIN_osx_BUILTIN_ALL_POSSIBLE_ARCHS}
195   )
196   message(STATUS "OSX supported builtin arches: ${DARWIN_osx_BUILTIN_ARCHS}")
197   foreach(arch ${DARWIN_osx_BUILTIN_ARCHS})
198     list(APPEND COMPILER_RT_SUPPORTED_ARCH ${arch})
199     set(CAN_TARGET_${arch} 1)
200   endforeach()
202   foreach(platform ${DARWIN_EMBEDDED_PLATFORMS})
203     if(DARWIN_${platform}sim_SYSROOT)
204       set(DARWIN_${platform}sim_BUILTIN_MIN_VER
205         ${DARWIN_${platform}_BUILTIN_MIN_VER})
206       set(DARWIN_${platform}sim_BUILTIN_MIN_VER_FLAG
207         ${DARWIN_${platform}_BUILTIN_MIN_VER_FLAG})
209       set(DARWIN_${platform}sim_SKIP_CC_KEXT On)
211       darwin_test_archs(${platform}sim
212         DARWIN_${platform}sim_BUILTIN_ARCHS
213         ${DARWIN_${platform}sim_BUILTIN_ALL_POSSIBLE_ARCHS}
214       )
215       message(STATUS "${platform} Simulator supported builtin arches: ${DARWIN_${platform}sim_BUILTIN_ARCHS}")
216       if(DARWIN_${platform}sim_BUILTIN_ARCHS)
217         list(APPEND BUILTIN_SUPPORTED_OS ${platform}sim)
218       endif()
219       foreach(arch ${DARWIN_${platform}sim_BUILTIN_ARCHS})
220         list(APPEND COMPILER_RT_SUPPORTED_ARCH ${arch})
221         set(CAN_TARGET_${arch} 1)
222       endforeach()
223     endif()
225     if(DARWIN_${platform}_SYSROOT)
226       darwin_test_archs(${platform}
227         DARWIN_${platform}_BUILTIN_ARCHS
228         ${DARWIN_${platform}_BUILTIN_ALL_POSSIBLE_ARCHS}
229       )
230       message(STATUS "${platform} supported builtin arches: ${DARWIN_${platform}_BUILTIN_ARCHS}")
231       if(DARWIN_${platform}_BUILTIN_ARCHS)
232         list(APPEND BUILTIN_SUPPORTED_OS ${platform})
233       endif()
234       foreach(arch ${DARWIN_${platform}_BUILTIN_ARCHS})
235         list(APPEND COMPILER_RT_SUPPORTED_ARCH ${arch})
236         set(CAN_TARGET_${arch} 1)
237       endforeach()
238     endif()
239   endforeach()
241   list_intersect(BUILTIN_SUPPORTED_ARCH ALL_BUILTIN_SUPPORTED_ARCH COMPILER_RT_SUPPORTED_ARCH)
243 else()
244   # If we're not building the builtins standalone, just rely on the  tests in
245   # config-ix.cmake to tell us what to build. Otherwise we need to do some leg
246   # work here...
247   if(COMPILER_RT_BUILTINS_STANDALONE_BUILD)
248     test_targets()
249   endif()
250   # Architectures supported by compiler-rt libraries.
251   filter_available_targets(BUILTIN_SUPPORTED_ARCH
252     ${ALL_BUILTIN_SUPPORTED_ARCH})
253 endif()
255 if(OS_NAME MATCHES "Linux|SerenityOS" AND NOT LLVM_USE_SANITIZER AND NOT
256    COMPILER_RT_GPU_BUILD)
257   set(COMPILER_RT_HAS_CRT TRUE)
258 else()
259   set(COMPILER_RT_HAS_CRT FALSE)
260 endif()
262 message(STATUS "Builtin supported architectures: ${BUILTIN_SUPPORTED_ARCH}")