From f3269a94e729b02e9d7c07257c45b098506cca22 Mon Sep 17 00:00:00 2001 From: Petr Hosek Date: Fri, 26 May 2023 22:11:24 +0000 Subject: [PATCH] [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 --- bolt/CMakeLists.txt | 12 +++++++++ bolt/cmake/modules/AddBOLT.cmake | 36 +++++++++++++++++++++++++ bolt/test/CMakeLists.txt | 2 -- bolt/tools/CMakeLists.txt | 10 ------- bolt/tools/bat-dump/CMakeLists.txt | 4 +-- bolt/tools/driver/CMakeLists.txt | 20 ++------------ bolt/tools/heatmap/CMakeLists.txt | 2 +- bolt/tools/merge-fdata/CMakeLists.txt | 6 ----- clang/cmake/caches/Fuchsia-stage2.cmake | 3 ++- llvm/cmake/modules/AddLLVM.cmake | 2 +- 10 files changed, 55 insertions(+), 42 deletions(-) create mode 100644 bolt/cmake/modules/AddBOLT.cmake diff --git a/bolt/CMakeLists.txt b/bolt/CMakeLists.txt index a9bc770a95e93..2e702d40668b4 100644 --- a/bolt/CMakeLists.txt +++ b/bolt/CMakeLists.txt @@ -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 diff --git a/bolt/cmake/modules/AddBOLT.cmake b/bolt/cmake/modules/AddBOLT.cmake new file mode 100644 index 0000000000000..1f69b9046320a --- /dev/null +++ b/bolt/cmake/modules/AddBOLT.cmake @@ -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() diff --git a/bolt/test/CMakeLists.txt b/bolt/test/CMakeLists.txt index 216a785b7d69f..89862fd59eb8e 100644 --- a/bolt/test/CMakeLists.txt +++ b/bolt/test/CMakeLists.txt @@ -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 ) diff --git a/bolt/tools/CMakeLists.txt b/bolt/tools/CMakeLists.txt index 52050fb8b0056..22ea3b9bd805f 100644 --- a/bolt/tools/CMakeLists.txt +++ b/bolt/tools/CMakeLists.txt @@ -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) diff --git a/bolt/tools/bat-dump/CMakeLists.txt b/bolt/tools/bat-dump/CMakeLists.txt index 71d4f3e64ccda..037b7d2662ae4 100644 --- a/bolt/tools/bat-dump/CMakeLists.txt +++ b/bolt/tools/bat-dump/CMakeLists.txt @@ -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") diff --git a/bolt/tools/driver/CMakeLists.txt b/bolt/tools/driver/CMakeLists.txt index 1c596194ffe80..9bf9ff85edc7b 100644 --- a/bolt/tools/driver/CMakeLists.txt +++ b/bolt/tools/driver/CMakeLists.txt @@ -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_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") +add_dependencies(bolt llvm-bolt) -include_directories( ${BOLT_SOURCE_DIR}/lib ) +include_directories(${BOLT_SOURCE_DIR}/lib) diff --git a/bolt/tools/heatmap/CMakeLists.txt b/bolt/tools/heatmap/CMakeLists.txt index 9f52ddb02102e..acddc7a50e8b1 100644 --- a/bolt/tools/heatmap/CMakeLists.txt +++ b/bolt/tools/heatmap/CMakeLists.txt @@ -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) diff --git a/bolt/tools/merge-fdata/CMakeLists.txt b/bolt/tools/merge-fdata/CMakeLists.txt index 9405acb6ab68d..f6a87a2268982 100644 --- a/bolt/tools/merge-fdata/CMakeLists.txt +++ b/bolt/tools/merge-fdata/CMakeLists.txt @@ -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) diff --git a/clang/cmake/caches/Fuchsia-stage2.cmake b/clang/cmake/caches/Fuchsia-stage2.cmake index 6d868abf21202..78c123f191305 100644 --- a/clang/cmake/caches/Fuchsia-stage2.cmake +++ b/clang/cmake/caches/Fuchsia-stage2.cmake @@ -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 diff --git a/llvm/cmake/modules/AddLLVM.cmake b/llvm/cmake/modules/AddLLVM.cmake index 91d2c8bac6e03..5dadac02bee81 100644 --- a/llvm/cmake/modules/AddLLVM.cmake +++ b/llvm/cmake/modules/AddLLVM.cmake @@ -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()