1

README updates

- more robust transient docker environment
- clarify platform vs subset
This commit is contained in:
Motiejus Jakštys 2022-04-21 08:31:24 +03:00
parent d4f40a19fb
commit 0e62918e88

View File

@ -98,7 +98,8 @@ compatible with (in Bazelspeak, `target_compatible_with`) **all of the**
### Option `--toolchains=@zig_sdk//toolchain:linux_arm64_musl` ### Option `--toolchains=@zig_sdk//toolchain:linux_arm64_musl`
Inspect first: Inspect first (`@platforms//cpu:aarch64` is an alias to
`@platforms//cpu:arm64`):
``` ```
$ bazel query --output=build @zig_sdk//toolchain:linux_arm64_musl $ bazel query --output=build @zig_sdk//toolchain:linux_arm64_musl
@ -108,22 +109,16 @@ toolchain(
generator_function = "declare_toolchains", generator_function = "declare_toolchains",
generator_location = "toolchain/BUILD:7:19", generator_location = "toolchain/BUILD:7:19",
toolchain_type = "@bazel_tools//tools/cpp:toolchain_type", toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
target_compatible_with = [ target_compatible_with = ["@platforms//os:linux", "@platforms//cpu:aarch64", "@zig_sdk//libc:unconstrained"],
"@platforms//os:linux",
"@platforms//cpu:aarch64",
"@zig_sdk//libc:unconstrained",
],
toolchain = "@zig_sdk//private:aarch64-linux-musl_cc", toolchain = "@zig_sdk//private:aarch64-linux-musl_cc",
) )
``` ```
The above means toolchain is compatible with platforms that include For a platform to pick up the right toolchain, the platform's
`@platforms//os:linux`, `@platforms//cpu:aarch64` (an alias to `constraint_values` must be a subset[^1] of the toolchain's
`@platforms//cpu:arm64`) and `@zig_sdk//libc:unconstrained`. For a platform to `target_compatible_with`. Since the platform is a subset (therefore,
pick up the right toolchain, the toolchain's `target_compatible_with` must be toolchain's `@zig_sdk//libc:unconstrained` does not matter), this toolchain is
equivalent or a superset to the platforms `constraint_values`. Since the selected for this platform. As a result, `--platforms
toolchain is a superset (therefore, `libc:unconstrained` does not matter here),
the platform is compatible with this toolchain. As a result, `--platforms
@zig_sdk//platform:linux_amd64` causes Bazel to select a toolchain @zig_sdk//platform:linux_amd64` causes Bazel to select a toolchain
`@zig_sdk//platform:linux_arm64_musl` (because it satisfies all constraints), `@zig_sdk//platform:linux_arm64_musl` (because it satisfies all constraints),
which will compile and link the C/C++ code with musl. which will compile and link the C/C++ code with musl.
@ -343,24 +338,35 @@ may apply to aarch64, but the author didn't find a need to test it (yet).
- [rules/go #2894 Per-arch_target linker flags](https://github.com/bazelbuild/rules_go/issues/2894) (CLOSED, thanks mjonaitis) - [rules/go #2894 Per-arch_target linker flags](https://github.com/bazelbuild/rules_go/issues/2894) (CLOSED, thanks mjonaitis)
- [golang/go #46644 cmd/link: with CC=zig: SIGSERV when cross-compiling to darwin/amd64](https://github.com/golang/go/issues/46644) (CLOSED, thanks kubkon) - [golang/go #46644 cmd/link: with CC=zig: SIGSERV when cross-compiling to darwin/amd64](https://github.com/golang/go/issues/46644) (CLOSED, thanks kubkon)
# Testing # Host Environments
This repository is used on the following (host) platforms:
- `linux_amd64`, a.k.a. `x86_64`.
- `linux_arm64`, a.k.a. `AArch64`.
- `darwin_amd64`, the post-PowerPC models.
- `darwin_arm64`, the M1.
The tests are running (CId) on linux-amd64, and are assuming the kernel is
configured to run arm64 binaries. There are two reasonably convenient ways to
configure arm64 emulation:
- `$ apt install qemu-user-static binfmt-support`; this should correctly setup
`binfmt_misc`.
- `$ docker run --rm --privileged multiarch/qemu-user-static --reset -p yes`.
## Transient docker environment ## Transient docker environment
First of all, make sure that your kernel is configured to run arm64 binaries. A standalone Docker environment to play with bazel-zig-cc:
You can either `apt install qemu-user-static binfmt-support`; this should setup
`binfmt_misc` to handle arm64 binaries. Or you can use this handy dockerized
script `docker run --rm --privileged multiarch/qemu-user-static --reset -p yes`.
``` ```
$ docker run -e CC=/usr/bin/false -ti --rm -v $(git rev-parse --show-toplevel):/x -w /x debian:bullseye-slim $ docker run -e CC=/usr/bin/false -ti --rm -v "$PWD:/x" -w /x debian:bullseye-slim
# dpkg --add-architecture arm64 && apt update && apt install -y direnv git shellcheck libc6:arm64 # dpkg --add-architecture arm64 && apt update
# . .envrc # apt install --no-install-recommends -y direnv git shellcheck ca-certificates libc6:arm64
# eval "$(direnv hook bash)" && direnv allow
# ./ci/test # ./ci/test
# ./ci/lint # ./ci/lint
``` ```
See `ci/test` for how tests are run.
# Questions & Contributions # Questions & Contributions
Project's mailing list is [~motiejus/bazel-zig-cc][mailing-list]. The mailing Project's mailing list is [~motiejus/bazel-zig-cc][mailing-list]. The mailing
@ -386,6 +392,8 @@ Many thanks to Adam Bouhenguel and his [bazel-zig-cc][ajbouh], the parent of
this repository. Also, the Zig team for making this all possible and handling this repository. Also, the Zig team for making this all possible and handling
the issues promptly. the issues promptly.
[^1]: a [mathematical subset][subset]: both can be equal.
[mailing-list]: https://lists.sr.ht/~motiejus/bazel-zig-cc [mailing-list]: https://lists.sr.ht/~motiejus/bazel-zig-cc
[ajbouh]: https://github.com/ajbouh/bazel-zig-cc/ [ajbouh]: https://github.com/ajbouh/bazel-zig-cc/
[git-send-email]: https://git-send-email.io/ [git-send-email]: https://git-send-email.io/
@ -394,3 +402,4 @@ the issues promptly.
[ubsan1]: https://github.com/ziglang/zig/issues/4830#issuecomment-605491606 [ubsan1]: https://github.com/ziglang/zig/issues/4830#issuecomment-605491606
[ubsan2]: https://github.com/ziglang/zig/issues/5163 [ubsan2]: https://github.com/ziglang/zig/issues/5163
[transitions]: https://docs.bazel.build/versions/main/skylark/config.html#user-defined-transitions [transitions]: https://docs.bazel.build/versions/main/skylark/config.html#user-defined-transitions
[subset]: https://en.wikipedia.org/wiki/Subset