Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Support ABI selection and transition #169

Merged
merged 7 commits into from
Dec 28, 2023
Merged

feat: Support ABI selection and transition #169

merged 7 commits into from
Dec 28, 2023

Conversation

aherrmann
Copy link
Owner

The ABI (libc type and version) is taken from the ABI component of the target triple. Hence, no real additional support is required. The existing target selection support is sufficient.

However, Bazel's bazelbuild/platforms does not capture ABI constraints. Therefore, we add an ABI constraint setting and constraint values to rules_zig. Note, that users do not necessarily have to use these. If needed they can define their own ABI constraint setting and values and define and register toolchains using these targets.

The default ABI was previously left undeclared in the toolchain declarations. This is changed to default to GNU on Linux and Windows and none on MacOS. Previously, Zig would default to musl on Linux, which is not a bad choice in general, but causes issues when trying to combine Zig generated binaries with Bazel built C/C++ binaries. If users want to use musl then they can do so by explicitly configuring a target platform that sets the musl abi constraint.

Closes #54
Closes #55

  • Add ABI constraint values
  • Zig renamed i386 --> x86
  • Define toolchains for different ABIs
  • Update generated files
  • Fix target platform tests
  • Add ABI variations to target platform tests

@aherrmann aherrmann merged commit 0dfa6a4 into main Dec 28, 2023
21 checks passed
@aherrmann aherrmann deleted the abi branch December 28, 2023 18:53
aherrmann added a commit that referenced this pull request May 10, 2024
This is reportedly the lowest glibc version number that Zig's own
standard library supports, see
https://github.com/ziglang/zig/blob/0.12.0/lib/libc/glibc/README.md?plain=1#L33-L34.

Note, users can configure their own glibc version, see
#169.

Without this change the test at `//zig/runfiles:test` failed on the
BuildBuddy default remote execution Docker image with an error of the
form
```
/buildbuddy/remotebuilds/ace1eb7e-d203-470d-978b-3e7634972e45/bazel-out/k8-fastbuild/bin/zig/runfiles/test.runfiles/_main/zig/runfiles/test: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.25' not found (required by /buildbuddy/remotebuilds/ace1eb7e-d203-470d-978b-3e7634972e45/bazel-out/k8-fastbuild/bin/zig/runfiles/test.runfiles/_main/zig/runfiles/test)
```

BREAKING CHANGE: The default glibc version is now pinned at 2.17.
aherrmann added a commit that referenced this pull request May 10, 2024
This is reportedly the lowest glibc version number that Zig's own
standard library supports, see
https://github.com/ziglang/zig/blob/0.12.0/lib/libc/glibc/README.md?plain=1#L33-L34.

Note, users can configure their own glibc version, see
#169.

Without this change the test at `//zig/runfiles:test` failed on the
BuildBuddy default remote execution Docker image with an error of the
form
```
/buildbuddy/remotebuilds/ace1eb7e-d203-470d-978b-3e7634972e45/bazel-out/k8-fastbuild/bin/zig/runfiles/test.runfiles/_main/zig/runfiles/test: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.25' not found (required by /buildbuddy/remotebuilds/ace1eb7e-d203-470d-978b-3e7634972e45/bazel-out/k8-fastbuild/bin/zig/runfiles/test.runfiles/_main/zig/runfiles/test)
```

BREAKING CHANGE: The default glibc version is now pinned at 2.17.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Support libc transition Support libc selection
1 participant