diff --git a/mlir/CMakeLists.txt b/mlir/CMakeLists.txt --- a/mlir/CMakeLists.txt +++ b/mlir/CMakeLists.txt @@ -34,9 +34,11 @@ add_subdirectory(include/mlir) add_subdirectory(lib) -add_subdirectory(tools) add_subdirectory(unittests) add_subdirectory(test) +# Tools needs to come late to ensure that MLIR_ALL_LIBS is populated. +# Generally things after this point may depend on MLIR_ALL_LIBS or libMLIR.so. +add_subdirectory(tools) if( LLVM_INCLUDE_EXAMPLES ) add_subdirectory(examples) diff --git a/mlir/cmake/modules/AddMLIR.cmake b/mlir/cmake/modules/AddMLIR.cmake --- a/mlir/cmake/modules/AddMLIR.cmake +++ b/mlir/cmake/modules/AddMLIR.cmake @@ -49,14 +49,20 @@ add_dependencies(mlir-doc ${dialect_doc_filename}DocGen) endfunction() +# Declare a library which can be compiled in libMLIR.so +macro(add_mlir_library name) + set_property(GLOBAL APPEND PROPERTY MLIR_ALL_LIBS ${name}) + add_llvm_library(${ARGV}) +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_llvm_library(${ARGV}) + add_mlir_library(${ARGV}) 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_llvm_library(${ARGV}) + add_mlir_library(${ARGV}) endfunction(add_mlir_conversion_library) diff --git a/mlir/lib/Analysis/CMakeLists.txt b/mlir/lib/Analysis/CMakeLists.txt --- a/mlir/lib/Analysis/CMakeLists.txt +++ b/mlir/lib/Analysis/CMakeLists.txt @@ -12,7 +12,7 @@ Verifier.cpp ) -add_llvm_library(MLIRAnalysis +add_mlir_library(MLIRAnalysis CallGraph.cpp InferTypeOpInterface.cpp Liveness.cpp @@ -35,7 +35,7 @@ LLVMSupport ) -add_llvm_library(MLIRLoopAnalysis +add_mlir_library(MLIRLoopAnalysis AffineAnalysis.cpp AffineStructures.cpp LoopAnalysis.cpp diff --git a/mlir/lib/Dialect/CMakeLists.txt b/mlir/lib/Dialect/CMakeLists.txt --- a/mlir/lib/Dialect/CMakeLists.txt +++ b/mlir/lib/Dialect/CMakeLists.txt @@ -12,12 +12,11 @@ add_subdirectory(StandardOps) add_subdirectory(VectorOps) - set(LLVM_OPTIONAL_SOURCES Traits.cpp ) -add_llvm_library(MLIRDialect +add_mlir_library(MLIRDialect Traits.cpp ADDITIONAL_HEADER_DIRS diff --git a/mlir/lib/EDSC/CMakeLists.txt b/mlir/lib/EDSC/CMakeLists.txt --- a/mlir/lib/EDSC/CMakeLists.txt +++ b/mlir/lib/EDSC/CMakeLists.txt @@ -3,7 +3,7 @@ CoreAPIs.cpp ) -add_llvm_library(MLIREDSC +add_mlir_library(MLIREDSC Builders.cpp ADDITIONAL_HEADER_DIRS @@ -15,7 +15,7 @@ LLVMSupport ) -add_llvm_library(MLIREDSCInterface +add_mlir_library(MLIREDSCInterface CoreAPIs.cpp ADDITIONAL_HEADER_DIRS diff --git a/mlir/lib/ExecutionEngine/CMakeLists.txt b/mlir/lib/ExecutionEngine/CMakeLists.txt --- a/mlir/lib/ExecutionEngine/CMakeLists.txt +++ b/mlir/lib/ExecutionEngine/CMakeLists.txt @@ -6,7 +6,7 @@ ) llvm_map_components_to_libnames(outlibs "nativecodegen" "IPO") -add_llvm_library(MLIRExecutionEngine +add_mlir_library(MLIRExecutionEngine ExecutionEngine.cpp OptUtils.cpp diff --git a/mlir/lib/IR/CMakeLists.txt b/mlir/lib/IR/CMakeLists.txt --- a/mlir/lib/IR/CMakeLists.txt +++ b/mlir/lib/IR/CMakeLists.txt @@ -1,5 +1,5 @@ file(GLOB globbed *.c *.cpp) -add_llvm_library(MLIRIR +add_mlir_library(MLIRIR ${globbed} ADDITIONAL_HEADER_DIRS diff --git a/mlir/lib/Parser/CMakeLists.txt b/mlir/lib/Parser/CMakeLists.txt --- a/mlir/lib/Parser/CMakeLists.txt +++ b/mlir/lib/Parser/CMakeLists.txt @@ -1,4 +1,4 @@ -add_llvm_library(MLIRParser +add_mlir_library(MLIRParser Lexer.cpp Parser.cpp Token.cpp diff --git a/mlir/lib/Pass/CMakeLists.txt b/mlir/lib/Pass/CMakeLists.txt --- a/mlir/lib/Pass/CMakeLists.txt +++ b/mlir/lib/Pass/CMakeLists.txt @@ -1,5 +1,5 @@ file(GLOB globbed *.c *.cpp) -add_llvm_library(MLIRPass +add_mlir_library(MLIRPass ${globbed} ADDITIONAL_HEADER_DIRS diff --git a/mlir/lib/Quantizer/CMakeLists.txt b/mlir/lib/Quantizer/CMakeLists.txt --- a/mlir/lib/Quantizer/CMakeLists.txt +++ b/mlir/lib/Quantizer/CMakeLists.txt @@ -1,5 +1,5 @@ # Support. -add_llvm_library(MLIRQuantizerSupport +add_mlir_library(MLIRQuantizerSupport Support/Configuration.cpp Support/ConstraintAnalysisGraph.cpp Support/Metadata.cpp @@ -19,7 +19,7 @@ ) # Configurations. -add_llvm_library(MLIRQuantizerFxpMathConfig +add_mlir_library(MLIRQuantizerFxpMathConfig Configurations/FxpMathConfig.cpp ADDITIONAL_HEADER_DIRS @@ -38,7 +38,7 @@ ) # Transforms. -add_llvm_library(MLIRQuantizerTransforms +add_mlir_library(MLIRQuantizerTransforms Transforms/AddDefaultStatsTestPass.cpp Transforms/InferQuantizedTypesPass.cpp Transforms/RemoveInstrumentationPass.cpp diff --git a/mlir/lib/Support/CMakeLists.txt b/mlir/lib/Support/CMakeLists.txt --- a/mlir/lib/Support/CMakeLists.txt +++ b/mlir/lib/Support/CMakeLists.txt @@ -7,7 +7,7 @@ TranslateClParser.cpp ) -add_llvm_library(MLIRSupport +add_mlir_library(MLIRSupport FileUtilities.cpp StorageUniquer.cpp ToolUtilities.cpp @@ -20,7 +20,7 @@ ${LLVM_PTHREAD_LIB} ) -add_llvm_library(MLIROptLib +add_mlir_library(MLIROptLib MlirOptMain.cpp ADDITIONAL_HEADER_DIRS @@ -34,7 +34,7 @@ LLVMSupport ) -add_llvm_library(MLIRTranslateClParser +add_mlir_library(MLIRTranslateClParser TranslateClParser.cpp ADDITIONAL_HEADER_DIRS diff --git a/mlir/lib/Target/CMakeLists.txt b/mlir/lib/Target/CMakeLists.txt --- a/mlir/lib/Target/CMakeLists.txt +++ b/mlir/lib/Target/CMakeLists.txt @@ -1,4 +1,4 @@ -add_llvm_library(MLIRTargetLLVMIRModuleTranslation +add_mlir_library(MLIRTargetLLVMIRModuleTranslation LLVMIR/DebugTranslation.cpp LLVMIR/ModuleTranslation.cpp @@ -19,7 +19,7 @@ MLIRTranslation ) -add_llvm_library(MLIRTargetLLVMIR +add_mlir_library(MLIRTargetLLVMIR LLVMIR/ConvertFromLLVMIR.cpp LLVMIR/ConvertToLLVMIR.cpp @@ -36,7 +36,8 @@ LLVMIRReader LLVMSupport ) -add_llvm_library(MLIRTargetNVVMIR + +add_mlir_library(MLIRTargetNVVMIR LLVMIR/ConvertToNVVMIR.cpp ADDITIONAL_HEADER_DIRS @@ -56,7 +57,7 @@ LLVMSupport ) -add_llvm_library(MLIRTargetROCDLIR +add_mlir_library(MLIRTargetROCDLIR LLVMIR/ConvertToROCDLIR.cpp ADDITIONAL_HEADER_DIRS diff --git a/mlir/lib/Transforms/CMakeLists.txt b/mlir/lib/Transforms/CMakeLists.txt --- a/mlir/lib/Transforms/CMakeLists.txt +++ b/mlir/lib/Transforms/CMakeLists.txt @@ -1,6 +1,6 @@ add_subdirectory(Utils) -add_llvm_library(MLIRTransforms +add_mlir_library(MLIRTransforms AffineDataCopyGeneration.cpp AffineLoopInvariantCodeMotion.cpp Canonicalizer.cpp diff --git a/mlir/lib/Transforms/Utils/CMakeLists.txt b/mlir/lib/Transforms/Utils/CMakeLists.txt --- a/mlir/lib/Transforms/Utils/CMakeLists.txt +++ b/mlir/lib/Transforms/Utils/CMakeLists.txt @@ -1,4 +1,4 @@ -add_llvm_library(MLIRTransformUtils +add_mlir_library(MLIRTransformUtils FoldUtils.cpp GreedyPatternRewriteDriver.cpp InliningUtils.cpp diff --git a/mlir/lib/Translation/CMakeLists.txt b/mlir/lib/Translation/CMakeLists.txt --- a/mlir/lib/Translation/CMakeLists.txt +++ b/mlir/lib/Translation/CMakeLists.txt @@ -1,4 +1,4 @@ -add_llvm_library(MLIRTranslation +add_mlir_library(MLIRTranslation Translation.cpp ADDITIONAL_HEADER_DIRS diff --git a/mlir/tools/CMakeLists.txt b/mlir/tools/CMakeLists.txt --- a/mlir/tools/CMakeLists.txt +++ b/mlir/tools/CMakeLists.txt @@ -4,3 +4,4 @@ add_subdirectory(mlir-tblgen) add_subdirectory(mlir-translate) add_subdirectory(mlir-vulkan-runner) +add_subdirectory(mlir-shlib) diff --git a/mlir/tools/mlir-opt/CMakeLists.txt b/mlir/tools/mlir-opt/CMakeLists.txt --- a/mlir/tools/mlir-opt/CMakeLists.txt +++ b/mlir/tools/mlir-opt/CMakeLists.txt @@ -4,6 +4,7 @@ set(LIB_LIBS MLIRAnalysis + MLIRIR MLIRLLVMIR MLIROptLib MLIRParser diff --git a/mlir/tools/mlir-shlib/CMakeLists.txt b/mlir/tools/mlir-shlib/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/mlir/tools/mlir-shlib/CMakeLists.txt @@ -0,0 +1,42 @@ +# Building libmlir-cpp.so fails if LLVM_ENABLE_PIC=Off +if (NOT LLVM_ENABLE_PIC) + return() +endif() + +# Building libmlir-cpp.so may not work on MSVC +if (MSVC) + return() +endif() + +get_property(mlir_libs GLOBAL PROPERTY MLIR_ALL_LIBS) +list(REMOVE_DUPLICATES mlir_libs) + +foreach (lib ${mlir_libs}) + if(XCODE) + # Xcode doesn't support object libraries, so we have to trick it into + # linking the static libraries instead. + list(APPEND _DEPS "-force_load" ${lib}) + else() + list(APPEND _OBJECTS $) + endif() + list(APPEND _DEPS $) +endforeach () + +if(MLIR_LINK_MLIR_DYLIB) + set(INSTALL_WITH_TOOLCHAIN INSTALL_WITH_TOOLCHAIN) +endif() + +# libMLIR.so depends on LLVM components. To avoid multiple +# copies of those LLVM components, libMLIR.so depends on libLLVM.so. +# This probably won't work if some LLVM components are not included +# in libLLVM.so. +if(LLVM_BUILD_LLVM_DYLIB) + add_llvm_library(MLIR + SHARED + ${INSTALL_WITH_TOOLCHAIN} + + mlir-shlib.cpp + ) + target_link_libraries(MLIR PRIVATE LLVM ${LLVM_PTHREAD_LIB}) + whole_archive_link(MLIR ${mlir_libs}) +endif() diff --git a/mlir/tools/mlir-shlib/mlir-shlib.cpp b/mlir/tools/mlir-shlib/mlir-shlib.cpp new file mode 100644 --- /dev/null +++ b/mlir/tools/mlir-shlib/mlir-shlib.cpp @@ -0,0 +1 @@ +// Intentionally empty source file to make CMake happy