From 65c81d4eaec6dc8acf7c5b84caf55fc029442f45 Mon Sep 17 00:00:00 2001 From: Tristan Ross Date: Fri, 7 Jun 2024 07:46:36 -0700 Subject: [PATCH] zig: add cc wrapper --- .../compilers/zig/0.10/default.nix | 3 ++ .../compilers/zig/0.11/default.nix | 3 ++ .../compilers/zig/0.12/default.nix | 3 ++ .../development/compilers/zig/0.9/default.nix | 3 ++ pkgs/development/compilers/zig/cc.nix | 42 +++++++++++++++++++ pkgs/development/compilers/zig/generic.nix | 3 ++ 6 files changed, 57 insertions(+) create mode 100644 pkgs/development/compilers/zig/cc.nix diff --git a/pkgs/development/compilers/zig/0.10/default.nix b/pkgs/development/compilers/zig/0.10/default.nix index 170edafa819c..a889c3cde23b 100644 --- a/pkgs/development/compilers/zig/0.10/default.nix +++ b/pkgs/development/compilers/zig/0.10/default.nix @@ -89,6 +89,9 @@ stdenv.mkDerivation (finalAttrs: { passthru = { hook = callPackage ./hook.nix { zig = finalAttrs.finalPackage; }; + cc = callPackage ../cc.nix { + zig = finalAttrs.finalPackage; + }; tests = { version = testers.testVersion { package = finalAttrs.finalPackage; diff --git a/pkgs/development/compilers/zig/0.11/default.nix b/pkgs/development/compilers/zig/0.11/default.nix index 0f19f455cbb0..c131adbe56b0 100644 --- a/pkgs/development/compilers/zig/0.11/default.nix +++ b/pkgs/development/compilers/zig/0.11/default.nix @@ -83,6 +83,9 @@ stdenv.mkDerivation (finalAttrs: { passthru = { hook = callPackage ./hook.nix { zig = finalAttrs.finalPackage; }; + cc = callPackage ../cc.nix { + zig = finalAttrs.finalPackage; + }; tests = { version = testers.testVersion { package = finalAttrs.finalPackage; diff --git a/pkgs/development/compilers/zig/0.12/default.nix b/pkgs/development/compilers/zig/0.12/default.nix index 88bb0169dd8a..93d7303ce3a8 100644 --- a/pkgs/development/compilers/zig/0.12/default.nix +++ b/pkgs/development/compilers/zig/0.12/default.nix @@ -95,6 +95,9 @@ stdenv.mkDerivation (finalAttrs: { passthru = { hook = callPackage ./hook.nix { zig = finalAttrs.finalPackage; }; + cc = callPackage ../cc.nix { + zig = finalAttrs.finalPackage; + }; tests = { version = testers.testVersion { package = finalAttrs.finalPackage; diff --git a/pkgs/development/compilers/zig/0.9/default.nix b/pkgs/development/compilers/zig/0.9/default.nix index 079773f00e88..07529476fb11 100644 --- a/pkgs/development/compilers/zig/0.9/default.nix +++ b/pkgs/development/compilers/zig/0.9/default.nix @@ -91,6 +91,9 @@ stdenv.mkDerivation (finalAttrs: { passthru = { hook = callPackage ./hook.nix { zig = finalAttrs.finalPackage; }; + cc = callPackage ../cc.nix { + zig = finalAttrs.finalPackage; + }; tests = { version = testers.testVersion { package = finalAttrs.finalPackage; diff --git a/pkgs/development/compilers/zig/cc.nix b/pkgs/development/compilers/zig/cc.nix new file mode 100644 index 000000000000..dc94e918814d --- /dev/null +++ b/pkgs/development/compilers/zig/cc.nix @@ -0,0 +1,42 @@ +{ + lib, + wrapCCWith, + makeWrapper, + runCommand, + targetPlatform, + targetPackages, + zig, +}: +wrapCCWith { + cc = + runCommand "zig-cc-${zig.version}" + { + pname = "zig-cc"; + inherit (zig) version meta; + + nativeBuildInputs = [ makeWrapper ]; + + passthru.isZig = true; + inherit zig; + } + '' + mkdir -p $out/bin + for tool in ar cc c++ objcopy; 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 + ''; + + nixSupport.cc-cflags = + [ + "-target" + "${targetPlatform.parsed.cpu.name}-${targetPlatform.parsed.kernel.name}-${targetPlatform.parsed.abi.name}" + ] + ++ lib.optional ( + targetPlatform.isLinux && !(targetPackages.isStatic or false) + ) "-Wl,-dynamic-linker=${targetPackages.stdenv.cc.bintools.dynamicLinker}"; +} diff --git a/pkgs/development/compilers/zig/generic.nix b/pkgs/development/compilers/zig/generic.nix index 3369f5d40c2c..71b961fbc81d 100644 --- a/pkgs/development/compilers/zig/generic.nix +++ b/pkgs/development/compilers/zig/generic.nix @@ -71,6 +71,9 @@ stdenv.mkDerivation (finalAttrs: { hook = callPackage ./hook.nix { zig = finalAttrs.finalPackage; }; + cc = callPackage ./cc.nix { + zig = finalAttrs.finalPackage; + }; }; meta = {