Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions MODULE.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,10 @@ register_toolchains(
"@zig_sdk//libc_aware/toolchain:linux_arm64_gnu.2.28",
"@zig_sdk//libc_aware/toolchain:linux_arm64_musl",

# riscv64 toolchains for libc-aware platforms:
"@zig_sdk//libc_aware/toolchain:linux_riscv64_gnu.2.28",
"@zig_sdk//libc_aware/toolchain:linux_riscv64_musl",

# wasm/wasi toolchains
"@zig_sdk//toolchain:wasip1_wasm",
"@zig_sdk//toolchain:none_wasm",
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -517,6 +517,7 @@ This repository is used on the following (host) platforms:

- `linux_amd64`, a.k.a. `x86_64`.
- `linux_arm64`, a.k.a. `AArch64`.
- `linux_riscv64`.
- `darwin_amd64`, the 64-bit post-PowerPC models.
- `darwin_arm64`, the M1.
- `windows_amd64`, a.k.a. `x64`.
Expand Down
2 changes: 2 additions & 0 deletions test/glibc_hacks/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,7 @@ cc_binary(
("linux_amd64_musl", "//libc_aware/platform:linux_amd64_musl"),
("linux_amd64_gnu.2.28", "//libc_aware/platform:linux_amd64_gnu.2.28"),
("linux_arm64_musl", "//libc_aware/platform:linux_arm64_musl"),
("linux_riscv64_musl", "//libc_aware/platform:linux_riscv64_musl"),
("linux_riscv64_gnu.2.28", "//libc_aware/platform:linux_riscv64_gnu.2.28"),
]
]
2 changes: 2 additions & 0 deletions toolchain/defs.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ _DEFAULT_INCLUDE_DIRECTORIES = [

_HOST_PLATFORM_EXT = {
"linux-aarch64": "tar.xz",
"linux-riscv64": "tar.xz",
"linux-x86_64": "tar.xz",
"macos-aarch64": "tar.xz",
"macos-x86_64": "tar.xz",
Expand All @@ -32,6 +33,7 @@ _HOST_PLATFORM_EXT = {
# map bazel's host_platform to zig's -target= and -mcpu=
_TARGET_MCPU = {
"linux-aarch64": ("aarch64-linux-musl", "baseline"),
"linux-riscv64": ("riscv64-linux-musl", "baseline"),
"linux-x86_64": ("x86_64-linux-musl", "baseline"),
"macos-aarch64": ("aarch64-macos-none", "apple_a14"),
"macos-x86_64": ("x86_64-macos-none", "baseline"),
Expand Down
2 changes: 1 addition & 1 deletion toolchain/ext.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ _exec_platform = tag_class(
mandatory = True,
),
"arch": attr.string(
values = ["amd64", "arm64"],
values = ["amd64", "arm64", "riscv64"],
mandatory = True,
),
},
Expand Down
31 changes: 25 additions & 6 deletions toolchain/platform/defs.bzl
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
load("@hermetic_cc_toolchain//toolchain/private:defs.bzl", "LIBCS")
load("@hermetic_cc_toolchain//toolchain/private:defs.bzl", "LIBCS", "RISCV64_LIBCS")

_CPUS = (("x86_64", "amd64"), ("aarch64", "arm64"))
_OS = {
Expand All @@ -18,6 +18,9 @@ def declare_platforms():
declare_platform("wasm", "wasm32", "wasi", "wasip1")
declare_platform("wasm", "wasm32", "none", "none")

# gocpu and zigcpu are both riscv64, so this declares a single linux_riscv64 platform.
declare_platform("riscv64", "riscv64", "linux", "linux")

def declare_libc_aware_platforms():
# create @zig_sdk//{os}_{arch}_platform entries with zig and go conventions
# with libc specified
Expand All @@ -32,18 +35,34 @@ def declare_libc_aware_platforms():
extra_constraints = ["//libc:{}".format(libc)],
)

for libc in RISCV64_LIBCS:
declare_platform(
"riscv64",
"riscv64",
"linux",
"linux",
suffix = "_{}".format(libc),
extra_constraints = ["//libc:{}".format(libc)],
)

def declare_platform(gocpu, zigcpu, bzlos, os, suffix = "", extra_constraints = []):
constraint_values = [
"@platforms//os:{}".format(bzlos),
"@platforms//cpu:{}".format(zigcpu),
] + extra_constraints

native.platform(
name = "{os}_{zigcpu}{suffix}".format(os = os, zigcpu = zigcpu, suffix = suffix),
constraint_values = constraint_values,
)
zig_name = "{os}_{zigcpu}{suffix}".format(os = os, zigcpu = zigcpu, suffix = suffix)
go_name = "{os}_{gocpu}{suffix}".format(os = os, gocpu = gocpu, suffix = suffix)

native.platform(
name = "{os}_{gocpu}{suffix}".format(os = os, gocpu = gocpu, suffix = suffix),
name = zig_name,
constraint_values = constraint_values,
)

# amd64/arm64 use different Go and Zig arch names, so both aliases exist.
# riscv64 uses the same name in both, and a second platform() would collide.
if go_name != zig_name:
native.platform(
name = go_name,
constraint_values = constraint_values,
)
17 changes: 14 additions & 3 deletions toolchain/private/defs.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,11 @@ _INCLUDE_TAIL = [

LIBCS = ["musl"] + ["gnu.{}".format(glibc) for glibc in _GLIBCS]

# RISC-V was added to glibc in 2.27. Zig 0.15.2 rejects older versions
# (lib/std/zig/target.zig: riscv64 linux gnu glibc_min = 2.27).
_RISCV64_GLIBCS = _GLIBCS[_GLIBCS.index("2.27"):]
RISCV64_LIBCS = ["musl"] + ["gnu.{}".format(glibc) for glibc in _RISCV64_GLIBCS]

def zig_tool_path(os):
if os == "windows":
return _ZIG_TOOL_PATH + ".exe"
Expand All @@ -51,6 +56,9 @@ def target_structs():
ret.append(_target_linux_musl(gocpu, zigcpu))
for glibc in _GLIBCS:
ret.append(_target_linux_gnu(gocpu, zigcpu, glibc))
ret.append(_target_linux_musl("riscv64", "riscv64"))
for glibc in _RISCV64_GLIBCS:
ret.append(_target_linux_gnu("riscv64", "riscv64", glibc))
ret.append(_target_wasm())
ret.append(_target_wasm_no_wasi())
return ret
Expand Down Expand Up @@ -160,8 +168,9 @@ def _target_linux_gnu(gocpu, zigcpu, glibc_version):
# x86-linux-gnu dir. x86_64-linux-any never existed and is
# likewise covered by x86-linux-any.
(["libc/include/x86-linux-gnu", "libc/include/x86-linux-any"] if zigcpu == "x86_64" else [
"libc/include/{}-linux-gnu".format(zigcpu),
"libc/include/{}-linux-any".format(zigcpu),
# Zig names the RISC-V glibc headers riscv-linux-gnu, not riscv64-linux-gnu.
"libc/include/riscv-linux-gnu" if zigcpu == "riscv64" else "libc/include/{}-linux-gnu".format(zigcpu),
"libc/include/riscv-linux-any" if zigcpu == "riscv64" else "libc/include/{}-linux-any".format(zigcpu),
]) + [
"libc/include/any-linux-any",
] + _INCLUDE_TAIL,
Expand Down Expand Up @@ -195,7 +204,9 @@ def _target_linux_musl(gocpu, zigcpu):
] +
# x86_64-linux-any is x86_64-linux and x86-linux combined.
(["libc/include/x86-linux-any"] if zigcpu == "x86_64" else []) +
(["libc/include/{}-linux-any".format(zigcpu)] if zigcpu != "x86_64" else []) + [
# Zig names the RISC-V asm headers riscv-linux-any, not riscv64-linux-any.
(["libc/include/riscv-linux-any"] if zigcpu == "riscv64" else []) +
(["libc/include/{}-linux-any".format(zigcpu)] if zigcpu not in ("x86_64", "riscv64") else []) + [
"libc/include/any-linux-any",
] + _INCLUDE_TAIL,
linkopts = [],
Expand Down
1 change: 1 addition & 0 deletions toolchain/private/zig_sdk.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ VERSION = "0.15.2"

HOST_PLATFORM_SHA256 = {
"linux-aarch64": "958ed7d1e00d0ea76590d27666efbf7a932281b3d7ba0c6b01b0ff26498f667f",
"linux-riscv64": "493512bdca485be3c6a9b0f69dcb4cbe4587f3af8e1be282fdd827108ba39930",
"linux-x86_64": "02aa270f183da276e5b5920b1dac44a63f1a49e55050ebde3aecc9eb82f93239",
"macos-aarch64": "3cc2bab367e185cdfb27501c4b30b1b0653c28d9f73df8dc91488e66ece5fa6b",
"macos-x86_64": "375b6909fc1495d16fc2c7db9538f707456bfc3373b14ee83fdd3e22b3d43f7f",
Expand Down
2 changes: 1 addition & 1 deletion toolchain/zig-wrapper.zig
Original file line number Diff line number Diff line change
Expand Up @@ -378,7 +378,7 @@ fn getRunMode(self_exe: []const u8, self_base_noexe: []const u8) error{BadParent
var it = mem.splitScalar(u8, triple, '-');

const arch = it.next() orelse return error.BadParent;
if (mem.indexOf(u8, "aarch64,x86_64,wasm32", arch) == null)
if (mem.indexOf(u8, "aarch64,x86_64,wasm32,riscv64", arch) == null)
return error.BadParent;

const got_os = it.next() orelse return error.BadParent;
Expand Down
Loading