@@ -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
895895endfunction (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#
907907function (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
0 commit comments