Mark de Wever | cbaa359 | 2023-05-24 16:12:32 | [diff] [blame] | 1 | cmake_minimum_required(VERSION 3.20.0) |
Vladislav Khmelevsky | 80c01dd | 2023-09-15 10:52:20 | [diff] [blame] | 2 | include(CheckCXXCompilerFlag) |
Rafael Auler | ba31344 | 2019-09-20 18:29:35 | [diff] [blame] | 3 | include(CheckIncludeFiles) |
John Ericson | 90dcdc4 | 2022-08-20 14:33:21 | [diff] [blame] | 4 | include(GNUInstallDirs) |
Rafael Auler | ba31344 | 2019-09-20 18:29:35 | [diff] [blame] | 5 | |
Rafael Auler | 62aa74f | 2019-07-24 21:03:43 | [diff] [blame] | 6 | set(CMAKE_CXX_EXTENSIONS OFF) |
Tobias Hieta | b135650 | 2022-08-05 19:45:55 | [diff] [blame] | 7 | set(CMAKE_CXX_STANDARD 17) |
Rafael Auler | 62aa74f | 2019-07-24 21:03:43 | [diff] [blame] | 8 | |
| 9 | project(libbolt_rt_project) |
| 10 | |
Rafael Auler | ba31344 | 2019-09-20 18:29:35 | [diff] [blame] | 11 | check_include_files(elf.h HAVE_ELF_H) |
| 12 | configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in |
| 13 | ${CMAKE_CURRENT_BINARY_DIR}/config.h) |
| 14 | |
Xun Li | 9bd7161 | 2020-05-02 18:14:38 | [diff] [blame] | 15 | add_library(bolt_rt_instr STATIC |
Rafael Auler | 62aa74f | 2019-07-24 21:03:43 | [diff] [blame] | 16 | instr.cpp |
Rafael Auler | ba31344 | 2019-09-20 18:29:35 | [diff] [blame] | 17 | ${CMAKE_CURRENT_BINARY_DIR}/config.h |
Rafael Auler | 62aa74f | 2019-07-24 21:03:43 | [diff] [blame] | 18 | ) |
Nikita Popov | 3c42a774 | 2025-01-17 08:38:00 | [diff] [blame] | 19 | set_target_properties(bolt_rt_instr PROPERTIES ARCHIVE_OUTPUT_DIRECTORY "lib${LLVM_LIBDIR_SUFFIX}") |
Xun Li | 9bd7161 | 2020-05-02 18:14:38 | [diff] [blame] | 20 | add_library(bolt_rt_hugify STATIC |
| 21 | hugify.cpp |
| 22 | ${CMAKE_CURRENT_BINARY_DIR}/config.h |
| 23 | ) |
Nikita Popov | 3c42a774 | 2025-01-17 08:38:00 | [diff] [blame] | 24 | set_target_properties(bolt_rt_hugify PROPERTIES ARCHIVE_OUTPUT_DIRECTORY "lib${LLVM_LIBDIR_SUFFIX}") |
Tristan Ross | abc2eae | 2024-07-25 15:18:14 | [diff] [blame] | 25 | |
| 26 | if(NOT BOLT_BUILT_STANDALONE) |
| 27 | add_custom_command(TARGET bolt_rt_instr POST_BUILD |
Nikita Popov | 3c42a774 | 2025-01-17 08:38:00 | [diff] [blame] | 28 | COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}/libbolt_rt_instr.a" "${LLVM_LIBRARY_DIR}") |
Tristan Ross | abc2eae | 2024-07-25 15:18:14 | [diff] [blame] | 29 | add_custom_command(TARGET bolt_rt_hugify POST_BUILD |
Nikita Popov | 3c42a774 | 2025-01-17 08:38:00 | [diff] [blame] | 30 | COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}/libbolt_rt_hugify.a" "${LLVM_LIBRARY_DIR}") |
Tristan Ross | abc2eae | 2024-07-25 15:18:14 | [diff] [blame] | 31 | endif() |
Rafael Auler | ba31344 | 2019-09-20 18:29:35 | [diff] [blame] | 32 | |
Amir Ayupov | c840047 | 2022-02-07 19:03:20 | [diff] [blame] | 33 | set(BOLT_RT_FLAGS |
| 34 | -ffreestanding |
| 35 | -fno-exceptions |
| 36 | -fno-rtti |
Maksim Panchenko | 3a47037 | 2022-07-01 01:46:47 | [diff] [blame] | 37 | -fno-stack-protector |
wangjue | dbb79c3 | 2025-04-17 06:01:00 | [diff] [blame] | 38 | -fPIC) |
Elvina Yakubova | 87e9c42 | 2023-08-24 09:39:11 | [diff] [blame] | 39 | if (CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64") |
wangjue | dbb79c3 | 2025-04-17 06:01:00 | [diff] [blame] | 40 | set(BOLT_RT_FLAGS ${BOLT_RT_FLAGS} |
| 41 | -mno-sse |
| 42 | -mgeneral-regs-only) |
| 43 | endif() |
| 44 | if (CMAKE_SYSTEM_PROCESSOR MATCHES "riscv64") |
| 45 | set(BOLT_RT_FLAGS ${BOLT_RT_FLAGS}) |
Elvina Yakubova | 87e9c42 | 2023-08-24 09:39:11 | [diff] [blame] | 46 | endif() |
Elvina Yakubova | 6678f60 | 2023-09-07 20:54:53 | [diff] [blame] | 47 | if (CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64") |
Vladislav Khmelevsky | 80c01dd | 2023-09-15 10:52:20 | [diff] [blame] | 48 | check_cxx_compiler_flag("-mno-outline-atomics" CXX_SUPPORTS_OUTLINE_ATOMICS) |
| 49 | if (CXX_SUPPORTS_OUTLINE_ATOMICS) |
wangjue | dbb79c3 | 2025-04-17 06:01:00 | [diff] [blame] | 50 | set(BOLT_RT_FLAGS ${BOLT_RT_FLAGS} |
| 51 | -mno-outline-atomics |
| 52 | -mgeneral-regs-only) |
Vladislav Khmelevsky | 80c01dd | 2023-09-15 10:52:20 | [diff] [blame] | 53 | endif() |
Elvina Yakubova | 6678f60 | 2023-09-07 20:54:53 | [diff] [blame] | 54 | endif() |
Amir Ayupov | c840047 | 2022-02-07 19:03:20 | [diff] [blame] | 55 | |
Rafael Auler | cc4b2fb | 2019-08-07 23:09:50 | [diff] [blame] | 56 | # Don't let the compiler think it can create calls to standard libs |
Alexey Moksyakov | 1fb1861 | 2022-06-27 12:37:53 | [diff] [blame] | 57 | target_compile_options(bolt_rt_instr PRIVATE ${BOLT_RT_FLAGS}) |
Xun Li | 9bd7161 | 2020-05-02 18:14:38 | [diff] [blame] | 58 | target_include_directories(bolt_rt_instr PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) |
Amir Ayupov | c840047 | 2022-02-07 19:03:20 | [diff] [blame] | 59 | target_compile_options(bolt_rt_hugify PRIVATE ${BOLT_RT_FLAGS}) |
Xun Li | 9bd7161 | 2020-05-02 18:14:38 | [diff] [blame] | 60 | target_include_directories(bolt_rt_hugify PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) |
Rafael Auler | 62aa74f | 2019-07-24 21:03:43 | [diff] [blame] | 61 | |
Nikita Popov | 3c42a774 | 2025-01-17 08:38:00 | [diff] [blame] | 62 | install(TARGETS bolt_rt_instr DESTINATION "lib${LLVM_LIBDIR_SUFFIX}") |
| 63 | install(TARGETS bolt_rt_hugify DESTINATION "lib${LLVM_LIBDIR_SUFFIX}") |
Xun Li | 9bd7161 | 2020-05-02 18:14:38 | [diff] [blame] | 64 | |
Elvina Yakubova | 87e9c42 | 2023-08-24 09:39:11 | [diff] [blame] | 65 | if (CMAKE_CXX_COMPILER_ID MATCHES ".*Clang.*" AND CMAKE_SYSTEM_NAME STREQUAL "Darwin") |
Alexander Shaposhnikov | bbd9d61 | 2020-10-15 10:51:56 | [diff] [blame] | 66 | add_library(bolt_rt_instr_osx STATIC |
| 67 | instr.cpp |
| 68 | ${CMAKE_CURRENT_BINARY_DIR}/config.h |
| 69 | ) |
Nikita Popov | 3c42a774 | 2025-01-17 08:38:00 | [diff] [blame] | 70 | set_target_properties(bolt_rt_instr_osx PROPERTIES ARCHIVE_OUTPUT_DIRECTORY "lib${LLVM_LIBDIR_SUFFIX}") |
Alexander Shaposhnikov | bbd9d61 | 2020-10-15 10:51:56 | [diff] [blame] | 71 | target_include_directories(bolt_rt_instr_osx PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) |
| 72 | target_compile_options(bolt_rt_instr_osx PRIVATE |
| 73 | -target x86_64-apple-darwin19.6.0 |
Amir Ayupov | c840047 | 2022-02-07 19:03:20 | [diff] [blame] | 74 | ${BOLT_RT_FLAGS}) |
Nikita Popov | 3c42a774 | 2025-01-17 08:38:00 | [diff] [blame] | 75 | install(TARGETS bolt_rt_instr_osx DESTINATION "lib${LLVM_LIBDIR_SUFFIX}") |
Tristan Ross | abc2eae | 2024-07-25 15:18:14 | [diff] [blame] | 76 | |
| 77 | if(NOT BOLT_BUILT_STANDALONE) |
| 78 | add_custom_command(TARGET bolt_rt_instr_osx POST_BUILD |
Nikita Popov | 3c42a774 | 2025-01-17 08:38:00 | [diff] [blame] | 79 | COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}/libbolt_rt_instr_osx.a" "${LLVM_LIBRARY_DIR}") |
Tristan Ross | abc2eae | 2024-07-25 15:18:14 | [diff] [blame] | 80 | endif() |
Alexander Shaposhnikov | bbd9d61 | 2020-10-15 10:51:56 | [diff] [blame] | 81 | endif() |