ya-ar/support/zig.nix
2026-02-10 21:24:16 +09:00

80 lines
2.3 KiB
Nix

{ pkgs
, system ? "x86_64-linux"
, ...
}:
let
zig = {
x86_64-linux = builtins.fetchTarball {
url = "https://ziglang.org/download/0.15.1/zig-x86_64-linux-0.15.1.tar.xz";
sha256 = "0yar24a1qjg503czwnkdipky1cfb08k0mm9c8gwv827d33df1070";
};
aarch64-linux = builtins.fetchTarball {
url = "https://ziglang.org/download/0.15.1/zig-aarch64-linux-0.15.1.tar.xz";
sha256 = "19vcv7a1scm4wpj5cgv3dmzajz37fdyx5x1inxfgxzsavbmvq3zy";
};
}.${system};
make-cc-wrapper = trg: pkgs.writeShellScript "zig-cc-${trg}" ''
if [ ! -d "$HOME" ]; then
export ZIG_GLOBAL_CACHE_DIR=/build/.zig-cache
export ZIG_LOCAL_CACHE_DIR=/build/.zig-cache-local
fi
args=()
for arg in "$@"; do
if [[ "$skip_next" == true ]]; then
skip_next=false
continue
fi
if [[ "$arg" != --target=* ]] && \
[[ "$arg" != -framework ]] && \
[[ "$arg" != CoreFoundation ]] && \
[[ "$arg" != Foundation ]] && \
[[ "$arg" != *CoreFoundation* ]] && \
[[ "$arg" != *Foundation* ]] && \
[[ "$arg" != -F ]] && \
[[ "$arg" != -F* ]]; then
args+=("$arg")
elif [[ "$arg" == -framework ]] || [[ "$arg" == -F ]]; then
skip_next=true
fi
done
exec "${zig}/zig" cc -fdebug-prefix-map=${toString zig}=/zig -target ${trg} "''${args[@]}"
'';
make-ar-wrapper = pkgs.writeShellScript "zig-ar" ''
if [ ! -d "$HOME" ]; then
export ZIG_GLOBAL_CACHE_DIR=/build/.zig-cache
export ZIG_LOCAL_CACHE_DIR=/build/.zig-cache-local
fi
exec "${zig}/zig" ar "$@"
'';
make-ranlib-wrapper = pkgs.writeShellScript "zig-ranlib" ''
if [ ! -d "$HOME" ]; then
export ZIG_GLOBAL_CACHE_DIR=/build/.zig-cache
export ZIG_LOCAL_CACHE_DIR=/build/.zig-cache-local
fi
exec "${zig}/zig" ranlib "$@"
'';
in
pkgs.stdenvNoCC.mkDerivation {
name = "yaar-zig";
src = zig;
nativeBuildInputs = [ pkgs.coreutils ];
dontConfigure = true;
dontBuild = true;
installPhase = ''
mkdir -p "$out/bin"
cp -r "./." "$out"
cp ${make-cc-wrapper "x86_64-linux-musl"} "$out/bin/zig-cc-amd64-linux"
cp ${make-cc-wrapper "aarch64-linux-musl"} "$out/bin/zig-cc-arm64-linux"
cp ${make-ar-wrapper} "$out/bin/zig-ar"
cp ${make-ranlib-wrapper} "$out/bin/zig-ranlib"
'';
}