Browse Source

Update to latest Dhall in Nixpkgs master

llvm-10
Emery Hemingway 2 years ago
parent
commit
818014787f
  1. 83
      apps/default.nix
  2. 2
      apps/generate-manifest/default.nix
  3. 11
      apps/hw-image/default.nix
  4. 7
      apps/linux-image/default.nix
  5. 47
      apps/modules.as.dhall
  6. 9
      apps/nova-image/default.nix
  7. 7
      apps/render-init/default.nix
  8. 2
      apps/render-rom.dhall
  9. 450
      compositions/pc-drivers.dhall
  10. 117
      flake.lock
  11. 27
      flake.nix
  12. 12
      lib/default.nix
  13. 9
      packages/default.nix
  14. 9
      packages/dhall/default.nix
  15. 30
      packages/dhall/genode.nix
  16. 25
      packages/dhall/prelude-11.0.0.nix
  17. 26
      packages/dhall/prelude-9.0.0.nix
  18. 3
      tests/driver-hw.nix
  19. 3
      tests/driver-linux.nix
  20. 3
      tests/driver-nova.nix
  21. 144
      tests/driver_manager.dhall
  22. 33
      tests/log.dhall
  23. 81
      tests/noux.dhall
  24. 117
      tests/pci.dhall
  25. 44
      tests/rtc.dhall
  26. 35
      tests/signal.dhall
  27. 58
      tests/solo5/blk.dhall
  28. 129
      tests/solo5/net.dhall
  29. 149
      tests/solo5/net_2if.dhall
  30. 50
      tests/solo5/simple.dhall
  31. 53
      tests/solo5/time.dhall
  32. 10
      tests/sotest_config.dhall
  33. 2
      tests/sotest_hw_config.dhall
  34. 47
      tests/test-wrapper.dhall

83
apps/default.nix

