blob: 87cc44812da112d191309108440127c2875813a6 [file] [log] [blame]
Mark de Wevercbaa3592023-05-24 16:12:321cmake_minimum_required(VERSION 3.20.0)
Vladislav Khmelevsky80c01dd2023-09-15 10:52:202include(CheckCXXCompilerFlag)
Rafael Aulerba313442019-09-20 18:29:353include(CheckIncludeFiles)
John Ericson90dcdc42022-08-20 14:33:214include(GNUInstallDirs)
Rafael Aulerba313442019-09-20 18:29:355
Rafael Auler62aa74f2019-07-24 21:03:436set(CMAKE_CXX_EXTENSIONS OFF)
Tobias Hietab1356502022-08-05 19:45:557set(CMAKE_CXX_STANDARD 17)
Rafael Auler62aa74f2019-07-24 21:03:438
9project(libbolt_rt_project)
10
Rafael Aulerba313442019-09-20 18:29:3511check_include_files(elf.h HAVE_ELF_H)
12configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in
13 ${CMAKE_CURRENT_BINARY_DIR}/config.h)
14
Xun Li9bd71612020-05-02 18:14:3815add_library(bolt_rt_instr STATIC
Rafael Auler62aa74f2019-07-24 21:03:4316 instr.cpp
Rafael Aulerba313442019-09-20 18:29:3517 ${CMAKE_CURRENT_BINARY_DIR}/config.h
Rafael Auler62aa74f2019-07-24 21:03:4318 )
Nikita Popov3c42a7742025-01-17 08:38:0019set_target_properties(bolt_rt_instr PROPERTIES ARCHIVE_OUTPUT_DIRECTORY "lib${LLVM_LIBDIR_SUFFIX}")
Xun Li9bd71612020-05-02 18:14:3820add_library(bolt_rt_hugify STATIC
21 hugify.cpp
22 ${CMAKE_CURRENT_BINARY_DIR}/config.h
23 )
Nikita Popov3c42a7742025-01-17 08:38:0024set_target_properties(bolt_rt_hugify PROPERTIES ARCHIVE_OUTPUT_DIRECTORY "lib${LLVM_LIBDIR_SUFFIX}")
Tristan Rossabc2eae2024-07-25 15:18:1425
26if(NOT BOLT_BUILT_STANDALONE)
27 add_custom_command(TARGET bolt_rt_instr POST_BUILD
Nikita Popov3c42a7742025-01-17 08:38:0028 COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}/libbolt_rt_instr.a" "${LLVM_LIBRARY_DIR}")
Tristan Rossabc2eae2024-07-25 15:18:1429 add_custom_command(TARGET bolt_rt_hugify POST_BUILD
Nikita Popov3c42a7742025-01-17 08:38:0030 COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}/libbolt_rt_hugify.a" "${LLVM_LIBRARY_DIR}")
Tristan Rossabc2eae2024-07-25 15:18:1431endif()
Rafael Aulerba313442019-09-20 18:29:3532
Amir Ayupovc8400472022-02-07 19:03:2033set(BOLT_RT_FLAGS
34 -ffreestanding
35 -fno-exceptions
36 -fno-rtti
Maksim Panchenko3a470372022-07-01 01:46:4737 -fno-stack-protector
wangjuedbb79c32025-04-17 06:01:0038 -fPIC)
Elvina Yakubova87e9c422023-08-24 09:39:1139if (CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
wangjuedbb79c32025-04-17 06:01:0040 set(BOLT_RT_FLAGS ${BOLT_RT_FLAGS}
41 -mno-sse
42 -mgeneral-regs-only)
43endif()
44if (CMAKE_SYSTEM_PROCESSOR MATCHES "riscv64")
45 set(BOLT_RT_FLAGS ${BOLT_RT_FLAGS})
Elvina Yakubova87e9c422023-08-24 09:39:1146endif()
Elvina Yakubova6678f602023-09-07 20:54:5347if (CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64")
Vladislav Khmelevsky80c01dd2023-09-15 10:52:2048 check_cxx_compiler_flag("-mno-outline-atomics" CXX_SUPPORTS_OUTLINE_ATOMICS)
49 if (CXX_SUPPORTS_OUTLINE_ATOMICS)
wangjuedbb79c32025-04-17 06:01:0050 set(BOLT_RT_FLAGS ${BOLT_RT_FLAGS}
51 -mno-outline-atomics
52 -mgeneral-regs-only)
Vladislav Khmelevsky80c01dd2023-09-15 10:52:2053 endif()
Elvina Yakubova6678f602023-09-07 20:54:5354endif()
Amir Ayupovc8400472022-02-07 19:03:2055
Rafael Aulercc4b2fb2019-08-07 23:09:5056# Don't let the compiler think it can create calls to standard libs
Alexey Moksyakov1fb18612022-06-27 12:37:5357target_compile_options(bolt_rt_instr PRIVATE ${BOLT_RT_FLAGS})
Xun Li9bd71612020-05-02 18:14:3858target_include_directories(bolt_rt_instr PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
Amir Ayupovc8400472022-02-07 19:03:2059target_compile_options(bolt_rt_hugify PRIVATE ${BOLT_RT_FLAGS})
Xun Li9bd71612020-05-02 18:14:3860target_include_directories(bolt_rt_hugify PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
Rafael Auler62aa74f2019-07-24 21:03:4361
Nikita Popov3c42a7742025-01-17 08:38:0062install(TARGETS bolt_rt_instr DESTINATION "lib${LLVM_LIBDIR_SUFFIX}")
63install(TARGETS bolt_rt_hugify DESTINATION "lib${LLVM_LIBDIR_SUFFIX}")
Xun Li9bd71612020-05-02 18:14:3864
Elvina Yakubova87e9c422023-08-24 09:39:1165if (CMAKE_CXX_COMPILER_ID MATCHES ".*Clang.*" AND CMAKE_SYSTEM_NAME STREQUAL "Darwin")
Alexander Shaposhnikovbbd9d612020-10-15 10:51:5666 add_library(bolt_rt_instr_osx STATIC
67 instr.cpp
68 ${CMAKE_CURRENT_BINARY_DIR}/config.h
69 )
Nikita Popov3c42a7742025-01-17 08:38:0070 set_target_properties(bolt_rt_instr_osx PROPERTIES ARCHIVE_OUTPUT_DIRECTORY "lib${LLVM_LIBDIR_SUFFIX}")
Alexander Shaposhnikovbbd9d612020-10-15 10:51:5671 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 Ayupovc8400472022-02-07 19:03:2074 ${BOLT_RT_FLAGS})
Nikita Popov3c42a7742025-01-17 08:38:0075 install(TARGETS bolt_rt_instr_osx DESTINATION "lib${LLVM_LIBDIR_SUFFIX}")
Tristan Rossabc2eae2024-07-25 15:18:1476
77 if(NOT BOLT_BUILT_STANDALONE)
78 add_custom_command(TARGET bolt_rt_instr_osx POST_BUILD
Nikita Popov3c42a7742025-01-17 08:38:0079 COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}/libbolt_rt_instr_osx.a" "${LLVM_LIBRARY_DIR}")
Tristan Rossabc2eae2024-07-25 15:18:1480 endif()
Alexander Shaposhnikovbbd9d612020-10-15 10:51:5681endif()