diff options
-rw-r--r-- | BUILD.bazel | 62 | ||||
-rw-r--r-- | cc_toolchain_config.bzl | 42 |
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" + ), + ) |