90 lines
2.6 KiB
Nix
90 lines
2.6 KiB
Nix
# SPDX-License-Identifier: CC0-1.0
|
|
|
|
let tests = call: { log = call ./log.nix { }; };
|
|
|
|
in { self, apps, buildPackages, genodepkgs, lib, nixpkgs, legacyPackages }:
|
|
|
|
let
|
|
testPkgs = genodepkgs;
|
|
|
|
addManifest = drv:
|
|
drv // {
|
|
manifest = nixpkgs.runCommand "${drv.name}.dhall" { inherit drv; } ''
|
|
set -eu
|
|
echo -n '[' >> $out
|
|
find $drv/ -type f -printf ',{mapKey= "%f",mapValue="%p"}' >> $out
|
|
${if builtins.elem "lib" drv.outputs then
|
|
''
|
|
find ${drv.lib}/ -type f -printf ',{mapKey= "%f",mapValue="%p"}' >> $out''
|
|
else
|
|
""}
|
|
echo -n ']' >> $out
|
|
'';
|
|
};
|
|
|
|
nova = (call:
|
|
((tests call) // {
|
|
driver_manager = call ./driver_manager.nix { };
|
|
posix = call ./posix.nix { };
|
|
vmm = call ./vmm_x86.nix { };
|
|
x86 = call ./x86.nix { };
|
|
} // call ./solo5 { })) (import ./driver-nova.nix {
|
|
inherit apps addManifest buildPackages lib nixpkgs testPkgs
|
|
legacyPackages;
|
|
}).callTest;
|
|
|
|
hw = (call:
|
|
((tests call) // {
|
|
posix = call ./posix.nix { };
|
|
x86 = call ./x86.nix { };
|
|
} // call ./solo5 { })) (import ./driver-hw.nix {
|
|
inherit apps addManifest buildPackages lib nixpkgs testPkgs
|
|
legacyPackages;
|
|
}).callTest;
|
|
|
|
testsToList = tests:
|
|
map (test: {
|
|
inherit (test) name;
|
|
value = test;
|
|
}) (builtins.attrValues tests);
|
|
|
|
in with builtins;
|
|
listToAttrs ((concatLists (map (testsToList) [ hw nova ]))) // {
|
|
sotest = let
|
|
hwTests = with hw; [ multi posix x86 ];
|
|
novaTests = with nova; [ multi posix x86 vmm ];
|
|
allTests = hwTests ++ novaTests;
|
|
|
|
projectCfg.boot_items =
|
|
|
|
(map (test: {
|
|
inherit (test) name;
|
|
exec = "bender";
|
|
load = [ test.image.name ];
|
|
}) hwTests)
|
|
|
|
++ (map (test: {
|
|
inherit (test) name;
|
|
exec = "bender";
|
|
load = [ "hypervisor serial novga iommu" test.image.name ];
|
|
}) novaTests);
|
|
|
|
in buildPackages.stdenv.mkDerivation {
|
|
name = "sotest";
|
|
buildCommand = ''
|
|
mkdir zip; cd zip
|
|
cp "${testPkgs.bender}/bender" bender
|
|
cp "${testPkgs.NOVA}/hypervisor-x86_64" hypervisor
|
|
${concatStringsSep "\n"
|
|
(map (test: "cp ${test.image}/image.elf ${test.image.name}") allTests)}
|
|
mkdir -p $out/nix-support
|
|
${buildPackages.zip}/bin/zip "$out/binaries.zip" *
|
|
cat << EOF > "$out/project.json"
|
|
${builtins.toJSON projectCfg}
|
|
EOF
|
|
echo file sotest-binaries $out/binaries.zip >> "$out/nix-support/hydra-build-products"
|
|
echo file sotest-config $out/project.json >> "$out/nix-support/hydra-build-products"
|
|
'';
|
|
};
|
|
}
|