M packages/default.nix => packages/default.nix +3 -1
@@ 99,6 99,8 @@ in depotPkgs // {
NOVA = callPackage ./NOVA { };
+ rom_benchmark = callPackage ./rom_benchmark { };
+
solo5 = let drv = callPackage ./solo5 { };
in drv // { tests = drv.tests // { pname = "solo5-tests"; }; };
@@ 118,7 120,7 @@ in depotPkgs // {
owner = "ehmry";
repo = "genode-world";
rev = "tftp_rom";
- hash = "sha256-C+M7H1duQbT6twWpx44C6MBh4JPyCdg5h3nqpMZAcHA=";
+ hash = "sha256-xYjLbGcz49I/AxSaNT3kB4BmaYGxhwxtbw+PZxgAbnQ=";
};
in "echo 'REPOSITORIES += ${genodeWorld}' >> $BUILD_DIR/etc/build.conf";
portInputs = with genodeSources.ports; [ lwip ];
M packages/genodelabs/default.nix => packages/genodelabs/default.nix +3 -2
@@ 251,10 251,11 @@ in genodeSources // {
inherit buildUpstream buildDepot ports specs toolchain genodeBase;
make = target:
- buildUpstream {
+ let attrs = buildOverrides.${target} or { };
+ in buildUpstream ({
name = builtins.replaceStrings [ "/" ] [ "-" ] target;
targets = [ target ];
- };
+ } // attrs);
depot = name:
let attrs = buildOverrides.${name} or { };
M packages/genodelabs/ports.nix => packages/genodelabs/ports.nix +1 -1
@@ 2,7 2,7 @@
{ buildPackages }:
with buildPackages; {
dde_bsd.hash = "sha256-2ilZs6JkcQAvU/sQYnHunGtGRZDt7qLTpKZxQxSOf2I=";
- dde_ipxe.hash = "sha256-uK110Cr01D6I2Fo0ZNP5U7rheseuH7LsghSPdFaGU3k=";
+ dde_ipxe.hash = "sha256-Rulyc1r5xPwsOnVQobcB6Z67XWM5CF/PwyRVng9MFO8=";
dde_linux.hash = "sha256-3G5Mprv9ZBNhDJRuVF6Nrkp3KbFaN10IKFq0OdyAY9M=";
dde_rump = {
hash = "sha256-Wr5otGkWEa+5xImsFHQzwap5LckNEbyWA/7xbNcOreI=";
M packages/genodelabs/targets.nix => packages/genodelabs/targets.nix +2 -0
@@ 8,6 8,8 @@ with ports; {
portInputs = [ dde_linux ];
};
+ ipxe_nic_drv.portInputs = [ dde_ipxe ];
+
libc.portInputs = [ libc ];
lighttpd.portInputs = [ libc lighttpd openssl zlib ];
A packages/rom_benchmark/default.nix => packages/rom_benchmark/default.nix +36 -0
@@ 0,0 1,36 @@
+# SPDX-License-Identifier: CC0-1.0
+
+{ stdenv, fetchgit, buildPackages }:
+
+stdenv.mkDerivation rec {
+ pname = "rom_benchmark";
+ version = "0.1";
+
+ nativeBuildInputs = with buildPackages; [ tup ];
+
+ src = fetchgit {
+ url = "https://git.sr.ht/~ehmry/rom_benchmark";
+ rev = "v" + version;
+ sha256 = "0j0ir4zv0bxf0d2k0giykcm3wwqr4wdv3ix42751sd9v1wwgbbjg";
+ };
+
+ configurePhase = ''
+ # Scan repository and generate script
+ tup init
+ tup generate buildPhase.sh
+ '';
+
+ buildPhase = ''
+ pushd .
+ source buildPhase.sh
+ popd
+ '';
+
+ installPhase = "install -Dm755 {.,$out}/rom_benchmark";
+
+ meta = with stdenv.lib; {
+ license = licenses.gpl3;
+ maintainers = [ maintainers.ehmry ];
+ };
+
+}
M tests/default.nix => tests/default.nix +1 -0
@@ 34,6 34,7 @@ let
noux = call ./noux.nix { };
pci = call ./pci.nix { };
rtc = call ./rtc.nix { };
+ tftp_rom = call ./tftp_rom.nix { };
})) (import ./driver-nova.nix {
inherit apps addManifest buildPackages depot lib nixpkgs testPkgs;
}).callTest;
M tests/driver-nova.nix => tests/driver-nova.nix +5 -2
@@ 38,7 38,8 @@ let
''run_genode_until {[init] child "harness" exited with exit value 0} 60'';
mkTest = { name ? "unamed", testScript ? defaultScript, testConfig
- , testInputs ? [ ], testEnv ? { }, qemuArgs ? [ ], sotest ? false, ... }@t:
+ , testInputs ? [ ], testEnv ? { }, qemuArgs ? [ ], sotest ? false
+ , extraSotest ? [ ], ... }@t:
let
manifest = lib.mergeManifests (map addManifest (with testPkgs;
[ base-nova (genodeSources.make "init") sotest-producer ]
@@ 123,6 124,7 @@ let
--set testScript "$testScript" \
--set baseSetup "$baseSetup" \
--set TEST_RAM $RAM \
+ --set-default out /tmp \
'';
passMeta = drv:
@@ 148,9 150,10 @@ let
cp "${testPkgs.bender}" bender
cp "${testPkgs.NOVA}/hypervisor-x86_64" hypervisor
cp ${image} image.elf
+ find ${toString extraSotest} -type f -exec cp {} ./ \;
mkdir -p $out/nix-support
${buildPackages.zip}/bin/zip "$out/binaries.zip" \
- hypervisor image.elf
+ *
${apps.dhall-to-yaml.program} < ${
./sotest_nova_config.dhall
} > "$out/sotest_config.yaml"
M tests/solo5/default.nix => tests/solo5/default.nix +1 -1
@@ 29,7 29,7 @@ let
tests = [
{
name = "multi";
- sotest = true;
+ sotest = false;
testConfig = "${./.}/solo5.dhall";
testInputs = map genodeMake [ "app/ping" ] ++ (map genodeDepot [
"ram_block"
M tests/test-wrapper.dhall => tests/test-wrapper.dhall +6 -0
@@ 27,6 27,12 @@ let wrapHarness
"LOG"
(Some "SOTEST")
(Some "unlabeled")
+ , { service =
+ { name = "LOG"
+ , label = Init.LabelSelector.Type.Last "unlabeled"
+ }
+ , route = Init.Route.Type.Parent { label = Some "unlabeled" }
+ }
, Init.ServiceRoute.parent "IO_MEM"
, Init.ServiceRoute.parent "IO_PORT"
, Init.ServiceRoute.parent "IRQ"
A tests/tftp_rom.dhall => tests/tftp_rom.dhall +153 -0
@@ 0,0 1,153 @@
+-- SPDX-License-Identifier: CC0-1.0
+
+let Test = ./test.dhall ? env:DHALL_GENODE_TEST
+
+let Genode = Test.Genode
+
+let Prelude = Genode.Prelude
+
+let XML = Prelude.XML
+
+let Init = Genode.Init
+
+let Child = Init.Child
+
+let Resources = Init.Resources
+
+let ServiceRoute = Init.ServiceRoute
+
+let label = λ(_ : Text) → { local = _, route = _ } : Child.Attributes.Label
+
+let benchmarkAttrs =
+ Child.Attributes::{
+ , binary = "rom_benchmark"
+ , config =
+ { attributes = toMap { interations = "8" }
+ , content =
+ Prelude.List.map
+ Text
+ XML.Type
+ ( λ(label : Text)
+ → XML.element
+ { name = "rom"
+ , attributes = XML.emptyAttributes
+ , content = [ XML.text label ]
+ }
+ )
+ [ "rom_benchmark" ]
+ }
+ }
+
+let test =
+ Genode.Init::{
+ , children = toMap
+ { acpi_drv =
+ Child.flat
+ Child.Attributes::{
+ , binary = "acpi_drv"
+ , resources = Resources::{
+ , caps = 400
+ , ram = Genode.units.MiB 4
+ , constrainPhys = True
+ }
+ , provides = [ "Platform", "Acpi" ]
+ , romReports = [ label "acpi", label "smbios_table" ]
+ , routes =
+ [ ServiceRoute.parent "IRQ"
+ , ServiceRoute.parent "IO_MEM"
+ , ServiceRoute.parent "IO_PORT"
+ ]
+ }
+ , nic_drv =
+ Child.flat
+ Child.Attributes::{
+ , binary = "ipxe_nic_drv"
+ , exitPropagate = True
+ , provides = [ "Nic" ]
+ , resources = Resources::{
+ , caps = 128
+ , ram = Genode.units.MiB 4
+ }
+ , routes =
+ [ ServiceRoute.parent "Timer"
+ , ServiceRoute.parent "IO_MEM"
+ , ServiceRoute.parent "IO_PORT"
+ , ServiceRoute.childLabel
+ "Platform"
+ "platform_drv"
+ (None Text)
+ (Some "ipxe_nic_drv")
+ ]
+ }
+ , platform_drv =
+ Child.flat
+ Child.Attributes::{
+ , binary = "platform_drv"
+ , resources = Resources::{
+ , caps = 800
+ , ram = Genode.units.MiB 4
+ , constrainPhys = True
+ }
+ , reportRoms = [ label "acpi" ]
+ , provides = [ "Platform", "Acpi" ]
+ , routes =
+ [ ServiceRoute.parent "Timer"
+ , ServiceRoute.parent "IRQ"
+ , ServiceRoute.parent "IO_MEM"
+ , ServiceRoute.parent "IO_PORT"
+ ]
+ , config = Init.Config::{
+ , content =
+ [ XML.text
+ ''
+ <policy label_suffix="ipxe_nic_drv"> <pci class="ETHERNET"/> </policy>
+ ''
+ ]
+ }
+ }
+ , tftp_rom =
+ Child.flat
+ Child.Attributes::{
+ , binary = "tftp_rom"
+ , config = Init.Config::{
+ , attributes = toMap { verbose = "yes", dhcp = "yes" }
+ , content =
+ [ XML.text
+ ''
+ <default-policy ip="10.0.2.2"/>
+ ''
+ ]
+ }
+ , exitPropagate = True
+ , provides = [ "ROM" ]
+ , resources = Resources::{ ram = Genode.units.MiB 32 }
+ , routes =
+ [ ServiceRoute.child "Nic" "nic_drv"
+ , ServiceRoute.parent "Timer"
+ ]
+ }
+ , benchmark =
+ Child.flat
+ ( benchmarkAttrs
+ ⫽ { exitPropagate = True
+ , routes =
+ [ { service =
+ { name = "ROM"
+ , label = Init.LabelSelector.Type.Last "ld.lib.so"
+ }
+ , route = Init.Route.parent
+ }
+ , ServiceRoute.child "ROM" "tftp_rom"
+ , ServiceRoute.parent "Timer"
+ ]
+ }
+ )
+ }
+ }
+
+in Test::{
+ , children = toMap
+ { baseline = Child.flat benchmarkAttrs
+ , test = Init.toChild test Init.Attributes.default
+ }
+ }
A tests/tftp_rom.nix => tests/tftp_rom.nix +31 -0
@@ 0,0 1,31 @@
+# SPDX-License-Identifier: CC0-1.0
+
+{ buildPackages, testEnv, pkgs, ... }:
+with pkgs;
+
+let tftpRoot = pkgs.rom_benchmark;
+in testEnv.mkTest {
+ name = "tftp_rom";
+ meta.maintainers = with pkgs.stdenv.lib.maintainers; [ ehmry ];
+
+ testConfig = ./tftp_rom.dhall;
+ testInputs = [ pkgs.tftp_rom pkgs.rom_benchmark ]
+ ++ map pkgs.genodeSources.depot [
+ "acpi_drv"
+ "ipxe_nic_drv"
+ "platform_drv"
+ "report_rom"
+ ];
+ testScript = ''
+ run_genode_until {SOTEST END} 60
+ '';
+
+ qemuArgs = [
+ "-netdev user,id=n0,restrict=on,tftp=${tftpRoot}"
+ "-device e1000,netdev=n0"
+ # "-object filter-dump,id=f0,netdev=n0,file=qemu.pcap"
+ ];
+
+ sotest = true;
+ extraSotest = [ pkgs.rom_benchmark ];
+}