[PATCH] D78192: [WIP] tentative support of compiler extension in llvm-config
serge via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Apr 15 03:47:22 PDT 2020
serge-sans-paille created this revision.
serge-sans-paille added a reviewer: Meinersbur.
Herald added subscribers: llvm-commits, mgorny.
Herald added a project: LLVM.
The approach here is to make compiler extension an implicit dependency of the passes component, and dump the actual extension dependency from the cmake target property.
Hopefully fixes https://bugs.llvm.org/show_bug.cgi?id=44870
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D78192
Files:
llvm/cmake/modules/AddLLVM.cmake
llvm/tools/llvm-config/llvm-config.cpp
Index: llvm/tools/llvm-config/llvm-config.cpp
===================================================================
--- llvm/tools/llvm-config/llvm-config.cpp
+++ llvm/tools/llvm-config/llvm-config.cpp
@@ -46,6 +46,10 @@
// create entries for pseudo groups like x86 or all-targets.
#include "LibraryDependencies.inc"
+// Extension also register their dependencies as a dependency of "passes"
+// component.
+#include "ExtensionDependencies.inc"
+
// LinkMode determines what libraries and flags are returned by llvm-config.
enum LinkMode {
// LinkModeAuto will link with the default link mode for the installation,
@@ -127,6 +131,13 @@
}
RequiredLibs.push_back(AC->Library);
}
+ if (Name == "passes") {
+ for (auto const &AvailableExtension : AvailableExtensions) {
+ for (const char *const *Iter = &AvailableExtension.RequiredLibraries[0];
+ *Iter; ++Iter)
+ RequiredLibs.push_back(*Iter);
+ }
+ }
}
/// Compute the list of required libraries for a given list of
Index: llvm/cmake/modules/AddLLVM.cmake
===================================================================
--- llvm/cmake/modules/AddLLVM.cmake
+++ llvm/cmake/modules/AddLLVM.cmake
@@ -953,6 +953,49 @@
"${LLVM_BINARY_DIR}/include/llvm/Support/Extension.def.tmp"
"${LLVM_BINARY_DIR}/include/llvm/Support/Extension.def")
file(REMOVE "${LLVM_BINARY_DIR}/include/llvm/Support/Extension.def.tmp")
+
+ # also generate build information for llvm-config
+ set(llvm_plugin_max_deps_length 0)
+ foreach(llvm_extension ${LLVM_STATIC_EXTENSIONS})
+ get_property(llvm_plugin_deps TARGET ${llvm_extension} PROPERTY LINK_LIBRARIES)
+ list(LENGTH llvm_plugin_deps llvm_plugin_deps_length)
+ if(llvm_plugin_deps_length GREATER llvm_plugin_max_deps_length)
+ set(llvm_plugin_max_deps_length ${llvm_plugin_deps_length})
+ endif()
+ endforeach()
+
+ file(WRITE
+ "${LLVM_BINARY_DIR}/tools/llvm-config/ExtensionDependencies.inc.tmp"
+ "struct { const char* Name; const char* const RequiredLibraries[1 + 1 + ${llvm_plugin_max_deps_length}];} AvailableExtensions[] = {\n")
+ foreach(llvm_extension ${LLVM_STATIC_EXTENSIONS})
+ get_property(llvm_plugin_deps TARGET ${llvm_extension} PROPERTY LINK_LIBRARIES)
+ file(APPEND
+ "${LLVM_BINARY_DIR}/tools/llvm-config/ExtensionDependencies.inc.tmp"
+ "\t{\"${llvm_extension}\", {\"${llvm_extension}\",")
+ foreach(llvm_plugin_dep ${llvm_plugin_deps})
+ STRING(REGEX REPLACE "^-l" "" plugin_name ${llvm_plugin_dep})
+ STRING(REGEX MATCH "^LLVM" is_llvm_lib ${plugin_name})
+ # We don't want to add LLVM library as a dependency (?)
+ if(NOT is_llvm_lib)
+ file(APPEND
+ "${LLVM_BINARY_DIR}/tools/llvm-config/ExtensionDependencies.inc.tmp"
+ "\"${plugin_name}\", ")
+ endif()
+ endforeach()
+ file(APPEND
+ "${LLVM_BINARY_DIR}/tools/llvm-config/ExtensionDependencies.inc.tmp"
+ "nullptr}},\n")
+ endforeach()
+ file(APPEND
+ "${LLVM_BINARY_DIR}/tools/llvm-config/ExtensionDependencies.inc.tmp"
+ "};\n")
+
+ # only replace if there's an actual change
+ execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different
+ "${LLVM_BINARY_DIR}/tools/llvm-config/ExtensionDependencies.inc.tmp"
+ "${LLVM_BINARY_DIR}/tools/llvm-config/ExtensionDependencies.inc")
+ file(REMOVE
+ "${LLVM_BINARY_DIR}/tools/llvm-config/ExtensionDependencies.inc.tmp")
endif()
endfunction()
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D78192.257655.patch
Type: text/x-patch
Size: 3674 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200415/180f6371/attachment.bin>
More information about the llvm-commits
mailing list