[llvm] e849e7a - Use components instead of libraries in Polly linkage step

via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 28 00:44:21 PDT 2020


Author: serge-sans-paille
Date: 2020-04-28T09:44:10+02:00
New Revision: e849e7a700907441ee82ace9d0a9555ae7eb9811

URL: https://github.com/llvm/llvm-project/commit/e849e7a700907441ee82ace9d0a9555ae7eb9811
DIFF: https://github.com/llvm/llvm-project/commit/e849e7a700907441ee82ace9d0a9555ae7eb9811.diff

LOG: Use components instead of libraries in Polly linkage step

As a side effect, this tests (and fix a bug) in the compiler extension handling
of components.

Differential Revision: https://reviews.llvm.org/D78358

Added: 
    

Modified: 
    llvm/cmake/modules/AddLLVM.cmake
    polly/lib/CMakeLists.txt

Removed: 
    


################################################################################
diff  --git a/llvm/cmake/modules/AddLLVM.cmake b/llvm/cmake/modules/AddLLVM.cmake
index ea4967dc38d3..b77b59240eb1 100644
--- a/llvm/cmake/modules/AddLLVM.cmake
+++ b/llvm/cmake/modules/AddLLVM.cmake
@@ -873,11 +873,17 @@ function(add_llvm_pass_plugin name)
   endif()
   option(LLVM_${name_upper}_LINK_INTO_TOOLS "Statically link ${name} into tools (if available)" ${link_into_tools_default})
 
+  # If we statically link the plugin, don't use llvm dylib because we're going
+  # to be part of it.
+  if(LLVM_${name_upper}_LINK_INTO_TOOLS)
+      list(APPEND ARG_UNPARSED_ARGUMENTS DISABLE_LLVM_LINK_LLVM_DYLIB)
+  endif()
+
   if(LLVM_${name_upper}_LINK_INTO_TOOLS)
     list(REMOVE_ITEM ARG_UNPARSED_ARGUMENTS BUILDTREE_ONLY)
     # process_llvm_pass_plugins takes care of the actual linking, just create an
     # object library as of now
-    add_llvm_component_library(${name} OBJECT ${ARG_UNPARSED_ARGUMENTS})
+    add_llvm_library(${name} OBJECT ${ARG_UNPARSED_ARGUMENTS})
     target_compile_definitions(${name} PRIVATE LLVM_${name_upper}_LINK_INTO_TOOLS)
     set_property(TARGET ${name} APPEND PROPERTY COMPILE_DEFINITIONS LLVM_LINK_INTO_TOOLS)
     if (TARGET intrinsics_gen)

diff  --git a/polly/lib/CMakeLists.txt b/polly/lib/CMakeLists.txt
index e754a3103a12..2b9a77b93926 100644
--- a/polly/lib/CMakeLists.txt
+++ b/polly/lib/CMakeLists.txt
@@ -21,6 +21,34 @@ if (MSVC_IDE OR XCODE)
   file(GLOB_RECURSE POLLY_HEADER_FILES "${POLLY_SOURCE_DIR}/include/polly/*.h")
 endif ()
 
+set(POLLY_COMPONENTS
+    Support
+    Core
+    ScalarOpts
+    InstCombine
+    TransformUtils
+    Analysis
+    ipo
+    MC
+    Passes
+    Linker
+    IRReader
+    Analysis
+    # The libraries below are required for darwin: http://PR26392
+    BitReader
+    MCParser
+    Object
+    ProfileData
+    Target
+    Vectorize
+)
+
+# Polly-ACC requires the NVPTX backend to work. Ask LLVM about its libraries.
+if (GPU_CODEGEN)
+  # This call emits an error if they NVPTX backend is not enable.
+  list(APPEND POLLY_COMPONENTS NVPTX)
+endif ()
+
 # Use an object-library to add the same files to multiple libs without requiring
 # the sources them to be recompiled for each of them.
 add_llvm_pass_plugin(Polly
@@ -71,6 +99,9 @@ add_llvm_pass_plugin(Polly
   Transform/RewriteByReferenceParameters.cpp
   Transform/ScopInliner.cpp
   ${POLLY_HEADER_FILES}
+
+  LINK_COMPONENTS
+  ${POLLY_COMPONENTS}
   )
 set_target_properties(obj.Polly PROPERTIES FOLDER "Polly")
 set_target_properties(Polly PROPERTIES FOLDER "Polly")
@@ -99,45 +130,7 @@ if (GPU_CODEGEN)
   target_link_libraries(Polly PUBLIC PollyPPCG)
 endif ()
 
-
-# Polly-ACC requires the NVPTX backend to work. Ask LLVM about its libraries.
-set(nvptx_libs)
-if (GPU_CODEGEN)
-  # This call emits an error if they NVPTX backend is not enable.
-  llvm_map_components_to_libnames(nvptx_libs NVPTX)
-endif ()
-
-if (LLVM_LINK_LLVM_DYLIB AND NOT LLVM_POLLY_LINK_INTO_TOOLS)
-  # The shlib/dylib contains all the LLVM components
-  # (including NVPTX is enabled) already. Adding them to target_link_libraries
-  # would cause them being twice in the address space
-  # (their LLVM*.a/so and their copies in libLLVM.so)
-  # which results in errors when the two instances try to register the same
-  # command-line switches.
-  target_link_libraries(Polly PUBLIC LLVM)
-else ()
-  target_link_libraries(Polly PUBLIC
-    LLVMSupport
-    LLVMCore
-    LLVMScalarOpts
-    LLVMInstCombine
-    LLVMTransformUtils
-    LLVMAnalysis
-    LLVMipo
-    LLVMMC
-    LLVMPasses
-    LLVMLinker
-    LLVMIRReader
-    ${nvptx_libs}
-    # The libraries below are required for darwin: http://PR26392
-    LLVMBitReader
-    LLVMMCParser
-    LLVMObject
-    LLVMProfileData
-    LLVMTarget
-    LLVMVectorize
-    )
-
+if (NOT LLVM_LINK_LLVM_DYLIB AND NOT LLVM_POLLY_LINK_INTO_TOOLS)
     # Polly-ACC requires the NVPTX target to be present in the executable it is linked to
     set_property(TARGET bugpoint APPEND PROPERTY LINK_LIBRARIES LLVMTarget)
 endif ()


        


More information about the llvm-commits mailing list