summaryrefslogtreecommitdiffstats
path: root/llvm/cmake/modules
diff options
context:
space:
mode:
authorserge-sans-paille <sguelton@redhat.com>2020-01-10 10:05:30 +0100
committerserge-sans-paille <sguelton@redhat.com>2020-01-10 10:10:20 +0100
commit346de9b67228f42eb9b55fa3b426b5dedfdb1d40 (patch)
treed7c3e318b3af41b1d65bf2863bb4c795d382394b /llvm/cmake/modules
parentabfa27e4f04dd84774bcfe15783942e21be391a5 (diff)
downloadbcm5719-llvm-346de9b67228f42eb9b55fa3b426b5dedfdb1d40.tar.gz
bcm5719-llvm-346de9b67228f42eb9b55fa3b426b5dedfdb1d40.zip
Fix several issues with compiler extensions
- Update documentation now that the move to monorepo has been made - Do not tie compiler extension testing to LLVM_BUILD_EXAMPLES - No need to specify LLVM libraries for plugins - Add NO_MODULE option to match Polly specific requirements (i.e. building the module *and* linking it statically) - Issue a warning when building the compiler extension with LLVM_BYE_LINK_INTO_TOOLS=ON, as it modifies the behavior of clang, which only makes sense for testing purpose. Still mark llvm/test/Feature/load_extension.ll as XFAIL because of a ManagedStatic dependency that's going to be fixed in a seperate commit. Differential Revision: https://reviews.llvm.org/D72327
Diffstat (limited to 'llvm/cmake/modules')
-rw-r--r--llvm/cmake/modules/AddLLVM.cmake36
1 files changed, 22 insertions, 14 deletions
diff --git a/llvm/cmake/modules/AddLLVM.cmake b/llvm/cmake/modules/AddLLVM.cmake
index 75e0f10d68a..fce36ba2125 100644
--- a/llvm/cmake/modules/AddLLVM.cmake
+++ b/llvm/cmake/modules/AddLLVM.cmake
@@ -847,32 +847,40 @@ macro(add_llvm_executable name)
llvm_codesign(${name} ENTITLEMENTS ${ARG_ENTITLEMENTS} BUNDLE_PATH ${ARG_BUNDLE_PATH})
endmacro(add_llvm_executable name)
-# add_llvm_pass_plugin(name)
+# add_llvm_pass_plugin(name [NO_MODULE] ...)
# Add ${name} as an llvm plugin.
# If option LLVM_${name_upper}_LINK_INTO_TOOLS is set to ON, the plugin is registered statically.
# Otherwise a pluggable shared library is registered.
+#
+# If NO_MODULE is specified, when option LLVM_${name_upper}_LINK_INTO_TOOLS is set to OFF,
+# only an object library is built, and no module is built. This is specific to the Polly use case.
function(add_llvm_pass_plugin name)
+ cmake_parse_arguments(ARG
+ "NO_MODULE" "" ""
+ ${ARGN})
string(TOUPPER ${name} name_upper)
option(LLVM_${name_upper}_LINK_INTO_TOOLS "Statically link ${name} into tools (if available)" OFF)
- # process_llvm_pass_plugins takes care of the actual linking, just create an
- # object library as of now
- add_llvm_library(${name} OBJECT ${ARGN})
-
- if(LLVM_${name_upper}_LINK_INTO_TOOLS)
- target_compile_definitions(${name} PRIVATE LLVM_${name_upper}_LINK_INTO_TOOLS)
- set_property(TARGET ${name} APPEND PROPERTY COMPILE_DEFINITIONS LLVM_LINK_INTO_TOOLS)
- if (TARGET intrinsics_gen)
- add_dependencies(obj.${name} intrinsics_gen)
- endif()
- endif()
-
- message(STATUS "Registering ${name} as a pass plugin (static build: ${LLVM_${name_upper}_LINK_INTO_TOOLS})")
if(LLVM_${name_upper}_LINK_INTO_TOOLS)
+ list(REMOVE_ITEM ARG_UNPARSED_ARGUMENTS BUILDTREE_ONLY)
+ # process_llvm_pass_plugins takes care of the actual linking, just create an
+ # object library as of now
+ add_llvm_library(${name} OBJECT ${ARG_UNPARSED_ARGUMENTS})
+ target_compile_definitions(${name} PRIVATE LLVM_${name_upper}_LINK_INTO_TOOLS)
+ set_property(TARGET ${name} APPEND PROPERTY COMPILE_DEFINITIONS LLVM_LINK_INTO_TOOLS)
+ 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})
+ elseif(NOT ARG_NO_MODULE)
+ add_llvm_library(${name} MODULE ${ARG_UNPARSED_ARGUMENTS})
+ else()
+ add_llvm_library(${name} OBJECT ${ARG_UNPARSED_ARGUMENTS})
endif()
+
endfunction(add_llvm_pass_plugin)
# Generate X Macro file for extension handling. It provides a
OpenPOWER on IntegriCloud