cleaned up building of webfiles

This commit is contained in:
Sebastian Moser
2024-09-01 09:49:48 +02:00
parent 386ff500fc
commit 80e33d1152
5 changed files with 77 additions and 43 deletions

View File

@@ -4,11 +4,12 @@
, self
, defaultMizeConfig
, mize_modules
, localSystem
, ...
}:
let
# build all modules
# get a list of all modules, that have a mize_module.nix in their folder
module_list_drv = pkgs.stdenv.mkDerivation {
name = "mize_module_list";
dontUnpack = true;
@@ -24,26 +25,10 @@ let
exit 0
'';
};
module_list_string = builtins.readFile "${module_list_drv}/modules_to_build";
module_list = pkgs.lib.lists.remove "" (pkgs.lib.strings.splitString "\n" module_list_string);
buildModule = path: (pkgs.callPackage path {
craneLib = osCrane;
toolchain_version = toolchain_version_string;
});
module_drv_list = map buildModule module_list;
test2 = builtins.trace "list: ${module_drv_list}" "hi";
test = builtins.trace "last: ${pkgs.lib.lists.last module_drv_list}" test2;
webfilesBuildPhase = module_drv: ''
echo got module: ${module_drv.name}
hash=$(echo ${module_drv.selector_string} | sha256sum | cut -c -32)
mkdir -p $out/mize/dist/$hash
cp -r ${module_drv}/* $out/mize/dist/$hash
echo '${module_drv.selector_string}' > $out/mize/dist/$hash/selector_string
'';
toolchain_version_drv = pkgs.stdenv.mkDerivation {
name = "toolchain_version_drv";
@@ -58,25 +43,75 @@ let
exit 0
'';
};
toolchain_version_string = pkgs.lib.strings.removeSuffix "\n" (builtins.readFile "${toolchain_version_drv}/rustc-version");
main = osCrane.buildPackage {
src = "${self}";
cargoExtraArgs = "--bin mize --features os-target";
buildMizeForSystem = system: let
crossSystem = if builtins.isString system then { config = system; } else system;
craneLib = osCrane;
mkSelString = attrs: builtins.toJSON (attrs // {
toolchain_version = toolchain_version_string;
mize_version = main.version;
});
buildModule = path: (pkgs.callPackage path {
inherit mkSelString;
craneLib = osCrane;
toolchain_version = toolchain_version_string;
});
main = craneLib.buildPackage {
src = "${self}";
cargoExtraArgs = "--bin mize --features os-target";
MIZE_BUILD_CONFIG = pkgs.writeTextFile {
name = "mize-build-config";
text = builtins.toJSON (defaultMizeConfig // { toolchain_version = toolchain_version_string; });
text = builtins.toJSON (defaultMizeConfig // {
toolchain_version = toolchain_version_string;
mize_version = main.version;
});
};
# patch the interpreter to run on most linux-gnu distros
postBuild = ''
patchelf --set-interpreter /lib64/ld-linux-x86-64.so.2 /build/source/target/release/mize
'';
};
in rec {
inherit main;
# patch the interpreter to run on most linux-gnu distros
postBuild = ''
patchelf --set-interpreter /lib64/ld-linux-x86-64.so.2 /build/source/target/release/mize
'';
system = crossSystem;
modules = map buildModule module_list;
};
mkInstallPhase = mize: ''
# install mize
mkdir -p $out/mize/${mize.system.config}
cp ${mize.main}/bin/mize $out/mize/${mize.system.config}/
# intall the modules
${mkModulesInstallPhase mize.modules}
'';
mkModulesInstallPhase = modules: pkgs.lib.concatStringsSep "\n" (map (module: ''
echo got module: ${module.name}
hash=$(echo ${module.selector_string} | sha256sum | cut -c -32)
mkdir -p $out/mize/dist/$hash
cp -r ${module}/* $out/mize/dist/$hash
echo '${module.selector_string}' > $out/mize/dist/$hash/selector_string
'')) modules;
# list of systems, we build mize for
systems = [ "x86_64-linux-gnu" ];
list_of_mizes = map buildMizeForSystem systems;
in
stdenv.mkDerivation {
@@ -86,15 +121,14 @@ stdenv.mkDerivation {
# so that /bin/sh does not get patched to a nix store path in victorinix-s
dontPatchShebangs = true;
buildPhase = ''
buildPhase = "";
InstallPhase = ''
mkdir -p $out
mkdir -p $out/mize
mkdir -p $out/mize/dist
mkdir -p $out/mize/x86_64-linux-gnu
cp -r ${main}/bin/mize $out/mize/x86_64-linux-gnu/mize
'' + pkgs.lib.concatStringsSep "\n" (map webfilesBuildPhase module_drv_list);
'' + pkgs.lib.concatStringsSep "\n" (map mkInstallPhase list_of_mizes);
nativeBuildInputs = [