From 3de03548a6f3c3fe49bec41226bafd00f9feb850 Mon Sep 17 00:00:00 2001 From: Matt Clarkson Date: Mon, 17 Feb 2025 16:13:59 +0000 Subject: [PATCH 1/5] refactor: move `VersionsInfo` to `//toolchain` Not specific to triplets. --- toolchain/{triplet => }/VersionInfo.bzl | 0 toolchain/{triplet => }/VersionedInfo.bzl | 0 toolchain/local/triplet/libc.bzl | 4 ++-- toolchain/local/triplet/os.bzl | 4 ++-- toolchain/{triplet => }/split.bzl | 0 toolchain/triplet/TripletInfo.bzl | 4 ++-- 6 files changed, 6 insertions(+), 6 deletions(-) rename toolchain/{triplet => }/VersionInfo.bzl (100%) rename toolchain/{triplet => }/VersionedInfo.bzl (100%) rename toolchain/{triplet => }/split.bzl (100%) diff --git a/toolchain/triplet/VersionInfo.bzl b/toolchain/VersionInfo.bzl similarity index 100% rename from toolchain/triplet/VersionInfo.bzl rename to toolchain/VersionInfo.bzl diff --git a/toolchain/triplet/VersionedInfo.bzl b/toolchain/VersionedInfo.bzl similarity index 100% rename from toolchain/triplet/VersionedInfo.bzl rename to toolchain/VersionedInfo.bzl diff --git a/toolchain/local/triplet/libc.bzl b/toolchain/local/triplet/libc.bzl index 8847461..828f3b5 100644 --- a/toolchain/local/triplet/libc.bzl +++ b/toolchain/local/triplet/libc.bzl @@ -1,5 +1,5 @@ -load("//toolchain/triplet:split.bzl", "split") -load("//toolchain/triplet:VersionedInfo.bzl", "VersionedInfo") +load("//toolchain:split.bzl", "split") +load("//toolchain:VersionedInfo.bzl", "VersionedInfo") visibility("//toolchain/local/triplet/...") diff --git a/toolchain/local/triplet/os.bzl b/toolchain/local/triplet/os.bzl index b2a9afc..206238e 100644 --- a/toolchain/local/triplet/os.bzl +++ b/toolchain/local/triplet/os.bzl @@ -1,5 +1,5 @@ -load("//toolchain/triplet:split.bzl", "split") -load("//toolchain/triplet:VersionedInfo.bzl", "VersionedInfo") +load("//toolchain:split.bzl", "split") +load("//toolchain:VersionedInfo.bzl", "VersionedInfo") visibility("//toolchain/local/triplet/...") diff --git a/toolchain/triplet/split.bzl b/toolchain/split.bzl similarity index 100% rename from toolchain/triplet/split.bzl rename to toolchain/split.bzl diff --git a/toolchain/triplet/TripletInfo.bzl b/toolchain/triplet/TripletInfo.bzl index 99ee803..bb92fac 100644 --- a/toolchain/triplet/TripletInfo.bzl +++ b/toolchain/triplet/TripletInfo.bzl @@ -1,6 +1,6 @@ load("@bazel_skylib//lib:types.bzl", "types") -load(":VersionedInfo.bzl", "VersionedInfo") -load(":split.bzl", "split") +load("//toolchain:VersionedInfo.bzl", "VersionedInfo") +load("//toolchain:split.bzl", "split") visibility("//toolchain/...") -- GitLab From e92a95ac88d1b3e089f1b2bf0144d3ecb4f92de9 Mon Sep 17 00:00:00 2001 From: Matt Clarkson Date: Mon, 17 Feb 2025 16:27:53 +0000 Subject: [PATCH 2/5] feat: add `ToolchainCoupletInfo` For non-libc couplets. --- toolchain/couplet/BUILD.bazel | 0 toolchain/couplet/CoupletInfo.bzl | 52 +++++++++++++++++++++++++++++++ toolchain/couplet/couplets.bzl | 14 +++++++++ toolchain/couplet/defs.bzl | 5 +++ 4 files changed, 71 insertions(+) create mode 100644 toolchain/couplet/BUILD.bazel create mode 100644 toolchain/couplet/CoupletInfo.bzl create mode 100644 toolchain/couplet/couplets.bzl create mode 100644 toolchain/couplet/defs.bzl diff --git a/toolchain/couplet/BUILD.bazel b/toolchain/couplet/BUILD.bazel new file mode 100644 index 0000000..e69de29 diff --git a/toolchain/couplet/CoupletInfo.bzl b/toolchain/couplet/CoupletInfo.bzl new file mode 100644 index 0000000..2398001 --- /dev/null +++ b/toolchain/couplet/CoupletInfo.bzl @@ -0,0 +1,52 @@ +load("@bazel_skylib//lib:types.bzl", "types") +load("//toolchain:VersionedInfo.bzl", "VersionedInfo") +load("//toolchain:split.bzl", "split") + +visibility("//toolchain/...") + +def init(value): + """ + Initializes a `CoupletInfo` provider. + + Processes `value` into the constituent parts. + + Args: + value: A machine couplet which can be kebab-separated such as `aarch64-linux.6.13` + + Returns: + A mapping of keywords for the `couplet_info` raw constructor. + """ + if not types.is_string(value): + fail("`CoupletInfo.value` must be a `str`: {}".format(value)) + + cpu, vendor, os = split(value, "-", { + 2: lambda c, o: (c, None, o), + 3: lambda c, v, o: (c, v, o), + }) + + os = VersionedInfo(os) + + constraints = [ + "cpu:{}".format(cpu), + "os:{}".format(os.kind), + ] + + if os.version: + constraints.append("os/{}:{}".format(os.kind, os.version.value)) + + return { + "value": value, + "cpu": cpu, + "vendor": vendor, + "os": os, + "constraints": tuple([ + Label("//toolchain/constraint/{}".format(c)) + for c in constraints + ]), + } + +CoupletInfo, couplet_info = provider( + "A machine couplet. Has the associated compatible Bazel constraints.", + fields = ("value", "cpu", "vendor", "os", "constraints"), + init = init, +) diff --git a/toolchain/couplet/couplets.bzl b/toolchain/couplet/couplets.bzl new file mode 100644 index 0000000..3a679f2 --- /dev/null +++ b/toolchain/couplet/couplets.bzl @@ -0,0 +1,14 @@ +load("@local//:triplet.bzl", LOCAL = "TRIPLET") +load(":CoupletInfo.bzl", "CoupletInfo") + +visibility("//toolchain/...") + +COUPLETS = ( + CoupletInfo("{}-{}".format(LOCAL.cpu, LOCAL.os.value)), + CoupletInfo("arm64-linux"), + CoupletInfo("amd64-linux"), + CoupletInfo("arm64-windows"), + CoupletInfo("amd64-windows"), + CoupletInfo("arm64-macos"), + CoupletInfo("amd64-macos"), +) diff --git a/toolchain/couplet/defs.bzl b/toolchain/couplet/defs.bzl new file mode 100644 index 0000000..cabbcae --- /dev/null +++ b/toolchain/couplet/defs.bzl @@ -0,0 +1,5 @@ +load(":CoupletInfo.bzl", _CoupletInfo = "CoupletInfo") + +visibility("public") + +ToolchainCoupletInfo = _CoupletInfo -- GitLab From 4d3aa9778cca519716f8cd55d5b91c477bb30ebe Mon Sep 17 00:00:00 2001 From: Matt Clarkson Date: Mon, 17 Feb 2025 16:28:30 +0000 Subject: [PATCH 3/5] feat: add `//toolchain/constaint` couplets --- toolchain/constraint/BUILD.bazel | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/toolchain/constraint/BUILD.bazel b/toolchain/constraint/BUILD.bazel index a35ed05..8b0c1d7 100644 --- a/toolchain/constraint/BUILD.bazel +++ b/toolchain/constraint/BUILD.bazel @@ -1,3 +1,4 @@ +load("//toolchain/couplet:couplets.bzl", "COUPLETS") load("//toolchain/triplet:triplets.bzl", "TRIPLETS") [ @@ -9,6 +10,15 @@ load("//toolchain/triplet:triplets.bzl", "TRIPLETS") for t in TRIPLETS ] +[ + config_setting( + name = c.value, + constraint_values = c.constraints, + visibility = ["//visibility:public"], + ) + for c in COUPLETS +] + alias( name = "local", actual = "//toolchain/local:constraint", -- GitLab From 7a53fdc8dacd042706c21a828d61d1ce8710e823 Mon Sep 17 00:00:00 2001 From: Matt Clarkson Date: Mon, 17 Feb 2025 16:28:50 +0000 Subject: [PATCH 4/5] fix: make `//toolchain/platform` couplets public --- toolchain/platform/BUILD.bazel | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/toolchain/platform/BUILD.bazel b/toolchain/platform/BUILD.bazel index dec518b..7941575 100644 --- a/toolchain/platform/BUILD.bazel +++ b/toolchain/platform/BUILD.bazel @@ -1,3 +1,4 @@ +load("//toolchain/couplet:couplets.bzl", "COUPLETS") load("//toolchain/triplet:triplets.bzl", "TRIPLETS") [ @@ -11,20 +12,11 @@ load("//toolchain/triplet:triplets.bzl", "TRIPLETS") [ platform( - name = "{}-{}".format(cpu, os), - constraint_values = [ - "//toolchain/constraint/cpu:{}".format(cpu), - "//toolchain/constraint/os:{}".format(os), - ], - ) - for cpu, os in ( - ("amd64", "linux"), - ("arm64", "linux"), - ("amd64", "windows"), - ("arm64", "windows"), - ("amd64", "macos"), - ("arm64", "macos"), + name = c.value, + constraint_values = c.constraints, + visibility = ["//visibility:public"], ) + for c in COUPLETS ] alias( -- GitLab From c62af229b67cb4f33803af95aeba966e4733d9bb Mon Sep 17 00:00:00 2001 From: Matt Clarkson Date: Mon, 17 Feb 2025 16:36:09 +0000 Subject: [PATCH 5/5] feat: add more common triplets --- toolchain/triplet/triplets.bzl | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/toolchain/triplet/triplets.bzl b/toolchain/triplet/triplets.bzl index 213651e..1638391 100644 --- a/toolchain/triplet/triplets.bzl +++ b/toolchain/triplet/triplets.bzl @@ -7,4 +7,10 @@ TRIPLETS = ( LOCAL, TripletInfo("arm64-linux-gnu"), TripletInfo("amd64-linux-gnu"), + TripletInfo("arm64-linux-musl"), + TripletInfo("amd64-linux-musl"), + TripletInfo("arm64-macos-darwin"), + TripletInfo("amd64-macos-darwin"), + TripletInfo("arm64-windows-ucrt"), + TripletInfo("amd64-windows-ucrt"), ) -- GitLab