Skip to content

Commit

Permalink
[BOLT][CMake] Redo the build and install targets
Browse files Browse the repository at this point in the history
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
  • Loading branch information
petrhosek committed Jun 1, 2023
1 parent 9290199 commit f3269a9
Show file tree
Hide file tree
Showing 10 changed files with 55 additions and 42 deletions.
12 changes: 12 additions & 0 deletions bolt/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down Expand Up @@ -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
Expand Down
36 changes: 36 additions & 0 deletions bolt/cmake/modules/AddBOLT.cmake
Original file line number Diff line number Diff line change
@@ -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()
2 changes: 0 additions & 2 deletions bolt/test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@ list(APPEND BOLT_TEST_DEPS
lld
llvm-config
llvm-bolt
llvm-boltdiff
llvm-bolt-heatmap
llvm-bat-dump
llvm-dwarfdump
Expand All @@ -52,7 +51,6 @@ list(APPEND BOLT_TEST_DEPS
llvm-objcopy
merge-fdata
not
perf2bolt
split-file
yaml2obj
)
Expand Down
10 changes: 0 additions & 10 deletions bolt/tools/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
4 changes: 1 addition & 3 deletions bolt/tools/bat-dump/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -13,5 +13,3 @@ target_link_libraries(llvm-bat-dump
PRIVATE
LLVMBOLTProfile
)

set_target_properties(llvm-bat-dump PROPERTIES FOLDER "BOLT")
20 changes: 2 additions & 18 deletions bolt/tools/driver/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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)
2 changes: 1 addition & 1 deletion bolt/tools/heatmap/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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)
6 changes: 0 additions & 6 deletions bolt/tools/merge-fdata/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
3 changes: 2 additions & 1 deletion clang/cmake/caches/Fuchsia-stage2.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -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 "")
Expand Down Expand Up @@ -329,6 +329,7 @@ set(LLVM_TOOLCHAIN_TOOLS
CACHE STRING "")

set(LLVM_Toolchain_DISTRIBUTION_COMPONENTS
bolt
clang
lld
clang-apply-replacements
Expand Down
2 changes: 1 addition & 1 deletion llvm/cmake/modules/AddLLVM.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down

0 comments on commit f3269a9

Please sign in to comment.