diff --git a/apps/hw-image/default.nix b/apps/hw-image/default.nix index cd789ef..65c83a4 100644 --- a/apps/hw-image/default.nix +++ b/apps/hw-image/default.nix @@ -39,8 +39,20 @@ in nixpkgs.writeScriptBin "hw-image" (with nixpkgs.buildPackages; "$lib" "$TMPDIR/boot_modules.o" cat a.out } - set -v - ${dhallApps.dhall.program} <<< "${../render-rom.dhall} ($@)" > "$TMPDIR/modules.dhall" + + ${dhallApps.dhall.program} text \ + <<< "(env:DHALL_GENODE).Init.render ($@).config" \ + | ${nixpkgs.buildPackages.libxml2}/bin/xmllint \ + -schema ${packages.genode-sources}/repos/os/src/init/config.xsd - \ + | sed 's/>/>/g' \ + > $TMPDIR/config + + ${dhallApps.dhall.program} \ + <<< "${../insert-config-rom.dhall} \"$TMPDIR/config\" ($@).rom" \ + > "$TMPDIR/modules.dhall" + build_core "''${CORE_OBJ:-${base-hw-pc}/lib/core-hw-pc.o}" "$TMPDIR/modules.dhall" 0xffffffc000000000 > core.elf - build_core "''${BOOTSTRAP_OBJ:-${base-hw-pc}/lib/bootstrap-hw-pc.o}" "${../to-rom.dhall} \"core.elf\" \"./core.elf\"" 0x00200000 + build_core "''${BOOTSTRAP_OBJ:-${base-hw-pc}/lib/bootstrap-hw-pc.o}" "${ + ../to-rom.dhall + } \"core.elf\" \"./core.elf\"" 0x00200000 '') diff --git a/apps/insert-config-rom.dhall b/apps/insert-config-rom.dhall new file mode 100644 index 0000000..dca887d --- /dev/null +++ b/apps/insert-config-rom.dhall @@ -0,0 +1,9 @@ +-- SPDX-License-Identifier: CC0-1.0 + +let Genode = env:DHALL_GENODE + +let BootModules = Genode.BootModules + +in λ(configPath : Text) + → λ(rom : Genode.BootModules.Type) + → BootModules.toRomPaths (toMap { config = configPath }) # rom diff --git a/apps/nova-image/default.nix b/apps/nova-image/default.nix index 399101a..7da17c0 100644 --- a/apps/nova-image/default.nix +++ b/apps/nova-image/default.nix @@ -18,8 +18,18 @@ in nixpkgs.writeScriptBin "nova-image" (with nixpkgs.buildPackages; export DHALL_PRELUDE=${packages.dhallPrelude}/package.dhall export DHALL_GENODE=${packages.dhallGenode}/package.dhall - ${dhallApps.dhall.program} text <<< \ - "(${../modules.as.dhall}).to64bitImage (${../render-rom.dhall} ($@))" \ + + ${dhallApps.dhall.program} text \ + <<< "(env:DHALL_GENODE).Init.render ($@).config" \ + | ${nixpkgs.buildPackages.libxml2}/bin/xmllint \ + -schema ${packages.genode-sources}/repos/os/src/init/config.xsd - \ + | sed 's/>/>/g' \ + > $TMPDIR/config + + ${dhallApps.dhall.program} text \ + <<< "(${../modules.as.dhall}).to64bitImage (${ + ../insert-config-rom.dhall + } \"$TMPDIR/config\" ($@).rom)" \ > "$TMPDIR/modules.as" # compile the boot modules into one object file diff --git a/apps/render-init/default.nix b/apps/render-init/default.nix index 9687086..8fb0a28 100644 --- a/apps/render-init/default.nix +++ b/apps/render-init/default.nix @@ -5,13 +5,13 @@ nixpkgs.writeScriptBin "render-init" (with nixpkgs.buildPackages; '' #!${runtimeShell} set -eu - if [ -z "$@" ]; then - echo "Error: a Dhall init configuration file must be passed as an argument - $0" > /dev/stderr - exit 1 - fi export DHALL_PRELUDE=''${DHALL_PRELUDE:-${packages.dhallPrelude}/package.dhall} export DHALL_GENODE=''${DHALL_GENODE:-${packages.dhallGenode}/package.dhall} ${dhallApps.dhall.program} text \ - <<< "(env:DHALL_GENODE).Init.render ($@)" \ - | ${nixpkgs.buildPackages.libxml2}/bin/xmllint -format - + <<< "(env:DHALL_GENODE).Init.render ($(cat))" \ + | ${nixpkgs.buildPackages.libxml2}/bin/xmllint \ + -format \ + -schema ${packages.genode-sources}/repos/os/src/init/config.xsd \ + - \ + | sed 's/>/>/g' '') diff --git a/lib/default.nix b/lib/default.nix index 7a5428a..c7836b3 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -29,22 +29,6 @@ in { dhall text < $source > $out ''; - renderDhallInit = path: args: - hostPkgs.runCommand "init.xml" { - preferLocalBuild = true; - buildInputs = with hostPkgs; [ dhall libxml2 ]; - initConfig = path; - initArgs = args; - DHALL_PRELUDE = "${testPkgs.dhallPrelude}/package.dhall"; - DHALL_GENODE = "${testPkgs.dhallGenode}/package.dhall"; - } '' - export XDG_CACHE_HOME=$NIX_BUILD_TOP - dhall text \ - <<< 'let Prelude = env:DHALL_GENODE in Prelude.Init.render (env:initConfig env:initArgs)' \ - > $out - xmllint --noout $out - ''; - mergeManifests = inputs: nixpkgs.legacyPackages.${localSystem}.writeTextFile { name = "manifest.dhall"; diff --git a/packages/default.nix b/packages/default.nix index ee50870..a362e1b 100644 --- a/packages/default.nix +++ b/packages/default.nix @@ -17,16 +17,15 @@ let callPackage' = path: attrs: addManifest (legacyPackages.callPackages path attrs); - buildUpstream = let - f = import ./genodelabs { - nixpkgs = legacyPackages; - }; + buildUpstream = let f = import ./genodelabs { nixpkgs = legacyPackages; }; in args: addManifest (f args); in rec { inherit (legacyPackages) stdenv; + genode-sources = legacyPackages.callPackage ./genodelabs/sources.nix { }; + base-hw-pc = buildUpstream { name = "base-hw-pc"; KERNEL = "hw"; @@ -61,10 +60,7 @@ in rec { ''; }; - driversPc = let - directoryBlacklist = [ - "repos/dde_zircon" - ]; + driversPc = let directoryBlacklist = [ "repos/dde_zircon" ]; in buildUpstream { name = "drivers"; BOARD = "pc"; diff --git a/packages/genodelabs/init.xsd.patch b/packages/genodelabs/init.xsd.patch new file mode 100644 index 0000000..d25a1dd --- /dev/null +++ b/packages/genodelabs/init.xsd.patch @@ -0,0 +1,54 @@ +commit c0a6db17001fb088d3289613a02660d8725bbde8 +Author: Emery Hemingway +Date: Sat Feb 22 15:40:56 2020 +0100 + + Update Init config schema + + - Add to the Init schema + - Use a relative path for base_types.xsd + - Allow empty nodes + - Allow "label" attributes within + +diff --git a/repos/os/src/init/config.xsd b/repos/os/src/init/config.xsd +index 938dcdb8fb..e7bfb5dfc5 100644 +--- a/repos/os/src/init/config.xsd ++++ b/repos/os/src/init/config.xsd +@@ -1,7 +1,7 @@ + + + +- ++ + + + +@@ -90,6 +90,7 @@ + + + ++ + + + +@@ -160,6 +161,12 @@ + + + ++ ++ ++ ++ ++ ++ + + + +@@ -168,7 +175,7 @@ + + + +- ++ + + + diff --git a/packages/genodelabs/sources.nix b/packages/genodelabs/sources.nix new file mode 100644 index 0000000..c1267fc --- /dev/null +++ b/packages/genodelabs/sources.nix @@ -0,0 +1,10 @@ +{ stdenv, genodeHeaders }: + +stdenv.mkDerivation { + pname = "genode-sources"; + inherit (genodeHeaders) version src; + patches = [ ./init.xsd.patch ./svn-trust-server-cert.patch ]; + dontConfigure = true; + dontBuild = true; + installPhase = "cp -a . $out"; +} diff --git a/tests/driver-hw.nix b/tests/driver-hw.nix index 3ddd8ce..93ec8ab 100644 --- a/tests/driver-hw.nix +++ b/tests/driver-hw.nix @@ -143,7 +143,7 @@ let iso = apps.hw-iso.function testEnv' testConfig'; xml = hostPkgs.runCommand (name + ".config") testEnv' '' - ${apps.render-init.program} "(${testConfig'}).config" > $out''; + ${apps.render-init.program} <<< "(${testConfig'}).config" > $out''; sotest = hostPkgs.runCommand "hw-${name}-sotest" testEnv' '' cp "${testPkgs.bender}" bender diff --git a/tests/driver-linux.nix b/tests/driver-linux.nix index c8daf43..36d7bcc 100644 --- a/tests/driver-linux.nix +++ b/tests/driver-linux.nix @@ -104,7 +104,7 @@ let ${apps.dhall.program} <<< "(${testConfig'}).config" > $out ''; xml = hostPkgs.runCommand (name + ".config") env' '' - ${apps.render-init.program} "(${testConfig'}).config" > $out + ${apps.render-init.program} <<< "(${testConfig'}).config" > $out ''; image = hostPkgs.runCommand (name + ".image.elf") env' '' mkdir -p $out diff --git a/tests/driver-nova.nix b/tests/driver-nova.nix index 5127aa2..2e2d064 100644 --- a/tests/driver-nova.nix +++ b/tests/driver-nova.nix @@ -144,7 +144,7 @@ let iso = apps.nova-iso.function testEnv' "${testConfig'}"; xml = hostPkgs.runCommand (name + ".config") testEnv' '' - ${apps.render-init.program} "(${testConfig'}).config" > $out''; + ${apps.render-init.program} <<< "(${testConfig'}).config" > $out''; sotest = hostPkgs.runCommand "nova-${name}-sotest" testEnv' '' cp "${testPkgs.bender}" bender diff --git a/tests/pci.dhall b/tests/pci.dhall index a93440f..0f1de9a 100644 --- a/tests/pci.dhall +++ b/tests/pci.dhall @@ -38,7 +38,7 @@ in { config = , constrainPhys = True } , provides = [ "Platform", "Acpi" ] - , romReports = [ label "acpi" ] + , romReports = [ label "acpi", label "smbios_table" ] , routes = [ ServiceRoute.parent "IRQ" , ServiceRoute.parent "IO_MEM" @@ -77,7 +77,7 @@ in { config = } , rom = let manifest = env:MANIFEST - + in Genode.Boot.toRomPaths [ manifest.drivers.bin.acpi_drv , manifest.drivers.bin.platform_drv