summarylogtreecommitdiffstats
path: root/llvm-shlib_Create_object_libraries_for_each_component_and_link_against_them.patch
diff options
context:
space:
mode:
Diffstat (limited to 'llvm-shlib_Create_object_libraries_for_each_component_and_link_against_them.patch')
-rw-r--r--llvm-shlib_Create_object_libraries_for_each_component_and_link_against_them.patch54
1 files changed, 54 insertions, 0 deletions
diff --git a/llvm-shlib_Create_object_libraries_for_each_component_and_link_against_them.patch b/llvm-shlib_Create_object_libraries_for_each_component_and_link_against_them.patch
new file mode 100644
index 000000000000..6e6797276359
--- /dev/null
+++ b/llvm-shlib_Create_object_libraries_for_each_component_and_link_against_them.patch
@@ -0,0 +1,54 @@
+From 43ceb74eb1a5801662419fb66a6bf0d5414f1ec5 Mon Sep 17 00:00:00 2001
+From: Tom Stellard <tstellar@redhat.com>
+Date: Wed, 31 Mar 2021 21:35:04 -0700
+Subject: [PATCH] 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
+---
+ llvm/cmake/modules/AddLLVM.cmake | 3 ++-
+ llvm/tools/llvm-shlib/CMakeLists.txt | 4 ++++
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+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")