[PATCH] D74757: Fix compiler extension in standalone mode
This revision was automatically updated to reflect the committed changes. Closed by commit rG3a0f6e699bb6: Fix compiler extension in standalone mode (authored by serge-sans-paille). Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D74757/new/ https://reviews.llvm.org/D74757 Files: clang/CMakeLists.txt llvm/CMakeLists.txt llvm/cmake/modules/AddLLVM.cmake llvm/cmake/modules/CMakeLists.txt Index: llvm/cmake/modules/CMakeLists.txt === --- llvm/cmake/modules/CMakeLists.txt +++ llvm/cmake/modules/CMakeLists.txt @@ -136,6 +136,7 @@ FILES_MATCHING PATTERN *.cmake PATTERN .svn EXCLUDE PATTERN LLVMConfig.cmake EXCLUDE +PATTERN LLVMConfigExtensions.cmake EXCLUDE PATTERN LLVMConfigVersion.cmake EXCLUDE PATTERN LLVM-Config.cmake EXCLUDE PATTERN GetHostTriple.cmake EXCLUDE) Index: llvm/cmake/modules/AddLLVM.cmake === --- llvm/cmake/modules/AddLLVM.cmake +++ llvm/cmake/modules/AddLLVM.cmake @@ -878,63 +878,62 @@ if (TARGET intrinsics_gen) add_dependencies(obj.${name} intrinsics_gen) endif() -message(STATUS "Registering ${name} as a pass plugin (static build: ${LLVM_${name_upper}_LINK_INTO_TOOLS})") -set_property(GLOBAL APPEND PROPERTY LLVM_COMPILE_EXTENSIONS ${name}) +set_property(GLOBAL APPEND PROPERTY LLVM_STATIC_EXTENSIONS ${name}) elseif(NOT ARG_NO_MODULE) add_llvm_library(${name} MODULE ${ARG_UNPARSED_ARGUMENTS}) else() add_llvm_library(${name} OBJECT ${ARG_UNPARSED_ARGUMENTS}) endif() + message(STATUS "Registering ${name} as a pass plugin (static build: ${LLVM_${name_upper}_LINK_INTO_TOOLS})") endfunction(add_llvm_pass_plugin) -# process_llvm_pass_plugins([NO_GEN]) +# process_llvm_pass_plugins([GEN_CONFIG]) # # Correctly set lib dependencies between plugins and tools, based on tools # registered with the ENABLE_PLUGINS option. # -# Unless NO_GEN option is set, also generate X Macro file for extension +# if GEN_CONFIG option is set, also generate X Macro file for extension # handling. It provides a HANDLE_EXTENSION(extension_namespace, ExtensionProject) # call for each extension allowing client code to define # HANDLE_EXTENSION to have a specific code be run for each extension. # function(process_llvm_pass_plugins) cmake_parse_arguments(ARG - "NO_GEN" "" "" + "GEN_CONFIG" "" "" ${ARGN}) + if(ARG_GEN_CONFIG) + get_property(LLVM_STATIC_EXTENSIONS GLOBAL PROPERTY LLVM_STATIC_EXTENSIONS) + else() + include(LLVMConfigExtensions) + endif() + # Add static plugins to each plugin target. - get_property(LLVM_EXTENSIONS GLOBAL PROPERTY LLVM_COMPILE_EXTENSIONS) - foreach(llvm_extension ${LLVM_EXTENSIONS}) -string(TOUPPER ${llvm_extension} llvm_extension_upper) -string(TOLOWER ${llvm_extension} llvm_extension_lower) - -if(LLVM_${llvm_extension_upper}_LINK_INTO_TOOLS) - get_property(llvm_plugin_targets GLOBAL PROPERTY LLVM_PLUGIN_TARGETS) - foreach(llvm_plugin_target ${llvm_plugin_targets}) -set_property(TARGET ${llvm_plugin_target} APPEND PROPERTY LINK_LIBRARIES ${llvm_extension}) -set_property(TARGET ${llvm_plugin_target} APPEND PROPERTY INTERFACE_LINK_LIBRARIES ${llvm_extension}) - endforeach() -else() - add_llvm_library(${llvm_extension_lower} MODULE obj.${llvm_extension_lower}) -endif() + foreach(llvm_extension ${LLVM_STATIC_EXTENSIONS}) +get_property(llvm_plugin_targets GLOBAL PROPERTY LLVM_PLUGIN_TARGETS) +foreach(llvm_plugin_target ${llvm_plugin_targets}) + set_property(TARGET ${llvm_plugin_target} APPEND PROPERTY LINK_LIBRARIES ${llvm_extension}) + set_property(TARGET ${llvm_plugin_target} APPEND PROPERTY INTERFACE_LINK_LIBRARIES ${llvm_extension}) +endforeach() endforeach() - # Eventually generate the extension header. - if(NOT ARG_NO_GEN) - file(WRITE "${LLVM_BINARY_DIR}/include/llvm/Support/Extension.def.tmp" "//extension handlers\n") - foreach(llvm_extension ${LLVM_EXTENSIONS}) -string(TOLOWER ${llvm_extension} llvm_extension_lower) - -string(TOUPPER ${llvm_extension} llvm_extension_upper) -string(SUBSTRING ${llvm_extension_upper} 0 1 llvm_extension_upper_first) -string(SUBSTRING ${llvm_extension_lower} 1 -1 llvm_extension_lower_tail) -string(CONCAT llvm_extension_project ${llvm_extension_upper_first} ${llvm_extension_lower_tail}) - -if(LLVM_${llvm_extension_upper}_LINK_INTO_TOOLS) - file(APPEND "${LLVM_BINARY_DIR}/include/llvm/Support/Extension.def.tmp" "HANDLE_EXTENSION(${llvm_extension_project})\n") -endif() + # Eventually generate the extension header, and store config to a cmake file + # for usage in third-party configuration. + if(ARG_GEN_CONFIG) + set(LLVM_INSTALL_PACKAGE_DIR lib${LLVM_LIBDIR_SUFFIX}/cmake/llvm) +
[PATCH] D74757: Fix compiler extension in standalone mode
Keruspe accepted this revision. Keruspe added a comment. This revision is now accepted and ready to land. Works fine with 10.0.0rc2 and related patches applied, thanks! Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D74757/new/ https://reviews.llvm.org/D74757 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D74757: Fix compiler extension in standalone mode
serge-sans-paille updated this revision to Diff 245327. serge-sans-paille added a comment. Take @Meinersbur review into account. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D74757/new/ https://reviews.llvm.org/D74757 Files: clang/CMakeLists.txt llvm/CMakeLists.txt llvm/cmake/modules/AddLLVM.cmake llvm/cmake/modules/CMakeLists.txt Index: llvm/cmake/modules/CMakeLists.txt === --- llvm/cmake/modules/CMakeLists.txt +++ llvm/cmake/modules/CMakeLists.txt @@ -136,6 +136,7 @@ FILES_MATCHING PATTERN *.cmake PATTERN .svn EXCLUDE PATTERN LLVMConfig.cmake EXCLUDE +PATTERN LLVMConfigExtensions.cmake EXCLUDE PATTERN LLVMConfigVersion.cmake EXCLUDE PATTERN LLVM-Config.cmake EXCLUDE PATTERN GetHostTriple.cmake EXCLUDE) Index: llvm/cmake/modules/AddLLVM.cmake === --- llvm/cmake/modules/AddLLVM.cmake +++ llvm/cmake/modules/AddLLVM.cmake @@ -873,63 +873,62 @@ if (TARGET intrinsics_gen) add_dependencies(obj.${name} intrinsics_gen) endif() -message(STATUS "Registering ${name} as a pass plugin (static build: ${LLVM_${name_upper}_LINK_INTO_TOOLS})") -set_property(GLOBAL APPEND PROPERTY LLVM_COMPILE_EXTENSIONS ${name}) +set_property(GLOBAL APPEND PROPERTY LLVM_STATIC_EXTENSIONS ${name}) elseif(NOT ARG_NO_MODULE) add_llvm_library(${name} MODULE ${ARG_UNPARSED_ARGUMENTS}) else() add_llvm_library(${name} OBJECT ${ARG_UNPARSED_ARGUMENTS}) endif() + message(STATUS "Registering ${name} as a pass plugin (static build: ${LLVM_${name_upper}_LINK_INTO_TOOLS})") endfunction(add_llvm_pass_plugin) -# process_llvm_pass_plugins([NO_GEN]) +# process_llvm_pass_plugins([GEN_CONFIG]) # # Correctly set lib dependencies between plugins and tools, based on tools # registered with the ENABLE_PLUGINS option. # -# Unless NO_GEN option is set, also generate X Macro file for extension +# if GEN_CONFIG option is set, also generate X Macro file for extension # handling. It provides a HANDLE_EXTENSION(extension_namespace, ExtensionProject) # call for each extension allowing client code to define # HANDLE_EXTENSION to have a specific code be run for each extension. # function(process_llvm_pass_plugins) cmake_parse_arguments(ARG - "NO_GEN" "" "" + "GEN_CONFIG" "" "" ${ARGN}) + if(ARG_GEN_CONFIG) + get_property(LLVM_STATIC_EXTENSIONS GLOBAL PROPERTY LLVM_STATIC_EXTENSIONS) + else() + include(LLVMConfigExtensions) + endif() + # Add static plugins to each plugin target. - get_property(LLVM_EXTENSIONS GLOBAL PROPERTY LLVM_COMPILE_EXTENSIONS) - foreach(llvm_extension ${LLVM_EXTENSIONS}) -string(TOUPPER ${llvm_extension} llvm_extension_upper) -string(TOLOWER ${llvm_extension} llvm_extension_lower) - -if(LLVM_${llvm_extension_upper}_LINK_INTO_TOOLS) - get_property(llvm_plugin_targets GLOBAL PROPERTY LLVM_PLUGIN_TARGETS) - foreach(llvm_plugin_target ${llvm_plugin_targets}) -set_property(TARGET ${llvm_plugin_target} APPEND PROPERTY LINK_LIBRARIES ${llvm_extension}) -set_property(TARGET ${llvm_plugin_target} APPEND PROPERTY INTERFACE_LINK_LIBRARIES ${llvm_extension}) - endforeach() -else() - add_llvm_library(${llvm_extension_lower} MODULE obj.${llvm_extension_lower}) -endif() + foreach(llvm_extension ${LLVM_STATIC_EXTENSIONS}) +get_property(llvm_plugin_targets GLOBAL PROPERTY LLVM_PLUGIN_TARGETS) +foreach(llvm_plugin_target ${llvm_plugin_targets}) + set_property(TARGET ${llvm_plugin_target} APPEND PROPERTY LINK_LIBRARIES ${llvm_extension}) + set_property(TARGET ${llvm_plugin_target} APPEND PROPERTY INTERFACE_LINK_LIBRARIES ${llvm_extension}) +endforeach() endforeach() - # Eventually generate the extension header. - if(NOT ARG_NO_GEN) - file(WRITE "${LLVM_BINARY_DIR}/include/llvm/Support/Extension.def.tmp" "//extension handlers\n") - foreach(llvm_extension ${LLVM_EXTENSIONS}) -string(TOLOWER ${llvm_extension} llvm_extension_lower) - -string(TOUPPER ${llvm_extension} llvm_extension_upper) -string(SUBSTRING ${llvm_extension_upper} 0 1 llvm_extension_upper_first) -string(SUBSTRING ${llvm_extension_lower} 1 -1 llvm_extension_lower_tail) -string(CONCAT llvm_extension_project ${llvm_extension_upper_first} ${llvm_extension_lower_tail}) - -if(LLVM_${llvm_extension_upper}_LINK_INTO_TOOLS) - file(APPEND "${LLVM_BINARY_DIR}/include/llvm/Support/Extension.def.tmp" "HANDLE_EXTENSION(${llvm_extension_project})\n") -endif() + # Eventually generate the extension header, and store config to a cmake file + # for usage in third-party configuration. + if(ARG_GEN_CONFIG) + set(LLVM_INSTALL_PACKAGE_DIR lib${LLVM_LIBDIR_SUFFIX}/cmake/llvm) + set(llvm_cmake_builddir
[PATCH] D74757: Fix compiler extension in standalone mode
Meinersbur added a comment. The Windows pre-merge check seem to have failed? Comment at: llvm/cmake/modules/AddLLVM.cmake:886 # process_llvm_pass_plugins([NO_GEN]) # Change to `[GEN_CONFIG]` Comment at: llvm/cmake/modules/LLVMConfig.cmake.in:115-116 include(${LLVM_CMAKE_DIR}/LLVM-Config.cmake) + + [nit] unrelated whitespace change Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D74757/new/ https://reviews.llvm.org/D74757 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D74757: Fix compiler extension in standalone mode
serge-sans-paille added a comment. Tested without standalone build with polly linked statically and dynamically with success. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D74757/new/ https://reviews.llvm.org/D74757 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D74757: Fix compiler extension in standalone mode
serge-sans-paille added a comment. I still need to test many configurations, I'll report here. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D74757/new/ https://reviews.llvm.org/D74757 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D74757: Fix compiler extension in standalone mode
serge-sans-paille created this revision. serge-sans-paille added reviewers: Meinersbur, Keruspe. Herald added subscribers: llvm-commits, cfe-commits, mgorny. Herald added projects: clang, LLVM. serge-sans-paille added a comment. I still need to test many configurations, I'll report here. Use a dedicated cmake file to store the extension configured within LLVM. This patch is related to https://reviews.llvm.org/D74602 Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D74757 Files: clang/CMakeLists.txt llvm/CMakeLists.txt llvm/cmake/modules/AddLLVM.cmake llvm/cmake/modules/CMakeLists.txt llvm/cmake/modules/LLVMConfig.cmake.in Index: llvm/cmake/modules/LLVMConfig.cmake.in === --- llvm/cmake/modules/LLVMConfig.cmake.in +++ llvm/cmake/modules/LLVMConfig.cmake.in @@ -112,3 +112,5 @@ set_property(GLOBAL PROPERTY LLVM_TARGETS_CONFIGURED On) include(${LLVM_CMAKE_DIR}/LLVM-Config.cmake) + + Index: llvm/cmake/modules/CMakeLists.txt === --- llvm/cmake/modules/CMakeLists.txt +++ llvm/cmake/modules/CMakeLists.txt @@ -136,6 +136,7 @@ FILES_MATCHING PATTERN *.cmake PATTERN .svn EXCLUDE PATTERN LLVMConfig.cmake EXCLUDE +PATTERN LLVMConfigExtensions.cmake EXCLUDE PATTERN LLVMConfigVersion.cmake EXCLUDE PATTERN LLVM-Config.cmake EXCLUDE PATTERN GetHostTriple.cmake EXCLUDE) Index: llvm/cmake/modules/AddLLVM.cmake === --- llvm/cmake/modules/AddLLVM.cmake +++ llvm/cmake/modules/AddLLVM.cmake @@ -873,13 +873,13 @@ if (TARGET intrinsics_gen) add_dependencies(obj.${name} intrinsics_gen) endif() -message(STATUS "Registering ${name} as a pass plugin (static build: ${LLVM_${name_upper}_LINK_INTO_TOOLS})") -set_property(GLOBAL APPEND PROPERTY LLVM_COMPILE_EXTENSIONS ${name}) +set_property(GLOBAL APPEND PROPERTY LLVM_STATIC_EXTENSIONS ${name}) elseif(NOT ARG_NO_MODULE) add_llvm_library(${name} MODULE ${ARG_UNPARSED_ARGUMENTS}) else() add_llvm_library(${name} OBJECT ${ARG_UNPARSED_ARGUMENTS}) endif() + message(STATUS "Registering ${name} as a pass plugin (static build: ${LLVM_${name_upper}_LINK_INTO_TOOLS})") endfunction(add_llvm_pass_plugin) @@ -888,48 +888,47 @@ # Correctly set lib dependencies between plugins and tools, based on tools # registered with the ENABLE_PLUGINS option. # -# Unless NO_GEN option is set, also generate X Macro file for extension +# if GEN_CONFIG option is set, also generate X Macro file for extension # handling. It provides a HANDLE_EXTENSION(extension_namespace, ExtensionProject) # call for each extension allowing client code to define # HANDLE_EXTENSION to have a specific code be run for each extension. # function(process_llvm_pass_plugins) cmake_parse_arguments(ARG - "NO_GEN" "" "" + "GEN_CONFIG" "" "" ${ARGN}) + if(ARG_GEN_CONFIG) + get_property(LLVM_STATIC_EXTENSIONS GLOBAL PROPERTY LLVM_STATIC_EXTENSIONS) + else() + include(LLVMConfigExtensions) + endif() + # Add static plugins to each plugin target. - get_property(LLVM_EXTENSIONS GLOBAL PROPERTY LLVM_COMPILE_EXTENSIONS) - foreach(llvm_extension ${LLVM_EXTENSIONS}) -string(TOUPPER ${llvm_extension} llvm_extension_upper) -string(TOLOWER ${llvm_extension} llvm_extension_lower) - -if(LLVM_${llvm_extension_upper}_LINK_INTO_TOOLS) - get_property(llvm_plugin_targets GLOBAL PROPERTY LLVM_PLUGIN_TARGETS) - foreach(llvm_plugin_target ${llvm_plugin_targets}) -set_property(TARGET ${llvm_plugin_target} APPEND PROPERTY LINK_LIBRARIES ${llvm_extension}) -set_property(TARGET ${llvm_plugin_target} APPEND PROPERTY INTERFACE_LINK_LIBRARIES ${llvm_extension}) - endforeach() -else() - add_llvm_library(${llvm_extension_lower} MODULE obj.${llvm_extension_lower}) -endif() + foreach(llvm_extension ${LLVM_STATIC_EXTENSIONS}) +get_property(llvm_plugin_targets GLOBAL PROPERTY LLVM_PLUGIN_TARGETS) +foreach(llvm_plugin_target ${llvm_plugin_targets}) + set_property(TARGET ${llvm_plugin_target} APPEND PROPERTY LINK_LIBRARIES ${llvm_extension}) + set_property(TARGET ${llvm_plugin_target} APPEND PROPERTY INTERFACE_LINK_LIBRARIES ${llvm_extension}) +endforeach() endforeach() - # Eventually generate the extension header. - if(NOT ARG_NO_GEN) - file(WRITE "${LLVM_BINARY_DIR}/include/llvm/Support/Extension.def.tmp" "//extension handlers\n") - foreach(llvm_extension ${LLVM_EXTENSIONS}) -string(TOLOWER ${llvm_extension} llvm_extension_lower) - -string(TOUPPER ${llvm_extension} llvm_extension_upper) -string(SUBSTRING ${llvm_extension_upper} 0 1 llvm_extension_upper_first) -string(SUBSTRING ${llvm_extension_lower} 1 -1 llvm_extension_lower_tail) -string(CONCAT llvm_extension_project