diff options
author | Zach Yu <zachyu@google.com> | 2023-05-01 18:18:01 -0700 |
---|---|---|
committer | Zach Yu <zachyu@google.com> | 2023-05-11 14:45:17 -0700 |
commit | facd20d7ef5b22f2b909689bd4e116ab3e47b172 (patch) | |
tree | f47dfd242c9d2bf9c169c38bd67cb07438eeaa05 | |
parent | b4e1d66f18e57ceb022735cd19b67038e8bac52b (diff) | |
download | bazel-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.bazel | 9 | ||||
-rw-r--r-- | toolchains/cc/rules.bzl | 55 |
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, |