darwin: migrate to by-name

This commit is contained in:
Randy Eckenrode
2026-04-05 21:54:48 -04:00
parent f17f1d0298
commit aa5028110f
105 changed files with 289 additions and 225 deletions
@@ -0,0 +1,6 @@
{ signingUtils, makeSetupHook }:
makeSetupHook {
name = "auto-sign-darwin-binaries-hook";
propagatedBuildInputs = [ signingUtils ];
} ./auto-sign-hook.sh
@@ -19,7 +19,8 @@ mkAppleDerivation {
installFlags = [ "DSTROOT=$(out)" ];
setupHooks = [
../../../../build-support/setup-hooks/role.bash
# Vendored to avoid referencing files outside of the package.
./setup-hooks/role.bash
# ccWrapper_addCVars doesnt add Csu to `NIX_LDFLAGS` because it contains objects and no dylibs.
./setup-hooks/add-Csu-lib-path.sh
];
@@ -0,0 +1,71 @@
# Since the same derivation can be depended on in multiple ways, we need to
# accumulate *each* role (i.e. host and target platforms relative the depending
# derivation) in which the derivation is used.
#
# The role is intended to be used as part of other variables names like
# - $NIX_SOMETHING${role_post}
function getRole() {
case $1 in
-1)
role_post='_FOR_BUILD'
;;
0)
role_post=''
;;
1)
role_post='_FOR_TARGET'
;;
*)
echo "@name@: used as improper sort of dependency" >&2
return 1
;;
esac
}
# `hostOffset` describes how the host platform of the package is slid relative
# to the depending package. `targetOffset` likewise describes the target
# platform of the package. Both are brought into scope of the setup hook defined
# for dependency whose setup hook is being processed relative to the package
# being built.
function getHostRole() {
getRole "$hostOffset"
}
function getTargetRole() {
getRole "$targetOffset"
}
# `depHostOffset` describes how the host platform of the dependencies are slid
# relative to the depending package. `depTargetOffset` likewise describes the
# target platform of dependenices. Both are brought into scope of the
# environment hook defined for the dependency being applied relative to the
# package being built.
function getHostRoleEnvHook() {
getRole "$depHostOffset"
}
function getTargetRoleEnvHook() {
getRole "$depTargetOffset"
}
# This variant is intended specifically for code-producing tool wrapper scripts
# `NIX_@wrapperName@_TARGET_*_@suffixSalt@` tracks this (needs to be an exported
# env var so can't use fancier data structures).
function getTargetRoleWrapper() {
case $targetOffset in
-1)
export NIX_@wrapperName@_TARGET_BUILD_@suffixSalt@=1
;;
0)
export NIX_@wrapperName@_TARGET_HOST_@suffixSalt@=1
;;
1)
export NIX_@wrapperName@_TARGET_TARGET_@suffixSalt@=1
;;
*)
echo "@name@: used as improper sort of dependency" >&2
return 1
;;
esac
}
@@ -1,15 +1,19 @@
{
stdenv,
clang-unwrapped,
lib,
binutils-unwrapped,
clang-unwrapped,
iosSdkPkgs,
runCommand,
stdenv,
wrapBintoolsWith,
wrapCCWith,
buildIosSdk,
targetIosSdkPkgs,
xcode,
lib,
buildPackages,
targetPackages,
buildIosSdk ? buildPackages.darwin.iosSdkPkgs.sdk,
targetIosSdkPkgs ? targetPackages.darwin.iosSdkPkgs or iosSdkPkgs,
}:
let
@@ -0,0 +1,6 @@
{ makeSetupHook, pkgsBuildHost }:
makeSetupHook {
name = "xcode-project-check-hook";
propagatedBuildInputs = [ pkgsBuildHost.openssl ];
} ./setup-hook.sh
@@ -1,27 +0,0 @@
{ runCommand, cctools }:
{
haskellPackages,
src,
deps ? p: [ ],
name,
}:
let
inherit (haskellPackages) ghc ghcWithPackages;
with-env = ghcWithPackages deps;
ghcName = "${ghc.targetPrefix}ghc";
in
runCommand name
{
buildInputs = [
with-env
cctools
];
}
''
mkdir -p $out/lib
mkdir -p $out/include
${ghcName} ${src} -staticlib -outputdir . -o $out/lib/${name}.a -stubdir $out/include
for file in ${ghc}/lib/${ghcName}-${ghc.version}/include/*; do
ln -sv $file $out/include
done
''

Some files were not shown because too many files have changed in this diff Show More