Rename bazel-zig-cc to hermetic_cc_toolchain (#36)
As it says on the tin. Long live hermetic_cc_toolchain!
This commit is contained in:
parent
73a9ceccfb
commit
e0e7a4ca46
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,7 +1,7 @@
|
|||||||
*~
|
*~
|
||||||
*.sw[op]
|
*.sw[op]
|
||||||
|
|
||||||
/bazel-bazel-zig-cc
|
/bazel-hermetic_cc_toolchain
|
||||||
/bazel-bin
|
/bazel-bin
|
||||||
/bazel-out
|
/bazel-out
|
||||||
/bazel-testlogs
|
/bazel-testlogs
|
||||||
|
2
BUILD
2
BUILD
@ -6,7 +6,7 @@ load("@bazel_gazelle//:def.bzl", "gazelle")
|
|||||||
# gazelle:map_kind go_binary go_binary //rules:rules_go.bzl
|
# gazelle:map_kind go_binary go_binary //rules:rules_go.bzl
|
||||||
|
|
||||||
# gazelle:build_file_name BUILD
|
# gazelle:build_file_name BUILD
|
||||||
# gazelle:prefix github.com/uber/bazel-zig-cc
|
# gazelle:prefix github.com/uber/hermetic_cc_toolchain
|
||||||
# gazelle:exclude tools.go
|
# gazelle:exclude tools.go
|
||||||
|
|
||||||
gazelle(name = "gazelle")
|
gazelle(name = "gazelle")
|
||||||
|
1
LICENSE
1
LICENSE
@ -1,4 +1,5 @@
|
|||||||
Copyright 2021-2022 bazel-zig-cc contributors
|
Copyright 2021-2022 bazel-zig-cc contributors
|
||||||
|
Copyright 2023 hermetic_cc_toolchain contributors
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
this software and associated documentation files (the "Software"), to deal in
|
this software and associated documentation files (the "Software"), to deal in
|
||||||
|
66
README.md
66
README.md
@ -1,18 +1,17 @@
|
|||||||
[![builds.sr.ht status](https://builds.sr.ht/~motiejus/bazel-zig-cc.svg)](https://builds.sr.ht/~motiejus/bazel-zig-cc)
|
# Hermetic CC toolchain
|
||||||
|
|
||||||
# Bazel zig cc toolchain
|
This is a C/C++ toolchain that can (cross-)compile C/C++ programs on top of
|
||||||
|
`zig cc`. It contains clang-16, musl, glibc 2-2.34, all in a ~40MB package.
|
||||||
This is a C/C++ toolchain that can (cross-)compile C/C++ programs. It contains
|
Read
|
||||||
clang-15, musl, glibc 2-2.34, all in a ~40MB package. Read
|
|
||||||
[here](https://andrewkelley.me/post/zig-cc-powerful-drop-in-replacement-gcc-clang.html)
|
[here](https://andrewkelley.me/post/zig-cc-powerful-drop-in-replacement-gcc-clang.html)
|
||||||
about zig-cc; the rest of the README will present how to use this toolchain
|
about zig-cc; the rest of the README will present how to use this toolchain
|
||||||
from Bazel.
|
from Bazel.
|
||||||
|
|
||||||
Configuring toolchains in Bazel is complex, under-documented, and fraught with
|
Configuring toolchains in Bazel is complex, under-documented, and fraught with
|
||||||
peril. I, the co-author of bazel-zig-cc, am still confused on how this all
|
peril. I, the co-author of `hermetic_cc_toolchain`, am still confused on how
|
||||||
works, and often wonder why it works at all. That aside, we made the our best
|
this all works, and often wonder why it works at all. That aside, we made the
|
||||||
effort to make bazel-zig-cc usable for your C/C++/CGo projects, with as many
|
our best effort to make `hermetic_cc_toolchain` usable for your C/C++/CGo
|
||||||
guardrails as we could install.
|
projects, with as many guardrails as we could install.
|
||||||
|
|
||||||
While copy-pasting the code in your project, attempt to read and understand the
|
While copy-pasting the code in your project, attempt to read and understand the
|
||||||
text surrounding the code snippets. This will save you hours of head
|
text surrounding the code snippets. This will save you hours of head
|
||||||
@ -20,10 +19,12 @@ scratching, I promise.
|
|||||||
|
|
||||||
# Project Origin
|
# Project Origin
|
||||||
|
|
||||||
This repository is based on Adam Bouhenguel's [bazel-zig-cc][ajbouh], then
|
This repository is based on Adam Bouhenguel's [bazel-zig-cc][ajbouh], later
|
||||||
developed at `sr.ht/~motiejus/bazel-zig-cc` and finally moved to
|
developed at `sr.ht/~motiejus/bazel-zig-cc`. After a while it was moved to
|
||||||
[github.com/uber](https://github.com/uber). Many thanks to Adam who built the
|
[github.com/uber](https://github.com/uber) and renamed to
|
||||||
very first functional version of Bazel and Zig integration.
|
`hermetic_cc_toolchain`. Our special thanks to Adam for creating the original
|
||||||
|
version and publishing it, his contribution helped make the idea to use Zig
|
||||||
|
with Bazel at Uber a reality; now we all can benefit from it.
|
||||||
|
|
||||||
Previously communications were done in an email list; the past archive is in
|
Previously communications were done in an email list; the past archive is in
|
||||||
`mailing-list-archive.mbox`. It can be accessed like this:
|
`mailing-list-archive.mbox`. It can be accessed like this:
|
||||||
@ -35,19 +36,19 @@ Previously communications were done in an email list; the past archive is in
|
|||||||
Add this to your `WORKSPACE`:
|
Add this to your `WORKSPACE`:
|
||||||
|
|
||||||
```
|
```
|
||||||
BAZEL_ZIG_CC_VERSION = "v1.0.1"
|
HERMETIC_CC_TOOLCHAIN_VERSION = "v1.0.1"
|
||||||
|
|
||||||
http_archive(
|
http_archive(
|
||||||
name = "bazel-zig-cc",
|
name = "hermetic_cc_toolchain",
|
||||||
sha256 = "e9f82bfb74b3df5ca0e67f4d4989e7f1f7ce3386c295fd7fda881ab91f83e509",
|
sha256 = "e9f82bfb74b3df5ca0e67f4d4989e7f1f7ce3386c295fd7fda881ab91f83e509",
|
||||||
strip_prefix = "bazel-zig-cc-{}".format(BAZEL_ZIG_CC_VERSION),
|
strip_prefix = "bazel-zig-cc-{}".format(HERMETIC_CC_TOOLCHAIN_VERSION),
|
||||||
urls = [
|
urls = [
|
||||||
"https://mirror.bazel.build/github.com/uber/bazel-zig-cc/releases/download/{0}/{0}.tar.gz".format(BAZEL_ZIG_CC_VERSION),
|
"https://mirror.bazel.build/github.com/uber/hermetic_cc_toolchain/releases/download/{0}/{0}.tar.gz".format(HERMETIC_CC_TOOLCHAIN_VERSION),
|
||||||
"https://github.com/uber/bazel-zig-cc/releases/download/{0}/{0}.tar.gz".format(BAZEL_ZIG_CC_VERSION),
|
"https://github.com/uber/hermetic_cc_toolchain/releases/download/{0}/{0}.tar.gz".format(HERMETIC_CC_TOOLCHAIN_VERSION),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
load("@bazel-zig-cc//toolchain:defs.bzl", zig_toolchains = "toolchains")
|
load("@hermetic_cc_toolchain//toolchain:defs.bzl", zig_toolchains = "toolchains")
|
||||||
|
|
||||||
# version, url_formats and host_platform_sha256 are optional for those who
|
# version, url_formats and host_platform_sha256 are optional for those who
|
||||||
# want to control their Zig SDK version.
|
# want to control their Zig SDK version.
|
||||||
@ -70,13 +71,13 @@ The snippets above will download the zig toolchain and make the bazel
|
|||||||
toolchains available for registration and usage. If you do nothing else, this
|
toolchains available for registration and usage. If you do nothing else, this
|
||||||
may work. The `.bazelrc` snippet instructs Bazel to use the registered "new
|
may work. The `.bazelrc` snippet instructs Bazel to use the registered "new
|
||||||
kinds of toolchains". All above are required regardless of how wants to use it.
|
kinds of toolchains". All above are required regardless of how wants to use it.
|
||||||
The next steps depend on how one wants to use bazel-zig-cc. The descriptions
|
The next steps depend on how one wants to use `hermetic_cc_toolchain`. The descriptions
|
||||||
below is a gentle introduction to C++ toolchains from "user's perspective" too.
|
below is a gentle introduction to C++ toolchains from "user's perspective" too.
|
||||||
|
|
||||||
## Use case: manually build a single target with a specific zig cc toolchain
|
## Use case: manually build a single target with a specific zig cc toolchain
|
||||||
|
|
||||||
This option is least disruptive to the workflow compared to no hermetic C++
|
This option is least disruptive to the workflow compared to no hermetic C++
|
||||||
toolchain, and works best when trying out or getting started with bazel-zig-cc
|
toolchain, and works best when trying out or getting started with `hermetic_cc_toolchain`
|
||||||
for a subset of targets.
|
for a subset of targets.
|
||||||
|
|
||||||
To request Bazel to use a specific toolchain (compatible with the specified
|
To request Bazel to use a specific toolchain (compatible with the specified
|
||||||
@ -180,7 +181,7 @@ build --action_env BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN=1
|
|||||||
From Bazel's perspective, this is almost equivalent to always specifying
|
From Bazel's perspective, this is almost equivalent to always specifying
|
||||||
`--extra_toolchains` on every `bazel <...>` command-line invocation. It also
|
`--extra_toolchains` on every `bazel <...>` command-line invocation. It also
|
||||||
means there is no way to disable the toolchain with the command line. This is
|
means there is no way to disable the toolchain with the command line. This is
|
||||||
useful if you find bazel-zig-cc useful enough to compile for all of your
|
useful if you find `hermetic_cc_toolchain` useful enough to compile for all of your
|
||||||
targets and tools.
|
targets and tools.
|
||||||
|
|
||||||
With `BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN=1` Bazel stops detecting the default
|
With `BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN=1` Bazel stops detecting the default
|
||||||
@ -304,9 +305,9 @@ SIGILL: illegal instruction
|
|||||||
This flag encourages program authors to fix the undefined behavior. There are
|
This flag encourages program authors to fix the undefined behavior. There are
|
||||||
[many ways][ubsan2] to find the undefined behavior.
|
[many ways][ubsan2] to find the undefined behavior.
|
||||||
|
|
||||||
# Known Issues In bazel-zig-cc
|
# Known Issues In `hermetic_cc_toolchain`
|
||||||
|
|
||||||
These are the things you may stumble into when using bazel-zig-cc. I am
|
These are the things you may stumble into when using `hermetic_cc_toolchain`. I am
|
||||||
unlikely to implement them any time soon, but patches implementing those will
|
unlikely to implement them any time soon, but patches implementing those will
|
||||||
be accepted. See [Questions & Contributions](#questions-amp-contributions) on
|
be accepted. See [Questions & Contributions](#questions-amp-contributions) on
|
||||||
how to contribute.
|
how to contribute.
|
||||||
@ -341,7 +342,7 @@ currently targets the lowest version, without ability to change it.
|
|||||||
# Known Issues In Upstream
|
# Known Issues In Upstream
|
||||||
|
|
||||||
This section lists issues that I've stumbled into when using `zig cc`, and is
|
This section lists issues that I've stumbled into when using `zig cc`, and is
|
||||||
outside of bazel-zig-cc's control.
|
outside of `hermetic_cc_toolchain`'s control.
|
||||||
|
|
||||||
## using glibc 2.27 or older
|
## using glibc 2.27 or older
|
||||||
|
|
||||||
@ -400,7 +401,7 @@ The tests are running (CId) on linux-amd64.
|
|||||||
|
|
||||||
## Transient docker environment
|
## Transient docker environment
|
||||||
|
|
||||||
A standalone Docker environment to play with bazel-zig-cc:
|
A standalone Docker environment to play with `hermetic_cc_toolchain`:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ docker run -e CC=/usr/bin/false -ti --rm -v "$PWD:/x" -w /x debian:bullseye-slim
|
$ docker run -e CC=/usr/bin/false -ti --rm -v "$PWD:/x" -w /x debian:bullseye-slim
|
||||||
@ -418,7 +419,7 @@ We maintain two channels for comms:
|
|||||||
|
|
||||||
# Maintainers
|
# Maintainers
|
||||||
|
|
||||||
This section lists the driving forces behind bazel-zig-cc. Committers have push
|
This section lists the driving forces behind `hermetic_cc_toolchain`. Committers have push
|
||||||
access, maintainers have their areas. Should make it easier to understand our
|
access, maintainers have their areas. Should make it easier to understand our
|
||||||
interests when reading patches or mailing lists.
|
interests when reading patches or mailing lists.
|
||||||
|
|
||||||
@ -432,16 +433,17 @@ You may find contact information of the individuals in the commit logs.
|
|||||||
|
|
||||||
# Publicity
|
# Publicity
|
||||||
|
|
||||||
This section lists notable uses or mentions of bazel-zig-cc.
|
This section lists notable uses or mentions of `bazel-zig-cc` (before the
|
||||||
|
rename) and afterwards of the `hermetic_cc_toolchain`.
|
||||||
|
|
||||||
- 2023-01-24 [bazel-zig-cc v1.0.0][bazel-zig-cc-v1]: releasing bazel-zig-cc and
|
- 2023-01-24 [bazel-zig-cc v1.0.0][bazel-zig-cc-v1]:
|
||||||
admitting that bazel-zig-cc is used in production to compile all of Uber's
|
releasing `bazel-zig-cc` and telling that `bazel-zig-cc`
|
||||||
[Go Monorepo][go-monorepo].
|
is used in production to compile all of Uber's [Go Monorepo][go-monorepo].
|
||||||
- 2022-11-18 [BazelCon 2022: Making Uber's hermetic C++
|
- 2022-11-18 [BazelCon 2022: Making Uber's hermetic C++
|
||||||
toolchain][bazelcon2022]: Laurynas Lubys presents the story of how this
|
toolchain][bazelcon2022]: Laurynas Lubys presents the story of how this
|
||||||
repository came into being and how it was used (as of the conference).
|
repository came into being and how it was used (as of the conference).
|
||||||
- 2022-05-23 [How Zig is used at Uber (youtube)][yt-how-zig-is-used-at-uber]:
|
- 2022-05-23 [How Zig is used at Uber (youtube)][yt-how-zig-is-used-at-uber]:
|
||||||
Yours Truly (the author) talks about how bazel-zig-cc came to existence and
|
Yours Truly (the author) talks about how `bazel-zig-cc` came to existence and
|
||||||
how it's used at Uber in Milan Zig Meetup.
|
how it's used at Uber in Milan Zig Meetup.
|
||||||
- 2022-05-23 [How Uber uses Zig][how-uber-uses-zig]: text version of the above.
|
- 2022-05-23 [How Uber uses Zig][how-uber-uses-zig]: text version of the above.
|
||||||
- 2022-03-30 [Google Open Source Peer Bonus Program][google-award] awarded the
|
- 2022-03-30 [Google Open Source Peer Bonus Program][google-award] awarded the
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
workspace(
|
workspace(
|
||||||
name = "bazel-zig-cc",
|
name = "hermetic_cc_toolchain",
|
||||||
)
|
)
|
||||||
|
|
||||||
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
|
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
|
||||||
|
@ -23,5 +23,5 @@ echo "--- zig fmt --check toolchain/launcher.zig"
|
|||||||
$ZIG fmt --check toolchain/launcher.zig
|
$ZIG fmt --check toolchain/launcher.zig
|
||||||
|
|
||||||
echo "--- zig test toolchain/launcher.zig"
|
echo "--- zig test toolchain/launcher.zig"
|
||||||
# until bazel-zig-cc gets a zig toolchain, run launcher's unit tests here.
|
# until hermetic_cc_toolchain gets a zig toolchain, run launcher's unit tests here.
|
||||||
$ZIG test toolchain/launcher.zig
|
$ZIG test toolchain/launcher.zig
|
||||||
|
@ -12,4 +12,4 @@ tools/bazel run //tools/releaser -- -tag v99.0.0
|
|||||||
cleanup() { git tag -d v99.0.0; git reset --hard "$prev_ref"; }
|
cleanup() { git tag -d v99.0.0; git reset --hard "$prev_ref"; }
|
||||||
trap cleanup EXIT
|
trap cleanup EXIT
|
||||||
|
|
||||||
file bazel-zig-cc-v99.0.0.tar.gz | grep -q 'gzip compressed data'
|
file hermetic_cc_toolchain-v99.0.0.tar.gz | grep -q 'gzip compressed data'
|
||||||
|
2
ci/test
2
ci/test
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
set -xeuo pipefail
|
set -xeuo pipefail
|
||||||
|
|
||||||
cache_prefix="${BAZEL_ZIG_CC_CACHE_PREFIX:-/tmp/bazel-zig-cc}"
|
cache_prefix="${HERMETIC_CC_TOOLCHAIN_CACHE_PREFIX:-/tmp/hermetic_cc_toolchain}"
|
||||||
|
|
||||||
# check a very hermetic setup with a single target. Re-building all of
|
# check a very hermetic setup with a single target. Re-building all of
|
||||||
# them takes a long time, so using only one. If we ever decide to build all
|
# them takes a long time, so using only one. If we ever decide to build all
|
||||||
|
2
go.mod
2
go.mod
@ -1,4 +1,4 @@
|
|||||||
module github.com/uber/bazel-zig-cc
|
module github.com/uber/hermetic_cc_toolchain
|
||||||
|
|
||||||
go 1.19
|
go 1.19
|
||||||
|
|
||||||
|
@ -9,9 +9,9 @@ gc_linkopts values that are needed to compile for macos target.
|
|||||||
To use it, add this map_kind gazelle directive to your BUILD.bazel files
|
To use it, add this map_kind gazelle directive to your BUILD.bazel files
|
||||||
where target binary needs to be compiled with zig toolchain.
|
where target binary needs to be compiled with zig toolchain.
|
||||||
|
|
||||||
Example: if this toolchain is registered as bazel-zig-cc in your WORKSPACE, add this to
|
Example: if this toolchain is registered as hermetic_cc_toolchain in your WORKSPACE, add this to
|
||||||
your root BUILD file
|
your root BUILD file
|
||||||
# gazelle:map_kind go_binary go_binary @bazel-zig-cc//rules:rules_go.bzl
|
# gazelle:map_kind go_binary go_binary @hermetic_cc_toolchain//rules:rules_go.bzl
|
||||||
"""
|
"""
|
||||||
|
|
||||||
_MACOS_GC_LINKOPTS = ["-s", "-w", "-buildmode=pie"]
|
_MACOS_GC_LINKOPTS = ["-s", "-w", "-buildmode=pie"]
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
load("@bazel-zig-cc//rules:platform.bzl", "platform_binary")
|
load("@hermetic_cc_toolchain//rules:platform.bzl", "platform_binary")
|
||||||
|
|
||||||
cc_binary(
|
cc_binary(
|
||||||
name = "which_libc",
|
name = "which_libc",
|
||||||
|
@ -3,13 +3,13 @@
|
|||||||
|
|
||||||
load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")
|
load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")
|
||||||
load("//rules:rules_go.bzl", "go_binary")
|
load("//rules:rules_go.bzl", "go_binary")
|
||||||
load("@bazel-zig-cc//rules:platform.bzl", "platform_binary", "platform_test")
|
load("@hermetic_cc_toolchain//rules:platform.bzl", "platform_binary", "platform_test")
|
||||||
|
|
||||||
go_library(
|
go_library(
|
||||||
name = "cgo_lib",
|
name = "cgo_lib",
|
||||||
srcs = ["cgo.go"],
|
srcs = ["cgo.go"],
|
||||||
cgo = True,
|
cgo = True,
|
||||||
importpath = "github.com/uber/bazel-zig-cc/test/cgo",
|
importpath = "github.com/uber/hermetic_cc_toolchain/test/cgo",
|
||||||
visibility = ["//visibility:private"],
|
visibility = ["//visibility:private"],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# Copyright 2023 Uber Technologies, Inc.
|
# Copyright 2023 Uber Technologies, Inc.
|
||||||
# Licensed under the MIT License
|
# Licensed under the MIT License
|
||||||
|
|
||||||
load("@bazel-zig-cc//rules:platform.bzl", "platform_binary")
|
load("@hermetic_cc_toolchain//rules:platform.bzl", "platform_binary")
|
||||||
|
|
||||||
cc_binary(
|
cc_binary(
|
||||||
name = "main",
|
name = "main",
|
||||||
|
@ -9,7 +9,7 @@ go_library(
|
|||||||
srcs = ["main.go"],
|
srcs = ["main.go"],
|
||||||
# keep
|
# keep
|
||||||
cgo = True,
|
cgo = True,
|
||||||
importpath = "github.com/uber/bazel-zig-cc/test/gorace",
|
importpath = "github.com/uber/hermetic_cc_toolchain/test/gorace",
|
||||||
visibility = ["//visibility:private"],
|
visibility = ["//visibility:private"],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
// More context: https://github.com/ziglang/zig/issues/11398
|
// More context: https://github.com/ziglang/zig/issues/11398
|
||||||
//
|
//
|
||||||
// This fails, because `zig cc` adds `--gc-sections` to the linker
|
// This fails, because `zig cc` adds `--gc-sections` to the linker
|
||||||
// flag by default, which is incompatible with cgo. bazel-zig-cc
|
// flag by default, which is incompatible with cgo. hermetic_cc_toolchain
|
||||||
// adds a workaround for it.
|
// adds a workaround for it.
|
||||||
package main
|
package main
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# Copyright 2023 Uber Technologies, Inc.
|
# Copyright 2023 Uber Technologies, Inc.
|
||||||
# Licensed under the MIT License
|
# Licensed under the MIT License
|
||||||
|
|
||||||
load("@bazel-zig-cc//rules:platform.bzl", "platform_binary", "platform_test")
|
load("@hermetic_cc_toolchain//rules:platform.bzl", "platform_binary", "platform_test")
|
||||||
|
|
||||||
cc_binary(
|
cc_binary(
|
||||||
name = "winver",
|
name = "winver",
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
# Copyright 2023 Uber Technologies, Inc.
|
# Copyright 2023 Uber Technologies, Inc.
|
||||||
# Licensed under the MIT License
|
# Licensed under the MIT License
|
||||||
|
|
||||||
load("@bazel-zig-cc//toolchain:defs.bzl", "declare_files")
|
load("@hermetic_cc_toolchain//toolchain:defs.bzl", "declare_files")
|
||||||
load("@bazel-zig-cc//toolchain/private:cc_toolchains.bzl", "declare_cc_toolchains")
|
load("@hermetic_cc_toolchain//toolchain/private:cc_toolchains.bzl", "declare_cc_toolchains")
|
||||||
|
|
||||||
package(
|
package(
|
||||||
default_visibility = ["//visibility:public"],
|
default_visibility = ["//visibility:public"],
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
load("@bazel_skylib//lib:paths.bzl", "paths")
|
load("@bazel_skylib//lib:paths.bzl", "paths")
|
||||||
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
|
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
|
||||||
load("@bazel_tools//tools/build_defs/repo:utils.bzl", "read_user_netrc", "use_netrc")
|
load("@bazel_tools//tools/build_defs/repo:utils.bzl", "read_user_netrc", "use_netrc")
|
||||||
load("@bazel-zig-cc//toolchain/private:defs.bzl", "target_structs", "zig_tool_path")
|
load("@hermetic_cc_toolchain//toolchain/private:defs.bzl", "target_structs", "zig_tool_path")
|
||||||
|
|
||||||
# Directories that `zig c++` includes behind the scenes.
|
# Directories that `zig c++` includes behind the scenes.
|
||||||
_DEFAULT_INCLUDE_DIRECTORIES = [
|
_DEFAULT_INCLUDE_DIRECTORIES = [
|
||||||
@ -13,11 +13,8 @@ _DEFAULT_INCLUDE_DIRECTORIES = [
|
|||||||
# Official recommended version. Should use this when we have a usable release.
|
# Official recommended version. Should use this when we have a usable release.
|
||||||
URL_FORMAT_RELEASE = "https://ziglang.org/download/{version}/zig-{host_platform}-{version}.{_ext}"
|
URL_FORMAT_RELEASE = "https://ziglang.org/download/{version}/zig-{host_platform}-{version}.{_ext}"
|
||||||
|
|
||||||
# Caution: nightly releases are purged from ziglang.org after ~90 days. A real
|
# Caution: nightly releases are purged from ziglang.org after ~90 days. Use the
|
||||||
# solution would be to allow the downstream project specify their own mirrors.
|
# Bazel mirror or your own.
|
||||||
# This is explained in
|
|
||||||
# https://sr.ht/~motiejus/bazel-zig-cc/#alternative-download-urls and is
|
|
||||||
# awaiting my attention or your contribution.
|
|
||||||
URL_FORMAT_NIGHTLY = "https://ziglang.org/builds/zig-{host_platform}-{version}.{_ext}"
|
URL_FORMAT_NIGHTLY = "https://ziglang.org/builds/zig-{host_platform}-{version}.{_ext}"
|
||||||
|
|
||||||
# Official Bazel's mirror with selected Zig SDK versions. Bazel community is
|
# Official Bazel's mirror with selected Zig SDK versions. Bazel community is
|
||||||
@ -176,19 +173,19 @@ def _zig_repository_impl(repository_ctx):
|
|||||||
sha256 = zig_sha256,
|
sha256 = zig_sha256,
|
||||||
)
|
)
|
||||||
|
|
||||||
cache_prefix = repository_ctx.os.environ.get("BAZEL_ZIG_CC_CACHE_PREFIX", "")
|
cache_prefix = repository_ctx.os.environ.get("HERMETIC_CC_TOOLCHAIN_CACHE_PREFIX", "")
|
||||||
if cache_prefix == "":
|
if cache_prefix == "":
|
||||||
if os == "windows":
|
if os == "windows":
|
||||||
cache_prefix = "C:\\\\Temp\\\\bazel-zig-cc"
|
cache_prefix = "C:\\\\Temp\\\\hermetic_cc_toolchain"
|
||||||
else:
|
else:
|
||||||
cache_prefix = "/tmp/bazel-zig-cc"
|
cache_prefix = "/tmp/hermetic_cc_toolchain"
|
||||||
|
|
||||||
repository_ctx.template(
|
repository_ctx.template(
|
||||||
"tools/launcher.zig",
|
"tools/launcher.zig",
|
||||||
Label("//toolchain:launcher.zig"),
|
Label("//toolchain:launcher.zig"),
|
||||||
executable = False,
|
executable = False,
|
||||||
substitutions = {
|
substitutions = {
|
||||||
"{BAZEL_ZIG_CC_CACHE_PREFIX}": cache_prefix,
|
"{HERMETIC_CC_TOOLCHAIN_CACHE_PREFIX}": cache_prefix,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -244,7 +241,7 @@ zig_repository = repository_rule(
|
|||||||
"url_formats": attr.string_list(allow_empty = False),
|
"url_formats": attr.string_list(allow_empty = False),
|
||||||
"host_platform_ext": attr.string_dict(),
|
"host_platform_ext": attr.string_dict(),
|
||||||
},
|
},
|
||||||
environ = ["BAZEL_ZIG_CC_CACHE_PREFIX"],
|
environ = ["HERMETIC_CC_TOOLCHAIN_CACHE_PREFIX"],
|
||||||
implementation = _zig_repository_impl,
|
implementation = _zig_repository_impl,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -36,14 +36,14 @@
|
|||||||
// complain that the compiler is using undeclared directories on the host file
|
// complain that the compiler is using undeclared directories on the host file
|
||||||
// system. We do not declare prerequisites using absolute paths, because that
|
// system. We do not declare prerequisites using absolute paths, because that
|
||||||
// busts Bazel's remote cache.
|
// busts Bazel's remote cache.
|
||||||
// * BAZEL_ZIG_CC_CACHE_PREFIX is configurable per toolchain instance, and
|
// * HERMETIC_CC_TOOLCHAIN_CACHE_PREFIX is configurable per toolchain instance, and
|
||||||
// ZIG_GLOBAL_CACHE_DIR and ZIG_LOCAL_CACHE_DIR must be set to its value for
|
// ZIG_GLOBAL_CACHE_DIR and ZIG_LOCAL_CACHE_DIR must be set to its value for
|
||||||
// all `zig` invocations.
|
// all `zig` invocations.
|
||||||
//
|
//
|
||||||
// Originally this was a Bash script, then a POSIX shell script, then two
|
// Originally this was a Bash script, then a POSIX shell script, then two
|
||||||
// scripts (one with pre-defined BAZEL_ZIG_CC_CACHE_PREFIX, one without). Then
|
// scripts (one with pre-defined HERMETIC_CC_TOOLCHAIN_CACHE_PREFIX, one
|
||||||
// Windows came along with two PowerShell scripts (ports of the POSIX shell
|
// without). Then Windows came along with two PowerShell scripts (ports of the
|
||||||
// scripts), which I kept breaking. Then Bazel 6 came with
|
// POSIX shell scripts), which I kept breaking. Then Bazel 6 came with
|
||||||
// `--experimental_use_hermetic_linux_sandbox`, which hermetizes the sandbox to
|
// `--experimental_use_hermetic_linux_sandbox`, which hermetizes the sandbox to
|
||||||
// the extreme: the sandbox has nothing that is not declared. /bin/sh and its
|
// the extreme: the sandbox has nothing that is not declared. /bin/sh and its
|
||||||
// dependencies (/lib/x86_64-linux-gnu/libc.so.6 on my system) are obviously
|
// dependencies (/lib/x86_64-linux-gnu/libc.so.6 on my system) are obviously
|
||||||
@ -67,7 +67,7 @@ const EXE = switch (builtin.target.os.tag) {
|
|||||||
else => "",
|
else => "",
|
||||||
};
|
};
|
||||||
|
|
||||||
const CACHE_DIR = "{BAZEL_ZIG_CC_CACHE_PREFIX}";
|
const CACHE_DIR = "{HERMETIC_CC_TOOLCHAIN_CACHE_PREFIX}";
|
||||||
|
|
||||||
const usage_cpp =
|
const usage_cpp =
|
||||||
\\
|
\\
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# Copyright 2023 Uber Technologies, Inc.
|
# Copyright 2023 Uber Technologies, Inc.
|
||||||
# Licensed under the MIT License
|
# Licensed under the MIT License
|
||||||
|
|
||||||
load("@bazel-zig-cc//toolchain/libc:defs.bzl", "declare_libcs")
|
load("@hermetic_cc_toolchain//toolchain/libc:defs.bzl", "declare_libcs")
|
||||||
|
|
||||||
package(
|
package(
|
||||||
default_visibility = ["//visibility:public"],
|
default_visibility = ["//visibility:public"],
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# Copyright 2023 Uber Technologies, Inc.
|
# Copyright 2023 Uber Technologies, Inc.
|
||||||
# Licensed under the MIT License
|
# Licensed under the MIT License
|
||||||
|
|
||||||
load("@bazel-zig-cc//toolchain/private:defs.bzl", "LIBCS")
|
load("@hermetic_cc_toolchain//toolchain/private:defs.bzl", "LIBCS")
|
||||||
|
|
||||||
def declare_libcs():
|
def declare_libcs():
|
||||||
for libc in LIBCS:
|
for libc in LIBCS:
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# Copyright 2023 Uber Technologies, Inc.
|
# Copyright 2023 Uber Technologies, Inc.
|
||||||
# Licensed under the MIT License
|
# Licensed under the MIT License
|
||||||
|
|
||||||
load("@bazel-zig-cc//toolchain/platform:defs.bzl", "declare_libc_aware_platforms")
|
load("@hermetic_cc_toolchain//toolchain/platform:defs.bzl", "declare_libc_aware_platforms")
|
||||||
|
|
||||||
package(
|
package(
|
||||||
default_visibility = ["//visibility:public"],
|
default_visibility = ["//visibility:public"],
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# Copyright 2023 Uber Technologies, Inc.
|
# Copyright 2023 Uber Technologies, Inc.
|
||||||
# Licensed under the MIT License
|
# Licensed under the MIT License
|
||||||
|
|
||||||
load("@bazel-zig-cc//toolchain/toolchain:defs.bzl", "declare_libc_aware_toolchains")
|
load("@hermetic_cc_toolchain//toolchain/toolchain:defs.bzl", "declare_libc_aware_toolchains")
|
||||||
|
|
||||||
package(
|
package(
|
||||||
default_visibility = ["//visibility:public"],
|
default_visibility = ["//visibility:public"],
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
load("@bazel-zig-cc//toolchain/platform:defs.bzl", "declare_platforms")
|
load("@hermetic_cc_toolchain//toolchain/platform:defs.bzl", "declare_platforms")
|
||||||
|
|
||||||
package(
|
package(
|
||||||
default_visibility = ["//visibility:public"],
|
default_visibility = ["//visibility:public"],
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
load("@bazel-zig-cc//toolchain/private:defs.bzl", "LIBCS")
|
load("@hermetic_cc_toolchain//toolchain/private:defs.bzl", "LIBCS")
|
||||||
|
|
||||||
_CPUS = (("x86_64", "amd64"), ("aarch64", "arm64"))
|
_CPUS = (("x86_64", "amd64"), ("aarch64", "arm64"))
|
||||||
_OS = {
|
_OS = {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
load(":defs.bzl", "target_structs", "zig_tool_path")
|
load(":defs.bzl", "target_structs", "zig_tool_path")
|
||||||
load("@bazel-zig-cc//toolchain:zig_toolchain.bzl", "zig_cc_toolchain_config")
|
load("@hermetic_cc_toolchain//toolchain:zig_toolchain.bzl", "zig_cc_toolchain_config")
|
||||||
|
|
||||||
DEFAULT_TOOL_PATHS = {
|
DEFAULT_TOOL_PATHS = {
|
||||||
"ar": "ar",
|
"ar": "ar",
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
load("@bazel-zig-cc//toolchain/toolchain:defs.bzl", "declare_toolchains")
|
load("@hermetic_cc_toolchain//toolchain/toolchain:defs.bzl", "declare_toolchains")
|
||||||
|
|
||||||
package(
|
package(
|
||||||
default_visibility = ["//visibility:public"],
|
default_visibility = ["//visibility:public"],
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
load("@bazel-zig-cc//toolchain/private:defs.bzl", "target_structs")
|
load("@hermetic_cc_toolchain//toolchain/private:defs.bzl", "target_structs")
|
||||||
|
|
||||||
def declare_toolchains():
|
def declare_toolchains():
|
||||||
for target_config in target_structs():
|
for target_config in target_structs():
|
||||||
|
@ -7,7 +7,7 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")
|
|||||||
go_library(
|
go_library(
|
||||||
name = "releaser_lib",
|
name = "releaser_lib",
|
||||||
srcs = ["main.go"],
|
srcs = ["main.go"],
|
||||||
importpath = "github.com/uber/bazel-zig-cc/tools/releaser",
|
importpath = "github.com/uber/hermetic_cc_toolchain/tools/releaser",
|
||||||
visibility = ["//visibility:private"],
|
visibility = ["//visibility:private"],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -1 +1 @@
|
|||||||
workspace(name = "bazel-zig-cc")
|
workspace(name = "hermetic_cc_toolchain")
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
// Copyright 2023 Uber Technologies, Inc.
|
// Copyright 2023 Uber Technologies, Inc.
|
||||||
// Licensed under the MIT License
|
// Licensed under the MIT License
|
||||||
|
|
||||||
// releaser is a tool for managing part of the process to release a new version of bazel-zig-cc.
|
// releaser is a tool for managing part of the process to release a new version of hermetic_cc_toolchain.
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
@ -50,7 +50,7 @@ func run() (_err error) {
|
|||||||
tag string
|
tag string
|
||||||
)
|
)
|
||||||
|
|
||||||
flag.StringVar(&repoRoot, "repo_root", os.Getenv("BUILD_WORKSPACE_DIRECTORY"), "root directory of bazel-zig-cc repo")
|
flag.StringVar(&repoRoot, "repo_root", os.Getenv("BUILD_WORKSPACE_DIRECTORY"), "root directory of hermetic_cc_toolchain repo")
|
||||||
flag.StringVar(&tag, "tag", "", "tag for this release")
|
flag.StringVar(&tag, "tag", "", "tag for this release")
|
||||||
|
|
||||||
flag.Usage = func() {
|
flag.Usage = func() {
|
||||||
@ -93,7 +93,7 @@ This utility is intended to handle many of the steps to release a new version.
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fpath := path.Join(repoRoot, fmt.Sprintf("bazel-zig-cc-%s.tar.gz", tag))
|
fpath := path.Join(repoRoot, fmt.Sprintf("hermetic_cc_toolchain-%s.tar.gz", tag))
|
||||||
tgz, err := os.Create(fpath)
|
tgz, err := os.Create(fpath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -119,7 +119,7 @@ This utility is intended to handle many of the steps to release a new version.
|
|||||||
"archive",
|
"archive",
|
||||||
"--format=tar",
|
"--format=tar",
|
||||||
// WORKSPACE in the resulting tarball needs to be much
|
// WORKSPACE in the resulting tarball needs to be much
|
||||||
// smaller than of bazel-zig-cc. See #15.
|
// smaller than of hermetic_cc_toolchain. See #15.
|
||||||
"--add-file=tools/releaser/WORKSPACE",
|
"--add-file=tools/releaser/WORKSPACE",
|
||||||
tag,
|
tag,
|
||||||
}, _paths...)...,
|
}, _paths...)...,
|
||||||
@ -151,15 +151,15 @@ func genBoilerplate(version, shasum string) string {
|
|||||||
return fmt.Sprintf(`load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
|
return fmt.Sprintf(`load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
|
||||||
|
|
||||||
http_archive(
|
http_archive(
|
||||||
name = "bazel-zig-cc",
|
name = "hermetic_cc_toolchain",
|
||||||
sha256 = "%[2]s",
|
sha256 = "%[2]s",
|
||||||
urls = [
|
urls = [
|
||||||
"https://mirror.bazel.build/github.com/uber/bazel-zig-cc/releases/download/%[1]s/bazel-zig-cc-%[1]s.tar.gz",
|
"https://mirror.bazel.build/github.com/uber/hermetic_cc_toolchain/releases/download/%[1]s/hermetic_cc_toolchain-%[1]s.tar.gz",
|
||||||
"https://github.com/uber/bazel-zig-cc/releases/download/%[1]s/bazel-zig-cc-%[1]s.tar.gz",
|
"https://github.com/uber/hermetic_cc_toolchain/releases/download/%[1]s/hermetic_cc_toolchain-%[1]s.tar.gz",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
load("@bazel-zig-cc//toolchain:defs.bzl", zig_toolchains = "toolchains")
|
load("@hermetic_cc_toolchain//toolchain:defs.bzl", zig_toolchains = "toolchains")
|
||||||
|
|
||||||
# plain zig_toolchains() will pick reasonable defaults. See
|
# plain zig_toolchains() will pick reasonable defaults. See
|
||||||
# toolchain/defs.bzl:toolchains on how to change the Zig SDK path and version.
|
# toolchain/defs.bzl:toolchains on how to change the Zig SDK path and version.
|
||||||
|
Loading…
Reference in New Issue
Block a user