|
|
|
@ -1,25 +1,21 @@
|
|
|
|
|
# SPDX-License-Identifier: CC0-1.0
|
|
|
|
|
|
|
|
|
|
{ self, apps, buildPackages, genodepkgs, lib, nixpkgs, legacyPackages }:
|
|
|
|
|
{ self, apps, localPackages, genodepkgs, lib, nixpkgs, legacyPackages }:
|
|
|
|
|
|
|
|
|
|
let
|
|
|
|
|
|
|
|
|
|
callTest = path:
|
|
|
|
|
import path {
|
|
|
|
|
pkgs = testPkgs;
|
|
|
|
|
inherit nixpkgs buildPackages legacyPackages;
|
|
|
|
|
inherit nixpkgs localPackages legacyPackages;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
testFiles = map callTest [
|
|
|
|
|
./log.nix
|
|
|
|
|
./posix.nix
|
|
|
|
|
./vmm_x86.nix
|
|
|
|
|
./x86.nix
|
|
|
|
|
] ++ (callTest ./solo5);
|
|
|
|
|
testFiles = map callTest [ ./log.nix ./posix.nix ./vmm_x86.nix ./x86.nix ]
|
|
|
|
|
++ (callTest ./solo5);
|
|
|
|
|
|
|
|
|
|
testPkgs = genodepkgs;
|
|
|
|
|
|
|
|
|
|
qemu' = buildPackages.qemu_test;
|
|
|
|
|
qemu' = localPackages.qemu;
|
|
|
|
|
|
|
|
|
|
qemuBinary = qemuPkg:
|
|
|
|
|
{
|
|
|
|
@ -27,14 +23,17 @@ let
|
|
|
|
|
x86_64-genode = "${qemuPkg}/bin/qemu-system-x86_64";
|
|
|
|
|
}.${genodepkgs.stdenv.hostPlatform.system};
|
|
|
|
|
|
|
|
|
|
platforms = [
|
|
|
|
|
cores = [
|
|
|
|
|
{
|
|
|
|
|
prefix = "hw-pc-";
|
|
|
|
|
specs = [ "x86" "hw" ];
|
|
|
|
|
basePkg = testPkgs.base-hw-pc;
|
|
|
|
|
makeImage = lib.hwImage;
|
|
|
|
|
platforms = [ "x86_64-genode" ];
|
|
|
|
|
basePackages = [ testPkgs.base-hw-pc ]
|
|
|
|
|
++ map testPkgs.genodeSources.depot [ "rtc_drv" ];
|
|
|
|
|
makeImage =
|
|
|
|
|
lib.hwImage "0xffffffc000000000" "0x00200000" testPkgs.base-hw-pc;
|
|
|
|
|
startVM = vmName: image: ''
|
|
|
|
|
#! ${buildPackages.runtimeShell}
|
|
|
|
|
#! ${localPackages.runtimeShell}
|
|
|
|
|
exec ${qemuBinary qemu'} \
|
|
|
|
|
-name ${vmName} \
|
|
|
|
|
-machine q35 \
|
|
|
|
@ -45,13 +44,35 @@ let
|
|
|
|
|
"$@"
|
|
|
|
|
'';
|
|
|
|
|
}
|
|
|
|
|
{
|
|
|
|
|
prefix = "hw-virt_qemu-";
|
|
|
|
|
specs = [ "aarch64" "hw" ];
|
|
|
|
|
platforms = [ "aarch64-genode" ];
|
|
|
|
|
basePackages = with testPkgs; [ base-hw-virt_qemu rtc-dummy ];
|
|
|
|
|
makeImage = lib.hwImage "0xffffffc000000000" "0x40000000"
|
|
|
|
|
testPkgs.base-hw-virt_qemu;
|
|
|
|
|
startVM = vmName: image: ''
|
|
|
|
|
#! ${localPackages.runtimeShell}
|
|
|
|
|
exec ${qemuBinary qemu'} \
|
|
|
|
|
-name ${vmName} \
|
|
|
|
|
-M virt,virtualization=true,gic_version=3 \
|
|
|
|
|
-cpu cortex-a53 \
|
|
|
|
|
-smp 4 \
|
|
|
|
|
-m 384 \
|
|
|
|
|
-kernel "${image}/image.elf" \
|
|
|
|
|
$QEMU_OPTS \
|
|
|
|
|
"$@"
|
|
|
|
|
'';
|
|
|
|
|
}
|
|
|
|
|
{
|
|
|
|
|
prefix = "nova-";
|
|
|
|
|
specs = [ "x86" "nova" ];
|
|
|
|
|
basePkg = testPkgs.base-nova;
|
|
|
|
|
platforms = [ "x86_64-genode" ];
|
|
|
|
|
basePackages = [ testPkgs.base-nova ]
|
|
|
|
|
++ map testPkgs.genodeSources.depot [ "rtc_drv" ];
|
|
|
|
|
makeImage = lib.novaImage;
|
|
|
|
|
startVM = vmName: image: ''
|
|
|
|
|
#! ${buildPackages.runtimeShell}
|
|
|
|
|
#! ${localPackages.runtimeShell}
|
|
|
|
|
exec ${qemuBinary qemu'} \
|
|
|
|
|
-name ${vmName} \
|
|
|
|
|
-machine q35 \
|
|
|
|
@ -64,7 +85,11 @@ let
|
|
|
|
|
}
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
testDriver = with buildPackages;
|
|
|
|
|
cores' = builtins.filter (core:
|
|
|
|
|
builtins.any (x: x == genodepkgs.stdenv.hostPlatform.system) core.platforms)
|
|
|
|
|
cores;
|
|
|
|
|
|
|
|
|
|
testDriver = with localPackages;
|
|
|
|
|
let testDriverScript = ./test-driver/test-driver.py;
|
|
|
|
|
in stdenv.mkDerivation {
|
|
|
|
|
name = "nixos-test-driver";
|
|
|
|
@ -101,8 +126,8 @@ let
|
|
|
|
|
machine.wait_until_serial_output('child "init" exited with exit value 0')
|
|
|
|
|
'';
|
|
|
|
|
|
|
|
|
|
makeTest = with buildPackages;
|
|
|
|
|
{ prefix, specs, basePkg, makeImage, startVM }:
|
|
|
|
|
makeTest = with localPackages;
|
|
|
|
|
{ prefix, specs, platforms, basePackages, makeImage, startVM }:
|
|
|
|
|
{ name ? "unnamed", testScript ? defaultTestScript,
|
|
|
|
|
# Skip linting (mainly intended for faster dev cycles)
|
|
|
|
|
skipLint ? false, ... }@t:
|
|
|
|
@ -113,7 +138,7 @@ let
|
|
|
|
|
buildVM = vmName:
|
|
|
|
|
{ config, inputs, env ? { }, extraPaths ? [ ] }:
|
|
|
|
|
let
|
|
|
|
|
storeTarball = buildPackages.runCommand "store" { } ''
|
|
|
|
|
storeTarball = localPackages.runCommand "store" { } ''
|
|
|
|
|
mkdir -p $out
|
|
|
|
|
tar cf "$out/store.tar" --absolute-names ${toString inputs} ${
|
|
|
|
|
toString extraPaths
|
|
|
|
@ -136,14 +161,13 @@ let
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
storeManifest = lib.mergeManifests (map addManifest inputs);
|
|
|
|
|
manifest = lib.mergeManifests (map addManifest
|
|
|
|
|
([ basePkg testPkgs.sotest-producer storeTarball ]
|
|
|
|
|
++ map testPkgs.genodeSources.depot [
|
|
|
|
|
"init"
|
|
|
|
|
"rtc_drv"
|
|
|
|
|
"vfs"
|
|
|
|
|
"cached_fs_rom"
|
|
|
|
|
]));
|
|
|
|
|
manifest = lib.mergeManifests (map addManifest (basePackages
|
|
|
|
|
++ [ testPkgs.sotest-producer storeTarball ]
|
|
|
|
|
++ map testPkgs.genodeSources.depot [
|
|
|
|
|
"init"
|
|
|
|
|
"vfs"
|
|
|
|
|
"cached_fs_rom"
|
|
|
|
|
]));
|
|
|
|
|
config' = "${
|
|
|
|
|
./test-wrapper.dhall
|
|
|
|
|
} (${config}) $(stat --format '%s' ${storeTarball}/store.tar) ${storeManifest} ${manifest}";
|
|
|
|
@ -155,7 +179,7 @@ let
|
|
|
|
|
image = makeImage vmName env' config';
|
|
|
|
|
startVM' = startVM vmName image;
|
|
|
|
|
in {
|
|
|
|
|
script = buildPackages.writeScriptBin "run-${vmName}-vm" startVM';
|
|
|
|
|
script = localPackages.writeScriptBin "run-${vmName}-vm" startVM';
|
|
|
|
|
|
|
|
|
|
config = lib.runDhallCommand (name + ".dhall") env' ''
|
|
|
|
|
${apps.dhall.program} <<< "${config'}" > $out
|
|
|
|
@ -246,16 +270,16 @@ let
|
|
|
|
|
test // { inherit nodes driver test; };
|
|
|
|
|
|
|
|
|
|
testList = let
|
|
|
|
|
f = platform:
|
|
|
|
|
let makeTest' = makeTest platform;
|
|
|
|
|
f = core:
|
|
|
|
|
let makeTest' = makeTest core;
|
|
|
|
|
in test:
|
|
|
|
|
if (test.constraints or (_: true)) platform.specs then {
|
|
|
|
|
name = platform.prefix + test.name;
|
|
|
|
|
if (test.constraints or (_: true)) core.specs then {
|
|
|
|
|
name = core.prefix + test.name;
|
|
|
|
|
value = makeTest' test;
|
|
|
|
|
} else
|
|
|
|
|
null;
|
|
|
|
|
|
|
|
|
|
in lib.lists.crossLists f [ platforms testFiles ];
|
|
|
|
|
in lib.lists.crossLists f [ cores' testFiles ];
|
|
|
|
|
|
|
|
|
|
in builtins.listToAttrs (builtins.filter (_: _ != null) testList)
|
|
|
|
|
|
|
|
|
@ -278,7 +302,7 @@ in builtins.listToAttrs (builtins.filter (_: _ != null) testList)
|
|
|
|
|
load = [ "hypervisor serial novga iommu" test.image.name ];
|
|
|
|
|
}) novaTests);
|
|
|
|
|
|
|
|
|
|
in buildPackages.stdenv.mkDerivation {
|
|
|
|
|
in localPackages.stdenv.mkDerivation {
|
|
|
|
|
name = "sotest";
|
|
|
|
|
buildCommand = ''
|
|
|
|
|
mkdir zip; cd zip
|
|
|
|
@ -288,7 +312,7 @@ in builtins.listToAttrs (builtins.filter (_: _ != null) testList)
|
|
|
|
|
(map (test: "cp ${test.image}/image.elf ${test.name}.image.elf")
|
|
|
|
|
allTests)}
|
|
|
|
|
mkdir -p $out/nix-support
|
|
|
|
|
${buildPackages.zip}/bin/zip "$out/binaries.zip" *
|
|
|
|
|
${localPackages.zip}/bin/zip "$out/binaries.zip" *
|
|
|
|
|
cat << EOF > "$out/project.json"
|
|
|
|
|
${builtins.toJSON projectCfg}
|
|
|
|
|
EOF
|
|
|
|
|