feat: Zig 0.16.0 compatibility#225
Open
gilbertwong96 wants to merge 5 commits into
Open
Conversation
The Zig standard library had a major restructuring in 0.16.0, primarily around the new Io abstraction. This updates all source files to use the new APIs: - std.process.getEnvVarOwned → b.graph.environ_map.get (build.zig) and std.process.Environ (runtime) - std.fs.cwd() → std.Io.Dir.cwd() - File methods (close, stat, writer, reader) now take io: Io parameter - std.fs.getAppDataDir removed; replaced with manual XDG/platform logic - std.process.execve → std.process.replace - Build module methods (addIncludePath, addCSourceFile, linkSystemLibrary) moved from Compile step to root_module - main() accepts std.process.Init for Io and Environ access Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
9536c44 to
1ac8e20
Compare
37db26f to
4cd733b
Compare
|
Any reason you dropped support for glibc and went musl only? |
Author
Yeah, this branch still contains non-sense change for debug and test purposes, I will sort out branch to remove non sense changes and then force push them. |
4f5a854 to
0b950fe
Compare
Author
|
Force pushed |
Cross-compilation fixes (Zig 0.16.0 API changes): - Replace std.c.stat with Io.Dir.cwd().statFile - Rename Permissions.unixNew → Permissions.fromMode - Remove unused arena parameter from maybe_install_musl_runtime - Comptime-guard the musl runtime call site on macOS - Guard Permissions.toMode() on Windows (enum, no POSIX mode bits) Process spawning (cross-platform): - Replace std.process.replace with std.process.spawn + child.wait (std.process.replace does not work reliably on macOS arm64) - Unify Windows/Unix code paths via the same spawn+wait pattern CI: - Add Zig 0.16.0 to the cross-build matrix - Add macOS arm64 (macos-14) runner
Passing '-elixir ansi_enabled true' and '-s elixir start_cli' as single argv entries (with embedded spaces) caused the BEAM to hang in __select when spawned via std.process.spawn on macOS. erlexec passes them through to beam.smp as-is, and beam.smp doesn't split space-delimited args. Splitting them into separate argv entries fixes the hang.
0b950fe to
0f9761b
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Updates the Zig wrapper to compile and run on Zig 0.16.0.
Zig 0.16.0 API changes:
std.c.stat→Io.Dir.cwd().statFile(cross-compile fix)Permissions.unixNew→Permissions.fromModePermissions.toMode()on Windows (enum, no POSIX mode bits)arenaparameter frommaybe_install_musl_runtimeProcess spawning:
std.process.replacewithspawn+child.wait(replace hangs on macOS arm64 in 0.16.0)Bug fix:
"-elixir ansi_enabled true"and"-s elixir start_cli"into separate argv entries — passing them as single strings caused the BEAM to hang in__selecton macOSCI:
Builds on #224 by @jsmestad. Closes #221.