aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--BUILD.bazel62
-rw-r--r--cc_toolchain_config.bzl42
2 files changed, 50 insertions, 54 deletions
diff --git a/BUILD.bazel b/BUILD.bazel
index e711dd0e2..8101cfeb9 100644
--- a/BUILD.bazel
+++ b/BUILD.bazel
@@ -16,6 +16,7 @@ load(
"android_cc_toolchain",
"clang_version",
"expand_feature_flags",
+ "toolchain_definition",
)
load(
":cc_toolchain_constants.bzl",
@@ -203,61 +204,16 @@ android_cc_toolchain(
toolchain_type(name = "nocrt_toolchain")
-# Device toolchains with crt libraries
+# Device toolchains
[
[
- toolchain(
- name = "cc_toolchain_{arch}{variant}_def".format(
- arch = arch,
- variant = variant_name(variant),
- ),
- exec_compatible_with = [
- "//build/bazel/platforms/arch:x86_64",
- "//build/bazel/platforms/os:linux",
- ],
- target_compatible_with = [
- "//build/bazel/platforms/arch:%s" % arch,
- "//build/bazel/platforms/os:android",
- ] + variant_constraints(
- variant,
- _arch_constants.AndroidArchToVariantToFeatures[arch],
- ),
- toolchain = ":cc_toolchain_{arch}{variant}".format(
- arch = arch,
- variant = variant_name(variant),
- ),
- toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
- )
- for variant in variants
- ]
- for arch, variants in arch_to_variants.items()
-]
-
-# Device toolchains without crt libraries
-[
- [
- toolchain(
- name = "cc_toolchain_{arch}{variant}_nocrt_def".format(
- arch = arch,
- variant = variant_name(variant),
- ),
- exec_compatible_with = [
- "//build/bazel/platforms/arch:x86_64",
- "//build/bazel/platforms/os:linux",
- ],
- target_compatible_with = [
- "//build/bazel/platforms/arch:%s" % arch,
- "//build/bazel/platforms/os:android",
- ] + variant_constraints(
- variant,
- _arch_constants.AndroidArchToVariantToFeatures[arch],
- ),
- toolchain = ":cc_toolchain_{arch}{variant}_nocrt".format(
- arch = arch,
- variant = variant_name(variant),
- ),
- toolchain_type = ":nocrt_toolchain",
- )
+ [
+ toolchain_definition(arch, variant, nocrt)
+ for nocrt in [
+ True,
+ False,
+ ]
+ ]
for variant in variants
]
for arch, variants in arch_to_variants.items()
diff --git a/cc_toolchain_config.bzl b/cc_toolchain_config.bzl
index b482a923a..d707014fc 100644
--- a/cc_toolchain_config.bzl
+++ b/cc_toolchain_config.bzl
@@ -6,13 +6,17 @@ load(
)
load(
":cc_toolchain_constants.bzl",
+ "arch_to_variants",
+ "variant_constraints",
+ "variant_name",
_actions = "actions",
_bionic_crt = "bionic_crt",
+ _enabled_features = "enabled_features",
_flags = "flags",
_generated_constants = "generated_constants",
- _enabled_features = "enabled_features",
)
load(":cc_toolchain_features.bzl", "get_features")
+load("//build/bazel/platforms/arch/variants:constants.bzl", _arch_constants = "constants")
# Clang-specific configuration.
_ClangVersionInfo = provider(fields = ["directory", "includes"])
@@ -447,3 +451,39 @@ def android_cc_toolchain(
name = name,
actual = name + "_nocrt",
)
+
+def _toolchain_name(arch, variant, nocrt = False):
+ return "cc_toolchain_{arch}{variant}{nocrt}_def".format(
+ arch = arch,
+ variant = variant_name(variant),
+ nocrt = "_nocrt" if nocrt else "",
+ )
+
+def toolchain_definition(arch, variant, nocrt = False):
+ """Macro to create a toolchain with a standardized name
+
+ The name used here must match that used in cc_register_toolchains.
+ """
+ name = _toolchain_name(arch, variant, nocrt)
+ native.toolchain(
+ name = name,
+ exec_compatible_with = [
+ "//build/bazel/platforms/arch:x86_64",
+ "//build/bazel/platforms/os:linux",
+ ],
+ target_compatible_with = [
+ "//build/bazel/platforms/arch:%s" % arch,
+ "//build/bazel/platforms/os:android",
+ ] + variant_constraints(
+ variant,
+ _arch_constants.AndroidArchToVariantToFeatures[arch],
+ ),
+ toolchain = ":cc_toolchain_{arch}{variant}{nocrt}".format(
+ arch = arch,
+ variant = variant_name(variant),
+ nocrt = "_nocrt" if nocrt else "",
+ ),
+ toolchain_type = (
+ ":nocrt_toolchain" if nocrt else "@bazel_tools//tools/cpp:toolchain_type"
+ ),
+ )