xref: /openbsd-src/gnu/llvm/compiler-rt/cmake/builtin-config-ix.cmake (revision 1a8dbaac879b9f3335ad7fb25429ce63ac1d6bac)
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