Skip to content

Commit 4b932da

Browse files
serge-sans-pailletstellar
serge-sans-paille
authored andcommitted
Fix compiler extension in standalone mode
Use a dedicated cmake file to store the extension configured within LLVM. That way, a standalone build of clang can load this cmake file and get all the configured standalone extensions. This patch is related to https://reviews.llvm.org/D74602 Differential Revision: https://reviews.llvm.org/D74757 (cherry picked from commit 3a0f6e6)
1 parent 7831c48 commit 4b932da

File tree

4 files changed

+35
-35
lines changed

4 files changed

+35
-35
lines changed

clang/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -864,7 +864,7 @@ add_subdirectory(utils/hmaptool)
864864

865865
if(CLANG_BUILT_STANDALONE)
866866
llvm_distribution_add_targets()
867-
process_llvm_pass_plugins(NO_GEN)
867+
process_llvm_pass_plugins()
868868
endif()
869869

870870
configure_file(

llvm/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1069,7 +1069,7 @@ endif()
10691069
# after all targets are created.
10701070
include(LLVMDistributionSupport)
10711071
llvm_distribution_add_targets()
1072-
process_llvm_pass_plugins()
1072+
process_llvm_pass_plugins(GEN_CONFIG)
10731073

10741074
# This allows us to deploy the Universal CRT DLLs by passing -DCMAKE_INSTALL_UCRT_LIBRARIES=ON to CMake
10751075
if (MSVC AND CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows" AND CMAKE_INSTALL_UCRT_LIBRARIES)

llvm/cmake/modules/AddLLVM.cmake

Lines changed: 32 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -884,63 +884,62 @@ function(add_llvm_pass_plugin name)
884884
if (TARGET intrinsics_gen)
885885
add_dependencies(obj.${name} intrinsics_gen)
886886
endif()
887-
message(STATUS "Registering ${name} as a pass plugin (static build: ${LLVM_${name_upper}_LINK_INTO_TOOLS})")
888-
set_property(GLOBAL APPEND PROPERTY LLVM_COMPILE_EXTENSIONS ${name})
887+
set_property(GLOBAL APPEND PROPERTY LLVM_STATIC_EXTENSIONS ${name})
889888
elseif(NOT ARG_NO_MODULE)
890889
add_llvm_library(${name} MODULE ${ARG_UNPARSED_ARGUMENTS})
891890
else()
892891
add_llvm_library(${name} OBJECT ${ARG_UNPARSED_ARGUMENTS})
893892
endif()
893+
message(STATUS "Registering ${name} as a pass plugin (static build: ${LLVM_${name_upper}_LINK_INTO_TOOLS})")
894894

895895
endfunction(add_llvm_pass_plugin)
896896

897-
# process_llvm_pass_plugins([NO_GEN])
897+
# process_llvm_pass_plugins([GEN_CONFIG])
898898
#
899899
# Correctly set lib dependencies between plugins and tools, based on tools
900900
# registered with the ENABLE_PLUGINS option.
901901
#
902-
# Unless NO_GEN option is set, also generate X Macro file for extension
902+
# if GEN_CONFIG option is set, also generate X Macro file for extension
903903
# handling. It provides a HANDLE_EXTENSION(extension_namespace, ExtensionProject)
904904
# call for each extension allowing client code to define
905905
# HANDLE_EXTENSION to have a specific code be run for each extension.
906906
#
907907
function(process_llvm_pass_plugins)
908908
cmake_parse_arguments(ARG
909-
"NO_GEN" "" ""
909+
"GEN_CONFIG" "" ""
910910
${ARGN})
911911

912+
if(ARG_GEN_CONFIG)
913+
get_property(LLVM_STATIC_EXTENSIONS GLOBAL PROPERTY LLVM_STATIC_EXTENSIONS)
914+
else()
915+
include(LLVMConfigExtensions)
916+
endif()
917+
912918
# Add static plugins to each plugin target.
913-
get_property(LLVM_EXTENSIONS GLOBAL PROPERTY LLVM_COMPILE_EXTENSIONS)
914-
foreach(llvm_extension ${LLVM_EXTENSIONS})
915-
string(TOUPPER ${llvm_extension} llvm_extension_upper)
916-
string(TOLOWER ${llvm_extension} llvm_extension_lower)
917-
918-
if(LLVM_${llvm_extension_upper}_LINK_INTO_TOOLS)
919-
get_property(llvm_plugin_targets GLOBAL PROPERTY LLVM_PLUGIN_TARGETS)
920-
foreach(llvm_plugin_target ${llvm_plugin_targets})
921-
set_property(TARGET ${llvm_plugin_target} APPEND PROPERTY LINK_LIBRARIES ${llvm_extension})
922-
set_property(TARGET ${llvm_plugin_target} APPEND PROPERTY INTERFACE_LINK_LIBRARIES ${llvm_extension})
923-
endforeach()
924-
else()
925-
add_llvm_library(${llvm_extension_lower} MODULE obj.${llvm_extension_lower})
926-
endif()
919+
foreach(llvm_extension ${LLVM_STATIC_EXTENSIONS})
920+
get_property(llvm_plugin_targets GLOBAL PROPERTY LLVM_PLUGIN_TARGETS)
921+
foreach(llvm_plugin_target ${llvm_plugin_targets})
922+
set_property(TARGET ${llvm_plugin_target} APPEND PROPERTY LINK_LIBRARIES ${llvm_extension})
923+
set_property(TARGET ${llvm_plugin_target} APPEND PROPERTY INTERFACE_LINK_LIBRARIES ${llvm_extension})
924+
endforeach()
927925
endforeach()
928926

929-
# Eventually generate the extension header.
930-
if(NOT ARG_NO_GEN)
931-
file(WRITE "${LLVM_BINARY_DIR}/include/llvm/Support/Extension.def.tmp" "//extension handlers\n")
932-
foreach(llvm_extension ${LLVM_EXTENSIONS})
933-
string(TOLOWER ${llvm_extension} llvm_extension_lower)
934-
935-
string(TOUPPER ${llvm_extension} llvm_extension_upper)
936-
string(SUBSTRING ${llvm_extension_upper} 0 1 llvm_extension_upper_first)
937-
string(SUBSTRING ${llvm_extension_lower} 1 -1 llvm_extension_lower_tail)
938-
string(CONCAT llvm_extension_project ${llvm_extension_upper_first} ${llvm_extension_lower_tail})
939-
940-
if(LLVM_${llvm_extension_upper}_LINK_INTO_TOOLS)
941-
file(APPEND "${LLVM_BINARY_DIR}/include/llvm/Support/Extension.def.tmp" "HANDLE_EXTENSION(${llvm_extension_project})\n")
942-
endif()
927+
# Eventually generate the extension header, and store config to a cmake file
928+
# for usage in third-party configuration.
929+
if(ARG_GEN_CONFIG)
930+
set(LLVM_INSTALL_PACKAGE_DIR lib${LLVM_LIBDIR_SUFFIX}/cmake/llvm)
931+
set(llvm_cmake_builddir "${LLVM_BINARY_DIR}/${LLVM_INSTALL_PACKAGE_DIR}")
932+
file(WRITE
933+
"${llvm_cmake_builddir}/LLVMConfigExtensions.cmake"
934+
"set(LLVM_STATIC_EXTENSIONS ${LLVM_STATIC_EXTENSIONS})")
935+
install(FILES
936+
${llvm_cmake_builddir}/LLVMConfigExtensions.cmake
937+
DESTINATION ${LLVM_INSTALL_PACKAGE_DIR}
938+
COMPONENT cmake-exports)
943939

940+
file(WRITE "${LLVM_BINARY_DIR}/include/llvm/Support/Extension.def.tmp" "//extension handlers\n")
941+
foreach(llvm_extension ${LLVM_STATIC_EXTENSIONS})
942+
file(APPEND "${LLVM_BINARY_DIR}/include/llvm/Support/Extension.def.tmp" "HANDLE_EXTENSION(${llvm_extension})\n")
944943
endforeach()
945944
file(APPEND "${LLVM_BINARY_DIR}/include/llvm/Support/Extension.def.tmp" "#undef HANDLE_EXTENSION\n")
946945

llvm/cmake/modules/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY)
136136
FILES_MATCHING PATTERN *.cmake
137137
PATTERN .svn EXCLUDE
138138
PATTERN LLVMConfig.cmake EXCLUDE
139+
PATTERN LLVMConfigExtensions.cmake EXCLUDE
139140
PATTERN LLVMConfigVersion.cmake EXCLUDE
140141
PATTERN LLVM-Config.cmake EXCLUDE
141142
PATTERN GetHostTriple.cmake EXCLUDE)

0 commit comments

Comments
 (0)