diff --git a/overlay/default.nix b/overlay/default.nix index 49115ca..03b6ff3 100644 --- a/overlay/default.nix +++ b/overlay/default.nix @@ -165,23 +165,23 @@ in nullPkgs // { # Stay clear of upstream on this one. addPatchesHost [ ./ncurses/genode.patch ] prev.ncurses; - nim-unwrapped = - # programs are still linking to posix library - overrideAttrsTarget ({ patches, ... }: { - version = "1.6.8"; - src = fetchurl { - url = "https://nim-lang.org/download/nim-1.6.8.tar.xz"; - hash = "sha256-D1tlzbYPeK9BywdcI4mDaJoeH34lyBnxeYYsGKSEz1c="; - }; - patches = patches ++ [ ./nim.patch ]; - }) prev.nim-unwrapped; + nimNoLibs = nim.override { stdenv = stdenvNoLibs; }; nimPackages = # Packages from the Nimble flake with adjustments. - prev.nimPackages.overrideScope' (_: prev': { + prev.nimPackages.overrideScope' (final': prev': + with final'; { + buildNimPackage = if hostPlatform.isGenode then + ({ nimFlags ? [ ], ... }@args: + prev'.buildNimPackage (args // { + nimBackend = "cpp"; + nimDefines.posix = { }; + doCheck = false; + })) + else + prev'.buildNimPackage; - dhall = with prev'; - buildNimPackage rec { + dhall = buildNimPackage rec { pname = "dhall"; version = "20221007"; src = prev.fetchFromSourcehut { @@ -193,16 +193,34 @@ in nullPkgs // { buildInputs = [ bigints cbor ]; }; - genode = prev'.genode.overrideAttrs (attrs: rec { - version = "20.11.1"; - src = fetchgit { - inherit (attrs.src) url; - rev = "v${version}"; - sha256 = "0i78idsrgph0g2yir6niar7v827y6qnmd058s6mpvp091sllvlv8"; - }; - }); + genode = prev'.genode.overrideAttrs ({ ... }: rec { + version = "20221020"; + src = final.fetchFromSourcehut { + owner = "~ehmry"; + repo = "nim_genode"; + rev = version; + hash = "sha256-kUbhYKoN/H/fP7ekDYY5rZwZY8UDdcbFBEodthFkmYk="; + }; + }); - }); + preserves = overrideAttrsTarget ({ ... }: rec { + pname = "preserves"; + version = "20221020"; + src = final.fetchFromGitea { + domain = "git.syndicate-lang.org"; + owner = "ehmry"; + repo = "${pname}-nim"; + rev = version; + sha256 = "sha256-yUyt4hAKvEKTFV9KF8994k7RrirQQJ2Jv7ngjbnfXgw="; + }; + dontFixup = true; # this is breaking input propagation? + }) prev'.preserves; + + syndicate = overrideAttrsTarget ({ ... }: { + dontFixup = true; # this is breaking input propagation? + }) prev'.syndicate; + + }); openssl = overrideHost { static = true; } # shared library comes out stupid big diff --git a/tests/default.nix b/tests/default.nix index 9942b00..6d32cb3 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -16,6 +16,7 @@ let ./hello.nix ./log.nix ./nim.nix + ./syndicate ./tor.nix ./usb.nix ./vmm_x86.nix diff --git a/tests/nim.nix b/tests/nim.nix index 289b2e0..9763d2e 100644 --- a/tests/nim.nix +++ b/tests/nim.nix @@ -1,11 +1,12 @@ { name = "nim"; machine = { pkgs, ... }: { - genode.init.children.test_nim = let - testNim = with pkgs; + genode.init.children.test_nim = { + package = with pkgs; nimPackages.buildNimPackage { pname = "test_nim"; inherit (nim) version; + nimDefines.posix = {}; unpackPhase = '' mkdir test cd test @@ -16,8 +17,6 @@ EOF ''; }; - in { - package = testNim; configFile = builtins.toFile "nim.dhall" '' let Sigil = env:DHALL_SIGIL diff --git a/tests/syndicate/default.nix b/tests/syndicate/default.nix new file mode 100644 index 0000000..504949c --- /dev/null +++ b/tests/syndicate/default.nix @@ -0,0 +1,53 @@ +{ + name = "syndicate"; + machine = { pkgs, ... }: { + genode.init.verbose = true; + genode.init.children.syndicate_service = { + package = with pkgs.nimPackages; + buildNimPackage rec { + pname = "syndicate"; + version = "unstable"; + nimDefines.posix = { }; + src = ./src; + propagatedBuildInputs = [ genode npeg preserves syndicate ]; + nimBinOnly = true; + meta.mainProgram = "test"; + }; + extraInputs = with pkgs.genodePackages; [ libc stdcxx ]; + configFile = builtins.toFile "nim.dhall" '' + let Sigil = env:DHALL_SIGIL + + let Init = Sigil.Init + + let Child = Init.Child + + let Libc = Sigil.Libc + + in λ(binary : Text) → + Child.flat + Child.Attributes::{ + , binary + , exitPropagate = True + , resources = Sigil.Init.Resources::{ + , caps = 500 + , ram = Sigil.units.MiB 10 + } + , routes = + [ Sigil.Init.ServiceRoute.parentLabel + "ROM" + (Some "state") + (Some "state") + ] + , config = + (Libc.toConfig Libc.default) + with attributes = toMap { ld_verbose = "true" } + } + ''; + }; + }; + + testScript = '' + start_all() + machine.wait_until_serial_output("