[BOLT][CMake] Redo the build and install targets
authorPetr Hosek <phosek@google.com>
Fri, 26 May 2023 22:11:24 +0000 (22:11 +0000)
committerPetr Hosek <phosek@google.com>
Thu, 1 Jun 2023 06:01:39 +0000 (06:01 +0000)
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
bolt/cmake/modules/AddBOLT.cmake [new file with mode: 0644]
bolt/test/CMakeLists.txt
bolt/tools/CMakeLists.txt
bolt/tools/bat-dump/CMakeLists.txt
bolt/tools/driver/CMakeLists.txt
bolt/tools/heatmap/CMakeLists.txt
bolt/tools/merge-fdata/CMakeLists.txt
clang/cmake/caches/Fuchsia-stage2.cmake
llvm/cmake/modules/AddLLVM.cmake

index a9bc770..2e702d4 100644 (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
diff --git a/bolt/cmake/modules/AddBOLT.cmake b/bolt/cmake/modules/AddBOLT.cmake
new file mode 100644 (file)
index 0000000..1f69b90
--- /dev/null
@@ -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()
index 216a785..89862fd 100644 (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
   )
index 52050fb..22ea3b9 100644 (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)
index 71d4f3e..037b7d2 100644 (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")
index 1c59619..9bf9ff8 100644 (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_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)
index 9f52ddb..acddc7a 100644 (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)
index 9405acb..f6a87a2 100644 (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)
index 6d868ab..78c123f 100644 (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
index 91d2c8b..5dadac0 100644 (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()