@ -1,20 +1,62 @@
# SPDX-License-Identifier: CC0-1.0
{ nixpkgs, dhallApps, packages }:
{ self, nixpkgs, nixpkgsLocal, packages }:
rec {
let
dhallApps = let
mkApp = { drv, name ? drv.pname or drv.name, exe ? name }: {
inherit name;
value = {
type = "app";
program = "${drv}/bin/${exe}";
};
};
in builtins.listToAttrs [
(mkApp { drv = nixpkgsLocal.dhall; })
(mkApp {
drv = nixpkgsLocal.dhall-bash;
name = "dhall-to-bash";
})
(mkApp {
drv = nixpkgsLocal.dhall-json;
name = "dhall-to-json";
})
(mkApp {
drv = nixpkgsLocal.dhall-json;
name = "json-to-dhall";
})
(mkApp {
drv = nixpkgsLocal.dhall-json;
name = "dhall-to-yaml";
})
(mkApp {
drv = nixpkgsLocal.dhall-json;
name = "yaml-to-dhall";
})
];
linux-image =
let drv = import ./linux-image { inherit nixpkgs dhallApps packages; };
in {
type = "app";
program = "${drv}/bin/linux-image";
in dhallApps // {
linux-image = let
drv = import ./linux-image {
apps = self;
inherit nixpkgs packages;
};
in {
type = "app";
program = "${drv}/bin/linux-image";
};
generate-manifest = let
drv = import ./generate-manifest {
stdenv = packages.stdenv;
inherit nixpkgs dhallApps;
inherit nixpkgs;
};
in {
type = "app";
@ -24,7 +66,8 @@ rec {
hw-image = let
drv = import ./hw-image {
stdenv = packages.stdenv;
inherit nixpkgs dhallApps packages;
apps = self;
inherit nixpkgs packages;
};
in {
type = "app";
@ -37,7 +80,8 @@ rec {
nova-image = let
drv = import ./nova-image {
stdenv = packages.stdenv;
inherit nixpkgs dhallApps packages;
apps = self;
inherit nixpkgs packages;
};
in {
type = "app";
@ -50,7 +94,8 @@ rec {
hw-iso = let
drv = import ./hw-iso {
stdenv = packages.stdenv;
inherit nixpkgs packages hw-image;
inherit nixpkgs packages;
inherit (self) hw-image;
};
in {
type = "app";
@ -63,7 +108,8 @@ rec {
nova-iso = let
drv = import ./nova-iso {
stdenv = packages.stdenv;
inherit nixpkgs packages nova-image;
inherit nixpkgs packages;
inherit (self) nova-image;
};
in {
type = "app";
@ -73,11 +119,14 @@ rec {
''XDG_CACHE_HOME=$TMPDIR ${drv}/bin/nova-iso "${bootDesc}" > $out'';
};
render-init =
let drv = import ./render-init { inherit nixpkgs dhallApps packages; };
in {
type = "app";
program = "${drv}/bin/render-init";
render-init = let
drv = import ./render-init {
apps = self;
inherit nixpkgs packages;
};
in {
type = "app";
program = "${drv}/bin/render-init";
};
}

2
apps/generate-manifest/default.nix

@ -1,6 +1,6 @@
# SPDX-License-Identifier: CC0-1.0
{ stdenv, nixpkgs, dhallApps }:
{ stdenv, nixpkgs }:
with nixpkgs.buildPackages;

11
apps/hw-image/default.nix

@ -1,6 +1,6 @@
# SPDX-License-Identifier: CC0-1.0
{ stdenv, nixpkgs, dhallApps, packages }:
{ stdenv, nixpkgs, apps, packages }:
let inherit (packages) genodeSources base-hw-pc;
in nixpkgs.writeScriptBin "hw-image" (with nixpkgs.buildPackages;
@ -16,14 +16,13 @@ in nixpkgs.writeScriptBin "hw-image" (with nixpkgs.buildPackages;
TMPDIR="$(${coreutils}/bin/mktemp -d)"
trap "rm -rf $TMPDIR" err exit
export DHALL_PRELUDE=${packages.dhallPrelude}/package.dhall
export DHALL_GENODE=${packages.dhallGenode}/package.dhall
export DHALL_GENODE=${packages.dhallGenode}/source.dhall
build_core() {
local lib="$1"
local modules="$2"
local link_address="$3"
${dhallApps.dhall.program} text <<< \
${apps.dhall.program} text <<< \
"(${../modules.as.dhall}).to64bitImage ($modules)" \
> "$TMPDIR/modules.as"
@ -40,14 +39,14 @@ in nixpkgs.writeScriptBin "hw-image" (with nixpkgs.buildPackages;
cat a.out
}
${dhallApps.dhall.program} text \
${apps.dhall.program} text \
<<< "(env:DHALL_GENODE).Init.render ($@).config" \
| ${nixpkgs.buildPackages.libxml2}/bin/xmllint \
-schema ${packages.genodeSources}/repos/os/src/init/config.xsd - \
| sed 's/&gt;/>/g' \
> $TMPDIR/config
${dhallApps.dhall.program} \
${apps.dhall.program} \
<<< "${../insert-config-rom.dhall} \"$TMPDIR/config\" ($@).rom" \
> "$TMPDIR/modules.dhall"

7
apps/linux-image/default.nix

@ -1,13 +1,12 @@
# SPDX-License-Identifier: CC0-1.0
{ nixpkgs, dhallApps, packages }:
{ nixpkgs, apps, packages }:
nixpkgs.writeScriptBin "linux-image" (with nixpkgs.buildPackages; ''
#!${runtimeShell}
set -eu
export DHALL_PRELUDE=''${DHALL_PRELUDE:-${packages.dhallPrelude}/package.dhall}
export DHALL_GENODE=''${DHALL_GENODE:-${packages.dhallGenode}/package.dhall}
${dhallApps.dhall.program} text <<< "${./script.dhall} ($@)" > boot.sh
export DHALL_GENODE=''${DHALL_GENODE:-${packages.dhallGenode}/source.dhall}
${apps.dhall.program} text <<< "${./script.dhall} ($@)" > boot.sh
source boot.sh
rm boot.sh
'')

47
apps/modules.as.dhall

@ -9,17 +9,14 @@ let BootModules = Genode.BootModules
let RomEntry = Prelude.Map.Entry Text BootModules.ROM.Type
let compile =
λ ( addressType
: Text
)
λ(addressType : Text)
→ λ(rom : Prelude.Map.Type Text BootModules.ROM.Type)
→ let NaturalIndex =
{ index : Natural, value : Text }
→ let NaturalIndex = { index : Natural, value : Text }
let TextIndex = { index : Text, value : Text }
let moduleKeys = Prelude.Map.keys Text BootModules.ROM.Type rom
let moduleValues =
let f =
λ(e : RomEntry)
@ -28,14 +25,14 @@ let compile =
, 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
@ -46,30 +43,28 @@ let compile =
}
)
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
)
( λ(m : TextIndex)
→ ''
${addressType} _boot_module_${m.index}_name
${addressType} _boot_module_${m.index}_begin
@ -79,7 +74,7 @@ let compile =
++ ''
.global _boot_modules_headers_end
_boot_modules_headers_end:
''
++ mapNames
( λ(m : TextIndex)
@ -88,15 +83,15 @@ let compile =
_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)

9
apps/nova-image/default.nix

@ -1,6 +1,6 @@
# SPDX-License-Identifier: CC0-1.0
{ stdenv, nixpkgs, dhallApps, packages }:
{ stdenv, nixpkgs, apps, packages }:
let inherit (packages) genodeSources base-nova;
in nixpkgs.writeScriptBin "nova-image" (with nixpkgs.buildPackages;
@ -16,17 +16,16 @@ in nixpkgs.writeScriptBin "nova-image" (with nixpkgs.buildPackages;
TMPDIR="$(${coreutils}/bin/mktemp -d)"
trap "rm -rf $TMPDIR" err exit
export DHALL_PRELUDE=${packages.dhallPrelude}/package.dhall
export DHALL_GENODE=${packages.dhallGenode}/package.dhall
export DHALL_GENODE=${packages.dhallGenode}/source.dhall
${dhallApps.dhall.program} text \
${apps.dhall.program} text \
<<< "(env:DHALL_GENODE).Init.render ($@).config" \
| ${nixpkgs.buildPackages.libxml2}/bin/xmllint \
-schema ${packages.genodeSources}/repos/os/src/init/config.xsd - \
| sed 's/&gt;/>/g' \
> $TMPDIR/config
${dhallApps.dhall.program} text \
${apps.dhall.program} text \
<<< "(${../modules.as.dhall}).to64bitImage (${
../insert-config-rom.dhall
} \"$TMPDIR/config\" ($@).rom)" \

7
apps/render-init/default.nix

@ -1,13 +1,12 @@
# SPDX-License-Identifier: CC0-1.0
{ nixpkgs, dhallApps, packages }:
{ nixpkgs, apps, packages }:
nixpkgs.writeScriptBin "render-init" (with nixpkgs.buildPackages; ''
#!${runtimeShell}
set -eu
export DHALL_PRELUDE=''${DHALL_PRELUDE:-${packages.dhallPrelude}/package.dhall}
export DHALL_GENODE=''${DHALL_GENODE:-${packages.dhallGenode}/package.dhall}
${dhallApps.dhall.program} text \
export DHALL_GENODE=''${DHALL_GENODE:-${packages.dhallGenode}/source.dhall}
${apps.dhall.program} text \
<<< "(env:DHALL_GENODE).Init.render ($(cat))" \
| ${nixpkgs.buildPackages.libxml2}/bin/xmllint \
-format \

2
apps/render-rom.dhall

@ -8,7 +8,7 @@ let render =
Genode.BootModules.toRomTexts
(toMap { config = Genode.Init.render boot.config })
# boot.rom
in rom
in render

450
compositions/pc-drivers.dhall

@ -26,236 +26,238 @@ let relabel =
let drivers =
Init::{
, services =
[ ServiceRoute.child "Framebuffer" "dynamic"
, ServiceRoute.child "Block" "dynamic"
, ServiceRoute.child "Usb" "usb_drv"
, ServiceRoute.child "Platform" "platform_drv"
, ServiceRoute.child "Input" "input_filter"
, ServiceRoute.child "Rtc" "rtc"
]
, children =
toMap
{ rtc =
Child.flat
Child.Attributes::{
, binary = "rtc_drv"
, provides = [ "Rtc" ]
, routes =
[ ServiceRoute.parent "IO_PORT"
, ServiceRoute.parent "IO_MEM"
]
[ ServiceRoute.child "Framebuffer" "dynamic"
, ServiceRoute.child "Block" "dynamic"
, ServiceRoute.child "Usb" "usb_drv"
, ServiceRoute.child "Platform" "platform_drv"
, ServiceRoute.child "Input" "input_filter"
, ServiceRoute.child "Rtc" "rtc"
]
, children = toMap
{ rtc =
Child.flat
Child.Attributes::{
, binary = "rtc_drv"
, provides = [ "Rtc" ]
, routes =
[ ServiceRoute.parent "IO_PORT"
, ServiceRoute.parent "IO_MEM"
]
}
, rom_reporter =
Child.flat
Child.Attributes::{
, binary = "rom_reporter"
, config = Init.Config::{
, content =
[ XML.text
''
<rom label="acpi"/>
<rom label="pci_devices"/>
<rom label="usb_devices"/>
''
]
}
, rom_reporter =
Child.flat
Child.Attributes::{
, binary = "rom_reporter"
, config =
Init.Config::{
, content =
[ XML.text
''
<rom label="acpi"/>
<rom label="pci_devices"/>
<rom label="usb_devices"/>
''
]
}
, reportRoms =
[ label "acpi", label "pci_devices", label "usb_devices" ]
, routes =
let routeReportToParent =
λ(label : Text)
→ ServiceRoute.parentLabel
"Report"
(Some label)
(Some label)
in [ routeReportToParent "acpi"
, routeReportToParent "pci_devices"
, routeReportToParent "usb_devices"
]
}
, acpi_drv =
Child.flat
Child.Attributes::{
, binary = "acpi_drv"
, priority = 1
, resources =
Resources::{ caps = 350, ram = Genode.units.MiB 4 }
, romReports = [ label "acpi" ]
, routes =
[ ServiceRoute.parent "IO_MEM"
, ServiceRoute.parentLabel
"Report"
(Some "smbios_table")
(Some "smbios_table")
]
}
, platform_drv =
Child.flat
Child.Attributes::{
, binary = "platform_drv"
, resources =
Resources::{
, caps = 400
, ram = Genode.units.MiB 4
, constrainPhys = True
}
, provides = [ "Acpi", "Platform" ]
, reportRoms = [ label "acpi" ]
, romReports = [ relabel "pci" "pci_devices" ]
, routes =
[ ServiceRoute.parent "IRQ"
, ServiceRoute.parent "IO_MEM"
, ServiceRoute.parent "IO_PORT"
, ServiceRoute.parent "Timer"
, ServiceRoute.parentLabel
"ROM"
(Some "system")
(Some "system")
]
, config =
Init.Config::{
, attributes = toMap { system = "yes" }
, content =
[ XML.text
''
<report pci="yes"/>
<policy label_prefix="ps2_drv">
<device name="PS2"/>
</policy>
<policy label_prefix="dynamic -> vesa_fb_drv">
<pci class="VGA"/>
</policy>
<policy label_prefix="dynamic -> ahci_drv">
<pci class="AHCI"/>
</policy>
<policy label_prefix="dynamic -> nvme_drv">
<pci class="NVME"/>
</policy>
<policy label_prefix="usb_drv">
<pci class="USB"/>
</policy>
<policy label_prefix="dynamic -> intel_fb_drv">
<pci class="VGA"/>
<pci bus="0" device="0" function="0"/>
<pci class="ISABRIDGE"/>
</policy>
<policy label_suffix="-> wifi">
<pci class="WIFI"/>
</policy>
<policy label_suffix="-> nic">
<pci class="ETHERNET"/>
</policy>
<policy label_suffix="-> audio">
<pci class="AUDIO"/>
<pci class="HDAUDIO"/>
</policy>
<policy label="acpica"/>
''
]
}
}
, usb_drv =
Child.flat
Child.Attributes::{
, binary = "usb_drv"
, priority = 1
, resources =
Resources::{ caps = 200, ram = Genode.units.MiB 16 }
, provides = [ "Input", "Usb" ]
, reportRoms = [ relabel "config" "usb_drv.config" ]
, romReports = [ relabel "devices" "usb_devices" ]
, routes =
[ ServiceRoute.child "Platform" "platform_drv"
, ServiceRoute.parentLabel
"Report"
(Some "config")
(Some "usb_active_config")
, ServiceRoute.parent "Timer"
]
, reportRoms =
[ label "acpi", label "pci_devices", label "usb_devices" ]
, routes =
let routeReportToParent =
λ(label : Text)
→ ServiceRoute.parentLabel
"Report"
(Some label)
(Some label)
in [ routeReportToParent "acpi"
, routeReportToParent "pci_devices"
, routeReportToParent "usb_devices"
]
}
, acpi_drv =
Child.flat
Child.Attributes::{
, binary = "acpi_drv"
, priority = 1
, resources = Resources::{
, caps = 350
, ram = Genode.units.MiB 4
}
, ps2_drv =
Child.flat
Child.Attributes::{
, binary = "ps2_drv"
, provides = [ "Input" ]
, routes =
[ ServiceRoute.child "Platform" "platform_drv"
, ServiceRoute.parent "Timer"
]
, romReports = [ label "acpi" ]
, routes =
[ ServiceRoute.parent "IO_MEM"
, ServiceRoute.parentLabel
"Report"
(Some "smbios_table")
(Some "smbios_table")
]
}
, platform_drv =
Child.flat
Child.Attributes::{
, binary = "platform_drv"
, resources = Resources::{
, caps = 400
, ram = Genode.units.MiB 4
, constrainPhys = True
}
, input_filter =
Child.flat
Child.Attributes::{
, binary = "input_filter"
, priority = 1
, resources = Resources::{ ram = Genode.units.MiB 2 }
, provides = [ "Input" ]
, routes =
[ ServiceRoute.parent "Timer"
, ServiceRoute.parentLabel
"ROM"
(Some "config")
(Some "input_filter.config")
, ServiceRoute.childLabel
"Input"
"ps2_drv"
(Some "ps2")
(None Text)
, ServiceRoute.childLabel
"Input"
"usb_drv"
(Some "usb")
(None Text)
]
, provides = [ "Acpi", "Platform" ]
, reportRoms = [ label "acpi" ]
, romReports = [ relabel "pci" "pci_devices" ]
, routes =
[ ServiceRoute.parent "IRQ"
, ServiceRoute.parent "IO_MEM"
, ServiceRoute.parent "IO_PORT"
, ServiceRoute.parent "Timer"
, ServiceRoute.parentLabel
"ROM"
(Some "system")
(Some "system")
]
, config = Init.Config::{
, attributes = toMap { system = "yes" }
, content =
[ XML.text
''
<report pci="yes"/>
<policy label_prefix="ps2_drv">
<device name="PS2"/>
</policy>
<policy label_prefix="dynamic -> vesa_fb_drv">
<pci class="VGA"/>
</policy>
<policy label_prefix="dynamic -> ahci_drv">
<pci class="AHCI"/>
</policy>
<policy label_prefix="dynamic -> nvme_drv">
<pci class="NVME"/>
</policy>
<policy label_prefix="usb_drv">
<pci class="USB"/>
</policy>
<policy label_prefix="dynamic -> intel_fb_drv">
<pci class="VGA"/>
<pci bus="0" device="0" function="0"/>
<pci class="ISABRIDGE"/>
</policy>
<policy label_suffix="-> wifi">
<pci class="WIFI"/>
</policy>
<policy label_suffix="-> nic">
<pci class="ETHERNET"/>
</policy>
<policy label_suffix="-> audio">
<pci class="AUDIO"/>
<pci class="HDAUDIO"/>
</policy>
<policy label="acpica"/>
''
]
}
, driver_manager =
Child.flat
Child.Attributes::{
, binary = "driver_manager"
, priority = 1
, reportRoms =
[ label "ahci_ports"
, label "nvme_ns"
, label "pci_devices"
, label "usb_devices"
]
, romReports =
[ relabel "init.config" "dynamic.config"
, label "usb_drv.config"
]
, routes =
[ ServiceRoute.parentLabel
"Report"
(Some "block_devices")
(Some "block_devices")
, ServiceRoute.parentLabel
"ROM"
(Some "usb_policy")
(Some "usb_policy")
]
}
, usb_drv =
Child.flat
Child.Attributes::{
, binary = "usb_drv"
, priority = 1
, resources = Resources::{
, caps = 200
, ram = Genode.units.MiB 16
}
, dynamic =
Child.flat
Child.Attributes::{
, binary = "init"
, priority = 1
, resources =
Resources::{ caps = 1400, ram = Genode.units.MiB 64 }
, provides = [ "Framebuffer", "Block" ]
, romReports = [ label "ahci_ports", label "nvme_ns" ]
, reportRoms = [ relabel "config" "dynamic.config" ]
, routes =
[ ServiceRoute.child "Platform" "platform_drv"
, ServiceRoute.child "Usb" "usb_drv"
, ServiceRoute.parent "Timer"
, ServiceRoute.parent "Report"
, ServiceRoute.parent "IO_MEM"
, ServiceRoute.parent "IO_PORT"
]
, provides = [ "Input", "Usb" ]
, reportRoms = [ relabel "config" "usb_drv.config" ]
, romReports = [ relabel "devices" "usb_devices" ]
, routes =
[ ServiceRoute.child "Platform" "platform_drv"
, ServiceRoute.parentLabel
"Report"
(Some "config")
(Some "usb_active_config")
, ServiceRoute.parent "Timer"
]
}
, ps2_drv =
Child.flat
Child.Attributes::{
, binary = "ps2_drv"
, provides = [ "Input" ]
, routes =
[ ServiceRoute.child "Platform" "platform_drv"
, ServiceRoute.parent "Timer"
]
}
, input_filter =
Child.flat
Child.Attributes::{
, binary = "input_filter"
, priority = 1
, resources = Resources::{ ram = Genode.units.MiB 2 }
, provides = [ "Input" ]
, routes =
[ ServiceRoute.parent "Timer"
, ServiceRoute.parentLabel
"ROM"
(Some "config")
(Some "input_filter.config")
, ServiceRoute.childLabel
"Input"
"ps2_drv"
(Some "ps2")
(None Text)
, ServiceRoute.childLabel
"Input"
"usb_drv"
(Some "usb")
(None Text)
]
}
, driver_manager =
Child.flat
Child.Attributes::{
, binary = "driver_manager"
, priority = 1
, reportRoms =
[ label "ahci_ports"
, label "nvme_ns"
, label "pci_devices"
, label "usb_devices"
]
, romReports =
[ relabel "init.config" "dynamic.config"
, label "usb_drv.config"
]
, routes =
[ ServiceRoute.parentLabel
"Report"
(Some "block_devices")
(Some "block_devices")
, ServiceRoute.parentLabel
"ROM"
(Some "usb_policy")
(Some "usb_policy")
]
}
, dynamic =
Child.flat
Child.Attributes::{
, binary = "init"
, priority = 1
, resources = Resources::{
, caps = 1400
, ram = Genode.units.MiB 64
}
}
, provides = [ "Framebuffer", "Block" ]
, romReports = [ label "ahci_ports", label "nvme_ns" ]
, reportRoms = [ relabel "config" "dynamic.config" ]
, routes =
[ ServiceRoute.child "Platform" "platform_drv"
, ServiceRoute.child "Usb" "usb_drv"
, ServiceRoute.parent "Timer"
, ServiceRoute.parent "Report"
, ServiceRoute.parent "IO_MEM"
, ServiceRoute.parent "IO_PORT"
]
}
}
}
in drivers

117
flake.lock

@ -1,58 +1,5 @@
{
"inputs": {
"dhall-haskell": {
"info": {
"narHash": "sha256-KJl9ZLcMcEsLSPcwcWoc0Ac74/6HKC9LkVMeLwhyhlg="
},
"inputs": {
"nixpkgs": {
"info": {
"narHash": "sha256-wJg4DA700SoQbEz61448sR6BgxRa1R92K3vvCV1g+HY="
},
"inputs": {},
"locked": {
"ref": "18.09-beta",
"rev": "1d4de0d552ae9aa66a5b8dee5fb0650a4372d148",
"type": "git",
"url": "https://github.com/nixos/nixpkgs.git"
},
"original": {
"ref": "18.09-beta",
"rev": "1d4de0d552ae9aa66a5b8dee5fb0650a4372d148",
"type": "git",
"url": "https://github.com/nixos/nixpkgs.git"
}
},
"nixpkgsStaticLinux": {
"info": {
"narHash": "sha256-famU3pJZ4vkElV9qc71HmyRVSvcrAhfMZ0UJKpmmKP8="
},
"inputs": {},
"locked": {
"ref": "static-haskell-nix-stack-dhall-working",
"rev": "925aac04f4ca58aceb83beef18cb7dae0715421b",
"type": "git",
"url": "https://github.com/nh2/nixpkgs.git"
},
"original": {
"ref": "static-haskell-nix-stack-dhall-working",
"type": "git",
"url": "https://github.com/nh2/nixpkgs.git"
}
}
},
"locked": {
"ref": "flake",
"rev": "aea28adf3d10ff1982aa4ddd176d1476251b932f",
"type": "git",
"url": "https://github.com/dhall-lang/dhall-haskell"
},
"original": {
"ref": "flake",
"type": "git",
"url": "https://github.com/dhall-lang/dhall-haskell"
}
},
"nodes": {
"genode-depot": {
"info": {
"lastModified": 1584019323,
@ -60,23 +7,7 @@
"revCount": 8
},
"inputs": {
"nixpkgs": {
"info": {
"lastModified": 1584015812,
"narHash": "sha256-oDj4g9nL3fp3xh0jAPZSHiucDxkLXA/rO3uM8L6kE0Y="
},
"inputs": {},
"locked": {
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "a3735dcbd7b2530ae3bcf73fd91e1ca6aa9449e7",
"type": "github"
},
"original": {
"id": "nixpkgs",
"type": "indirect"
}
}
"nixpkgs": "nixpkgs"
},
"locked": {
"ref": "master",
@ -90,11 +21,43 @@
}
},
"nixpkgs": {
"info": {
"lastModified": 1584015812,
"narHash": "sha256-oDj4g9nL3fp3xh0jAPZSHiucDxkLXA/rO3uM8L6kE0Y="
},
"locked": {
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "a3735dcbd7b2530ae3bcf73fd91e1ca6aa9449e7",
"type": "github"
},
"original": {
"id": "nixpkgs",
"type": "indirect"
}
},
"nixpkgsUpstream": {
"info": {
"lastModified": 1584464280,
"narHash": "sha256-ovYhaoANbsuIRik2zOe5Sxhn0eu5PnExP4IhAJxRUW0="
},
"locked": {
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "7806df1e5f5d49864d917497a4cd2f5ec1a359f8",
"type": "github"
},
"original": {
"owner": "NixOS",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"info": {
"lastModified": 1583160598,
"narHash": "sha256-jiBSr7JK/xy7pIXFVhjdxpWy0pudDDRDW5XjzmDXPjA="
},
"inputs": {},
"locked": {
"owner": "ehmry",
"repo": "nixpkgs",
@ -106,7 +69,15 @@
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"genode-depot": "genode-depot",
"nixpkgs": "nixpkgs_2",
"nixpkgsUpstream": "nixpkgsUpstream"
}
}
},
"version": 4
"root": "root",
"version": 5
}

27
flake.nix

@ -6,13 +6,12 @@
description = "Genode packages";
inputs = {
dhall-haskell.uri =
"git+https://github.com/dhall-lang/dhall-haskell?ref=flake";
genode-depot.uri = "git+https://git.sr.ht/~ehmry/genode-depot";
nixpkgs.uri = "github:ehmry/nixpkgs";
nixpkgsUpstream.uri = "github:NixOS/nixpkgs";
};
outputs = { self, dhall-haskell, genode-depot, nixpkgs }:
outputs = { self, genode-depot, nixpkgs, nixpkgsUpstream }:
let
mkOutput = { system, localSystem, crossSystem }:
let thisSystem = builtins.getAttr system;
@ -20,7 +19,7 @@
lib = (nixpkgs.lib) // (import ./lib {
inherit system localSystem crossSystem;
inherit nixpkgs dhall-haskell genode-depot;
inherit apps nixpkgs genode-depot;
genodepkgs = self;
});
@ -28,31 +27,29 @@
# pass thru Nixpkgs
packages = import ./packages {
inherit system legacyPackages;
inherit system legacyPackages apps;
localPackages = nixpkgsUpstream.legacyPackages.${localSystem};
depot = thisSystem genode-depot.packages;
apps = self.apps.${localSystem};
dhallApps = dhall-haskell.apps.${localSystem};
};
devShell = legacyPackages.mkShell {
nativeBuildInputs = [ dhall-haskell.packages.${localSystem}.dhall ];
shellHook = ''
export DHALL_PRELUDE="${packages.dhallPrelude}/package.dhall"
export DHALL_GENODE="${packages.dhallGenode}/package.dhall"
'';
nativeBuildInputs = [
nixpkgs.legacyPackages.${localSystem}.dhall
packages.dhallGenode
];
};
apps = import ./apps {
self = self.apps.${localSystem};
nixpkgs = legacyPackages;
dhallApps = dhall-haskell.apps.${localSystem};
nixpkgsLocal = nixpkgsUpstream.legacyPackages.${localSystem};
inherit packages;
};
checks = import ./tests {
inherit system localSystem crossSystem;
apps = dhall-haskell.apps.${localSystem} // apps;
inherit self nixpkgs genode-depot;
inherit lib;
inherit apps lib;
genodepkgs = thisSystem self.packages;
};

12
lib/default.nix

@ -1,18 +1,10 @@
# SPDX-License-Identifier: CC0-1.0
{ system, localSystem, crossSystem, genodepkgs, nixpkgs, dhall-haskell
, genode-depot }:
{ system, localSystem, crossSystem, genodepkgs, nixpkgs, genode-depot, apps }:
let
thisSystem = builtins.getAttr system;
hostPkgs = import nixpkgs {
system = localSystem;
overlays = [
(self: super: {
inherit (builtins.getAttr localSystem dhall-haskell.packages) dhall;
})
];
};
hostPkgs = nixpkgs.legacyPackages.${localSystem};
testPkgs = thisSystem genodepkgs.packages;
depot = thisSystem genode-depot.packages;

9
packages/default.nix

@ -1,12 +1,9 @@
# SPDX-License-Identifier: CC0-1.0
{ system, legacyPackages, depot, apps, dhallApps }:
{ system, legacyPackages, localPackages, depot, apps }:
let
inherit (legacyPackages) callPackage;
dhallPackages = legacyPackages.dhallPackages
// (callPackage ./dhall { inherit dhallApps; });
dhallPackages = import ./dhall { inherit (localPackages) callPackage; };
mkDhallManifest = drv:
legacyPackages.runCommand "${drv.name}.dhall" { inherit drv; }
@ -90,8 +87,6 @@ in rec {
dhallGenode = dhallPackages.genode;
dhallPrelude = dhallPackages.prelude;
NOVA = legacyPackages.callPackage ./NOVA { };
libc = callPackage' ./libc { inherit depot; };

9
packages/dhall/default.nix

@ -1,10 +1,7 @@
# SPDX-License-Identifier: CC0-1.0
{ callPackage, dhallApps }:
{ callPackage }:
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 { inherit dhallApps prelude; };
{
genode = callPackage ./genode.nix { };
}

30
packages/dhall/genode.nix

@ -1,21 +1,19 @@
# SPDX-License-Identifier: CC0-1.0
{ stdenv, fetchgit, dhallApps, prelude }:
{ stdenv, fetchgit, dhallPackages }:
stdenv.mkDerivation {
dhallPackages.buildDhallPackage {
name = "dhall-genode";
src = fetchgit {
url = "https://git.sr.ht/~ehmry/dhall-genode";
rev = "16cad9fbbee3fbd1c167377c93ee1d60f9d21e37";
sha256 = "0gjad37zd1kb5dlnkb3m8pd1ibzcc9yqf6vgyv3imffj1vhdl14n";
};
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 {} \;
'';
code = let
src = fetchgit {
url = "https://git.sr.ht/~ehmry/dhall-genode";
rev = "f05a2dbd8b675757d5d24276feaa66f4e5ab78a7";
sha256 = "0l3pjkcd3kajlkdwckggr9l9jxcjrkc86gngpmvfmvl5gkvz12k3";
};
in src + "/package.dhall";
dependencies = [ dhallPackages.Prelude."13.0.0" ];
source = true;
}

25
packages/dhall/prelude-11.0.0.nix

@ -1,25 +0,0 @@
# SPDX-License-Identifier: CC0-1.0
{ stdenvNoCC, lib, fetchgit }:
stdenvNoCC.mkDerivation {
name = "dhall-prelude";
version = " 11.0.0";
src = fetchgit {
url = "https://github.com/dhall-lang/dhall-lang";
rev = "8098184d17c3aecc82674a7b874077a7641be05a";
sha256 = "0rdvyxq7mvas82wsfzzpk6imzm8ax4q58l522mx0ks69pacpr3yi";
};
phases = [ "unpackPhase" "installPhase" ];
installPhase = ''
cp -r Prelude $out
'';
meta = {
license = lib.licenses.bsd3;
maintainers = with lib.maintainers; [ ehmry ];
};
}

26
packages/dhall/prelude-9.0.0.nix

@ -1,26 +0,0 @@
# SPDX-License-Identifier: CC0-1.0
{ stdenvNoCC, lib, fetchFromGitHub }:
stdenvNoCC.mkDerivation {
name = "dhall-prelude";
version = " 10.0.0";
src = fetchFromGitHub {
owner = "dhall-lang";
repo = "dhall-lang";
rev = "ef644a00e77a3c2c6c503e18e65865fd6d74fc2a";
sha256 = "1md16ri1l6iid2p1zg17n3ap3813v0f43vrbxc280qgxhq617sdk";
};
phases = [ "unpackPhase" "installPhase" ];
installPhase = ''
cp -r Prelude $out
'';
meta = {
license = lib.licenses.bsd3;
maintainers = with lib.maintainers; [ ehmry ];
};
}

3
tests/driver-hw.nix

@ -45,8 +45,7 @@ let
++ testInputs);
testConfig' = "${./test-wrapper.dhall} ${testConfig} (toMap ${manifest})";
testEnv' = {
DHALL_PRELUDE = "${testPkgs.dhallPrelude}/package.dhall";
DHALL_GENODE = "${testPkgs.dhallGenode}/package.dhall";
DHALL_GENODE = "${testPkgs.dhallGenode}/source.dhall";
MANIFEST = manifest;
XDG_CACHE_HOME = "/tmp";
} // testEnv;

3
tests/driver-linux.nix

@ -42,8 +42,7 @@ let
(with testPkgs; [ base-linux init sotest-producer ] ++ testInputs);
testConfig' = "${./test-wrapper.dhall} ${testConfig} (toMap ${manifest})";
env' = {
DHALL_PRELUDE = "${testPkgs.dhallPrelude}/package.dhall";
DHALL_GENODE = "${testPkgs.dhallGenode}/package.dhall";
DHALL_GENODE = "${testPkgs.dhallGenode}/source.dhall";
MANIFEST = manifest;
XDG_CACHE_HOME = "/tmp";
} // env;

3
tests/driver-nova.nix

@ -45,8 +45,7 @@ let
++ testInputs);
testConfig' = "${./test-wrapper.dhall} ${testConfig} (toMap ${manifest})";
testEnv' = {
DHALL_PRELUDE = "${testPkgs.dhallPrelude}/package.dhall";
DHALL_GENODE = "${testPkgs.dhallGenode}/package.dhall";
DHALL_GENODE = "${testPkgs.dhallGenode}/source.dhall";
MANIFEST = manifest;
XDG_CACHE_HOME = "/tmp";
} // testEnv;

144
tests/driver_manager.dhall

@ -25,78 +25,72 @@ let childRomRoute =
let label = λ(_ : Text) → { local = _, route = _ }
in Genode.Boot::{
, config =
Init::{
, verbose = True
, children =
toMap
{ drivers =
Init.toChild
drivers
Init.Attributes::{
, provides = [ "Block", "Framebuffer", "Input" ]
, resources = Init.Resources::{ ram = Genode.units.MiB 4 }
, romReports = [ label "block_devices" ]
, routes =
[ parentRomRoute
"managed/input_filter"
"input_filter.config"
, parentRomRoute " numlock_remap" "numlock_remap.config"
, childRomRoute "dynamic_rom" "capslock"
, childRomRoute "dynamic_rom" "numlock"
, childRomRoute "dynamic_rom" "system"
, ServiceRoute.child "Report" "_report_rom"
, ServiceRoute.parent "Timer"
, Genode.Init.ServiceRoute.parent "IRQ"
, Genode.Init.ServiceRoute.parent "IO_MEM"
, Genode.Init.ServiceRoute.parent "IO_PORT"
]
}
, dynamic_rom =
Child.flat
Child.Attributes::{
, binary = "dynamic_rom"
, resources = Resources::{ ram = Genode.units.MiB 4 }
, provides = [ "ROM" ]
, config =
Genode.Init.Config::{
, content =
[ Genode.Prelude.XML.text
''
<rom name="system">
<inline>
<system state=""/>
</inline>
<sleep milliseconds="10000"/>
</rom>
''
]
}
}
, test-driver_manager =
Child.flat
Child.Attributes::{
, binary = "test-driver_manager"
, config =
Init.Config::{
, content =
[ Genode.Prelude.XML.text
''
<check_ahci_block_device label="ahci-1" block_count="65536" block_size="512" model="QEMU HARDDISK"/>
<check_input/>
<check_framebuffer/>
''
]
}
, reportRoms = [ label "block_devices" ]
, routes =
[ ServiceRoute.child "Block" "drivers"
, ServiceRoute.child "Framebuffer" "drivers"
, ServiceRoute.child "Input" "drivers"
]
}
}
}
, config = Init::{
, verbose = True
, children = toMap
{ drivers =
Init.toChild
drivers
Init.Attributes::{
, provides = [ "Block", "Framebuffer", "Input" ]
, resources = Init.Resources::{ ram = Genode.units.MiB 4 }
, romReports = [ label "block_devices" ]
, routes =
[ parentRomRoute "managed/input_filter" "input_filter.config"
, parentRomRoute " numlock_remap" "numlock_remap.config"
, childRomRoute "dynamic_rom" "capslock"
, childRomRoute "dynamic_rom" "numlock"
, childRomRoute "dynamic_rom" "system"
, ServiceRoute.child "Report" "_report_rom"
, ServiceRoute.parent "Timer"
, Genode.Init.ServiceRoute.parent "IRQ"
, Genode.Init.ServiceRoute.parent "IO_MEM"
, Genode.Init.ServiceRoute.parent "IO_PORT"
]
}
, dynamic_rom =
Child.flat
Child.Attributes::{
, binary = "dynamic_rom"
, resources = Resources::{ ram = Genode.units.MiB 4 }
, provides = [ "ROM" ]
, config = Genode.Init.Config::{
, content =
[ Genode.Prelude.XML.text
''
<rom name="system">
<inline>
<system state=""/>
</inline>
<sleep milliseconds="10000"/>
</rom>
''
]
}
}
, test-driver_manager =
Child.flat
Child.Attributes::{
, binary = "test-driver_manager"
, config = Init.Config::{
, content =
[ Genode.Prelude.XML.text
''
<check_ahci_block_device label="ahci-1" block_count="65536" block_size="512" model="QEMU HARDDISK"/>
<check_input/>
<check_framebuffer/>
''
]
}
, reportRoms = [ label "block_devices" ]
, routes =
[ ServiceRoute.child "Block" "drivers"
, ServiceRoute.child "Framebuffer" "drivers"
, ServiceRoute.child "Input" "drivers"
]
}
}
}
, rom =
Genode.Boot.toRomTexts
( toMap
@ -104,8 +98,7 @@ in Genode.Boot::{
, numlock = "<feature_creep/>"
, usb_policy = "<usb/>"
}
# [ { mapKey =
"fb_drv.config"
# [ { mapKey = "fb_drv.config"
, mapValue =
''
<config width="1024" height="768" buffered="yes"/>
@ -113,8 +106,7 @@ in Genode.Boot::{
</config>
''
}
, { mapKey =
"input_filter.config"
, { mapKey = "input_filter.config"
, mapValue =
''
<config>

33
tests/log.dhall

@ -5,22 +5,19 @@ let Genode = env:DHALL_GENODE
let Child = Genode.Init.Child
in Genode.Boot::{
, config =
Genode.Init::{
, children =
toMap
{ test-log =
Child.flat
Child.Attributes::{
, binary = "test-log"
, exitPropagate = True
, resources =
Genode.Init.Resources::{
, caps = 500
, ram = Genode.units.MiB 10
}
, routes = [ Genode.Init.ServiceRoute.parent "Timer" ]
}
}
}
, config = Genode.Init::{
, children = toMap
{ test-log =
Child.flat
Child.Attributes::{
, binary = "test-log"
, exitPropagate = True
, resources = Genode.Init.Resources::{
, caps = 500
, ram = Genode.units.MiB 10
}
, routes = [ Genode.Init.ServiceRoute.parent "Timer" ]
}
}
}
}

81
tests/noux.dhall

@ -5,47 +5,42 @@ let Genode = env:DHALL_GENODE
let Child = Genode.Init.Child
in Genode.Boot::{
, config =
Genode.Init::{
, children =
toMap
{ noux =
Child.flat
Child.Attributes::{
, binary = "noux"
, exitPropagate = True
, resources =
Genode.Init.Resources::{
, caps = 500
, ram = Genode.units.MiB 10
}
, routes = [ Genode.Init.ServiceRoute.parent "Timer" ]
, config =
Genode.Init.Config::{
, attributes =
toMap
{ stdin = "/script"
, stdout = "/dev/log"
, stderr = "/dev/log"
}
, content =
[ Genode.Prelude.XML.text
''
<fstab>
<tar name="bash-minimal.tar" />
<dir name="dev"> <log/> <null/> <zero/> </dir>
<dir name="tmp"> <ram /> </dir>
<inline name="script">
echo "hello world"
</inline>
</fstab>
<start name="/bin/bash">
<env name="TERM" value="screen" />
</start>
''
]
}
}
}
}
, config = Genode.Init::{
, children = toMap
{ noux =
Child.flat
Child.Attributes::{
, binary = "noux"
, exitPropagate = True
, resources = Genode.Init.Resources::{
, caps = 500
, ram = Genode.units.MiB 10
}
, routes = [ Genode.Init.ServiceRoute.parent "Timer" ]
, config = Genode.Init.Config::{
, attributes = toMap
{ stdin = "/script"
, stdout = "/dev/log"
, stderr = "/dev/log"
}
, content =
[ Genode.Prelude.XML.text
''
<fstab>
<tar name="bash-minimal.tar" />
<dir name="dev"> <log/> <null/> <zero/> </dir>
<dir name="tmp"> <ram /> </dir>
<inline name="script">
echo "hello world"
</inline>
</fstab>
<start name="/bin/bash">
<env name="TERM" value="screen" />
</start>
''
]
}
}
}
}
}

117
tests/pci.dhall

@ -15,65 +15,60 @@ let ServiceRoute = Init.ServiceRoute
let label = λ(_ : Text) → { local = _, route = _ } : Child.Attributes.Label
in Genode.Boot::{
, config =
Init::{
, verbose = True
, children =
toMap
{ test-pci =
Child.flat
Child.Attributes::{
, binary = "test-pci"
, exitPropagate = True
, resources = Resources::{ ram = Genode.units.MiB 3 }
, routes = [ ServiceRoute.child "Platform" "platform_drv" ]
}
, 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"
]
}
, 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_prefix="test-pci"> <pci class="ALL"/> </policy>
''
]
}
}
}
}
, config = Init::{
, verbose = True
, children = toMap
{ test-pci =
Child.flat
Child.Attributes::{
, binary = "test-pci"
, exitPropagate = True