Subject: bug#74217: Bootstrapping Zig with no Binary Blobs

From: Hilton Chain <[email-masked]>
Date: Thu, 14 Nov 2024 17:22:17 +0800

On Thu, 14 Nov 2024 14:05:52 +0800,
Hilton Chain wrote:
>
> Currently I'm 1. modifying each-lib-rpath option of 'zig build'.  2. passing
> libc to linker.  I'll write details on this when succeed.

1. Modification about each-lib-rpath.
--8<---------------cut here---------------start------------->8---
-feach-lib-rpath               Ensure adding rpath for each used dynamic library
--8<---------------cut here---------------end--------------->8---

This option is on implicitly for native builds.  This implicity is what our Zig
currently solely relies on.

I'm modifying it so that it's also on when CROSS_LIBRARY_PATH or LIBRARY_PATH is
set.  This approach is better than my previous one since it only adds needed
libraries.

2. Pass libc to Zig's linker
This was the behavior in 0.9, but changed due to issue on macOS[1].  (btw, our
CPLUS_INCLUDE_PATH also has issue with macOS target[2]).  RUNPATH for glibc was
missing because of this, since it's the linker handling each-lib-rpath.

Since we do not support macOS anyway, can we restore this behavior?

I also have concern for Zig's relying on /usr/bin/env (Zig uses an ELF file to
find dynamic linker, env is chosen for it's well-known).  We have patched this
reference, not sure if it will cause issue for cross-building Zig.

Thanks
---
[1]: https://github.com/ziglang/zig/issues/10765
[2]: https://github.com/ziglang/zig/issues/18063