Skip to content

Commit 112ee9d

Browse files
author
serge-sans-paille
committed
Fix compiler extension in standalone mode
1 parent 3fe7b7c commit 112ee9d

File tree

5 files changed

+36
-34
lines changed

5 files changed

+36
-34
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: 31 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -873,13 +873,13 @@ function(add_llvm_pass_plugin name)
873873
if (TARGET intrinsics_gen)
874874
add_dependencies(obj.${name} intrinsics_gen)
875875
endif()
876-
message(STATUS "Registering ${name} as a pass plugin (static build: ${LLVM_${name_upper}_LINK_INTO_TOOLS})")
877-
set_property(GLOBAL APPEND PROPERTY LLVM_COMPILE_EXTENSIONS ${name})
876+
set_property(GLOBAL APPEND PROPERTY LLVM_STATIC_EXTENSIONS ${name})
878877
elseif(NOT ARG_NO_MODULE)
879878
add_llvm_library(${name} MODULE ${ARG_UNPARSED_ARGUMENTS})
880879
else()
881880
add_llvm_library(${name} OBJECT ${ARG_UNPARSED_ARGUMENTS})
882881
endif()
882+
message(STATUS "Registering ${name} as a pass plugin (static build: ${LLVM_${name_upper}_LINK_INTO_TOOLS})")
883883

884884
endfunction(add_llvm_pass_plugin)
885885

@@ -888,48 +888,47 @@ endfunction(add_llvm_pass_plugin)
888888
# Correctly set lib dependencies between plugins and tools, based on tools
889889
# registered with the ENABLE_PLUGINS option.
890890
#
891-
# Unless NO_GEN option is set, also generate X Macro file for extension
891+
# if GEN_CONFIG option is set, also generate X Macro file for extension
892892
# handling. It provides a HANDLE_EXTENSION(extension_namespace, ExtensionProject)
893893
# call for each extension allowing client code to define
894894
# HANDLE_EXTENSION to have a specific code be run for each extension.
895895
#
896896
function(process_llvm_pass_plugins)
897897
cmake_parse_arguments(ARG
898-
"NO_GEN" "" ""
898+
"GEN_CONFIG" "" ""
899899
${ARGN})
900900

901+
if(ARG_GEN_CONFIG)
902+
get_property(LLVM_STATIC_EXTENSIONS GLOBAL PROPERTY LLVM_STATIC_EXTENSIONS)
903+
else()
904+
include(LLVMConfigExtensions)
905+
endif()
906+
901907
# Add static plugins to each plugin target.
902-
get_property(LLVM_EXTENSIONS GLOBAL PROPERTY LLVM_COMPILE_EXTENSIONS)
903-
foreach(llvm_extension ${LLVM_EXTENSIONS})
904-
string(TOUPPER ${llvm_extension} llvm_extension_upper)
905-
string(TOLOWER ${llvm_extension} llvm_extension_lower)
906-
907-
if(LLVM_${llvm_extension_upper}_LINK_INTO_TOOLS)
908-
get_property(llvm_plugin_targets GLOBAL PROPERTY LLVM_PLUGIN_TARGETS)
909-
foreach(llvm_plugin_target ${llvm_plugin_targets})
910-
set_property(TARGET ${llvm_plugin_target} APPEND PROPERTY LINK_LIBRARIES ${llvm_extension})
911-
set_property(TARGET ${llvm_plugin_target} APPEND PROPERTY INTERFACE_LINK_LIBRARIES ${llvm_extension})
912-
endforeach()
913-
else()
914-
add_llvm_library(${llvm_extension_lower} MODULE obj.${llvm_extension_lower})
915-
endif()
908+
foreach(llvm_extension ${LLVM_STATIC_EXTENSIONS})
909+
get_property(llvm_plugin_targets GLOBAL PROPERTY LLVM_PLUGIN_TARGETS)
910+
foreach(llvm_plugin_target ${llvm_plugin_targets})
911+
set_property(TARGET ${llvm_plugin_target} APPEND PROPERTY LINK_LIBRARIES ${llvm_extension})
912+
set_property(TARGET ${llvm_plugin_target} APPEND PROPERTY INTERFACE_LINK_LIBRARIES ${llvm_extension})
913+
endforeach()
916914
endforeach()
917915

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

929+
file(WRITE "${LLVM_BINARY_DIR}/include/llvm/Support/Extension.def.tmp" "//extension handlers\n")
930+
foreach(llvm_extension ${LLVM_STATIC_EXTENSIONS})
931+
file(APPEND "${LLVM_BINARY_DIR}/include/llvm/Support/Extension.def.tmp" "HANDLE_EXTENSION(${llvm_extension})\n")
933932
endforeach()
934933
file(APPEND "${LLVM_BINARY_DIR}/include/llvm/Support/Extension.def.tmp" "#undef HANDLE_EXTENSION\n")
935934

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)

llvm/cmake/modules/LLVMConfig.cmake.in

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,3 +112,5 @@ endif()
112112

113113
set_property(GLOBAL PROPERTY LLVM_TARGETS_CONFIGURED On)
114114
include(${LLVM_CMAKE_DIR}/LLVM-Config.cmake)
115+
116+

0 commit comments

Comments
 (0)