105 lines
4.0 KiB
Nix
105 lines
4.0 KiB
Nix
{ pkgs ? import ../../.. {} }:
|
|
let
|
|
inherit (pkgs) runCommand lib;
|
|
# splicing doesn't seem to work right here
|
|
inherit (pkgs.buildPackages) nix rsync;
|
|
pack-all =
|
|
packCmd: name: pkgs: fixups:
|
|
(runCommand name {
|
|
requiredSystemFeatures = [ "recursive-nix" ];
|
|
nativeBuildInputs = [ nix rsync ];
|
|
} ''
|
|
base=$PWD
|
|
requisites="$(nix-store --query --requisites ${lib.concatStringsSep " " pkgs} | tac)"
|
|
|
|
rm -f $base/nix-support/propagated-build-inputs
|
|
for f in $requisites; do
|
|
cd $f
|
|
rsync --chmod="+w" -av . $base
|
|
done
|
|
cd $base
|
|
|
|
rm -rf nix nix-support
|
|
mkdir nix-support
|
|
for dir in $requisites; do
|
|
cd "$dir/nix-support" 2>/dev/null || continue
|
|
for f in $(find . -type f); do
|
|
mkdir -p "$base/nix-support/$(dirname $f)"
|
|
cat $f >>"$base/nix-support/$f"
|
|
done
|
|
done
|
|
cd $base
|
|
|
|
${fixups}
|
|
|
|
rm .nix-socket
|
|
${packCmd}
|
|
'');
|
|
nar-all = pack-all "nix-store --dump . | xz -9 -e -T $NIX_BUILD_CORES >$out";
|
|
tar-all = pack-all "XZ_OPT=\"-9 -e -T $NIX_BUILD_CORES\" tar cJf $out --hard-dereference --sort=name --numeric-owner --owner=0 --group=0 --mtime=@1 .";
|
|
coreutils-big = pkgs.coreutils.override { singleBinary = false; };
|
|
mkdir = runCommand "mkdir" { coreutils = coreutils-big; } ''
|
|
mkdir -p $out/bin
|
|
cp $coreutils/bin/mkdir $out/bin
|
|
'';
|
|
in rec {
|
|
unpack = nar-all "unpack.nar.xz" (with pkgs; [bash mkdir xz gnutar]) ''
|
|
rm -rf include lib/*.a lib/i18n lib/bash share
|
|
'';
|
|
bootstrap-tools = tar-all "bootstrap-tools.tar.xz" (
|
|
with pkgs;
|
|
# SYNCME: this version number must be synced with the one in default.nix
|
|
let llvmPackages = llvmPackages_18; in
|
|
[
|
|
(runCommand "bsdcp" { } "mkdir -p $out/bin; cp ${freebsd.cp}/bin/cp $out/bin/bsdcp")
|
|
coreutils
|
|
gnutar
|
|
findutils
|
|
gnumake
|
|
gnused
|
|
patchelf
|
|
gnugrep
|
|
gawk
|
|
diffutils
|
|
patch
|
|
bash
|
|
xz
|
|
xz.dev
|
|
gzip
|
|
bzip2
|
|
bzip2.dev
|
|
curl
|
|
expand-response-params
|
|
binutils-unwrapped
|
|
freebsd.libc
|
|
llvmPackages.libcxx
|
|
llvmPackages.libcxx.dev
|
|
llvmPackages.compiler-rt
|
|
llvmPackages.compiler-rt.dev
|
|
llvmPackages.clang-unwrapped
|
|
(freebsd.locales.override { locales = [ "C.UTF-8" ]; })
|
|
]
|
|
# INSTRUCTIONS FOR GENERATING THE SPURIOUS LIST
|
|
# - empty this list
|
|
# - rebuild bootstrap files and update their urls and hashes
|
|
# - turn on atime on your FreeBSD nix store filesystem
|
|
# - run nix-collect-garbage on FreeBSD to make it so we rebuild FODs
|
|
# - build the nixpkgs __bootstrapArchive attribute on FreeBSD
|
|
# - reboot your FreeBSD system. Otherwise the atimes will simply be wrong because of kernel caching
|
|
# - run a full build of stdenv on FreeBSD. with -j3, this takes 1h40 on my 20 cpu VM (AMD host)
|
|
# - use the following to generate a list with access times and filenames
|
|
# find /nix/store/###-bootstrap-archive -type f | xargs stat | grep -E 'Access: 2|File:' | paste -d ' ' - - | awk '{ print $4 " " $5 " " $6 " " $2 }' | sort -n > atimes
|
|
# - manually identify the point where files have no longer been accessed after the patching phase
|
|
# - use your favorite text editor to snip out the time column, the /nix/store/###-bootstrap-archive/ prefix, and the files that have not been used during bootstrap
|
|
# - turn off atime if it was off before since it will degrade performance
|
|
# - manually remove bin/strings from the list, since it will be used only during bootstrap
|
|
# - manually remove all files under include and lib/clang/*/include from the list in order to improve forward compatibility (and since they are very small)
|
|
# - plop it here
|
|
) "xargs rm -f <${./bootstrap-tools-spurious.txt}";
|
|
build = runCommand "build" { } ''
|
|
mkdir -p $out/on-server
|
|
ln -s ${unpack} $out/on-server/unpack.nar.xz
|
|
ln -s ${bootstrap-tools} $out/on-server/bootstrap-tools.tar.xz
|
|
'';
|
|
}
|