diff --git a/bazel/cc_toolchains/clang_cc_toolchain_config.bzl b/bazel/cc_toolchains/clang_cc_toolchain_config.bzl index 739c89a715e7..4a7cfa59559a 100644 --- a/bazel/cc_toolchains/clang_cc_toolchain_config.bzl +++ b/bazel/cc_toolchains/clang_cc_toolchain_config.bzl @@ -17,6 +17,7 @@ load( "variable_with_value", "with_feature_set", ) +load("@rules_cc//cc:defs.bzl", "cc_toolchain", "cc_toolchain_suite") load( ":clang_detected_variables.bzl", "clang_bindir", @@ -886,7 +887,7 @@ def _impl(ctx): # Next, add the features based on the target platform. Here too the # features are order sensitive. We also setup the sysroot here. - if ctx.attr.target_cpu == "k8": + if ctx.attr.target_cpu in ["aarch64", "k8"]: features.append(sanitizer_static_lib_flags) features.append(linux_flags_feature) sysroot = None @@ -906,8 +907,7 @@ def _impl(ctx): else: fail("Unsupported target platform!") - # TODO: Need to support non-macOS ARM platforms here. - if ctx.attr.target_cpu == "darwin_arm64": + if ctx.attr.target_cpu in ["aarch64", "darwin_arm64"]: features.append(aarch64_cpu_flags) else: features.append(x86_64_cpu_flags) @@ -954,3 +954,44 @@ cc_toolchain_config = rule( }, provides = [CcToolchainConfigInfo], ) + +def cc_local_toolchain_suite(name, cpus): + """Create a toolchain suite that uses the local Clang/LLVM install. + + Args: + name: The name of the toolchain suite to produce. + cpus: An array of CPU strings to support in the toolchain. + """ + + # An empty filegroup to use when stubbing out the toolchains. + native.filegroup( + name = name + "_empty", + srcs = [], + ) + + # Create the individual local toolchains for each CPU. + for cpu in cpus: + cc_toolchain_config( + name = name + "_local_config_" + cpu, + target_cpu = cpu, + ) + cc_toolchain( + name = name + "_local_" + cpu, + all_files = ":" + name + "_empty", + ar_files = ":" + name + "_empty", + as_files = ":" + name + "_empty", + compiler_files = ":" + name + "_empty", + dwp_files = ":" + name + "_empty", + linker_files = ":" + name + "_empty", + objcopy_files = ":" + name + "_empty", + strip_files = ":" + name + "_empty", + supports_param_files = 1, + toolchain_config = ":" + name + "_local_config_" + cpu, + toolchain_identifier = name + "_local_" + cpu, + ) + + # Now build the suite, associating each CPU with its toolchain. + cc_toolchain_suite( + name = name, + toolchains = {cpu: ":" + name + "_local_" + cpu for cpu in cpus}, + ) diff --git a/bazel/cc_toolchains/clang_toolchain.BUILD b/bazel/cc_toolchains/clang_toolchain.BUILD index 5115b9c10390..5c59dbef0870 100644 --- a/bazel/cc_toolchains/clang_toolchain.BUILD +++ b/bazel/cc_toolchains/clang_toolchain.BUILD @@ -5,125 +5,16 @@ # This file is symlinked into a configured Clang toolchain repository as the # root `BUILD` file for that repository. -load("@rules_cc//cc:defs.bzl", "cc_library", "cc_toolchain", "cc_toolchain_suite") -load(":cc_toolchain_config.bzl", "cc_toolchain_config") +load(":cc_toolchain_config.bzl", "cc_local_toolchain_suite") -cc_library( - name = "malloc", -) - -filegroup( - name = "empty", - srcs = [], -) - -cc_toolchain_suite( +cc_local_toolchain_suite( name = "bazel_cc_toolchain", - toolchains = { - "darwin": ":cc-compiler-darwin", - "darwin_arm64": ":cc-compiler-darwin-arm64", - "freebsd": "cc-compiler-freebsd", - "k8": ":cc-compiler-k8", - "x64_windows": ":cc-compiler-x64-windows", - }, -) - -cc_toolchain( - name = "cc-compiler-k8", - all_files = ":empty", - ar_files = ":empty", - as_files = ":empty", - compiler_files = ":empty", - dwp_files = ":empty", - linker_files = ":empty", - objcopy_files = ":empty", - strip_files = ":empty", - supports_param_files = 1, - toolchain_config = ":local-k8", - toolchain_identifier = "local-k8", -) - -cc_toolchain_config( - name = "local-k8", - target_cpu = "k8", -) - -cc_toolchain( - name = "cc-compiler-darwin", - all_files = ":empty", - ar_files = ":empty", - as_files = ":empty", - compiler_files = ":empty", - dwp_files = ":empty", - linker_files = ":empty", - objcopy_files = ":empty", - strip_files = ":empty", - supports_param_files = 1, - toolchain_config = ":local-darwin", - toolchain_identifier = "local-darwin", -) - -cc_toolchain_config( - name = "local-darwin", - target_cpu = "darwin", -) - -cc_toolchain( - name = "cc-compiler-darwin-arm64", - all_files = ":empty", - ar_files = ":empty", - as_files = ":empty", - compiler_files = ":empty", - dwp_files = ":empty", - linker_files = ":empty", - objcopy_files = ":empty", - strip_files = ":empty", - supports_param_files = 1, - toolchain_config = ":local-darwin-arm64", - toolchain_identifier = "local-darwin-arm64", -) - -cc_toolchain_config( - name = "local-darwin-arm64", - target_cpu = "darwin_arm64", -) - -cc_toolchain( - name = "cc-compiler-freebsd", - all_files = ":empty", - ar_files = ":empty", - as_files = ":empty", - compiler_files = ":empty", - dwp_files = ":empty", - linker_files = ":empty", - objcopy_files = ":empty", - strip_files = ":empty", - supports_param_files = 1, - toolchain_config = ":local-freebsd", - toolchain_identifier = "local-freebsd", -) - -cc_toolchain_config( - name = "local-freebsd", - target_cpu = "freebsd", -) - -cc_toolchain( - name = "cc-compiler-x64-windows", - all_files = ":empty", - ar_files = ":empty", - as_files = ":empty", - compiler_files = ":empty", - dwp_files = ":empty", - linker_files = ":empty", - objcopy_files = ":empty", - strip_files = ":empty", - supports_param_files = 1, - toolchain_config = ":local-x64-windows", - toolchain_identifier = "local-x64-windows", -) - -cc_toolchain_config( - name = "local-x64-windows", - target_cpu = "x64_windows", + cpus = [ + "aarch64", + "darwin", + "darwin_arm64", + "freebsd", + "k8", + "x64_windows", + ], ) diff --git a/scripts/scripts_utils.py b/scripts/scripts_utils.py index 4b68fd4d40f2..796f224e5e4f 100644 --- a/scripts/scripts_utils.py +++ b/scripts/scripts_utils.py @@ -149,6 +149,8 @@ def _get_machine() -> str: machine = platform.machine() if machine == "x86_64": machine = "amd64" + elif machine == "aarch64": + machine = "arm64" return machine