forked from OSchip/llvm-project
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
This commit is contained in:
parent
abfa27e4f0
commit
346de9b672
|
@ -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
|
||||
|
|
|
@ -1,23 +1,13 @@
|
|||
if(LLVM_BYE_LINK_INTO_TOOLS)
|
||||
message(WARNING "Setting LLVM_BYE_LINK_INTO_TOOLS=ON only makes sense for testing purpose")
|
||||
endif()
|
||||
|
||||
add_llvm_pass_plugin(Bye
|
||||
Bye.cpp
|
||||
DEPENDS
|
||||
intrinsics_gen
|
||||
BUILDTREE_ONLY
|
||||
)
|
||||
Bye.cpp
|
||||
DEPENDS
|
||||
intrinsics_gen
|
||||
BUILDTREE_ONLY
|
||||
)
|
||||
|
||||
if (LLVM_LINK_LLVM_DYLIB)
|
||||
target_link_libraries(Bye PUBLIC LLVM)
|
||||
else()
|
||||
target_link_libraries(Bye
|
||||
PUBLIC
|
||||
LLVMSupport
|
||||
LLVMCore
|
||||
LLVMipo
|
||||
LLVMPasses
|
||||
)
|
||||
endif()
|
||||
|
||||
if( LLVM_BUILD_EXAMPLES )
|
||||
install(TARGETS ${name} RUNTIME DESTINATION examples)
|
||||
endif()
|
||||
install(TARGETS ${name} RUNTIME DESTINATION examples)
|
||||
set_target_properties(${name} PROPERTIES FOLDER "Examples")
|
||||
|
|
|
@ -200,13 +200,13 @@ if config.has_plugins:
|
|||
if config.build_examples:
|
||||
config.available_features.add('examples')
|
||||
|
||||
if config.linked_bye_extension and config.build_examples:
|
||||
if config.linked_bye_extension:
|
||||
config.substitutions.append(('%llvmcheckext', 'CHECK-EXT'))
|
||||
config.substitutions.append(('%loadbye', ''))
|
||||
else:
|
||||
config.substitutions.append(('%llvmcheckext', 'CHECK-NOEXT'))
|
||||
config.substitutions.append(('%loadbye',
|
||||
'-load={}/libBye{}'.format(config.llvm_shlib_dir,
|
||||
'-load={}/Bye{}'.format(config.llvm_shlib_dir,
|
||||
config.llvm_shlib_ext)))
|
||||
|
||||
# Static libraries are not built if BUILD_SHARED_LIBS is ON.
|
||||
|
|
|
@ -24,6 +24,7 @@ endif ()
|
|||
# Use an object-library to add the same files to multiple libs without requiring
|
||||
# the sources them to be recompiled for each of them.
|
||||
add_llvm_pass_plugin(Polly
|
||||
NO_MODULE
|
||||
Analysis/DependenceInfo.cpp
|
||||
Analysis/PolyhedralInfo.cpp
|
||||
Analysis/ScopDetection.cpp
|
||||
|
|
Loading…
Reference in New Issue