diff --git a/mlir/CMakeLists.txt b/mlir/CMakeLists.txt --- a/mlir/CMakeLists.txt +++ b/mlir/CMakeLists.txt @@ -96,6 +96,8 @@ not desired. Enabling this will result in object files being written \ under lib/objects-{CMAKE_BUILD_TYPE}.") +set(MLIR_BUILD_MLIR_C_DYLIB 0 CACHE BOOL "Builds libMLIR-C shared library.") + #------------------------------------------------------------------------------- # Python Bindings Configuration # Requires: diff --git a/mlir/include/mlir/ExecutionEngine/CRunnerUtils.h b/mlir/include/mlir/ExecutionEngine/CRunnerUtils.h --- a/mlir/include/mlir/ExecutionEngine/CRunnerUtils.h +++ b/mlir/include/mlir/ExecutionEngine/CRunnerUtils.h @@ -27,7 +27,8 @@ #endif // mlir_c_runner_utils_EXPORTS #endif // MLIR_CRUNNERUTILS_EXPORT #else // _WIN32 -#define MLIR_CRUNNERUTILS_EXPORT +// Non-windows: use visibility attributes. +#define MLIR_CRUNNERUTILS_EXPORT __attribute__((visibility("default"))) #define MLIR_CRUNNERUTILS_DEFINE_FUNCTIONS #endif // _WIN32 diff --git a/mlir/include/mlir/ExecutionEngine/RunnerUtils.h b/mlir/include/mlir/ExecutionEngine/RunnerUtils.h --- a/mlir/include/mlir/ExecutionEngine/RunnerUtils.h +++ b/mlir/include/mlir/ExecutionEngine/RunnerUtils.h @@ -27,7 +27,8 @@ #endif // mlir_runner_utils_EXPORTS #endif // MLIR_RUNNERUTILS_EXPORT #else -#define MLIR_RUNNERUTILS_EXPORT +// Non-windows: use visibility attributes. +#define MLIR_RUNNERUTILS_EXPORT __attribute__((visibility("default"))) #endif // _WIN32 #include diff --git a/mlir/lib/CAPI/CMakeLists.txt b/mlir/lib/CAPI/CMakeLists.txt --- a/mlir/lib/CAPI/CMakeLists.txt +++ b/mlir/lib/CAPI/CMakeLists.txt @@ -1,3 +1,12 @@ +# For upstream, we accumulate all libraries into the MLIR_CAPI_LIBRARIES +# property via a custom wrapper function. This is then used to create an +# aggregate below. +set_property(GLOBAL APPEND PROPERTY MLIR_CAPI_LIBRARIES) +function(add_mlir_upstream_c_api_library name) + add_mlir_public_c_api_library(${name} ${ARGN}) + set_property(GLOBAL APPEND PROPERTY MLIR_CAPI_LIBRARIES ${name}) +endfunction() + add_subdirectory(Debug) add_subdirectory(Dialect) add_subdirectory(Conversion) @@ -6,3 +15,21 @@ add_subdirectory(IR) add_subdirectory(Registration) add_subdirectory(Transforms) + +# Build the optional CAPI dylib. +if(MLIR_BUILD_MLIR_C_DYLIB) + message(STATUS "Building MLIR-C dylib") + get_property(_capi_libraries GLOBAL PROPERTY MLIR_CAPI_LIBRARIES) + add_mlir_aggregate(MLIR-C + SHARED + EMBED_LIBS + ${_capi_libraries} + ) + if(CMAKE_SYSTEM_NAME STREQUAL "Linux") + target_link_options(MLIR-C PRIVATE "-Wl,-exclude-libs,ALL") + else() + if(NOT CMAKE_C_VISIBILITY_PRESET STREQUAL "hidden" OR NOT CMAKE_CXX_VISIBILITY_PRESET STREQUAL "hidden") + message(STATUS "MLIR-C on this platform exports all symbols. Recommend building with CMAKE_(C|CXX)_VISIBILITY_PRESET=hidden or implement filtering support.") + endif() + endif() +endif() diff --git a/mlir/lib/CAPI/Conversion/CMakeLists.txt b/mlir/lib/CAPI/Conversion/CMakeLists.txt --- a/mlir/lib/CAPI/Conversion/CMakeLists.txt +++ b/mlir/lib/CAPI/Conversion/CMakeLists.txt @@ -1,5 +1,5 @@ get_property(conversion_libs GLOBAL PROPERTY MLIR_CONVERSION_LIBS) -add_mlir_public_c_api_library(MLIRCAPIConversion +add_mlir_upstream_c_api_library(MLIRCAPIConversion Passes.cpp LINK_LIBS PUBLIC diff --git a/mlir/lib/CAPI/Debug/CMakeLists.txt b/mlir/lib/CAPI/Debug/CMakeLists.txt --- a/mlir/lib/CAPI/Debug/CMakeLists.txt +++ b/mlir/lib/CAPI/Debug/CMakeLists.txt @@ -1,4 +1,4 @@ -add_mlir_public_c_api_library(MLIRCAPIDebug +add_mlir_upstream_c_api_library(MLIRCAPIDebug Debug.cpp LINK_LIBS PUBLIC diff --git a/mlir/lib/CAPI/Dialect/CMakeLists.txt b/mlir/lib/CAPI/Dialect/CMakeLists.txt --- a/mlir/lib/CAPI/Dialect/CMakeLists.txt +++ b/mlir/lib/CAPI/Dialect/CMakeLists.txt @@ -1,4 +1,4 @@ -add_mlir_public_c_api_library(MLIRCAPIAsync +add_mlir_upstream_c_api_library(MLIRCAPIAsync Async.cpp AsyncPasses.cpp @@ -13,7 +13,7 @@ MLIRPass ) -add_mlir_public_c_api_library(MLIRCAPIGPU +add_mlir_upstream_c_api_library(MLIRCAPIGPU GPU.cpp GPUPasses.cpp @@ -27,7 +27,7 @@ MLIRPass ) -add_mlir_public_c_api_library(MLIRCAPILLVM +add_mlir_upstream_c_api_library(MLIRCAPILLVM LLVM.cpp PARTIAL_SOURCES_INTENDED @@ -36,7 +36,7 @@ MLIRLLVMIR ) -add_mlir_public_c_api_library(MLIRCAPILinalg +add_mlir_upstream_c_api_library(MLIRCAPILinalg Linalg.cpp LinalgPasses.cpp @@ -51,7 +51,7 @@ MLIRLinalgTransforms ) -add_mlir_public_c_api_library(MLIRCAPISCF +add_mlir_upstream_c_api_library(MLIRCAPISCF SCF.cpp PARTIAL_SOURCES_INTENDED @@ -60,7 +60,7 @@ MLIRSCF ) -add_mlir_public_c_api_library(MLIRCAPIShape +add_mlir_upstream_c_api_library(MLIRCAPIShape Shape.cpp PARTIAL_SOURCES_INTENDED @@ -69,7 +69,7 @@ MLIRShape ) -add_mlir_public_c_api_library(MLIRCAPISparseTensor +add_mlir_upstream_c_api_library(MLIRCAPISparseTensor SparseTensor.cpp SparseTensorPasses.cpp @@ -80,7 +80,7 @@ MLIRSparseTensorTransforms ) -add_mlir_public_c_api_library(MLIRCAPIStandard +add_mlir_upstream_c_api_library(MLIRCAPIStandard Standard.cpp PARTIAL_SOURCES_INTENDED @@ -89,7 +89,7 @@ MLIRStandard ) -add_mlir_public_c_api_library(MLIRCAPITensor +add_mlir_upstream_c_api_library(MLIRCAPITensor Tensor.cpp PARTIAL_SOURCES_INTENDED diff --git a/mlir/lib/CAPI/ExecutionEngine/CMakeLists.txt b/mlir/lib/CAPI/ExecutionEngine/CMakeLists.txt --- a/mlir/lib/CAPI/ExecutionEngine/CMakeLists.txt +++ b/mlir/lib/CAPI/ExecutionEngine/CMakeLists.txt @@ -1,5 +1,5 @@ # Main API shared library. -add_mlir_public_c_api_library(MLIRCEXECUTIONENGINE +add_mlir_upstream_c_api_library(MLIRCEXECUTIONENGINE ExecutionEngine.cpp LINK_LIBS PUBLIC diff --git a/mlir/lib/CAPI/IR/CMakeLists.txt b/mlir/lib/CAPI/IR/CMakeLists.txt --- a/mlir/lib/CAPI/IR/CMakeLists.txt +++ b/mlir/lib/CAPI/IR/CMakeLists.txt @@ -1,5 +1,5 @@ # Main API shared library. -add_mlir_public_c_api_library(MLIRCAPIIR +add_mlir_upstream_c_api_library(MLIRCAPIIR AffineExpr.cpp AffineMap.cpp BuiltinAttributes.cpp diff --git a/mlir/lib/CAPI/Interfaces/CMakeLists.txt b/mlir/lib/CAPI/Interfaces/CMakeLists.txt --- a/mlir/lib/CAPI/Interfaces/CMakeLists.txt +++ b/mlir/lib/CAPI/Interfaces/CMakeLists.txt @@ -1,4 +1,4 @@ -add_mlir_public_c_api_library(MLIRCAPIInterfaces +add_mlir_upstream_c_api_library(MLIRCAPIInterfaces Interfaces.cpp LINK_LIBS PUBLIC diff --git a/mlir/lib/CAPI/Registration/CMakeLists.txt b/mlir/lib/CAPI/Registration/CMakeLists.txt --- a/mlir/lib/CAPI/Registration/CMakeLists.txt +++ b/mlir/lib/CAPI/Registration/CMakeLists.txt @@ -2,7 +2,7 @@ get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS) get_property(translation_libs GLOBAL PROPERTY MLIR_TRANSLATION_LIBS) get_property(conversion_libs GLOBAL PROPERTY MLIR_CONVERSION_LIBS) -add_mlir_public_c_api_library(MLIRCAPIRegistration +add_mlir_upstream_c_api_library(MLIRCAPIRegistration Registration.cpp LINK_LIBS PUBLIC diff --git a/mlir/lib/CAPI/Transforms/CMakeLists.txt b/mlir/lib/CAPI/Transforms/CMakeLists.txt --- a/mlir/lib/CAPI/Transforms/CMakeLists.txt +++ b/mlir/lib/CAPI/Transforms/CMakeLists.txt @@ -1,4 +1,4 @@ -add_mlir_public_c_api_library(MLIRCAPITransforms +add_mlir_upstream_c_api_library(MLIRCAPITransforms Passes.cpp LINK_LIBS PUBLIC diff --git a/mlir/test/CAPI/CMakeLists.txt b/mlir/test/CAPI/CMakeLists.txt --- a/mlir/test/CAPI/CMakeLists.txt +++ b/mlir/test/CAPI/CMakeLists.txt @@ -10,8 +10,13 @@ PARTIAL_SOURCES_INTENDED ${ARG_UNPARSED_ARGUMENTS}) llvm_update_compile_flags(${name}) - target_link_libraries(${name} - ${ARG_LINK_LIBS}) + if(MLIR_BUILD_MLIR_C_DYLIB) + target_link_libraries(${name} PRIVATE + MLIR-C) + else() + target_link_libraries(${name} PRIVATE + ${ARG_LINK_LIBS}) + endif() endfunction(_add_capi_test_executable) _add_capi_test_executable(mlir-capi-execution-engine-test