zig: split cc and bintools wrappers

This commit is contained in:
Tristan Ross
2024-12-22 19:48:01 -08:00
parent 50e0d27a0e
commit 2ca29c56ef
4 changed files with 90 additions and 73 deletions

View File

@@ -0,0 +1,34 @@
{
lib,
stdenv,
zig,
runCommand,
makeWrapper,
}:
let
targetPrefix = lib.optionalString (
stdenv.hostPlatform != stdenv.targetPlatform
) "${stdenv.targetPlatform.config}-";
in
runCommand "zig-bintools-${zig.version}"
{
pname = "zig-bintools";
inherit (zig) version meta;
nativeBuildInputs = [ makeWrapper ];
passthru = {
isZig = true;
inherit targetPrefix;
};
inherit zig;
}
''
mkdir -p $out/bin
for tool in ar objcopy ranlib; do
makeWrapper "$zig/bin/zig" "$out/bin/${targetPrefix}$tool" \
--add-flags "$tool" \
--run "export ZIG_GLOBAL_CACHE_DIR=\$(mktemp -d)"
done
''

View File

@@ -1,76 +1,38 @@
{
lib,
wrapCCWith,
wrapBintoolsWith,
makeWrapper,
stdenv,
runCommand,
stdenv,
targetPackages,
zig,
stdenv,
makeWrapper,
}:
wrapCCWith {
cc =
runCommand "zig-cc-${zig.version}"
{
pname = "zig-cc";
inherit (zig) version meta;
let
targetPrefix = lib.optionalString (
stdenv.hostPlatform != stdenv.targetPlatform
) "${stdenv.targetPlatform.config}-";
in
runCommand "zig-cc-${zig.version}"
{
pname = "zig-cc";
inherit (zig) version meta;
nativeBuildInputs = [ makeWrapper ];
nativeBuildInputs = [ makeWrapper ];
passthru.isZig = true;
inherit zig;
}
''
mkdir -p $out/bin
for tool in cc c++; do
makeWrapper "$zig/bin/zig" "$out/bin/$tool" \
--add-flags "$tool" \
--run "export ZIG_GLOBAL_CACHE_DIR=\$(mktemp -d)"
done
mv $out/bin/c++ $out/bin/clang++
mv $out/bin/cc $out/bin/clang
'';
bintools =
let
targetPrefix = lib.optionalString (
stdenv.hostPlatform != stdenv.targetPlatform
) "${stdenv.targetPlatform.config}-";
in
wrapBintoolsWith {
bintools =
runCommand "zig-bintools-${zig.version}"
{
pname = "zig-bintools";
inherit (zig) version meta;
nativeBuildInputs = [ makeWrapper ];
passthru = {
isZig = true;
inherit targetPrefix;
};
inherit zig;
}
''
mkdir -p $out/bin
for tool in ar objcopy; do
makeWrapper "$zig/bin/zig" "$out/bin/${targetPrefix}-$tool" \
--add-flags "$tool" \
--run "export ZIG_GLOBAL_CACHE_DIR=\$(mktemp -d)"
done
'';
passthru = {
isZig = true;
inherit targetPrefix;
};
nixSupport.cc-cflags =
[
"-target"
"${stdenv.targetPlatform.parsed.cpu.name}-${stdenv.targetPlatform.parsed.kernel.name}-${stdenv.targetPlatform.parsed.abi.name}"
]
++ lib.optional (
stdenv.targetPlatform.isLinux && !(targetPackages.isStatic or false)
) "-Wl,-dynamic-linker=${targetPackages.stdenv.cc.bintools.dynamicLinker}";
}
inherit zig;
}
''
mkdir -p $out/bin
for tool in cc c++ ld.lld; do
makeWrapper "$zig/bin/zig" "$out/bin/${targetPrefix}$tool" \
--add-flags "$tool" \
--run "export ZIG_GLOBAL_CACHE_DIR=\$(mktemp -d)"
done
mv $out/bin/${targetPrefix}c++ $out/bin/${targetPrefix}clang++
mv $out/bin/${targetPrefix}cc $out/bin/${targetPrefix}clang
mv $out/bin/${targetPrefix}ld.lld $out/bin/${targetPrefix}ld
''

View File

@@ -4,6 +4,7 @@
fetchFromGitHub,
cmake,
llvmPackages,
targetPackages,
libxml2,
zlib,
coreutils,
@@ -11,6 +12,9 @@
version,
hash,
patches ? [ ],
overrideCC,
wrapCCWith,
wrapBintoolsWith,
}@args:
stdenv.mkDerivation (finalAttrs: {
@@ -136,6 +140,29 @@ stdenv.mkDerivation (finalAttrs: {
runHook postInstallCheck
'';
passthru = {
hook = callPackage ./hook.nix { zig = finalAttrs.finalPackage; };
bintools-unwrapped = callPackage ./bintools.nix { zig = finalAttrs.finalPackage; };
bintools = wrapBintoolsWith { bintools = finalAttrs.finalPackage.bintools-unwrapped; };
cc-unwrapped = callPackage ./cc.nix { zig = finalAttrs.finalPackage; };
cc = wrapCCWith {
cc = finalAttrs.finalPackage.cc-unwrapped;
bintools = finalAttrs.finalPackage.bintools;
nixSupport.cc-cflags =
[
"-target"
"${stdenv.targetPlatform.parsed.cpu.name}-${stdenv.targetPlatform.parsed.kernel.name}-${stdenv.targetPlatform.parsed.abi.name}"
]
++ lib.optional (
stdenv.targetPlatform.isLinux && !(stdenv.targetPlatform.isStatic or false)
) "-Wl,-dynamic-linker=${targetPackages.stdenv.cc.bintools.dynamicLinker}";
};
stdenv = overrideCC stdenv finalAttrs.finalPackage.cc;
};
meta = {
description = "General-purpose programming language and toolchain for maintaining robust, optimal, and reusable software";
homepage = "https://ziglang.org/";

View File

@@ -1,6 +0,0 @@
{
stdenv,
overrideCC,
zig,
}:
overrideCC stdenv zig.cc