Skip to content

Commit 3a0f6e6

Browse files
author
serge-sans-paille
committed
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
1 parent d6d640e commit 3a0f6e6

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
@@ -1075,7 +1075,7 @@ endif()
10751075
# after all targets are created.
10761076
include(LLVMDistributionSupport)
10771077
llvm_distribution_add_targets()
1078-
process_llvm_pass_plugins()
1078+
process_llvm_pass_plugins(GEN_CONFIG)
10791079

10801080
# This allows us to deploy the Universal CRT DLLs by passing -DCMAKE_INSTALL_UCRT_LIBRARIES=ON to CMake
10811081
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
@@ -878,63 +878,62 @@ function(add_llvm_pass_plugin name)
878878
if (TARGET intrinsics_gen)
879879
add_dependencies(obj.${name} intrinsics_gen)
880880
endif()
881-
message(STATUS "Registering ${name} as a pass plugin (static build: ${LLVM_${name_upper}_LINK_INTO_TOOLS})")
882-
set_property(GLOBAL APPEND PROPERTY LLVM_COMPILE_EXTENSIONS ${name})
881+
set_property(GLOBAL APPEND PROPERTY LLVM_STATIC_EXTENSIONS ${name})
883882
elseif(NOT ARG_NO_MODULE)
884883
add_llvm_library(${name} MODULE ${ARG_UNPARSED_ARGUMENTS})
885884
else()
886885
add_llvm_library(${name} OBJECT ${ARG_UNPARSED_ARGUMENTS})
887886
endif()
887+
message(STATUS "Registering ${name} as a pass plugin (static build: ${LLVM_${name_upper}_LINK_INTO_TOOLS})")
888888

889889
endfunction(add_llvm_pass_plugin)
890890

891-
# process_llvm_pass_plugins([NO_GEN])
891+
# process_llvm_pass_plugins([GEN_CONFIG])
892892
#
893893
# Correctly set lib dependencies between plugins and tools, based on tools
894894
# registered with the ENABLE_PLUGINS option.
895895
#
896-
# Unless NO_GEN option is set, also generate X Macro file for extension
896+
# if GEN_CONFIG option is set, also generate X Macro file for extension
897897
# handling. It provides a HANDLE_EXTENSION(extension_namespace, ExtensionProject)
898898
# call for each extension allowing client code to define
899899
# HANDLE_EXTENSION to have a specific code be run for each extension.
900900
#
901901
function(process_llvm_pass_plugins)
902902
cmake_parse_arguments(ARG
903-
"NO_GEN" "" ""
903+
"GEN_CONFIG" "" ""
904904
${ARGN})
905905

906+
if(ARG_GEN_CONFIG)
907+
get_property(LLVM_STATIC_EXTENSIONS GLOBAL PROPERTY LLVM_STATIC_EXTENSIONS)
908+
else()
909+
include(LLVMConfigExtensions)
910+
endif()
911+
906912
# Add static plugins to each plugin target.
907-
get_property(LLVM_EXTENSIONS GLOBAL PROPERTY LLVM_COMPILE_EXTENSIONS)
908-
foreach(llvm_extension ${LLVM_EXTENSIONS})
909-
string(TOUPPER ${llvm_extension} llvm_extension_upper)
910-
string(TOLOWER ${llvm_extension} llvm_extension_lower)
911-
912-
if(LLVM_${llvm_extension_upper}_LINK_INTO_TOOLS)
913-
get_property(llvm_plugin_targets GLOBAL PROPERTY LLVM_PLUGIN_TARGETS)
914-
foreach(llvm_plugin_target ${llvm_plugin_targets})
915-
set_property(TARGET ${llvm_plugin_target} APPEND PROPERTY LINK_LIBRARIES ${llvm_extension})
916-
set_property(TARGET ${llvm_plugin_target} APPEND PROPERTY INTERFACE_LINK_LIBRARIES ${llvm_extension})
917-
endforeach()
918-
else()
919-
add_llvm_library(${llvm_extension_lower} MODULE obj.${llvm_extension_lower})
920-
endif()
913+
foreach(llvm_extension ${LLVM_STATIC_EXTENSIONS})
914+
get_property(llvm_plugin_targets GLOBAL PROPERTY LLVM_PLUGIN_TARGETS)
915+
foreach(llvm_plugin_target ${llvm_plugin_targets})
916+
set_property(TARGET ${llvm_plugin_target} APPEND PROPERTY LINK_LIBRARIES ${llvm_extension})
917+
set_property(TARGET ${llvm_plugin_target} APPEND PROPERTY INTERFACE_LINK_LIBRARIES ${llvm_extension})
918+
endforeach()
921919
endforeach()
922920

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

934+
file(WRITE "${LLVM_BINARY_DIR}/include/llvm/Support/Extension.def.tmp" "//extension handlers\n")
935+
foreach(llvm_extension ${LLVM_STATIC_EXTENSIONS})
936+
file(APPEND "${LLVM_BINARY_DIR}/include/llvm/Support/Extension.def.tmp" "HANDLE_EXTENSION(${llvm_extension})\n")
938937
endforeach()
939938
file(APPEND "${LLVM_BINARY_DIR}/include/llvm/Support/Extension.def.tmp" "#undef HANDLE_EXTENSION\n")
940939

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)