[llvm] 43ceb74 - llvm-shlib: Create object libraries for each component and link against them
Tom Stellard via llvm-commits
llvm-commits at lists.llvm.org
Thu Apr 1 15:02:16 PDT 2021
Author: Tom Stellard
Date: 2021-04-01T14:58:44-07:00
New Revision: 43ceb74eb1a5801662419fb66a6bf0d5414f1ec5
URL: https://github.com/llvm/llvm-project/commit/43ceb74eb1a5801662419fb66a6bf0d5414f1ec5
DIFF: https://github.com/llvm/llvm-project/commit/43ceb74eb1a5801662419fb66a6bf0d5414f1ec5.diff
LOG: llvm-shlib: Create object libraries for each component and link against them
This makes it possible to build libLLVM.so without first creating a
static library for each component. In the case where only libLLVM.so is
built (i.e. ninja LLVM) this eliminates 150 linker jobs.
Reviewed By: stellaraccident
Differential Revision: https://reviews.llvm.org/D95727
Added:
Modified:
llvm/cmake/modules/AddLLVM.cmake
llvm/tools/llvm-shlib/CMakeLists.txt
Removed:
################################################################################
diff --git a/llvm/cmake/modules/AddLLVM.cmake b/llvm/cmake/modules/AddLLVM.cmake
index 2f055c7799624..c7a50b7a393ef 100644
--- a/llvm/cmake/modules/AddLLVM.cmake
+++ b/llvm/cmake/modules/AddLLVM.cmake
@@ -488,6 +488,7 @@ function(llvm_add_library name)
add_dependencies(${obj_name} ${link_lib})
endif()
endforeach()
+ target_link_libraries(${obj_name} ${ARG_LINK_LIBS})
endif()
endif()
@@ -746,7 +747,7 @@ function(add_llvm_component_library name)
"COMPONENT_NAME;ADD_TO_COMPONENT"
""
${ARGN})
- add_llvm_library(${name} COMPONENT_LIB ${ARG_UNPARSED_ARGUMENTS})
+ add_llvm_library(${name} COMPONENT_LIB OBJECT ${ARG_UNPARSED_ARGUMENTS})
string(REGEX REPLACE "^LLVM" "" component_name ${name})
set_property(TARGET ${name} PROPERTY LLVM_COMPONENT_NAME ${component_name})
diff --git a/llvm/tools/llvm-shlib/CMakeLists.txt b/llvm/tools/llvm-shlib/CMakeLists.txt
index b0ee19049e6fa..728995ad8b299 100644
--- a/llvm/tools/llvm-shlib/CMakeLists.txt
+++ b/llvm/tools/llvm-shlib/CMakeLists.txt
@@ -33,6 +33,10 @@ if(LLVM_BUILD_LLVM_DYLIB)
add_llvm_library(LLVM SHARED DISABLE_LLVM_LINK_LLVM_DYLIB SONAME ${INSTALL_WITH_TOOLCHAIN} ${SOURCES})
list(REMOVE_DUPLICATES LIB_NAMES)
+
+ # Link against the object libraries instead of static libraries.
+ list(TRANSFORM LIB_NAMES PREPEND "obj.")
+
if(("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") OR (MINGW) OR (HAIKU)
OR ("${CMAKE_SYSTEM_NAME}" STREQUAL "FreeBSD")
OR ("${CMAKE_SYSTEM_NAME}" STREQUAL "GNU")
More information about the llvm-commits
mailing list