[MLIR] add dependencies for all tablegen targets on 'mlir-headers'

In cmake, dependencies on generated files require some sophistication in the build system.  At build time, files are parsed to determine which headers they depend on and these dependencies are injected into the build system.  This works well with ninja, but has some constraints with the makefile generator.  According to the cmake documentation, this only works reliably within the same directory.

This patch expands the usage of mlir-headers to include all generated headers and adds an mlir-generic-headers target which triggers generation of dialect-independent headers.  These targets are used to express dependencies on generated headers.  This is mostly handled in AddMLIR.cmake and only a few CMakeLists.txt files need to change.

Differential Revision: https://reviews.llvm.org/D79242
This commit is contained in:
Stephen Neuendorffer 2020-04-24 16:42:07 -07:00
parent 57818885be
commit 7add6b6b73
10 changed files with 38 additions and 6 deletions

View File

@ -12,8 +12,13 @@ include(AddMLIR)
# Installing the headers and docs needs to depend on generating any public
# tablegen'd targets.
# mlir-generic-headers are dialect-independent.
add_custom_target(mlir-generic-headers)
set_target_properties(mlir-generic-headers PROPERTIES FOLDER "Misc")
# mlir-headers may be dialect-dependent.
add_custom_target(mlir-headers)
set_target_properties(mlir-headers PROPERTIES FOLDER "Misc")
add_dependencies(mlir-headers mlir-generic-headers)
add_custom_target(mlir-doc)
# Build the CUDA conversions and run according tests if the NVPTX backend

View File

@ -38,17 +38,17 @@ endmacro(add_mlir_library)
# Declare the library associated with a dialect.
function(add_mlir_dialect_library name)
set_property(GLOBAL APPEND PROPERTY MLIR_DIALECT_LIBS ${name})
add_mlir_library(${ARGV})
add_mlir_library(${ARGV} DEPENDS mlir-headers)
endfunction(add_mlir_dialect_library)
# Declare the library associated with a conversion.
function(add_mlir_conversion_library name)
set_property(GLOBAL APPEND PROPERTY MLIR_CONVERSION_LIBS ${name})
add_mlir_library(${ARGV})
add_mlir_library(${ARGV} DEPENDS mlir-headers)
endfunction(add_mlir_conversion_library)
# Declare the library associated with a translation.
function(add_mlir_translation_library name)
set_property(GLOBAL APPEND PROPERTY MLIR_TRANSLATION_LIBS ${name})
add_mlir_library(${ARGV})
add_mlir_library(${ARGV} DEPENDS mlir-headers)
endfunction(add_mlir_translation_library)

View File

@ -29,6 +29,7 @@ add_linalg_ods_gen(LinalgNamedStructuredOpsSpec.tc LinalgNamedStructuredOps)
# Provide a short name for all external dependency that needs to
# include Linalg in ODS
add_custom_target(LinalgOdsGen DEPENDS MLIRLinalgNamedStructuredOpsIncGen)
add_dependencies(mlir-headers LinalgOdsGen)
add_mlir_dialect(LinalgOps linalg)
@ -40,8 +41,10 @@ mlir_tablegen(LinalgStructuredOps.h.inc -gen-op-decls)
mlir_tablegen(LinalgStructuredOps.cpp.inc -gen-op-defs)
add_public_tablegen_target(MLIRLinalgStructuredOpsIncGen)
add_dependencies(MLIRLinalgStructuredOpsIncGen LinalgOdsGen)
add_dependencies(mlir-headers MLIRLinalgStructuredOpsIncGen)
set(LLVM_TARGET_DEFINITIONS LinalgStructuredOpsInterface.td)
mlir_tablegen(LinalgStructuredOpsInterfaces.h.inc -gen-op-interface-decls)
mlir_tablegen(LinalgStructuredOpsInterfaces.cpp.inc -gen-op-interface-defs)
add_public_tablegen_target(MLIRLinalgStructuredOpsInterfaceIncGen)
add_dependencies(mlir-headers MLIRLinalgStructuredOpsInterfaceIncGen)

View File

@ -4,5 +4,6 @@ add_mlir_doc(LoopOps -gen-dialect-doc LoopDialect Dialects/)
set(LLVM_TARGET_DEFINITIONS Passes.td)
mlir_tablegen(Passes.h.inc -gen-pass-decls)
add_public_tablegen_target(MLIRLoopPassIncGen)
add_dependencies(mlir-headers MLIRLoopPassIncGen)
add_mlir_doc(Passes -gen-pass-doc LoopPasses ./)

