aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZach Yu <zachyu@google.com>2023-05-01 18:18:01 -0700
committerZach Yu <zachyu@google.com>2023-05-11 14:45:17 -0700
commitfacd20d7ef5b22f2b909689bd4e116ab3e47b172 (patch)
treef47dfd242c9d2bf9c169c38bd67cb07438eeaa05
parentb4e1d66f18e57ceb022735cd19b67038e8bac52b (diff)
downloadbazel-facd20d7ef5b22f2b909689bd4e116ab3e47b172.tar.gz
Set artifact name pattern.
A cc_artifact_name rule is added to keep it modular. Bug: 274512969 Change-Id: I72b7b73ff6911c35876f2a3db0f124b112628829
-rw-r--r--toolchains/cc/mac_clang/BUILD.bazel9
-rw-r--r--toolchains/cc/rules.bzl55
2 files changed, 64 insertions, 0 deletions
diff --git a/toolchains/cc/mac_clang/BUILD.bazel b/toolchains/cc/mac_clang/BUILD.bazel
index e8d54d89..4886e161 100644
--- a/toolchains/cc/mac_clang/BUILD.bazel
+++ b/toolchains/cc/mac_clang/BUILD.bazel
@@ -1,6 +1,7 @@
load(":features.bzl", "cc_features")
load(
"@//build/bazel/toolchains/cc:rules.bzl",
+ "cc_artifact_name",
"cc_toolchain_config",
"cc_toolchain_dynamic_runtime",
"cc_toolchain_static_runtime",
@@ -30,8 +31,16 @@ cc_features(
toolchain_imports = _imports,
)
+cc_artifact_name(
+ name = "dylib",
+ category = "dynamic_library",
+ extension = ".dylib",
+ prefix = "lib",
+)
+
cc_toolchain_config(
name = "x64_config",
+ artifact_name_patterns = [":dylib"],
cc_features = ":x64_features",
cc_tools = [
"@clang//:macos_all_clang",
diff --git a/toolchains/cc/rules.bzl b/toolchains/cc/rules.bzl
index a3a221b7..072fda42 100644
--- a/toolchains/cc/rules.bzl
+++ b/toolchains/cc/rules.bzl
@@ -1,6 +1,11 @@
"""Platform and tool independent toolchain rules."""
load(":actions.bzl", "create_action_configs")
+load(
+ "@bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl",
+ "ArtifactNamePatternInfo",
+ "artifact_name_pattern",
+)
CcToolInfo = provider(
"A provider that specifies metadata for a tool.",
@@ -290,6 +295,47 @@ sysroot = rule(
},
)
+def _cc_artifact_name_impl(ctx):
+ return artifact_name_pattern(
+ category_name = ctx.attr.category,
+ prefix = ctx.attr.prefix,
+ extension = ctx.attr.extension,
+ )
+
+cc_artifact_name = rule(
+ implementation = _cc_artifact_name_impl,
+ doc = "Creates an artifact filename pattern for generated artifacts.",
+ attrs = {
+ "category": attr.string(
+ doc = "Category name of the artifact.",
+ mandatory = True,
+ values = [
+ "static_library",
+ "alwayslink_static_library",
+ "dynamic_library",
+ "executable",
+ "interface_library",
+ "pic_file",
+ "included_file_list",
+ "serialized_diagnostics_file",
+ "object_file",
+ "pic_object_file",
+ "cpp_module",
+ "generated_assembly",
+ "processed_header",
+ "generated_header",
+ "preprocessed_c_source",
+ "preprocessed_cpp_source",
+ "coverage_data_file",
+ "clif_output_proto",
+ ],
+ ),
+ "prefix": attr.string(doc = "Filename prefix.", default = ""),
+ "extension": attr.string(doc = "File extension.", default = ""),
+ },
+ provides = [ArtifactNamePatternInfo],
+)
+
def _toolchain_files(ctx):
toolchain_import_files = [
lib[DefaultInfo].files
@@ -318,6 +364,10 @@ def _cc_toolchain_config_impl(ctx):
action_configs = create_action_configs(
[tool[CcToolInfo] for tool in ctx.attr.cc_tools],
),
+ artifact_name_patterns = [
+ p[ArtifactNamePatternInfo]
+ for p in ctx.attr.artifact_name_patterns
+ ],
builtin_sysroot = sysroot,
target_cpu = ctx.attr.target_cpu,
# The attributes below are required by the constructor, but don't
@@ -351,6 +401,11 @@ cc_toolchain_config = rule(
mandatory = True,
providers = [CcFeatureConfigInfo],
),
+ "artifact_name_patterns": attr.label_list(
+ doc = "A list of name patterns for generated artifacts.",
+ providers = [ArtifactNamePatternInfo],
+ default = [],
+ ),
"target_cpu": attr.string(
doc = "Target CPU architecture. This only affects the directory name of execution and output trees.",
mandatory = True,