]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - cmake/builtin-config-ix.cmake
Vendor import of compiler-rt trunk r351319 (just before the release_80
[FreeBSD/FreeBSD.git] / cmake / builtin-config-ix.cmake
1 include(BuiltinTests)
2 include(CheckCSourceCompiles)
3
4 # Make all the tests only check the compiler
5 set(TEST_COMPILE_ONLY On)
6
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)
16
17 builtin_check_c_compiler_source(COMPILER_RT_HAS_ATOMIC_KEYWORD
18 "
19 int foo(int x, int y) {
20  _Atomic int result = x * y;
21  return result;
22 }
23 ")
24
25
26 set(ARM64 aarch64)
27 set(ARM32 arm armhf armv6m armv7m armv7em armv7 armv7s armv7k)
28 set(HEXAGON hexagon)
29 set(X86 i386)
30 set(X86_64 x86_64)
31 set(MIPS32 mips mipsel)
32 set(MIPS64 mips64 mips64el)
33 set(PPC64 powerpc64 powerpc64le)
34 set(RISCV32 riscv32)
35 set(RISCV64 riscv64)
36 set(WASM32 wasm32)
37 set(WASM64 wasm64)
38
39 if(APPLE)
40   set(ARM64 arm64)
41   set(ARM32 armv7 armv7k armv7s)
42   set(X86_64 x86_64 x86_64h)
43 endif()
44
45 set(ALL_BUILTIN_SUPPORTED_ARCH ${X86} ${X86_64} ${ARM32} ${ARM64}
46     ${HEXAGON} ${MIPS32} ${MIPS64} ${PPC64} ${RISCV32} ${RISCV64} ${WASM32} ${WASM64})
47
48 include(CompilerRTUtils)
49 include(CompilerRTDarwinUtils)
50
51 if(APPLE)
52
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)
60
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})
65
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})
72   endif()
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})
79   endif()
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})
86   endif()
87
88   set(BUILTIN_SUPPORTED_OS osx)
89
90   # We're setting the flag manually for each target OS
91   set(CMAKE_OSX_DEPLOYMENT_TARGET "")
92
93   if(NOT DARWIN_osx_ARCHS)
94     set(DARWIN_osx_ARCHS i386 x86_64 x86_64h)
95   endif()
96
97   set(DARWIN_sim_ARCHS i386 x86_64)
98   set(DARWIN_device_ARCHS armv7 armv7s armv7k arm64)
99
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)
104   endforeach()
105
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})
112
113       set(DARWIN_${platform}sim_SKIP_CC_KEXT On)
114
115       set(test_arches ${DARWIN_sim_ARCHS})
116       if(DARWIN_${platform}sim_ARCHS)
117         set(test_arches DARWIN_${platform}sim_ARCHS)
118       endif()
119
120       darwin_test_archs(${platform}sim
121         DARWIN_${platform}sim_ARCHS
122         ${test_arches})
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)
126       endif()
127       foreach(arch ${DARWIN_${platform}sim_ARCHS})
128         list(APPEND COMPILER_RT_SUPPORTED_ARCH ${arch})
129         set(CAN_TARGET_${arch} 1)
130       endforeach()
131     endif()
132
133     if(DARWIN_${platform}_SYSROOT)
134       set(test_arches ${DARWIN_device_ARCHS})
135       if(DARWIN_${platform}_ARCHS)
136         set(test_arches DARWIN_${platform}_ARCHS)
137       endif()
138
139       darwin_test_archs(${platform}
140         DARWIN_${platform}_ARCHS
141         ${test_arches})
142       message(STATUS "${platform} supported builtin arches: ${DARWIN_${platform}_ARCHS}")
143       if(DARWIN_${platform}_ARCHS)
144         list(APPEND BUILTIN_SUPPORTED_OS ${platform})
145       endif()
146       foreach(arch ${DARWIN_${platform}_ARCHS})
147         list(APPEND COMPILER_RT_SUPPORTED_ARCH ${arch})
148         set(CAN_TARGET_${arch} 1)
149       endforeach()
150     endif()
151   endforeach()
152
153   list_intersect(BUILTIN_SUPPORTED_ARCH ALL_BUILTIN_SUPPORTED_ARCH COMPILER_RT_SUPPORTED_ARCH)
154
155 else()
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
158   # work here...
159   if(COMPILER_RT_BUILTINS_STANDALONE_BUILD)
160     test_targets()
161   endif()
162   # Architectures supported by compiler-rt libraries.
163   filter_available_targets(BUILTIN_SUPPORTED_ARCH
164     ${ALL_BUILTIN_SUPPORTED_ARCH})
165 endif()
166
167 message(STATUS "Builtin supported architectures: ${BUILTIN_SUPPORTED_ARCH}")