eced0109ca
Until now we needed to maintain two versions of the zig launcher: one for Windows and one for everything else. This was problematic for two reasons: 1. I do not know powershell and thus keep breaking the Windows wrapper all the time (see git history of Fabian fixing stuff that I broke). 2. This makes bazel-zig-cc dependent on the system shell, making it not really hermetic. So the recently added `--experimental_use_hermetic_linux_sandbox` does not work with bazel-zig-cc, unless we bind-mount a bunch of stuff: `/usr`, `/bin`, `/lib`, `/usr/lib:/lib`, `/usr/lib64:/lib64` and `/proc`. Switching to a Zig-based wrapper solves both issues, and we can do this: bazel build "$@" \ --experimental_use_hermetic_linux_sandbox \ --sandbox_add_mount_pair=/proc \ <...> Zig itself still depends on `/proc` for `/proc/self/exe`, so we need to keep that. I will look into reducing even that dependency separately. Not all is nice and shiny though: this commit replaces ~80 LOC worth of shell scripts wrappers with a singe ~300 LOC zig program, which is arguably harder to understand. However, it is easier to change, at least for me, because it's a single file with unit tests! Most importantly, the gnarly code (which resolves paths and sets environment variables) is cross-platform. Thanks to Fabian Hahn for testing this on Windows and pointing out errors.
16 lines
408 B
Bash
Executable File
16 lines
408 B
Bash
Executable File
#!/usr/bin/env bash
|
|
set -xeuo pipefail
|
|
|
|
ZIG=${ZIG:-bazel run "$@" @zig_sdk//:zig --}
|
|
|
|
# until bazel-zig-cc gets a zig toolchain, run launcher's unit tests here.
|
|
$ZIG test toolchain/launcher.zig
|
|
|
|
# ReleaseSafe because of https://github.com/ziglang/zig/issues/14036
|
|
$ZIG test \
|
|
-OReleaseSafe \
|
|
-target x86_64-windows-gnu \
|
|
--test-cmd wine64-stable \
|
|
--test-cmd-bin \
|
|
toolchain/launcher.zig
|