View File

@ -5,34 +5,41 @@ set(LLVM_TARGET_DEFINITIONS SPIRVBase.td)
mlir_tablegen(SPIRVEnums.h.inc -gen-enum-decls)
mlir_tablegen(SPIRVEnums.cpp.inc -gen-enum-defs)
add_public_tablegen_target(MLIRSPIRVEnumsIncGen)
add_dependencies(mlir-headers MLIRSPIRVEnumsIncGen)
set(LLVM_TARGET_DEFINITIONS SPIRVBase.td)
mlir_tablegen(SPIRVEnumAvailability.h.inc -gen-spirv-enum-avail-decls)
mlir_tablegen(SPIRVEnumAvailability.cpp.inc -gen-spirv-enum-avail-defs)
mlir_tablegen(SPIRVCapabilityImplication.inc -gen-spirv-capability-implication)
add_public_tablegen_target(MLIRSPIRVEnumAvailabilityIncGen)
add_dependencies(mlir-headers MLIRSPIRVEnumAvailabilityIncGen)
set(LLVM_TARGET_DEFINITIONS SPIRVOps.td)
mlir_tablegen(SPIRVAvailability.h.inc -gen-avail-interface-decls)
mlir_tablegen(SPIRVAvailability.cpp.inc -gen-avail-interface-defs)
mlir_tablegen(SPIRVOpAvailabilityImpl.inc -gen-spirv-avail-impls)
add_public_tablegen_target(MLIRSPIRVAvailabilityIncGen)
add_dependencies(mlir-headers MLIRSPIRVAvailabilityIncGen)
set(LLVM_TARGET_DEFINITIONS SPIRVOps.td)
mlir_tablegen(SPIRVSerialization.inc -gen-spirv-serialization)
add_public_tablegen_target(MLIRSPIRVSerializationGen)
add_dependencies(mlir-headers MLIRSPIRVSerializationGen)
set(LLVM_TARGET_DEFINITIONS SPIRVBase.td)
mlir_tablegen(SPIRVOpUtils.inc -gen-spirv-op-utils)
add_public_tablegen_target(MLIRSPIRVOpUtilsGen)
add_dependencies(mlir-headers MLIRSPIRVOpUtilsGen)
set(LLVM_TARGET_DEFINITIONS TargetAndABI.td)
mlir_tablegen(TargetAndABI.h.inc -gen-struct-attr-decls)
mlir_tablegen(TargetAndABI.cpp.inc -gen-struct-attr-defs)
add_public_tablegen_target(MLIRSPIRVTargetAndABIIncGen)
add_dependencies(mlir-headers MLIRSPIRVTargetAndABIIncGen)
set(LLVM_TARGET_DEFINITIONS Passes.td)
mlir_tablegen(Passes.h.inc -gen-pass-decls)
add_public_tablegen_target(MLIRSPIRVPassIncGen)
add_dependencies(mlir-headers MLIRSPIRVPassIncGen)
add_mlir_doc(Passes -gen-pass-doc SPIRVPasses ./)

View File

@ -2,8 +2,10 @@ set(LLVM_TARGET_DEFINITIONS OpAsmInterface.td)
mlir_tablegen(OpAsmInterface.h.inc -gen-op-interface-decls)
mlir_tablegen(OpAsmInterface.cpp.inc -gen-op-interface-defs)
add_public_tablegen_target(MLIROpAsmInterfacesIncGen)
add_dependencies(mlir-generic-headers MLIROpAsmInterfacesIncGen)
set(LLVM_TARGET_DEFINITIONS SymbolInterfaces.td)
mlir_tablegen(SymbolInterfaces.h.inc -gen-op-interface-decls)
mlir_tablegen(SymbolInterfaces.cpp.inc -gen-op-interface-defs)
add_public_tablegen_target(MLIRSymbolInterfacesIncGen)
add_dependencies(mlir-generic-headers MLIRSymbolInterfacesIncGen)

View File

