From: Hilton Chain via Bug reports for GNU Guix <bug-guix@gnu.org>
To: 74217@debbugs.gnu.org
Cc: "Motiejus Jakštys" <motiejus@jakstys.lt>,
"Noé Lopez" <noe@xn--no-cja.eu>, dan <i@dan.games>,
"Efraim Flashner" <efraim@flashner.co.il>,
"Ekaitz Zarraga" <ekaitz@elenq.tech>
Subject: bug#74217: Bootstrapping Zig with no Binary Blobs
Date: Thu, 14 Nov 2024 00:46:59 +0800 [thread overview]
Message-ID: <87ldxngjy4.wl-hako@ultrarare.space> (raw)
In-Reply-To: <af98e6c6-57fe-4db0-af71-f7635c939884@elenq.tech>
Hello everyone,
With a new forced push (and new rebuilds, sorry), wip-zig-bootstrap is mostly
ready (for me) now. Please take a look at the first few commits, as I'm
changing Zig's behavior there, here are some additional notes:
To Efraim: Can adding pkg-config to native-inputs avoid the ncdu snippet?
I'm building this branch on my personal Cuirass instance[1][2], for x86_64-linux
and aarch64-linux (qemu-binfmt), in previous revisions I have indentified
reproduciblity issue, and aarch64 builds timed-out. I haven't investigated them
yet.
Then for what's the RUNPATH issue I have mentioned in commits:
+ For current zig@0.10 on Guix master: glibc is missing from RUNPATH, which
fails the validate-runpath check.
+ For zig@0.11, some other inputs are missing, making the binary failing to run on Guix[3].
+ dan also mentioned privately to me that they needed to add paths from
LIBRARY_PATH to RUNPATH for their own projects, so programs built by Zig is also
affected.
I think this is due to Zig's implemention of its own linking logic, which
bypasses our ld-wrapper.
I'm not going to implement ld-wrapper within Zig. :) So my proposed workaround
in wip-zig-bootstrap is to patch the handling logic added for Guix:
(In lib/std/zig/system/NativePaths.zig)
--8<---------------cut here---------------start------------->8---
// Distros like guix don't use FHS, so they rely on environment
// variables to search for headers and libraries.
// We use os.getenv here since this part won't be executed on
// windows, to get rid of unnecessary error handling.
- if (std.posix.getenv("C_INCLUDE_PATH")) |c_include_path| {
+ if (std.posix.getenv("CROSS_C_INCLUDE_PATH") orelse std.posix.getenv("C_INCLUDE_PATH")) |c_include_path| {
var it = mem.tokenizeScalar(u8, c_include_path, ':');
while (it.next()) |dir| {
try self.addIncludeDir(dir);
}
}
- if (std.posix.getenv("CPLUS_INCLUDE_PATH")) |cplus_include_path| {
+ if (std.posix.getenv("CROSS_CPLUS_INCLUDE_PATH") orelse std.posix.getenv("CPLUS_INCLUDE_PATH")) |cplus_include_path| {
var it = mem.tokenizeScalar(u8, cplus_include_path, ':');
while (it.next()) |dir| {
try self.addIncludeDir(dir);
}
}
- if (std.posix.getenv("LIBRARY_PATH")) |library_path| {
+ if (std.posix.getenv("CROSS_LIBRARY_PATH") orelse std.posix.getenv("LIBRARY_PATH")) |library_path| {
var it = mem.tokenizeScalar(u8, library_path, ':');
while (it.next()) |dir| {
try self.addLibDir(dir);
+ try self.addRPath(dir);
}
}
}
--8<---------------cut here---------------end--------------->8---
Adding directories from CROSS_LIBRARY_PATH or LIBRARY_PATH to RUNPATH, "CROSS_"
part is for our cross toolchain, I haven't tested it yet.
I think this behavior change is reasonable since the search path
(CROSS_)?LIBRARY_PATH is only automatically set by our compilers.
I added this change to 0.9 as well to make all Zigs behave consistently. I also
used shrink-runpath phase from meson-build-system in Zig and zig-build-system.
I want to move shrink-runpath to (guix build utils) and export it too, so that
it can be used easier. But I'm not sure if this change will trigger rebuilds of
other packages, so I didn't do it.
Thanks to Guile, for builds not managed by guix-daemon, something like the
following script can be used, we can ship a program-file if we agree on this
workaround.
--8<---------------cut here---------------start------------->8---
(use-modules (guix build meson-build-system))
(define shrink-runpath
(assoc-ref %standard-phases 'shrink-runpath))
(define (main directories)
(for-each (lambda (dir)
(false-if-exception
(shrink-runpath
#:elf-directories '(".")
#:outputs `(("out" . ,dir)))))
directories))
(main (cdr (command-line)))
--8<---------------cut here---------------end--------------->8---
Usage: guile <file-with-above-content> DIRECTORY...
Thanks
---
[1]: https://ci.boiledscript.com/jobset/guix-zig
[2]: https://substitute.boiledscript.com, if you want to challenge it.
[3]: https://github.com/ziglang/zig/issues/18434
next prev parent reply other threads:[~2024-11-13 16:48 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-05 21:47 bug#74217: Bootstrapping Zig with no Binary Blobs Ekaitz Zarraga
2024-11-07 1:19 ` Hilton Chain via Bug reports for GNU Guix
2024-11-07 22:06 ` Noé Lopez via Bug reports for GNU Guix
2024-11-07 22:09 ` Ekaitz Zarraga
2024-11-11 11:42 ` Efraim Flashner
2024-11-11 11:56 ` Hilton Chain via Bug reports for GNU Guix
2024-11-11 12:02 ` Efraim Flashner
2024-11-08 17:43 ` bug#74217: [PATCH 0/2] Initial step on bootstrapping Zig Hilton Chain via Bug reports for GNU Guix
2024-11-08 17:44 ` bug#74217: [PATCH 1/2] gnu: Add zig-0.10.0-610-bootstrap Hilton Chain via Bug reports for GNU Guix
2024-11-08 17:44 ` bug#74217: [PATCH 2/2] gnu: Add zig-0.10.0-610 Hilton Chain via Bug reports for GNU Guix
2024-11-09 17:26 ` bug#74217: [PATCH 0/2] Initial step on bootstrapping Zig Hilton Chain via Bug reports for GNU Guix
2024-11-13 16:46 ` Hilton Chain via Bug reports for GNU Guix [this message]
2024-11-13 18:10 ` bug#74217: Bootstrapping Zig with no Binary Blobs Efraim Flashner
2024-11-13 23:40 ` Hilton Chain via Bug reports for GNU Guix
2024-11-14 1:05 ` Hilton Chain via Bug reports for GNU Guix
2024-11-14 6:05 ` Hilton Chain via Bug reports for GNU Guix
2024-11-14 9:22 ` Hilton Chain via Bug reports for GNU Guix
2024-11-14 9:41 ` Efraim Flashner
2024-11-15 3:29 ` Hilton Chain via Bug reports for GNU Guix
2024-11-15 14:30 ` Hilton Chain via Bug reports for GNU Guix
2024-11-16 6:54 ` Hilton Chain via Bug reports for GNU Guix
2024-11-16 7:13 ` Motiejus Jakštys
2024-11-16 7:18 ` Hilton Chain via Bug reports for GNU Guix
2024-11-16 17:03 ` Efraim Flashner
2024-11-16 18:59 ` Hilton Chain via Bug reports for GNU Guix
2024-11-17 1:39 ` Hilton Chain via Bug reports for GNU Guix
2024-11-17 7:16 ` Efraim Flashner
2024-11-17 14:51 ` Hilton Chain via Bug reports for GNU Guix
2024-11-18 12:00 ` Hilton Chain via Bug reports for GNU Guix
2024-11-19 13:13 ` Hilton Chain via Bug reports for GNU Guix
2024-11-21 13:06 ` Hilton Chain via Bug reports for GNU Guix
2024-11-14 9:47 ` Motiejus Jakštys
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://guix.gnu.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87ldxngjy4.wl-hako@ultrarare.space \
--to=bug-guix@gnu.org \
--cc=74217@debbugs.gnu.org \
--cc=efraim@flashner.co.il \
--cc=ekaitz@elenq.tech \
--cc=hako@ultrarare.space \
--cc=i@dan.games \
--cc=motiejus@jakstys.lt \
--cc=noe@xn--no-cja.eu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).