diff --git a/apps/default.nix b/apps/default.nix
index 7c029f8..1fd70ee 100644
--- a/apps/default.nix
+++ b/apps/default.nix
@@ -31,7 +31,7 @@ rec {
program = "${drv}/bin/nova-image";
function = attrs: bootDesc:
nixpkgs.runCommand "nova-iso" (attrs // { inherit bootDesc; })
- "${drv}/bin/nova-image $bootDesc > $out";
+ "XDG_CACHE_HOME=$TMPDIR ${drv}/bin/nova-image $bootDesc > $out";
};
nova-iso = let
@@ -44,7 +44,7 @@ rec {
program = "${drv}/bin/nova-iso";
function = attrs: bootDesc:
nixpkgs.runCommand "nova.iso" attrs
- ''${drv}/bin/nova-iso "${bootDesc}" > $out'';
+ ''XDG_CACHE_HOME=$TMPDIR ${drv}/bin/nova-iso "${bootDesc}" > $out'';
};
render-init =
diff --git a/apps/nova-image/default.nix b/apps/nova-image/default.nix
index 20cb78a..e4f5b5a 100644
--- a/apps/nova-image/default.nix
+++ b/apps/nova-image/default.nix
@@ -26,9 +26,9 @@ 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 <<< "${
- ./nova-modules.as.dhall
- } ($@)" > "$TMPDIR/modules.as"
+ ${dhallApps.dhall.program} text <<< \
+ "(${./nova-modules.as.dhall}).to32bitImage ($@)" \
+ > "$TMPDIR/modules.as"
# compile the boot modules into one object file
$CC -c -x assembler -o "$TMPDIR/boot_modules.o" "$TMPDIR/modules.as"
diff --git a/apps/nova-image/nova-modules.as.dhall b/apps/nova-image/nova-modules.as.dhall
index 70e3c5d..6a6891b 100644
--- a/apps/nova-image/nova-modules.as.dhall
+++ b/apps/nova-image/nova-modules.as.dhall
@@ -4,123 +4,119 @@ let Genode = env:DHALL_GENODE
let Prelude = Genode.Prelude
-let RomMap = Prelude.Map.Type Text Genode.Boot.Rom
-
let RomEntry = Prelude.Map.Entry Text Genode.Boot.Rom
-let Configuration =
- { arch : < x86_32 | x86_64 >, config : Genode.Init.Type, rom : RomMap }
- : Type
+let compile =
+ λ ( addressType
+ : Text
+ )
+ → λ(boot : Genode.Boot.Type)
+ → let NaturalIndex =
+ { index : Natural, value : Text }
+
+ let TextIndex = { index : Text, value : Text }
+
+ let rom =
+ [ { mapKey = "config"
+ , mapValue =
+ Genode.Boot.Rom.RomText (Genode.Init.render boot.config)
+ }
+ ]
+ # boot.rom
+
+ let moduleKeys = Prelude.Map.keys Text Genode.Boot.Rom rom
+
+ let moduleValues =
+ let f =
+ λ(e : RomEntry)
+ → merge
+ { RomText = λ(text : Text) → ".ascii ${Text/show text}"
+ , RomPath = λ(path : Text) → ".incbin ${Text/show path}"
+ }
+ e.mapValue
+
+ in Prelude.List.map RomEntry Text f rom
+
+ let map =
+ λ(list : List Text)
+ → λ(f : TextIndex → Text)
+ → let indexedNatural = Prelude.List.indexed Text list
+
+ let indexed =
+ Prelude.List.map
+ NaturalIndex
+ TextIndex
+ ( λ(x : NaturalIndex)
+ → { index = Prelude.Natural.show x.index
+ , value = x.value
+ }
+ )
+ indexedNatural
+
+ let texts = Prelude.List.map TextIndex Text f indexed
+
+ in Prelude.Text.concatSep "\n" texts
+
+ let mapNames = map moduleKeys
+
+ let mapValues = map moduleValues
+
+ in ''
+ .set MIN_PAGE_SIZE_LOG2, 12
+ .set DATA_ACCESS_ALIGNM_LOG2, 3
+
+ .section .data
+
+ .p2align DATA_ACCESS_ALIGNM_LOG2
+ .global _boot_modules_headers_begin
+ _boot_modules_headers_begin:
+
+ ''
+ ++ mapNames
+ ( λ ( m
+ : TextIndex
+ )
+ → ''
+ ${addressType} _boot_module_${m.index}_name
+ ${addressType} _boot_module_${m.index}_begin
+ ${addressType} _boot_module_${m.index}_end - _boot_module_${m.index}_begin
+ ''
+ )
+ ++ ''
+ .global _boot_modules_headers_end
+ _boot_modules_headers_end:
+
+ ''
+ ++ mapNames
+ ( λ(m : TextIndex)
+ → ''
+ .p2align DATA_ACCESS_ALIGNM_LOG2
+ _boot_module_${m.index}_name:
+ .string "${m.value}"
+ .byte 0
+
+ ''
+ )
+ ++ ''
+ .section .data.boot_modules_binaries
+
+ .global _boot_modules_binaries_begin
+ _boot_modules_binaries_begin:
+
+ ''
+ ++ mapValues
+ ( λ(m : TextIndex)
+ → ''
+ .p2align MIN_PAGE_SIZE_LOG2
+ _boot_module_${m.index}_begin:
+ ${m.value}
+ _boot_module_${m.index}_end:
+ ''
+ )
+ ++ ''
+ .p2align MIN_PAGE_SIZE_LOG2
+ .global _boot_modules_binaries_end
+ _boot_modules_binaries_end:
+ ''
-in λ ( boot
- : Configuration
- )
- → let NaturalIndex =
- { index : Natural, value : Text }
-
- let TextIndex = { index : Text, value : Text }
-
- let rom =
- [ { mapKey = "config"
- , mapValue =
- Genode.Boot.Rom.RomText (Genode.Init.render boot.config)
- }
- ]
- # boot.rom
-
- let moduleKeys = Prelude.Map.keys Text Genode.Boot.Rom rom
-
- let moduleValues =
- let f =
- λ(e : RomEntry)
- → merge
- { RomText = λ(text : Text) → ".ascii ${Text/show text}"
- , RomPath = λ(path : Text) → ".incbin ${Text/show path}"
- }
- e.mapValue
-
- in Prelude.List.map RomEntry Text f rom
-
- let map =
- λ(list : List Text)
- → λ(f : TextIndex → Text)
- → let indexedNatural = Prelude.List.indexed Text list
-
- let indexed =
- Prelude.List.map
- NaturalIndex
- TextIndex
- ( λ(x : NaturalIndex)
- → { index = Prelude.Natural.show x.index
- , value = x.value
- }
- )
- indexedNatural
-
- let texts = Prelude.List.map TextIndex Text f indexed
-
- in Prelude.Text.concatSep "\n" texts
-
- let mapNames = map moduleKeys
-
- let mapValues = map moduleValues
-
- let addressType = merge { x86_32 = ".long", x86_64 = ".quad" } boot.arch
-
- in ''
- .set MIN_PAGE_SIZE_LOG2, 12
- .set DATA_ACCESS_ALIGNM_LOG2, 3
-
- .section .data
-
- .p2align DATA_ACCESS_ALIGNM_LOG2
- .global _boot_modules_headers_begin
- _boot_modules_headers_begin:
-
- ''
- ++ mapNames
- ( λ ( m
- : TextIndex
- )
- → ''
- ${addressType} _boot_module_${m.index}_name
- ${addressType} _boot_module_${m.index}_begin
- ${addressType} _boot_module_${m.index}_end - _boot_module_${m.index}_begin
- ''
- )
- ++ ''
- .global _boot_modules_headers_end
- _boot_modules_headers_end:
-
- ''
- ++ mapNames
- ( λ(m : TextIndex)
- → ''
- .p2align DATA_ACCESS_ALIGNM_LOG2
- _boot_module_${m.index}_name:
- .string "${m.value}"
- .byte 0
-
- ''
- )
- ++ ''
- .section .data.boot_modules_binaries
-
- .global _boot_modules_binaries_begin
- _boot_modules_binaries_begin:
-
- ''
- ++ mapValues
- ( λ(m : TextIndex)
- → ''
- .p2align MIN_PAGE_SIZE_LOG2
- _boot_module_${m.index}_begin:
- ${m.value}
- _boot_module_${m.index}_end:
- ''
- )
- ++ ''
- .p2align MIN_PAGE_SIZE_LOG2
- .global _boot_modules_binaries_end
- _boot_modules_binaries_end:
- ''
+in { to32bitImage = compile ".long", to64bitImage = compile ".quad" }
diff --git a/tests/driver-nova-config.dhall b/tests/driver-nova-config.dhall
index 21878c9..6692d99 100644
--- a/tests/driver-nova-config.dhall
+++ b/tests/driver-nova-config.dhall
@@ -2,15 +2,8 @@
let Genode = env:DHALL_GENODE
-let Prelude = Genode.Prelude
-
-let RomMap = Prelude.Map.Type Text Genode.Boot.Rom
-
-let Args = { config : Genode.Init.Type, rom : RomMap } : Type
-
-in λ(args : Args)
- → { arch = let Arch = < x86_32 | x86_64 > in Arch.x86_64
- , config =
+in λ(args : Genode.Boot.Type)
+ → { config =
Genode.Init::{
, verbose = True
, defaultRoutes =
diff --git a/tests/libc.dhall b/tests/libc.dhall
index 52d19d4..565b1be 100644
--- a/tests/libc.dhall
+++ b/tests/libc.dhall
@@ -2,35 +2,42 @@
let Genode = env:DHALL_GENODE
-in λ ( _
- : {}
- )
- → Genode.Init::{
- , verbose = True
- , children =
- toMap
- { test-libc =
- Genode.Init.Start::{
- , binary = "test-libc"
- , exitPropagate = True
- , resources = { caps = 200, ram = Genode.units.MiB 400 }
- , routes = [ Genode.ServiceRoute.parent "Timer" ]
- , config =
- Some
- ( Genode.Prelude.XML.text
- ''
-
-
-
-
- 2019-08-20 15:01
-
-
-
-
- ''
- )
- }
- : Genode.Init.Start.Type
- }
- }
+in { config =
+ Genode.Init::{
+ , verbose = True
+ , children =
+ toMap
+ { test-libc =
+ Genode.Init.Start::{
+ , binary = "test-libc"
+ , exitPropagate = True
+ , resources = { caps = 200, ram = Genode.units.MiB 400 }
+ , routes = [ Genode.ServiceRoute.parent "Timer" ]
+ , config =
+ Some
+ ( Genode.Prelude.XML.text
+ ''
+
+
+
+
+ 2019-08-20 15:01
+
+
+
+
+ ''
+ )
+ }
+ : Genode.Init.Start.Type
+ }
+ }
+ , rom =
+ let manifest = env:MANIFEST
+
+ in Genode.Boot.toRomPaths
+ [ manifest.libc.lib.libc
+ manifest.libc.lib.libm
+ manifest.test-libc.bin.test-libc
+ ]
+ }