ci: drop nix libiconv from darwin build (portable macOS binary)
The smoke-test caught the aarch64 binary linking a /nix/store libiconv.dylib — non-portable (won't exist on a user's Mac). The Apple SDK already provides a system libiconv stub, so removing pkgs.libiconv makes the linker resolve -liconv to /usr/lib instead. The smoke-test now fails if any /nix/store dylib is linked.
This commit is contained in:
@@ -34,6 +34,12 @@ jobs:
|
|||||||
f="target/$t/release/rdbms-playground"
|
f="target/$t/release/rdbms-playground"
|
||||||
file "$f"
|
file "$f"
|
||||||
echo "--- linked libs (otool -L) ---"
|
echo "--- linked libs (otool -L) ---"
|
||||||
otool -L "$f" 2>/dev/null | head -8 || true
|
otool -L "$f"
|
||||||
|
# Portability guard: a distributable macOS binary must link only
|
||||||
|
# system libs (/usr/lib, /System/Library) — never a /nix/store path.
|
||||||
|
if otool -L "$f" | grep -q /nix/store; then
|
||||||
|
echo "ERROR: $t binary links a /nix/store dylib — not portable"; exit 1
|
||||||
|
fi
|
||||||
|
echo "OK: $t links only system libraries"
|
||||||
done
|
done
|
||||||
echo "=== both darwin targets built ==="
|
echo "=== both darwin targets built + portable ==="
|
||||||
|
|||||||
@@ -62,12 +62,13 @@
|
|||||||
devShells.default = pkgs.mkShell {
|
devShells.default = pkgs.mkShell {
|
||||||
buildInputs = buildInputs ++ pkgs.lib.optionals pkgs.stdenv.isDarwin [
|
buildInputs = buildInputs ++ pkgs.lib.optionals pkgs.stdenv.isDarwin [
|
||||||
# macOS release builds (aarch64/x86_64-apple-darwin) link AppKit
|
# macOS release builds (aarch64/x86_64-apple-darwin) link AppKit
|
||||||
# (arboard) + libSystem; the nix toolchain's own clang resolves the
|
# (arboard) + libSystem; the Apple SDK provides those framework/
|
||||||
# frameworks via the Apple SDK provided here. (The Mac runner also
|
# system-lib stubs as *system* paths (/usr/lib, /System/Library), so
|
||||||
# has full Xcode, but the devShell stays self-contained.) `libiconv`
|
# the resulting binary is portable. NOTE: do NOT add `pkgs.libiconv`
|
||||||
# is linked by several crates on darwin.
|
# — it makes the linker prefer the nix-store libiconv.dylib, baking a
|
||||||
|
# /nix/store path into the binary (non-portable). The SDK's own
|
||||||
|
# libiconv stub resolves `-liconv` to /usr/lib/libiconv instead.
|
||||||
pkgs.apple-sdk
|
pkgs.apple-sdk
|
||||||
pkgs.libiconv
|
|
||||||
];
|
];
|
||||||
nativeBuildInputs = nativeBuildInputs ++ [
|
nativeBuildInputs = nativeBuildInputs ++ [
|
||||||
rust
|
rust
|
||||||
|
|||||||
Reference in New Issue
Block a user