1if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) 2 cmake_minimum_required(VERSION 3.13.4) 3 if ("${CMAKE_VERSION}" VERSION_LESS "3.20.0") 4 message(WARNING 5 "Your CMake version is ${CMAKE_VERSION}. Starting with LLVM 17.0.0, the " 6 "minimum version of CMake required to build LLVM will become 3.20.0, and " 7 "using an older CMake will become an error. Please upgrade your CMake to " 8 "at least 3.20.0 now to avoid issues in the future!") 9 endif() 10 11 set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) 12 project(CompilerRTCRT C) 13 set(COMPILER_RT_STANDALONE_BUILD TRUE) 14 set(COMPILER_RT_CRT_STANDALONE_BUILD TRUE) 15 16 set(COMPILER_RT_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../..") 17 18 set(LLVM_COMMON_CMAKE_UTILS "${COMPILER_RT_SOURCE_DIR}/../cmake") 19 20 # Add path for custom modules 21 list(INSERT CMAKE_MODULE_PATH 0 22 "${COMPILER_RT_SOURCE_DIR}/cmake" 23 "${COMPILER_RT_SOURCE_DIR}/cmake/Modules" 24 "${LLVM_COMMON_CMAKE_UTILS}" 25 "${LLVM_COMMON_CMAKE_UTILS}/Modules" 26 ) 27 28 include(base-config-ix) 29 include(CompilerRTUtils) 30 31 load_llvm_config() 32 construct_compiler_rt_default_triple() 33 34 include(SetPlatformToolchainTools) 35 include(AddCompilerRT) 36endif() 37 38include(crt-config-ix) 39 40if(COMPILER_RT_HAS_CRT) 41 add_compiler_rt_component(crt) 42 43 include(CheckSectionExists) 44 check_section_exists(".init_array" COMPILER_RT_HAS_INITFINI_ARRAY 45 SOURCE "volatile int x;\n__attribute__((constructor)) void f(void) {x = 0;}\nint main(void) { return 0; }\n") 46 47 append_list_if(COMPILER_RT_HAS_STD_C11_FLAG -std=c11 CRT_CFLAGS) 48 append_list_if(COMPILER_RT_HAS_INITFINI_ARRAY -DCRT_HAS_INITFINI_ARRAY CRT_CFLAGS) 49 append_list_if(COMPILER_RT_CRT_USE_EH_FRAME_REGISTRY -DEH_USE_FRAME_REGISTRY CRT_CFLAGS) 50 append_list_if(COMPILER_RT_HAS_FPIC_FLAG -fPIC CRT_CFLAGS) 51 append_list_if(COMPILER_RT_HAS_WNO_PEDANTIC -Wno-pedantic CRT_CFLAGS) 52 if (COMPILER_RT_HAS_FCF_PROTECTION_FLAG) 53 append_list_if(COMPILER_RT_ENABLE_CET -fcf-protection=full CRT_CFLAGS) 54 endif() 55 56 foreach(arch ${CRT_SUPPORTED_ARCH}) 57 add_compiler_rt_runtime(clang_rt.crtbegin 58 OBJECT 59 ARCHS ${arch} 60 SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/crtbegin.c 61 CFLAGS ${CRT_CFLAGS} 62 PARENT_TARGET crt) 63 add_compiler_rt_runtime(clang_rt.crtend 64 OBJECT 65 ARCHS ${arch} 66 SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/crtend.c 67 CFLAGS ${CRT_CFLAGS} 68 PARENT_TARGET crt) 69 endforeach() 70endif() 71