diff --git a/flake.nix b/flake.nix index d328466..dd0d0a1 100644 --- a/flake.nix +++ b/flake.nix @@ -31,6 +31,7 @@ inherit system legacyPackages; depot = thisSystem genode-depot.packages; apps = self.apps.${localSystem}; + dhallApps = dhall-haskell.apps.${localSystem}; }; defaultPackage = packages.genode.base-linux; diff --git a/packages/default.nix b/packages/default.nix index 9650d2b..da36661 100644 --- a/packages/default.nix +++ b/packages/default.nix @@ -1,11 +1,11 @@ # SPDX-License-Identifier: CC0-1.0 -{ system, legacyPackages, depot, apps }: +{ system, legacyPackages, depot, apps, dhallApps }: let inherit (legacyPackages) callPackage; - dhallPackages = legacyPackages.dhallPackages // (callPackage ./dhall { }); + dhallPackages = legacyPackages.dhallPackages // (callPackage ./dhall { inherit dhallApps; }); mkDhallManifest = drv: legacyPackages.runCommand "${drv.name}.dhall" { inherit drv; } diff --git a/packages/dhall/default.nix b/packages/dhall/default.nix index b82e9e0..e19587f 100644 --- a/packages/dhall/default.nix +++ b/packages/dhall/default.nix @@ -1,10 +1,10 @@ # SPDX-License-Identifier: CC0-1.0 -{ callPackage }: +{ callPackage, dhallApps }: rec { prelude = prelude_11_0_0; prelude_11_0_0 = callPackage ./prelude-11.0.0.nix { }; prelude_9_0_0 = callPackage ./prelude-9.0.0.nix { }; - genode = callPackage ./genode.nix { }; + genode = callPackage ./genode.nix { inherit dhallApps prelude; }; } diff --git a/packages/dhall/genode.nix b/packages/dhall/genode.nix index f11de62..2c5b916 100644 --- a/packages/dhall/genode.nix +++ b/packages/dhall/genode.nix @@ -1,9 +1,21 @@ # SPDX-License-Identifier: CC0-1.0 -{ fetchgit }: +{ stdenv, fetchgit, dhallApps, prelude }: -fetchgit { - url = "https://git.sr.ht/~ehmry/dhall-genode"; - rev = "07e16f711038cae1167a8aba22db6f12cc1215c5"; - sha256 = "1r6sz729bzwmp5vcwcf9vx1ppyqx2zhgy4zxxqv8bvn3nm8z82dz"; +stdenv.mkDerivation { + name = "dhall-genode"; + src = fetchgit { + url = "https://git.sr.ht/~ehmry/dhall-genode"; + rev = "472a300141766e58a68b605568eb881e0a944eca"; + sha256 = "03lxxrzyfkgf9c31ds93ndr1bl3a4rlynj377n9rhniz9xzl11y3"; + }; + DHALL_PRELUDE = prelude + "/package.dhall"; + buildCommand = '' + export XDG_CACHE_HOME=$TMPDIR + cp -r $src $out + chmod +w -R $out + echo $DHALL_PRELUDE > $out/Prelude.dhall + find $out -type f -exec \ + ${dhallApps.dhall.program} freeze --all --inplace {} \; + ''; } diff --git a/tests/driver-hw-config.dhall b/tests/driver-hw-config.dhall index a0ce116..011385c 100644 --- a/tests/driver-hw-config.dhall +++ b/tests/driver-hw-config.dhall @@ -4,32 +4,9 @@ let Genode = env:DHALL_GENODE let Prelude = Genode.Prelude -let ChildEntry = Prelude.Map.Entry Text Genode.Init.Start.Type - -let toChildEntry = - λ(init : Genode.Init.Type) - → let childCount = Prelude.List.length ChildEntry init.children - - let onlyChild = Prelude.Natural.lessThan childCount 2 - - let child = - if onlyChild - - then Prelude.Optional.fold - ChildEntry - (Prelude.List.head ChildEntry init.children) - ChildEntry - (λ(child : ChildEntry) → child) - { mapKey = "" - , mapValue = Genode.Init.Start::{ binary = "" } - } - - else { mapKey = "init", mapValue = Genode.Init.toStart init } - - in child - in λ(boot : Genode.Boot.Type) - → let child = toChildEntry boot.config + → let child = + { mapKey = "test", mapValue = Genode.Init.toStart boot.config } in { config = Genode.Init::{ diff --git a/tests/driver-linux-config.dhall b/tests/driver-linux-config.dhall index 62f7d91..3207931 100644 --- a/tests/driver-linux-config.dhall +++ b/tests/driver-linux-config.dhall @@ -23,7 +23,7 @@ in λ(args : Args) , provides = [ "Timer" ] } } - , { mapKey = "init", mapValue = Genode.Init.toStart args.config } + , { mapKey = "test", mapValue = Genode.Init.toStart args.config } ] } , rom = diff --git a/tests/driver-nova-config.dhall b/tests/driver-nova-config.dhall index 65a2716..b54081a 100644 --- a/tests/driver-nova-config.dhall +++ b/tests/driver-nova-config.dhall @@ -4,32 +4,9 @@ let Genode = env:DHALL_GENODE let Prelude = Genode.Prelude -let ChildEntry = Prelude.Map.Entry Text Genode.Init.Start.Type - -let toChildEntry = - λ(init : Genode.Init.Type) - → let childCount = Prelude.List.length ChildEntry init.children - - let onlyChild = Prelude.Natural.lessThan childCount 2 - - let child = - if onlyChild - - then Prelude.Optional.fold - ChildEntry - (Prelude.List.head ChildEntry init.children) - ChildEntry - (λ(child : ChildEntry) → child) - { mapKey = "" - , mapValue = Genode.Init.Start::{ binary = "" } - } - - else { mapKey = "init", mapValue = Genode.Init.toStart init } - - in child - in λ(boot : Genode.Boot.Type) - → let child = toChildEntry boot.config + → let child = + { mapKey = "test", mapValue = Genode.Init.toStart boot.config } in { config = Genode.Init::{ diff --git a/tests/signal.dhall b/tests/signal.dhall index 4761a38..df4650e 100644 --- a/tests/signal.dhall +++ b/tests/signal.dhall @@ -12,7 +12,6 @@ in { config = , binary = "test-signal" , exitPropagate = True , resources = { caps = 500, ram = Genode.units.MiB 10 } - , routes = [ Genode.ServiceRoute.parent "Timer" ] } } } diff --git a/tests/solo5/simple.dhall b/tests/solo5/simple.dhall index 7ff1834..2d8bf40 100644 --- a/tests/solo5/simple.dhall +++ b/tests/solo5/simple.dhall @@ -12,7 +12,6 @@ in λ(testBinary : Genode.Prelude.Map.Entry Text Text) , binary = testBinary.mapKey , exitPropagate = True , resources = { caps = 256, ram = Genode.units.MiB 3 } - , routes = [ Genode.ServiceRoute.parent "Timer" ] , config = Some ( Genode.Prelude.XML.element