From d798741d291173e1030e7b9d97fe2ef9c71b87f5 Mon Sep 17 00:00:00 2001 From: Oliver Lee Date: Wed, 16 Jul 2025 22:47:12 -0700 Subject: [PATCH] remove tool constraints resolves #74 --- MODULE.bazel.lock | 2 +- toolchain/templates/toolchain.bazel | 25 ++------------------- toolchain/templates/top.BUILD | 35 +++++++++++++---------------- toolchain/toolchain.bzl | 22 ++++++++++++++++++ 4 files changed, 40 insertions(+), 44 deletions(-) diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 0385efc..43bb0e7 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -139,7 +139,7 @@ "moduleExtensions": { "//:extensions.bzl%arm_toolchain": { "general": { - "bzlTransitiveDigest": "cqGNMbHOpcWofrKzWJEvft+a7/gOVZb5B5O+Nc0sihQ=", + "bzlTransitiveDigest": "XPn1XO+tfcFjd6JeePOShhiLnilTfUtfR9AqQWbn7CM=", "usagesDigest": "P/3UnhHe8mBjAHhQOgY8IbRzO7gyGHPkTqDB/W/U9qY=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, diff --git a/toolchain/templates/toolchain.bazel b/toolchain/templates/toolchain.bazel index 1473f76..7337f53 100644 --- a/toolchain/templates/toolchain.bazel +++ b/toolchain/templates/toolchain.bazel @@ -1,29 +1,11 @@ load("@local_config_platform//:constraints.bzl", "HOST_CONSTRAINTS") load("@rules_cc//cc:defs.bzl", "cc_toolchain") load("@toolchains_arm_gnu//toolchain:config.bzl", "cc_arm_gnu_toolchain_config") +load("@toolchains_arm_gnu//toolchain:toolchain.bzl", "host_from") load("@toolchains_arm_gnu//toolchain:transitions.bzl", "toolchain_transition_library") HOSTS = %hosts% -def _normalize(x): - mapping = { - "osx": "macos", - "darwin": "macos", - "aarch64": "arm64", - } - return mapping.get(x, default=x) - - -def _host_os_cpu(): - host_constraints = HOST_CONSTRAINTS - if "os" not in host_constraints: - host_constraints = reversed(host_constraints) - - return struct( - os = _normalize(Label(host_constraints[0]).name), - cpu = _normalize(Label(host_constraints[1]).name), - ) - def _toolchain_variants(name, additional_link_libraries, target_compatible_with): """ List of toolchain variants to create. @@ -118,11 +100,8 @@ def %toolchain_name%_toolchain( ], ) - host = _host_os_cpu() - for host_repo, exec_compatible_with in HOSTS.items(): - os, cpu = [Label(x).name for x in exec_compatible_with] - if _normalize(os) == host.os and _normalize(cpu) == host.cpu: + if host_repo == "%toolchain_name%_{}".format(host_from(HOST_CONSTRAINTS)): native.alias( name = name, actual = ":{}_{}".format(name, host_repo), diff --git a/toolchain/templates/top.BUILD b/toolchain/templates/top.BUILD index 4141165..1ac0c9f 100644 --- a/toolchain/templates/top.BUILD +++ b/toolchain/templates/top.BUILD @@ -4,35 +4,30 @@ repository, i.e., the targets defined here appear in the workspace as "@arm_none_eabi//:*" for arm-none-eabi toolchains. """ -load("@toolchains_arm_gnu//toolchain:toolchain.bzl", "hosts", "tools") load("@bazel_skylib//rules:native_binary.bzl", "native_binary") +load("@local_config_platform//:constraints.bzl", "HOST_CONSTRAINTS") +load( + "@toolchains_arm_gnu//toolchain:toolchain.bzl", + "host_from", + "hosts", + "tools", +) package(default_visibility = ["//visibility:public"]) -TOOLS = tools + ["bin"] - -[ - config_setting( - name = host, - constraint_values = constraint_values, - ) - for host, constraint_values in hosts["%toolchain_prefix%"].items() -] +TOOLS = tools +host = host_from(HOST_CONSTRAINTS) [ native_binary( name = tool, - src = select({ - host: "@%toolchain_name%_{}//:{}".format(host, tool) - for host in hosts["%toolchain_prefix%"].keys() - }), + src = "@%toolchain_name%_{}//:{}".format(host, tool), out = tool, - target_compatible_with = select({ - host: constraint_values - for host, constraint_values in hosts["%toolchain_prefix%"].items() - } | { - "//conditions:default": ["@platforms//:incompatible"], - }), + target_compatible_with = ( + [] + if host in hosts["%toolchain_prefix%"].keys() else + ["@platforms//:incompatible"] + ), ) for tool in TOOLS ] diff --git a/toolchain/toolchain.bzl b/toolchain/toolchain.bzl index 76e6ac1..361a8e4 100644 --- a/toolchain/toolchain.bzl +++ b/toolchain/toolchain.bzl @@ -70,6 +70,28 @@ hosts = { }, } +def host_from(host_constraints): + if "os" != Label(host_constraints[0]).package: + host_constraints = reversed(host_constraints) + + mapping = { + "osx": "darwin", + "macos": "darwin", + "x86_64": "amd64", + "aarch64": "arm64", + } + + normalize = lambda x: mapping.get(x, default = x) + + os, cpu = [normalize(Label(x).name) for x in host_constraints] + + if os == "darwin": + return "darwin_x86_64" if cpu == "amd64" else "darwin_arm64" + elif os == "linux": + return "linux_x86_64" if cpu == "amd64" else "linux_aarch64" + else: + return "windows_x86_64" + def _arm_gnu_toolchain( name, toolchain = "",