diff --git a/overlay/default.nix b/overlay/default.nix index 9f67181..0c7d441 100644 --- a/overlay/default.nix +++ b/overlay/default.nix @@ -19,12 +19,13 @@ with prev; { cp ${./cmake/Genode.cmake} $MODULE '' else null; - }); genodeHeaders = callPackage ./headers { }; genodeLibcCross = callPackage ./libc { stdenv = crossLibcStdenv; }; + genodeSources = buildPackages.callPackage ./genode { }; + libcCrossChooser = name: if stdenv.targetPlatform.isGenode then targetPackages.genodeLibcCross or genodeLibcCross diff --git a/overlay/genode/default.nix b/overlay/genode/default.nix new file mode 100644 index 0000000..aadc2df --- /dev/null +++ b/overlay/genode/default.nix @@ -0,0 +1,157 @@ +{ buildPackages, targetPackages }: +with buildPackages; + +let + version = "20.02"; + genodeSources = let + platform = targetPackages.targetPlatform; + + arch = with platform; + if isx86_64 then + "x86_64" + else + throw "unknown Genode arch for platform ${platform.system}"; + + toolPrefix = if platform.isx86 then + "genode-x86-" + else + throw "unknown tool prefix for Genode arch ${arch}"; + in stdenvNoCC.mkDerivation { + pname = "genode-sources"; + inherit version; + src = fetchurl { + url = "https://github.com/genodelabs/genode/archive/${version}.tar.gz"; + hash = "sha256-ZY9ND6vDA9u127TAv87uOjPuLzRzBPyp5PzD6iM7uNI="; + }; + + nativeBuildInputs = [ expect gnumake tcl ]; + patches = [ ./init.xsd.patch ./svn-trust-server-cert.patch ]; + configurePhase = '' + patchShebangs ./tool + substituteInPlace repos/base/etc/tools.conf \ + --replace "/usr/local/genode/tool/19.05/bin/" "" + substituteInPlace tool/check_abi \ + --replace "exec nm" "exec ${toolPrefix}nm" + ''; + dontBuild = true; + installPhase = "cp -a . $out"; + }; + + sourceForgeToolchain = callPackage ./toolchain.nix { }; + + stdenv' = targetPackages.stdenvAdapters.overrideCC targetPackages.stdenv + sourceForgeToolchain; + + platform = stdenv'.targetPlatform; + + arch = with platform; + if isx86_64 then + "x86_64" + else + throw "unknown Genode arch for platform ${platform.system}"; + + preparePort = name: + { hash ? "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", ... }@args: + stdenvNoCC.mkDerivation (args // { + outputHashMode = "recursive"; + outputHash = hash; + pname = name; + inherit (genodeSources) version; + + GIT_SSL_CAINFO = "${cacert}/etc/ssl/certs/ca-bundle.crt"; + VERBOSE = ""; + # need to build in verbose mode because errors are hidden + + impureEnvVars = stdenv'.lib.fetchers.proxyImpureEnvVars + ++ [ "GIT_PROXY_COMMAND" "SOCKS_SERVER" ]; + + dontUnpack = true; + dontConfigure = true; + + nativeBuildInputs = + [ bison flex gitMinimal glibc glibcLocales rsync wget which ] + ++ (args.nativeBuildInputs or [ ]); + + buildPhase = '' + runHook preBuild + export CONTRIB_DIR=$NIX_BUILD_TOP/contrib + mkdir $CONTRIB_DIR + ${genodeSources}/tool/ports/prepare_port $pname + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + rsync $CONTRIB_DIR/* $out/ \ + -lr --copy-unsafe-links \ + --exclude '*.git' \ + --exclude '*.svn' \ + --exclude '*.gz' \ + --exclude '*.xz' \ + + runHook postInstall + ''; + }); + + ports = stdenv.lib.mapAttrs preparePort + (import ./ports.nix { inherit buildPackages; }); + + buildUpstream = { name, targets, portInputs ? [ ], nativeBuildInputs ? [ ] + , ... }@extraAttrs: + + let + drv = stdenv'.mkDerivation (extraAttrs // { + pname = name; + inherit (genodeSources) version; + inherit targets; + + dontUnpack = true; + + nativeBuildInputs = [ binutils bison flex stdenv.cc tcl which ] + ++ nativeBuildInputs; + + enableParallelBuilding = true; + + configurePhase = let + linkPorts = toString + (builtins.map (drv: " ln -sv ${drv}/* contrib/;") portInputs); + in '' + runHook preConfigure + export CONTRIB_DIR=$NIX_BUILD_TOP/contrib + export BUILD_DIR=$NIX_BUILD_TOP/build + ${genodeSources}/tool/create_builddir ${arch} + substituteInPlace build/etc/build.conf \ + --replace "#REPOSITORIES" "REPOSITORIES" + mkdir $CONTRIB_DIR; ${linkPorts} + runHook postConfigure + ''; + + makeFlags = [ "-C build" ] ++ targets; + + installPhase = '' + runHook preInstall + find build/bin -name '*.xsd' -delete + find build/bin -follow -type f -exec install -Dt $out '{}' \; + runHook postInstall + ''; + }); + in drv; + + buildOverrides = callPackage ./targets.nix { inherit ports; }; + +in genodeSources // { + inherit buildUpstream; + inherit ports; + toolchain = sourceForgeToolchain; + make = target: + with builtins; + let + attrs = if hasAttr target buildOverrides then + getAttr target buildOverrides + else + { }; + in buildUpstream ({ + name = replaceStrings [ "/" ] [ "-" ] target; + targets = [ target ]; + } // attrs); +} diff --git a/packages/genodelabs/init.xsd.patch b/overlay/genode/init.xsd.patch similarity index 100% rename from packages/genodelabs/init.xsd.patch rename to overlay/genode/init.xsd.patch diff --git a/overlay/genode/part_block.patch b/overlay/genode/part_block.patch new file mode 100644 index 0000000..efa5ff6 --- /dev/null +++ b/overlay/genode/part_block.patch @@ -0,0 +1,23 @@ +commit 1b8f44e80801bbb8d3dba813b72eed4c6a5a5ca6 +Author: Emery Hemingway +Date: Fri Mar 20 20:10:28 2020 +0530 + + part_block: support for up to 128 session + + Allow sessions for each of the 128 sessions supported by GPT. + + Fix #3705 + +diff --git a/repos/os/src/server/part_block/main.cc b/repos/os/src/server/part_block/main.cc +index a446be31db..56bade6086 100644 +--- a/repos/os/src/server/part_block/main.cc ++++ b/repos/os/src/server/part_block/main.cc +@@ -226,7 +226,7 @@ class Block::Main : Rpc_object>, + Gpt _gpt { _env, _block, _heap, _reporter }; + Partition_table &_partition_table { _table() }; + +- enum { MAX_SESSIONS = 32 }; ++ enum { MAX_SESSIONS = 128 }; + Session_component *_sessions[MAX_SESSIONS] { }; + Job_queue<128> _job_queue { }; + Registry _job_registry { }; diff --git a/packages/genodelabs/ports.nix b/overlay/genode/ports.nix similarity index 97% rename from packages/genodelabs/ports.nix rename to overlay/genode/ports.nix index 2d68bc9..6f05f3d 100644 --- a/packages/genodelabs/ports.nix +++ b/overlay/genode/ports.nix @@ -1,7 +1,6 @@ # ports are superficially similar to Nix, but inferior in every way - -nativePkgs: -with nativePkgs; { +{ buildPackages }: +with buildPackages; { dde_bsd.hash = "sha256-2ilZs6JkcQAvU/sQYnHunGtGRZDt7qLTpKZxQxSOf2I="; dde_ipxe.hash = "sha256-KAmDF2t+xKzkEjWZ1bvLO8O+IlaV0ImuFsd8SIC3UQw="; dde_linux.hash = "sha256-a1oaYF5S8OazyCOu/Jq+YOfrN4Kyb4JesLs222Vanjc="; diff --git a/packages/genodelabs/svn-trust-server-cert.patch b/overlay/genode/svn-trust-server-cert.patch similarity index 100% rename from packages/genodelabs/svn-trust-server-cert.patch rename to overlay/genode/svn-trust-server-cert.patch diff --git a/packages/genodelabs/targets.nix b/overlay/genode/targets.nix similarity index 92% rename from packages/genodelabs/targets.nix rename to overlay/genode/targets.nix index a829494..c6887d7 100644 --- a/packages/genodelabs/targets.nix +++ b/overlay/genode/targets.nix @@ -1,8 +1,5 @@ { buildPackages, ports }: - -with ports; - -{ +with ports; { "app/gpt_write".portInputs = [ jitterentropy ]; "app/lighttpd".portInputs = [ libc lighttpd openssl zlib ]; @@ -23,7 +20,7 @@ with ports; "lib/vfs/ttf".portInputs = [ libc stb ]; "lib/vfs/rump" = { portInputs = [ dde_rump ]; - buildInputs = [ buildPackages.zlib ]; + buildInputs = with buildPackages; [ zlib ]; }; noux = { diff --git a/packages/genodelabs/toolchain.nix b/overlay/genode/toolchain.nix similarity index 100% rename from packages/genodelabs/toolchain.nix rename to overlay/genode/toolchain.nix diff --git a/packages/default.nix b/packages/default.nix index 1037a91..feb6280 100644 --- a/packages/default.nix +++ b/packages/default.nix @@ -3,11 +3,10 @@ { nixpkgs }: let - inherit (nixpkgs) callPackage; - dhallPackages = nixpkgs.buildPackages.callPackage ./dhall { }; + inherit (nixpkgs) callPackage genodeSources; + inherit (genodeSources) buildUpstream; - genodeLabs = import ./genodelabs { inherit nixpkgs; }; - inherit (genodeLabs) buildUpstream; + dhallPackages = nixpkgs.buildPackages.callPackage ./dhall { }; buildWorld = let genodeWorld = nixpkgs.fetchFromGitHub { @@ -17,7 +16,7 @@ let hash = "sha256-sirmUtLmZ5YnfLKrOvOBafnZW3UW+1LtkiGu85Ma820="; }; in attrs: - buildUpstream (attrs // { + genodeSources.buildUpstream (attrs // { postConfigure = "echo REPOSITORIES += ${genodeWorld} >> build/etc/build.conf"; }); @@ -25,8 +24,7 @@ let genodeTupRules = ./Tuprules.tup; in rec { - inherit (nixpkgs) stdenv; - inherit (genodeLabs) genodeSources; # toolchain; + inherit (nixpkgs) stdenv genodeSources; base-hw-pc = buildUpstream { name = "base-hw-pc"; @@ -66,7 +64,7 @@ in rec { ''; }; - init = genodeSources.make "init"; + init = nixpkgs.genodeSources.make "init"; ssh_client = buildWorld { name = "ssh_client"; diff --git a/packages/genodelabs/default.nix b/packages/genodelabs/default.nix deleted file mode 100644 index 49adc41..0000000 --- a/packages/genodelabs/default.nix +++ /dev/null @@ -1,156 +0,0 @@ -{ nixpkgs }: - -let - genodeSources = let - inherit (nixpkgs) stdenv; - platform = stdenv.targetPlatform; - - arch = with platform; - if isx86_64 then - "x86_64" - else - throw "unknown Genode arch for platform ${platform.system}"; - - toolPrefix = if platform.isx86 then - "genode-x86-" - else - throw "unknown tool prefix for Genode arch ${arch}"; - in stdenv.mkDerivation { - pname = "genode-sources"; - inherit (nixpkgs.genodeHeaders) src version; - nativeBuildInputs = with nixpkgs.buildPackages; [ expect gnumake tcl ]; - patches = [ ./init.xsd.patch ./svn-trust-server-cert.patch ]; - configurePhase = '' - patchShebangs ./tool - substituteInPlace repos/base/etc/tools.conf \ - --replace "/usr/local/genode/tool/19.05/bin/" "" - substituteInPlace tool/check_abi \ - --replace "exec nm" "exec ${toolPrefix}nm" - ''; - dontBuild = true; - installPhase = "cp -a . $out"; - }; - - sourceForgeToolchain = nixpkgs.buildPackages.callPackage ./toolchain.nix { }; - - stdenv' = - nixpkgs.stdenvAdapters.overrideCC nixpkgs.stdenv sourceForgeToolchain; - - platform = stdenv'.targetPlatform; - - arch = with platform; - if isx86_64 then - "x86_64" - else - throw "unknown Genode arch for platform ${platform.system}"; - - preparePort = name: - { hash ? "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", ... }@args: - nixpkgs.buildPackages.stdenv.mkDerivation (args // { - outputHashMode = "recursive"; - outputHash = hash; - pname = name; - inherit (genodeSources) version; - - GIT_SSL_CAINFO = - "${nixpkgs.buildPackages.cacert}/etc/ssl/certs/ca-bundle.crt"; - VERBOSE = ""; - # need to build in verbose mode because errors are hidden - - impureEnvVars = stdenv'.lib.fetchers.proxyImpureEnvVars - ++ [ "GIT_PROXY_COMMAND" "SOCKS_SERVER" ]; - - dontUnpack = true; - dontConfigure = true; - - nativeBuildInputs = with nixpkgs.buildPackages; - [ bison flex gitMinimal glibc glibcLocales rsync wget which ] - ++ (args.nativeBuildInputs or [ ]); - - buildPhase = '' - runHook preBuild - export CONTRIB_DIR=$NIX_BUILD_TOP/contrib - mkdir $CONTRIB_DIR - ${genodeSources}/tool/ports/prepare_port $pname - runHook postBuild - ''; - - installPhase = '' - runHook preInstall - rsync $CONTRIB_DIR/* $out/ \ - -lr --copy-unsafe-links \ - --exclude '*.git' \ - --exclude '*.svn' \ - --exclude '*.gz' \ - --exclude '*.xz' \ - - runHook postInstall - ''; - }); - - ports = - nixpkgs.lib.mapAttrs preparePort (import ./ports.nix nixpkgs.buildPackages); - - buildUpstream = { name, targets, portInputs ? [ ], nativeBuildInputs ? [ ] - , ... }@extraAttrs: - - stdenv'.mkDerivation (extraAttrs // { - pname = name; - inherit (genodeSources) version; - inherit targets; - - dontUnpack = true; - - nativeBuildInputs = with nixpkgs.buildPackages; - [ binutils bison flex stdenv.cc tcl which ] ++ nativeBuildInputs; - - enableParallelBuilding = true; - - configurePhase = let - linkPorts = toString - (builtins.map (drv: " ln -sv ${drv}/* contrib/;") portInputs); - in '' - runHook preConfigure - export CONTRIB_DIR=$NIX_BUILD_TOP/contrib - export BUILD_DIR=$NIX_BUILD_TOP/build - ${genodeSources}/tool/create_builddir ${arch} - substituteInPlace build/etc/build.conf \ - --replace "#REPOSITORIES" "REPOSITORIES" - mkdir $CONTRIB_DIR; ${linkPorts} - runHook postConfigure - ''; - - makeFlags = [ "-C build" ] ++ targets; - - installPhase = '' - runHook preInstall - find build/bin -name '*.xsd' -delete - find build/bin -follow -type f -exec install -Dt $out '{}' \; - runHook postInstall - ''; - }); - - buildOverrides = import ./targets.nix { - inherit (nixpkgs) buildPackages; - inherit ports; - }; - -in { - inherit buildUpstream; - genodeSources = genodeSources // { - make = target: - with builtins; - let - attrs = if hasAttr target buildOverrides then - getAttr target buildOverrides - else - { }; - in buildUpstream ({ - name = builtins.replaceStrings [ "/" ] [ "-" ] target; - targets = [ target ]; - } // attrs); - inherit ports; - toolchain = sourceForgeToolchain; - }; - -}