Skip to content

Commit

Permalink
[bazel] Separate capi_deps from deps in mlir_c_api_cc_library.
Browse files Browse the repository at this point in the history
This is important because *Objects targets need to only depend on other *Objects targets, not on the unsuffixed CAPI rules. Depending on how it is linked in the current setup, it can cause duplicate symbols.

Differential Revision: https://reviews.llvm.org/D117176
  • Loading branch information
stellaraccident committed Jan 14, 2022
1 parent 88c0e08 commit b93eded
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 31 deletions.
59 changes: 32 additions & 27 deletions utils/bazel/llvm-project-overlay/mlir/BUILD.bazel
Expand Up @@ -382,9 +382,11 @@ mlir_c_api_cc_library(
srcs = [
"lib/CAPI/Interfaces/Interfaces.cpp",
],
capi_deps = [
":CAPIIR",
],
includes = ["include"],
deps = [
":CAPIIR",
":IR",
":InferTypeOpInterface",
"//llvm:Support",
Expand All @@ -398,15 +400,16 @@ mlir_c_api_cc_library(
"lib/CAPI/Dialect/AsyncPasses.cpp",
],
hdrs = ["include/mlir-c/Dialect/Async.h"],
capi_deps = [
":CAPIIR",
],
header_deps = [
":AsyncPassIncGen",
":CAPIIRHeaders",
],
includes = ["include"],
deps = [
":Async",
":AsyncTransforms",
":CAPIIR",
":Pass",
],
)
Expand All @@ -420,13 +423,14 @@ mlir_c_api_cc_library(
hdrs = [
"include/mlir-c/Dialect/Linalg.h",
],
capi_deps = [
":CAPIIR",
],
header_deps = [
":CAPIIRHeaders",
":LinalgPassIncGen",
],
includes = ["include"],
deps = [
":CAPIIR",
":LinalgOps",
":LinalgTransforms",
":Pass",
Expand All @@ -441,12 +445,11 @@ mlir_c_api_cc_library(
hdrs = [
"include/mlir-c/Dialect/LLVM.h",
],
header_deps = [
":CAPIIRHeaders",
capi_deps = [
":CAPIIR",
],
includes = ["include"],
deps = [
":CAPIIR",
":LLVMDialect",
],
)
Expand All @@ -460,13 +463,14 @@ mlir_c_api_cc_library(
hdrs = [
"include/mlir-c/Dialect/GPU.h",
],
capi_deps = [
":CAPIIR",
],
header_deps = [
":CAPIIRHeaders",
":GPUPassIncGen",
],
includes = ["include"],
deps = [
":CAPIIR",
":GPUDialect",
":GPUTransforms",
":Pass",
Expand All @@ -482,13 +486,14 @@ mlir_c_api_cc_library(
hdrs = [
"include/mlir-c/Dialect/SparseTensor.h",
],
capi_deps = [
":CAPIIR",
],
header_deps = [
":CAPIIRHeaders",
":SparseTensorPassIncGen",
],
includes = ["include"],
deps = [
":CAPIIR",
":Pass",
":SparseTensor",
":SparseTensorTransforms",
Expand All @@ -504,12 +509,11 @@ mlir_c_api_cc_library(
hdrs = [
"include/mlir-c/Dialect/Quant.h",
],
header_deps = [
":CAPIIRHeaders",
capi_deps = [
":CAPIIR",
],
includes = ["include"],
deps = [
":CAPIIR",
":QuantOps",
],
)
Expand Down Expand Up @@ -538,13 +542,14 @@ mlir_c_api_cc_library(
name = "CAPIConversion",
srcs = ["lib/CAPI/Conversion/Passes.cpp"],
hdrs = ["include/mlir-c/Conversion.h"],
capi_deps = [
":CAPIIR",
],
header_deps = [
":CAPIIRHeaders",
":ConversionPassIncGen",
],
includes = ["include"],
deps = [
":CAPIIR",
":ConversionPasses",
":Pass",
],
Expand All @@ -554,12 +559,11 @@ mlir_c_api_cc_library(
name = "CAPIDebug",
srcs = ["lib/CAPI/Debug/Debug.cpp"],
hdrs = ["include/mlir-c/Debug.h"],
header_deps = [
":CAPIIRHeaders",
capi_deps = [
":CAPIIR",
],
includes = ["include"],
deps = [
":CAPIIR",
":Support",
"//llvm:Support",
],
Expand All @@ -572,13 +576,14 @@ mlir_c_api_cc_library(
"include/mlir-c/ExecutionEngine.h",
"include/mlir/CAPI/ExecutionEngine.h",
],
capi_deps = [
":CAPIIR",
],
header_deps = [
":CAPIIRHeaders",
":ExecutionEngine",
],
includes = ["include"],
deps = [
":CAPIIR",
":ExecutionEngineUtils",
":LLVMToLLVMIRTranslation",
"//llvm:OrcJIT",
Expand All @@ -590,13 +595,14 @@ mlir_c_api_cc_library(
name = "CAPITransforms",
srcs = ["lib/CAPI/Transforms/Passes.cpp"],
hdrs = ["include/mlir-c/Transforms.h"],
capi_deps = [
":CAPIIR",
],
header_deps = [
":CAPIIRHeaders",
":TransformsPassIncGen",
],
includes = ["include"],
deps = [
":CAPIIR",
":Pass",
":Transforms",
],
Expand All @@ -606,13 +612,12 @@ mlir_c_api_cc_library(
name = "CAPIRegistration",
srcs = ["lib/CAPI/Registration/Registration.cpp"],
hdrs = ["include/mlir-c/Registration.h"],
header_deps = [
":CAPIIRHeaders",
capi_deps = [
":CAPIIR",
],
includes = ["include"],
deps = [
":AllPassesAndDialects",
":CAPIIR",
":LLVMToLLVMIRTranslation",
],
)
Expand Down
16 changes: 12 additions & 4 deletions utils/bazel/llvm-project-overlay/mlir/build_defs.bzl
Expand Up @@ -31,33 +31,41 @@ def mlir_c_api_cc_library(
hdrs = [],
deps = [],
header_deps = [],
capi_deps = [],
**kwargs):
"""Macro that generates three targets for MLIR C API libraries.
* A standard cc_library target ("Name"),
* A header-only cc_library target ("NameHeaders")
* An implementation cc_library target tagged `alwayslink` suitable for
inclusion in a shared library built with cc_binary() ("NameObjects").
"""
In order to avoid duplicate symbols, it is important that
mlir_c_api_cc_library targets only depend on other mlir_c_api_cc_library
targets via the "capi_deps" parameter. This makes it so that "FooObjects"
depend on "BarObjects" targets and "Foo" targets depend on "Bar" targets.
Don't cross the streams.
"""
capi_header_deps = ["%sHeaders" % d for d in capi_deps]
capi_object_deps = ["%sObjects" % d for d in capi_deps]
native.cc_library(
name = name,
srcs = srcs,
hdrs = hdrs,
deps = deps + header_deps,
deps = deps + capi_deps + header_deps,
**kwargs
)
native.cc_library(
name = name + "Headers",
hdrs = hdrs,
deps = header_deps,
deps = header_deps + capi_header_deps,
**kwargs
)
native.cc_library(
name = name + "Objects",
srcs = srcs,
hdrs = hdrs,
deps = deps + header_deps,
deps = deps + capi_object_deps + capi_header_deps + header_deps,
alwayslink = True,
**kwargs
)

0 comments on commit b93eded

Please sign in to comment.