| if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) |
| cmake_minimum_required(VERSION 3.13.4) |
| if ("${CMAKE_VERSION}" VERSION_LESS "3.20.0") |
| message(WARNING |
| "Your CMake version is ${CMAKE_VERSION}. Starting with LLVM 17.0.0, the " |
| "minimum version of CMake required to build LLVM will become 3.20.0, and " |
| "using an older CMake will become an error. Please upgrade your CMake to " |
| "at least 3.20.0 now to avoid issues in the future!") |
| endif() |
| |
| set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) |
| project(CompilerRTCRT C) |
| set(COMPILER_RT_STANDALONE_BUILD TRUE) |
| set(COMPILER_RT_CRT_STANDALONE_BUILD TRUE) |
| |
| set(COMPILER_RT_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../..") |
| |
| set(LLVM_COMMON_CMAKE_UTILS "${COMPILER_RT_SOURCE_DIR}/../cmake") |
| |
| # Add path for custom modules |
| list(INSERT CMAKE_MODULE_PATH 0 |
| "${COMPILER_RT_SOURCE_DIR}/cmake" |
| "${COMPILER_RT_SOURCE_DIR}/cmake/Modules" |
| "${LLVM_COMMON_CMAKE_UTILS}" |
| "${LLVM_COMMON_CMAKE_UTILS}/Modules" |
| ) |
| |
| include(base-config-ix) |
| include(CompilerRTUtils) |
| |
| load_llvm_config() |
| construct_compiler_rt_default_triple() |
| |
| include(SetPlatformToolchainTools) |
| include(AddCompilerRT) |
| endif() |
| |
| include(crt-config-ix) |
| |
| if(COMPILER_RT_HAS_CRT) |
| add_compiler_rt_component(crt) |
| |
| include(CheckSectionExists) |
| check_section_exists(".init_array" COMPILER_RT_HAS_INITFINI_ARRAY |
| SOURCE "volatile int x;\n__attribute__((constructor)) void f(void) {x = 0;}\nint main(void) { return 0; }\n") |
| |
| append_list_if(COMPILER_RT_HAS_STD_C11_FLAG -std=c11 CRT_CFLAGS) |
| append_list_if(COMPILER_RT_HAS_INITFINI_ARRAY -DCRT_HAS_INITFINI_ARRAY CRT_CFLAGS) |
| append_list_if(COMPILER_RT_CRT_USE_EH_FRAME_REGISTRY -DEH_USE_FRAME_REGISTRY CRT_CFLAGS) |
| append_list_if(COMPILER_RT_HAS_FPIC_FLAG -fPIC CRT_CFLAGS) |
| append_list_if(COMPILER_RT_HAS_WNO_PEDANTIC -Wno-pedantic CRT_CFLAGS) |
| if (COMPILER_RT_HAS_FCF_PROTECTION_FLAG) |
| append_list_if(COMPILER_RT_ENABLE_CET -fcf-protection=full CRT_CFLAGS) |
| endif() |
| |
| foreach(arch ${CRT_SUPPORTED_ARCH}) |
| add_compiler_rt_runtime(clang_rt.crtbegin |
| OBJECT |
| ARCHS ${arch} |
| SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/crtbegin.c |
| CFLAGS ${CRT_CFLAGS} |
| PARENT_TARGET crt) |
| add_compiler_rt_runtime(clang_rt.crtend |
| OBJECT |
| ARCHS ${arch} |
| SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/crtend.c |
| CFLAGS ${CRT_CFLAGS} |
| PARENT_TARGET crt) |
| endforeach() |
| endif() |