@ -2,33 +2,40 @@ set(LLVM_TARGET_DEFINITIONS CallInterfaces.td)
mlir_tablegen(CallInterfaces.h.inc -gen-op-interface-decls)
mlir_tablegen(CallInterfaces.cpp.inc -gen-op-interface-defs)
add_public_tablegen_target(MLIRCallInterfacesIncGen)
add_dependencies(mlir-generic-headers MLIRCallInterfacesIncGen)
set(LLVM_TARGET_DEFINITIONS ControlFlowInterfaces.td)
mlir_tablegen(ControlFlowInterfaces.h.inc -gen-op-interface-decls)
mlir_tablegen(ControlFlowInterfaces.cpp.inc -gen-op-interface-defs)
add_public_tablegen_target(MLIRControlFlowInterfacesIncGen)
add_dependencies(mlir-generic-headers MLIRControlFlowInterfacesIncGen)
set(LLVM_TARGET_DEFINITIONS DerivedAttributeOpInterface.td)
mlir_tablegen(DerivedAttributeOpInterface.h.inc -gen-op-interface-decls)
mlir_tablegen(DerivedAttributeOpInterface.cpp.inc -gen-op-interface-defs)
add_public_tablegen_target(MLIRDerivedAttributeOpInterfaceIncGen)
add_dependencies(mlir-generic-headers MLIRDerivedAttributeOpInterfaceIncGen)
set(LLVM_TARGET_DEFINITIONS InferTypeOpInterface.td)
mlir_tablegen(InferTypeOpInterface.h.inc -gen-op-interface-decls)
mlir_tablegen(InferTypeOpInterface.cpp.inc -gen-op-interface-defs)
add_public_tablegen_target(MLIRInferTypeOpInterfaceIncGen)
add_dependencies(mlir-generic-headers MLIRInferTypeOpInterfaceIncGen)
set(LLVM_TARGET_DEFINITIONS LoopLikeInterface.td)
mlir_tablegen(LoopLikeInterface.h.inc -gen-op-interface-decls)
mlir_tablegen(LoopLikeInterface.cpp.inc -gen-op-interface-defs)
add_public_tablegen_target(MLIRLoopLikeInterfaceIncGen)
add_dependencies(mlir-generic-headers MLIRLoopLikeInterfaceIncGen)
set(LLVM_TARGET_DEFINITIONS SideEffects.td)
mlir_tablegen(SideEffectInterfaces.h.inc -gen-op-interface-decls)
mlir_tablegen(SideEffectInterfaces.cpp.inc -gen-op-interface-defs)
add_public_tablegen_target(MLIRSideEffectOpInterfacesIncGen)
add_dependencies(mlir-generic-headers MLIRSideEffectOpInterfacesIncGen)
set(LLVM_TARGET_DEFINITIONS ViewLikeInterface.td)
mlir_tablegen(ViewLikeInterface.h.inc -gen-op-interface-decls)
mlir_tablegen(ViewLikeInterface.cpp.inc -gen-op-interface-defs)
add_public_tablegen_target(MLIRViewLikeInterfaceIncGen)
add_dependencies(mlir-generic-headers MLIRViewLikeInterfaceIncGen)

View File

@ -16,6 +16,9 @@ add_mlir_library(MLIRAnalysis
ADDITIONAL_HEADER_DIRS
${MLIR_MAIN_INCLUDE_DIR}/mlir/Analysis
DEPENDS
mlir-generic-headers
)
target_link_libraries(MLIRAnalysis
@ -36,6 +39,9 @@ add_mlir_library(MLIRLoopAnalysis
ADDITIONAL_HEADER_DIRS
${MLIR_MAIN_INCLUDE_DIR}/mlir/Analysis
DEPENDS
mlir-generic-headers
)
target_link_libraries(MLIRLoopAnalysis

View File

@ -7,8 +7,6 @@ add_mlir_dialect_library(MLIRLinalgOps
DEPENDS
intrinsics_gen
)
add_dependencies(MLIRLinalgOps
MLIRLinalgOpsIncGen
MLIRLinalgStructuredOpsIncGen
MLIRLinalgStructuredOpsInterfaceIncGen

View File

@ -5,6 +5,9 @@ add_mlir_library(MLIRParser
ADDITIONAL_HEADER_DIRS
${MLIR_MAIN_INCLUDE_DIR}/mlir/Parser
DEPENDS
mlir-generic-headers
)
target_link_libraries(MLIRParser
PUBLIC