Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

zig: refactor #314987

Merged
merged 6 commits into from
May 31, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
{ lib
, stdenv
, fetchFromGitHub
, installShellFiles
, unstableGitUpdater
{
lib,
stdenv,
fetchFromGitHub,
installShellFiles,
unstableGitUpdater,
}:

stdenv.mkDerivation (finalAttrs: {
Expand Down
43 changes: 0 additions & 43 deletions pkgs/development/compilers/zig/0.10.nix

This file was deleted.

109 changes: 109 additions & 0 deletions pkgs/development/compilers/zig/0.10/default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
{
lib,
callPackage,
cmake,
coreutils,
fetchFromGitHub,
libxml2,
llvmPackages,
stdenv,
testers,
zlib,
}:

stdenv.mkDerivation (finalAttrs: {
pname = "zig";
version = "0.10.1";

src = fetchFromGitHub {
owner = "ziglang";
repo = "zig";
rev = finalAttrs.version;
hash = "sha256-69QIkkKzApOGfrBdgtmxFMDytRkSh+0YiaJQPbXsBeo=";
};

patches = [
# Backport alignment related panics from zig-master to 0.10.
# Upstream issue: https://github.com/ziglang/zig/issues/14559
./001-0.10-macho-fixes.patch
];

nativeBuildInputs = [
cmake
(lib.getDev llvmPackages.llvm)
];

buildInputs =
[
libxml2
zlib
]
++ (with llvmPackages; [
libclang
lld
llvm
]);

outputs = [
"out"
"doc"
];

cmakeFlags = [
# file RPATH_CHANGE could not write new RPATH
(lib.cmakeBool "CMAKE_SKIP_BUILD_RPATH" true)
# always link against static build of LLVM
(lib.cmakeBool "ZIG_STATIC_LLVM" true)
# ensure determinism in the compiler build
(lib.cmakeFeature "ZIG_TARGET_MCPU" "baseline")
];

env.ZIG_GLOBAL_CACHE_DIR = "$TMPDIR/zig-cache";

doInstallCheck = true;

strictDeps = true;

# Zig's build looks at /usr/bin/env to find dynamic linking info. This doesn't
# work in Nix's sandbox. Use env from our coreutils instead.
postPatch = ''
substituteInPlace lib/std/zig/system/NativeTargetInfo.zig \
--replace "/usr/bin/env" "${lib.getExe' coreutils "env"}"
'';

postBuild = ''
./zig2 run ../doc/docgen.zig -- ./zig2 ../doc/langref.html.in langref.html
'';

postInstall = ''
install -Dm644 -t $doc/share/doc/zig-$version/html ./langref.html
'';

installCheckPhase = ''
runHook preInstallCheck

$out/bin/zig test --cache-dir "$TMPDIR/zig-test-cache" -I $src/test $src/test/behavior.zig

runHook postInstallCheck
'';

passthru = {
hook = callPackage ./hook.nix { zig = finalAttrs.finalPackage; };
tests = {
version = testers.testVersion {
package = finalAttrs.finalPackage;
command = "zig version";
};
};
};

meta = {
description = "General-purpose programming language and toolchain for maintaining robust, optimal, and reusable software";
homepage = "https://ziglang.org/";
changelog = "https://ziglang.org/download/${finalAttrs.version}/release-notes.html";
license = lib.licenses.mit;
mainProgram = "zig";
maintainers = with lib.maintainers; [ andrewrk ] ++ lib.teams.zig.members;
platforms = lib.platforms.unix;
};
})
47 changes: 47 additions & 0 deletions pkgs/development/compilers/zig/0.10/hook.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
{
lib,
makeSetupHook,
zig,
}:

makeSetupHook {
name = "zig-hook";

propagatedBuildInputs = [ zig ];

substitutions = {
# This zig_default_flags below is meant to avoid CPU feature impurity in
# Nixpkgs. However, this flagset is "unstable": it is specifically meant to
# be controlled by the upstream development team - being up to that team
# exposing or not that flags to the outside (especially the package manager
# teams).

# Because of this hurdle, @andrewrk from Zig Software Foundation proposed
# some solutions for this issue. Hopefully they will be implemented in
# future releases of Zig. When this happens, this flagset should be
# revisited accordingly.

# Below are some useful links describing the discovery process of this 'bug'
# in Nixpkgs:

# https://github.com/NixOS/nixpkgs/issues/169461
# https://github.com/NixOS/nixpkgs/issues/185644
# https://github.com/NixOS/nixpkgs/pull/197046
# https://github.com/NixOS/nixpkgs/pull/241741#issuecomment-1624227485
# https://github.com/ziglang/zig/issues/14281#issuecomment-1624220653

zig_default_flags = [
"-Dcpu=baseline"
"-Drelease-safe=true"
];
};

passthru = {
inherit zig;
};

meta = {
description = "A setup hook for using the Zig compiler in Nixpkgs";
inherit (zig.meta) maintainers platforms broken;
};
} ./setup-hook.sh
70 changes: 70 additions & 0 deletions pkgs/development/compilers/zig/0.10/setup-hook.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
# shellcheck shell=bash disable=SC2154,SC2086

readonly zigDefaultFlagsArray=(@zig_default_flags@)

function zigSetGlobalCacheDir {
ZIG_GLOBAL_CACHE_DIR=$(mktemp -d)
export ZIG_GLOBAL_CACHE_DIR
}

function zigBuildPhase {
runHook preBuild

local flagsArray=(
"${zigDefaultFlagsArray[@]}"
$zigBuildFlags "${zigBuildFlagsArray[@]}"
)

echoCmd 'zig build flags' "${flagsArray[@]}"
zig build "${flagsArray[@]}"

runHook postBuild
}

function zigCheckPhase {
runHook preCheck

local flagsArray=(
"${zigDefaultFlagsArray[@]}"
$zigCheckFlags "${zigCheckFlagsArray[@]}"
)

echoCmd 'zig check flags' "${flagsArray[@]}"
zig build test "${flagsArray[@]}"

runHook postCheck
}

function zigInstallPhase {
runHook preInstall

local flagsArray=(
"${zigDefaultFlagsArray[@]}"
$zigBuildFlags "${zigBuildFlagsArray[@]}"
$zigInstallFlags "${zigInstallFlagsArray[@]}"
)

if [ -z "${dontAddPrefix-}" ]; then
# Zig does not recognize `--prefix=/dir/`, only `--prefix /dir/`
flagsArray+=("${prefixKey:---prefix}" "$prefix")
fi

echoCmd 'zig install flags' "${flagsArray[@]}"
zig build install "${flagsArray[@]}"

runHook postInstall
}

addEnvHooks "$targetOffset" zigSetGlobalCacheDir

if [ -z "${dontUseZigBuild-}" ] && [ -z "${buildPhase-}" ]; then
buildPhase=zigBuildPhase
fi

if [ -z "${dontUseZigCheck-}" ] && [ -z "${checkPhase-}" ]; then
checkPhase=zigCheckPhase
fi

if [ -z "${dontUseZigInstall-}" ] && [ -z "${installPhase-}" ]; then
installPhase=zigInstallPhase
fi
37 changes: 0 additions & 37 deletions pkgs/development/compilers/zig/0.11.nix

This file was deleted.

Loading