[BOLT][CMake] Redo the build and install targets

The existing BOLT install targets are broken on Windows becase they
don't properly handle the output extension. We cannot use the existing
LLVM macros since those make assumptions that don't hold for BOLT. This
change instead implements custom macros following the approach used by
Clang and LLD.

Differential Revision: https://reviews.llvm.org/D151595
This commit is contained in:
Petr Hosek 2023-05-26 22:11:24 +00:00
parent 92901996a6
commit f3269a94e7
10 changed files with 55 additions and 42 deletions

View File

@ -4,6 +4,9 @@ set(BOLT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
set(BOLT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
set(CMAKE_CXX_STANDARD 17)
# Add path for custom modules.
list(INSERT CMAKE_MODULE_PATH 0 "${BOLT_SOURCE_DIR}/cmake/modules")
# Determine default set of targets to build -- the intersection of
# those BOLT supports and those LLVM is targeting.
set(BOLT_TARGETS_TO_BUILD_all "AArch64;X86")
@ -111,6 +114,15 @@ endif()
find_program(GNU_LD_EXECUTABLE NAMES ${LLVM_DEFAULT_TARGET_TRIPLE}-ld.bfd ld.bfd DOC "GNU ld")
include(AddBOLT)
option(BOLT_BUILD_TOOLS
"Build the BOLT tools. If OFF, just generate build targets." ON)
add_custom_target(bolt)
set_target_properties(bolt PROPERTIES FOLDER "BOLT")
add_llvm_install_targets(install-bolt DEPENDS bolt COMPONENT bolt)
include_directories(
${CMAKE_CURRENT_SOURCE_DIR}/include
${CMAKE_CURRENT_BINARY_DIR}/include

View File

@ -0,0 +1,36 @@
include(GNUInstallDirs)
include(LLVMDistributionSupport)
macro(add_bolt_executable name)
add_llvm_executable(${name} ${ARGN})
set_target_properties(${name} PROPERTIES FOLDER "BOLT")
endmacro()
macro(add_bolt_tool name)
if (NOT BOLT_BUILD_TOOLS)
set(EXCLUDE_FROM_ALL ON)
endif()
add_bolt_executable(${name} ${ARGN})
if (BOLT_BUILD_TOOLS)
get_target_export_arg(${name} BOLT export_to_bolttargets)
install(TARGETS ${name}
${export_to_bolttargets}
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
COMPONENT bolt)
if(NOT LLVM_ENABLE_IDE)
add_llvm_install_targets(install-${name}
DEPENDS ${name}
COMPONENT bolt)
endif()
set_property(GLOBAL APPEND PROPERTY BOLT_EXPORTS ${name})
endif()
endmacro()
macro(add_bolt_tool_symlink name dest)
llvm_add_tool_symlink(BOLT ${name} ${dest} ALWAYS_GENERATE)
# Always generate install targets
llvm_install_symlink(BOLT ${name} ${dest} ALWAYS_GENERATE COMPONENT bolt)
endmacro()

View File

@ -37,7 +37,6 @@ list(APPEND BOLT_TEST_DEPS
lld
llvm-config
llvm-bolt
llvm-boltdiff
llvm-bolt-heatmap
llvm-bat-dump
llvm-dwarfdump
@ -52,7 +51,6 @@ list(APPEND BOLT_TEST_DEPS
llvm-objcopy
merge-fdata
not
perf2bolt
split-file
yaml2obj
)

View File

@ -2,16 +2,6 @@ set(BOLT_TOOLS_INSTALL_DIR "${CMAKE_INSTALL_BINDIR}" CACHE PATH
"Path for binary subdirectory (defaults to '${CMAKE_INSTALL_BINDIR}')")
mark_as_advanced(BOLT_TOOLS_INSTALL_DIR)
# Move these macros to AddBolt if such a CMake module is ever created.
macro(add_bolt_tool name)
llvm_add_tool(BOLT ${ARGV})
endmacro()
macro(add_bolt_tool_symlink name)
llvm_add_tool_symlink(BOLT ${ARGV})
endmacro()
add_subdirectory(driver)
add_subdirectory(llvm-bolt-fuzzer)
add_subdirectory(bat-dump)

View File

@ -3,7 +3,7 @@ set(LLVM_LINK_COMPONENTS
Support
)
add_llvm_tool(llvm-bat-dump
add_bolt_executable(llvm-bat-dump
bat-dump.cpp
DISABLE_LLVM_LINK_LLVM_DYLIB
@ -13,5 +13,3 @@ target_link_libraries(llvm-bat-dump
PRIVATE
LLVMBOLTProfile
)
set_target_properties(llvm-bat-dump PROPERTIES FOLDER "BOLT")

View File

@ -30,22 +30,6 @@ target_link_libraries(llvm-bolt
add_bolt_tool_symlink(perf2bolt llvm-bolt)
add_bolt_tool_symlink(llvm-boltdiff llvm-bolt)
set(BOLT_DEPENDS
llvm-bolt
perf2bolt
llvm-boltdiff
)
add_dependencies(bolt llvm-bolt)
add_custom_target(bolt DEPENDS ${BOLT_DEPENDS})
install(PROGRAMS
${CMAKE_BINARY_DIR}/bin/llvm-bolt
${CMAKE_BINARY_DIR}/bin/perf2bolt
${CMAKE_BINARY_DIR}/bin/llvm-boltdiff
DESTINATION ${CMAKE_INSTALL_BINDIR}
COMPONENT bolt
)
add_llvm_install_targets(install-bolt DEPENDS bolt COMPONENT bolt)
set_target_properties(bolt PROPERTIES FOLDER "BOLT")
set_target_properties(install-bolt PROPERTIES FOLDER "BOLT")
include_directories( ${BOLT_SOURCE_DIR}/lib )
include_directories(${BOLT_SOURCE_DIR}/lib)

View File

@ -17,4 +17,4 @@ target_link_libraries(llvm-bolt-heatmap
LLVMBOLTUtils
)
set_target_properties(llvm-bolt-heatmap PROPERTIES FOLDER "BOLT")
add_dependencies(bolt llvm-bolt-heatmap)

View File

@ -8,14 +8,8 @@ add_bolt_tool(merge-fdata
DEPENDS
intrinsics_gen
)
set_target_properties(merge-fdata PROPERTIES FOLDER "BOLT")
add_dependencies(bolt merge-fdata)
install(PROGRAMS
${CMAKE_BINARY_DIR}/bin/merge-fdata
DESTINATION ${CMAKE_INSTALL_BINDIR}
COMPONENT bolt
)
# Emit relocations for BOLT meta test (bolt/test/runtime/meta-merge-fdata.test)
if (BOLT_INCLUDE_TESTS AND UNIX AND NOT APPLE)

View File

@ -6,7 +6,7 @@ set(LLVM_TARGETS_TO_BUILD X86;ARM;AArch64;RISCV CACHE STRING "")
set(PACKAGE_VENDOR Fuchsia CACHE STRING "")
set(_FUCHSIA_ENABLE_PROJECTS "clang;clang-tools-extra;lld;llvm;polly")
set(_FUCHSIA_ENABLE_PROJECTS "bolt;clang;clang-tools-extra;lld;llvm;polly")
set(LLVM_ENABLE_RUNTIMES "compiler-rt;libcxx;libcxxabi;libunwind" CACHE STRING "")
set(LLVM_ENABLE_BACKTRACES OFF CACHE BOOL "")
@ -329,6 +329,7 @@ set(LLVM_TOOLCHAIN_TOOLS
CACHE STRING "")
set(LLVM_Toolchain_DISTRIBUTION_COMPONENTS
bolt
clang
lld
clang-apply-replacements

View File

@ -2121,7 +2121,7 @@ function(llvm_install_symlink project name dest)
if (NOT LLVM_ENABLE_IDE AND NOT ARG_ALWAYS_GENERATE)
add_llvm_install_targets(install-${name}
DEPENDS ${name} ${dest}
COMPONENT ${name}
COMPONENT ${component}
SYMLINK ${dest})
endif()
endfunction()