brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.8 KiB · 2387496 Raw
293 lines · plain
1include(BuiltinTests)2include(CheckIncludeFiles)3include(CheckCSourceCompiles)4 5# Make all the tests only check the compiler6set(TEST_COMPILE_ONLY On)7 8# Check host compiler support for certain flags9builtin_check_c_compiler_flag(-fPIC                 COMPILER_RT_HAS_FPIC_FLAG)10builtin_check_c_compiler_flag(-fPIE                 COMPILER_RT_HAS_FPIE_FLAG)11builtin_check_c_compiler_flag(-fno-builtin          COMPILER_RT_HAS_FNO_BUILTIN_FLAG)12builtin_check_c_compiler_flag(-std=c11              COMPILER_RT_HAS_STD_C11_FLAG)13builtin_check_c_compiler_flag(-fvisibility=hidden   COMPILER_RT_HAS_VISIBILITY_HIDDEN_FLAG)14builtin_check_c_compiler_flag(-fomit-frame-pointer  COMPILER_RT_HAS_OMIT_FRAME_POINTER_FLAG)15builtin_check_c_compiler_flag(-ffreestanding        COMPILER_RT_HAS_FFREESTANDING_FLAG)16builtin_check_c_compiler_flag(-fxray-instrument     COMPILER_RT_HAS_XRAY_COMPILER_FLAG)17builtin_check_c_compiler_flag(-fno-lto              COMPILER_RT_HAS_FNO_LTO_FLAG)18builtin_check_c_compiler_flag(-fno-profile-generate COMPILER_RT_HAS_FNO_PROFILE_GENERATE_FLAG)19builtin_check_c_compiler_flag(-fno-profile-instr-generate COMPILER_RT_HAS_FNO_PROFILE_INSTR_GENERATE_FLAG)20builtin_check_c_compiler_flag(-fno-profile-instr-use COMPILER_RT_HAS_FNO_PROFILE_INSTR_USE_FLAG)21builtin_check_c_compiler_flag(-Wno-pedantic         COMPILER_RT_HAS_WNO_PEDANTIC)22builtin_check_c_compiler_flag(-nogpulib             COMPILER_RT_HAS_NOGPULIB_FLAG)23builtin_check_c_compiler_flag(-flto                 COMPILER_RT_HAS_FLTO_FLAG)24builtin_check_c_compiler_flag(-fconvergent-functions COMPILER_RT_HAS_FCONVERGENT_FUNCTIONS_FLAG)25builtin_check_c_compiler_flag("-Xclang -mcode-object-version=none" COMPILER_RT_HAS_CODE_OBJECT_VERSION_FLAG)26builtin_check_c_compiler_flag(-Wbuiltin-declaration-mismatch COMPILER_RT_HAS_WBUILTIN_DECLARATION_MISMATCH_FLAG)27builtin_check_c_compiler_flag(/Zl COMPILER_RT_HAS_ZL_FLAG)28builtin_check_c_compiler_flag(-fcf-protection=full COMPILER_RT_HAS_FCF_PROTECTION_FLAG)29builtin_check_c_compiler_flag(-nostdinc++          COMPILER_RT_HAS_NOSTDINCXX_FLAG)30 31builtin_check_c_compiler_source(COMPILER_RT_HAS_ATOMIC_KEYWORD32"33int foo(int x, int y) {34 _Atomic int result = x * y;35 return result;36}37")38 39builtin_check_c_compiler_source(COMPILER_RT_HAS_ASM_LSE40"41asm(\".arch armv8-a+lse\");42asm(\"cas w0, w1, [x2]\");43")44 45builtin_check_c_compiler_source(COMPILER_RT_HAS_AARCH64_SME46"47void foo(void)  __arm_streaming_compatible {48  asm(\".arch armv9-a+sme2\\n\"49      \"smstart\\n\"50      \"ldr zt0, [sp]\");51}52")53 54builtin_check_c_compiler_source(COMPILER_RT_HAS_ARM_UNALIGNED55"56void foo() {57#ifndef __ARM_FEATURE_UNALIGNED58#error \"Unaligned accesses unsupported\"59#endif60}61")62 63builtin_check_c_compiler_source(COMPILER_RT_HAS_ARM_FP64"65void foo() {66#ifndef __ARM_FP67#error \"No floating-point support\"68#endif69}70")71 72check_include_files("sys/auxv.h"    COMPILER_RT_HAS_AUXV)73 74if(ANDROID)75  set(OS_NAME "Android")76else()77  set(OS_NAME "${CMAKE_SYSTEM_NAME}")78endif()79 80set(AMDGPU amdgcn)81set(ARM64 aarch64 arm64ec)82set(ARM32 arm armhf armv4t armv5te armv6 armv6m armv7m armv7em armv7 armv7s armv7k armv8m.base armv8m.main armv8.1m.main)83set(AVR avr)84set(HEXAGON hexagon)85set(X86 i386)86set(X86_64 x86_64)87set(LOONGARCH64 loongarch64)88set(MIPS32 mips mipsel)89set(MIPS64 mips64 mips64el)90set(NVPTX nvptx64)91set(PPC32 powerpc powerpcspe)92set(PPC64 powerpc64 powerpc64le)93set(RISCV32 riscv32)94set(RISCV64 riscv64)95set(S390X s390x)96set(SPARC sparc)97set(SPARCV9 sparcv9)98set(WASM32 wasm32)99set(WASM64 wasm64)100set(VE ve)101set(M68K m68k)102 103if(APPLE)104  set(ARM64 arm64 arm64e)105  set(ARM32 armv7 armv7k armv7s)106  set(X86_64 x86_64 x86_64h)107endif()108 109set(ALL_BUILTIN_SUPPORTED_ARCH110  ${X86} ${X86_64} ${AMDGPU} ${ARM32} ${ARM64} ${AVR}111  ${HEXAGON} ${MIPS32} ${MIPS64} ${NVPTX} ${PPC32} ${PPC64}112  ${RISCV32} ${RISCV64} ${S390X} ${SPARC} ${SPARCV9}113  ${WASM32} ${WASM64} ${VE} ${LOONGARCH64} ${M68K})114 115include(CompilerRTUtils)116include(CompilerRTDarwinUtils)117 118if(APPLE)119 120  find_darwin_sdk_dir(DARWIN_osx_SYSROOT macosx)121  if(COMPILER_RT_ENABLE_IOS)122    find_darwin_sdk_dir(DARWIN_iossim_SYSROOT iphonesimulator)123    find_darwin_sdk_dir(DARWIN_ios_SYSROOT iphoneos)124  endif()125  if(COMPILER_RT_ENABLE_WATCHOS)126    find_darwin_sdk_dir(DARWIN_watchossim_SYSROOT watchsimulator)127    find_darwin_sdk_dir(DARWIN_watchos_SYSROOT watchos)128  endif()129  if(COMPILER_RT_ENABLE_TVOS)130    find_darwin_sdk_dir(DARWIN_tvossim_SYSROOT appletvsimulator)131    find_darwin_sdk_dir(DARWIN_tvos_SYSROOT appletvos)132  endif()133  if(COMPILER_RT_ENABLE_XROS)134    find_darwin_sdk_dir(DARWIN_xrossim_SYSROOT xrsimulator)135    find_darwin_sdk_dir(DARWIN_xros_SYSROOT xros)136  endif()137 138  # Get supported architecture from SDKSettings.139  function(sdk_has_arch_support sdk_path os arch has_support)140    execute_process(COMMAND141        /usr/libexec/PlistBuddy -c "Print :SupportedTargets:${os}:Archs" ${sdk_path}/SDKSettings.plist142      OUTPUT_VARIABLE SDK_SUPPORTED_ARCHS143      RESULT_VARIABLE PLIST_ERROR144      ERROR_QUIET)145    if (PLIST_ERROR EQUAL 0 AND146        SDK_SUPPORTED_ARCHS MATCHES " ${arch}\n")147      message(STATUS "Found ${arch} support in ${sdk_path}/SDKSettings.plist")148      set("${has_support}" On PARENT_SCOPE)149    else()150      message(STATUS "No ${arch} support in ${sdk_path}/SDKSettings.plist")151      set("${has_support}" Off PARENT_SCOPE)152    endif()153  endfunction()154 155  set(DARWIN_EMBEDDED_PLATFORMS)156  set(DARWIN_osx_BUILTIN_MIN_VER 10.7)157  set(DARWIN_osx_BUILTIN_MIN_VER_FLAG158      -mmacosx-version-min=${DARWIN_osx_BUILTIN_MIN_VER})159  set(DARWIN_osx_BUILTIN_ALL_POSSIBLE_ARCHS ${X86} ${X86_64})160  # Add support for arm64 macOS if available in SDK.161  foreach(arch ${ARM64})162    sdk_has_arch_support(${DARWIN_osx_SYSROOT} macosx ${arch} MACOS_ARM_SUPPORT)163    if (MACOS_ARM_SUPPORT)164     list(APPEND DARWIN_osx_BUILTIN_ALL_POSSIBLE_ARCHS ${arch})165    endif()166  endforeach(arch)167 168  if(COMPILER_RT_ENABLE_IOS)169    list(APPEND DARWIN_EMBEDDED_PLATFORMS ios)170    set(DARWIN_ios_MIN_VER_FLAG -miphoneos-version-min)171    set(DARWIN_ios_BUILTIN_MIN_VER 6.0)172    set(DARWIN_ios_BUILTIN_MIN_VER_FLAG173      ${DARWIN_ios_MIN_VER_FLAG}=${DARWIN_ios_BUILTIN_MIN_VER})174    set(DARWIN_ios_BUILTIN_ALL_POSSIBLE_ARCHS ${ARM64} ${ARM32})175    set(DARWIN_iossim_BUILTIN_ALL_POSSIBLE_ARCHS ${X86} ${X86_64})176    find_darwin_sdk_version(iossim_sdk_version "iphonesimulator")177    if ("${iossim_sdk_version}" VERSION_GREATER 14.0 OR "${iossim_sdk_version}" VERSION_EQUAL 14.0)178      list(APPEND DARWIN_iossim_BUILTIN_ALL_POSSIBLE_ARCHS arm64)179    endif()180  endif()181  if(COMPILER_RT_ENABLE_WATCHOS)182    list(APPEND DARWIN_EMBEDDED_PLATFORMS watchos)183    set(DARWIN_watchos_MIN_VER_FLAG -mwatchos-version-min)184    set(DARWIN_watchos_BUILTIN_MIN_VER 2.0)185    set(DARWIN_watchos_BUILTIN_MIN_VER_FLAG186      ${DARWIN_watchos_MIN_VER_FLAG}=${DARWIN_watchos_BUILTIN_MIN_VER})187    set(DARWIN_watchos_BUILTIN_ALL_POSSIBLE_ARCHS armv7 armv7k arm64_32)188    set(DARWIN_watchossim_BUILTIN_ALL_POSSIBLE_ARCHS ${X86})189    find_darwin_sdk_version(watchossim_sdk_version "watchsimulator")190    if ("${watchossim_sdk_version}" VERSION_GREATER 7.0 OR "${watchossim_sdk_version}" VERSION_EQUAL 7.0)191      list(APPEND DARWIN_watchossim_BUILTIN_ALL_POSSIBLE_ARCHS arm64)192    endif()193  endif()194  if(COMPILER_RT_ENABLE_TVOS)195    list(APPEND DARWIN_EMBEDDED_PLATFORMS tvos)196    set(DARWIN_tvos_MIN_VER_FLAG -mtvos-version-min)197    set(DARWIN_tvos_BUILTIN_MIN_VER 9.0)198    set(DARWIN_tvos_BUILTIN_MIN_VER_FLAG199      ${DARWIN_tvos_MIN_VER_FLAG}=${DARWIN_tvos_BUILTIN_MIN_VER})200    set(DARWIN_tvos_BUILTIN_ALL_POSSIBLE_ARCHS armv7 arm64)201    set(DARWIN_tvossim_BUILTIN_ALL_POSSIBLE_ARCHS ${X86} ${X86_64})202    find_darwin_sdk_version(tvossim_sdk_version "appletvsimulator")203    if ("${tvossim_sdk_version}" VERSION_GREATER 14.0 OR "${tvossim_sdk_version}" VERSION_EQUAL 14.0)204      list(APPEND DARWIN_tvossim_BUILTIN_ALL_POSSIBLE_ARCHS arm64)205    endif()206  endif()207  if(COMPILER_RT_ENABLE_XROS)208    list(APPEND DARWIN_EMBEDDED_PLATFORMS xros)209    set(DARWIN_xros_BUILTIN_ALL_POSSIBLE_ARCHS ${ARM64} ${ARM32})210    set(DARWIN_xrossim_BUILTIN_ALL_POSSIBLE_ARCHS arm64)211  endif()212 213  set(BUILTIN_SUPPORTED_OS osx)214 215  # We're setting the flag manually for each target OS216  set(CMAKE_OSX_DEPLOYMENT_TARGET "")217 218  # NOTE: We deliberately avoid using `DARWIN_<os>_ARCHS` here because that is219  # used by `config-ix.cmake` in the context of building the rest of220  # compiler-rt where the global `${TEST_COMPILE_ONLY}` (used by221  # `darwin_test_archs()`) has a different value.222  darwin_test_archs(osx223    DARWIN_osx_BUILTIN_ARCHS224    ${DARWIN_osx_BUILTIN_ALL_POSSIBLE_ARCHS}225  )226  message(STATUS "OSX supported builtin arches: ${DARWIN_osx_BUILTIN_ARCHS}")227  foreach(arch ${DARWIN_osx_BUILTIN_ARCHS})228    list(APPEND COMPILER_RT_SUPPORTED_ARCH ${arch})229    set(CAN_TARGET_${arch} 1)230  endforeach()231 232  foreach(platform ${DARWIN_EMBEDDED_PLATFORMS})233    if(DARWIN_${platform}sim_SYSROOT)234      set(DARWIN_${platform}sim_BUILTIN_MIN_VER235        ${DARWIN_${platform}_BUILTIN_MIN_VER})236      set(DARWIN_${platform}sim_BUILTIN_MIN_VER_FLAG237        ${DARWIN_${platform}_BUILTIN_MIN_VER_FLAG})238 239      set(DARWIN_${platform}sim_SKIP_CC_KEXT On)240 241      darwin_test_archs(${platform}sim242        DARWIN_${platform}sim_BUILTIN_ARCHS243        ${DARWIN_${platform}sim_BUILTIN_ALL_POSSIBLE_ARCHS}244      )245      message(STATUS "${platform} Simulator supported builtin arches: ${DARWIN_${platform}sim_BUILTIN_ARCHS}")246      if(DARWIN_${platform}sim_BUILTIN_ARCHS)247        list(APPEND BUILTIN_SUPPORTED_OS ${platform}sim)248      endif()249      foreach(arch ${DARWIN_${platform}sim_BUILTIN_ARCHS})250        list(APPEND COMPILER_RT_SUPPORTED_ARCH ${arch})251        set(CAN_TARGET_${arch} 1)252      endforeach()253    endif()254 255    if(DARWIN_${platform}_SYSROOT)256      darwin_test_archs(${platform}257        DARWIN_${platform}_BUILTIN_ARCHS258        ${DARWIN_${platform}_BUILTIN_ALL_POSSIBLE_ARCHS}259      )260      message(STATUS "${platform} supported builtin arches: ${DARWIN_${platform}_BUILTIN_ARCHS}")261      if(DARWIN_${platform}_BUILTIN_ARCHS)262        list(APPEND BUILTIN_SUPPORTED_OS ${platform})263      endif()264      foreach(arch ${DARWIN_${platform}_BUILTIN_ARCHS})265        list(APPEND COMPILER_RT_SUPPORTED_ARCH ${arch})266        set(CAN_TARGET_${arch} 1)267      endforeach()268    endif()269  endforeach()270 271  list_intersect(BUILTIN_SUPPORTED_ARCH ALL_BUILTIN_SUPPORTED_ARCH COMPILER_RT_SUPPORTED_ARCH)272 273else()274  # If we're not building the builtins standalone, just rely on the  tests in275  # config-ix.cmake to tell us what to build. Otherwise we need to do some leg276  # work here...277  if(COMPILER_RT_BUILTINS_STANDALONE_BUILD)278    test_targets()279  endif()280  # Architectures supported by compiler-rt libraries.281  filter_available_targets(BUILTIN_SUPPORTED_ARCH282    ${ALL_BUILTIN_SUPPORTED_ARCH})283endif()284 285if(OS_NAME MATCHES "Linux|SerenityOS" AND NOT LLVM_USE_SANITIZER AND NOT286   COMPILER_RT_GPU_BUILD)287  set(COMPILER_RT_HAS_CRT TRUE)288else()289  set(COMPILER_RT_HAS_CRT FALSE)290endif()291 292message(STATUS "Builtin supported architectures: ${BUILTIN_SUPPORTED_ARCH}")293