From 7a049594178cccb159b75975d212d19fd4e2973b Mon Sep 17 00:00:00 2001 From: Emery Hemingway Date: Wed, 8 Apr 2020 19:20:54 +0530 Subject: [PATCH] Patch Genode sources per-package Avoid cross package rebuilds when patching. Remove init schema validation, as its not worth patching. --- apps/hw-image/default.nix | 3 -- apps/nova-image/default.nix | 3 -- apps/render-init/default.nix | 5 +-- lib/default.nix | 7 ---- packages/default.nix | 3 ++ packages/genodelabs/default.nix | 34 +++++++++++-------- packages/genodelabs/init.xsd.patch | 54 ------------------------------ packages/genodelabs/ports.nix | 6 +++- 8 files changed, 29 insertions(+), 86 deletions(-) delete mode 100644 packages/genodelabs/init.xsd.patch diff --git a/apps/hw-image/default.nix b/apps/hw-image/default.nix index 09e2727..5a32650 100644 --- a/apps/hw-image/default.nix +++ b/apps/hw-image/default.nix @@ -47,9 +47,6 @@ in nixpkgs.writeScriptBin "hw-image" (with nixpkgs.buildPackages; ${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/>/>/g' \ > $TMPDIR/config ${apps.dhall.program} \ diff --git a/apps/nova-image/default.nix b/apps/nova-image/default.nix index 8f281de..560ca9f 100644 --- a/apps/nova-image/default.nix +++ b/apps/nova-image/default.nix @@ -20,9 +20,6 @@ in nixpkgs.writeScriptBin "nova-image" (with nixpkgs.buildPackages; ${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/>/>/g' \ > $TMPDIR/config ${apps.dhall.program} text \ diff --git a/apps/render-init/default.nix b/apps/render-init/default.nix index 174704f..f78b8e1 100644 --- a/apps/render-init/default.nix +++ b/apps/render-init/default.nix @@ -8,9 +8,6 @@ nixpkgs.writeScriptBin "render-init" (with nixpkgs.buildPackages; '' 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 \ - -schema ${packages.genodeSources}/repos/os/src/init/config.xsd \ - - \ + | ${nixpkgs.buildPackages.libxml2}/bin/xmllint -format - \ | sed 's/>/>/g' '') diff --git a/lib/default.nix b/lib/default.nix index 2ca04bb..6b7cc62 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -39,13 +39,6 @@ in rec { dhall to-directory-tree --output $out \ <<< "${./compile-boot.dhall} (${bootDhall}) \"$out\"" - - substituteInPlace "$out/modules_asm" \ - --replace '.incbin "./config"' ".incbin \"$out/config\"" - - ${buildPackages.libxml2}/bin/xmllint \ - -schema ${testPkgs.genodeSources}/repos/os/src/init/config.xsd \ - -noout $out/config ''; novaImage = name: env: boot: diff --git a/packages/default.nix b/packages/default.nix index a57ccb0..1e57de1 100644 --- a/packages/default.nix +++ b/packages/default.nix @@ -46,6 +46,7 @@ in depotPkgs // { KERNEL = "hw"; BOARD = "pc"; targets = [ "bootstrap" "core" "timer" "lib/ld" ]; + patches = [ ./genodelabs/cxx-align.patch ]; postInstall = '' mv $out/core-hw-pc.o $coreObj mv $out/bootstrap-hw-pc.o $bootstrapObj @@ -58,6 +59,7 @@ in depotPkgs // { name = "base-linux"; KERNEL = "linux"; targets = [ "core" "timer" "lib/ld" ]; + patches = [ ./genodelabs/cxx-align.patch ]; postInstall = '' mkdir -p $out/lib mv $out/ld-linux.lib.so $out/lib/ld.lib.so @@ -71,6 +73,7 @@ in depotPkgs // { outputs = [ "out" "coreObj" ]; KERNEL = "nova"; targets = [ "core" "timer" "lib/ld" ]; + patches = [ ./genodelabs/cxx-align.patch ]; postInstall = '' mv $out/core-nova.o $coreObj mv $out/ld-nova.lib.so $out/ld.lib.so diff --git a/packages/genodelabs/default.nix b/packages/genodelabs/default.nix index 1166e85..9d3e8f9 100644 --- a/packages/genodelabs/default.nix +++ b/packages/genodelabs/default.nix @@ -27,8 +27,6 @@ let }; nativeBuildInputs = [ expect gnumake tcl ]; - patches = - [ ./init.xsd.patch ./openssl.patch ./svn-trust-server-cert.patch ]; configurePhase = '' patchShebangs ./tool substituteInPlace repos/base/etc/tools.conf \ @@ -54,13 +52,15 @@ let throw "unknown Genode arch for platform ${platform.system}"; preparePort = name: - { hash ? "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", ... }@args: - stdenvNoCC.mkDerivation (args // { + { hash ? "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" + , patches ? [ ], ... }@args: + let havePatches = patches != [ ]; + in stdenvNoCC.mkDerivation (args // { outputHashMode = "recursive"; outputHash = hash; pname = name; inherit (genodeSources) version; - GENODE_DIR = genodeSources; + inherit patches; GIT_SSL_CAINFO = "${cacert}/etc/ssl/certs/ca-bundle.crt"; VERBOSE = ""; @@ -69,7 +69,9 @@ let impureEnvVars = stdenv'.lib.fetchers.proxyImpureEnvVars ++ [ "GIT_PROXY_COMMAND" "SOCKS_SERVER" ]; - dontUnpack = true; + src = if havePatches then genodeSources else null; + dontUnpack = !havePatches; + dontConfigure = true; nativeBuildInputs = @@ -81,6 +83,7 @@ let '' runHook preBuild export CONTRIB_DIR=$NIX_BUILD_TOP/contrib + export GENODE_DIR=${if havePatches then "$(pwd)" else genodeSources} mkdir $CONTRIB_DIR $GENODE_DIR/tool/ports/prepare_port $pname CHECK_HASH=no runHook postBuild @@ -106,15 +109,16 @@ let (import ./ports.nix { inherit buildPackages; }); buildUpstream = { name, targets, portInputs ? [ ], nativeBuildInputs ? [ ] - , enableParallelBuilding ? true, ... }@extraAttrs: + , patches ? [ ], enableParallelBuilding ? true, ... }@extraAttrs: + let havePatches = patches != [ ]; - stdenv'.mkDerivation (extraAttrs // { + in stdenv'.mkDerivation (extraAttrs // { pname = name; inherit (genodeSources) version; - inherit targets enableParallelBuilding; + inherit targets patches enableParallelBuilding; - dontUnpack = true; - GENODE_DIR = genodeSources; + src = if havePatches then genodeSources else null; + dontUnpack = !havePatches; nativeBuildInputs = [ binutils bison flex stdenv.cc tcl which ] ++ nativeBuildInputs; @@ -125,15 +129,17 @@ let in '' runHook preConfigure export CONTRIB_DIR=$NIX_BUILD_TOP/contrib - export BUILD_DIR=$NIX_BUILD_TOP/build + export BUILD_DIR=$(pwd)/build + export GENODE_DIR=${if havePatches then "$(pwd)" else genodeSources} + $GENODE_DIR/tool/create_builddir ${arch} - substituteInPlace build/etc/build.conf \ + substituteInPlace $BUILD_DIR/etc/build.conf \ --replace "#REPOSITORIES" "REPOSITORIES" mkdir $CONTRIB_DIR; ${linkPorts} runHook postConfigure ''; - makeFlags = [ "-C build" ] ++ targets; + makeFlags = [ "-C build" "VERBOSE=" ] ++ targets; installPhase = '' runHook preInstall diff --git a/packages/genodelabs/init.xsd.patch b/packages/genodelabs/init.xsd.patch deleted file mode 100644 index d25a1dd..0000000 --- a/packages/genodelabs/init.xsd.patch +++ /dev/null @@ -1,54 +0,0 @@ -commit c0a6db17001fb088d3289613a02660d8725bbde8 -Author: Emery Hemingway -Date: Sat Feb 22 15:40:56 2020 +0100 - - Update Init config schema - - - Add to the Init schema - - Use a relative path for base_types.xsd - - Allow empty nodes - - Allow "label" attributes within - -diff --git a/repos/os/src/init/config.xsd b/repos/os/src/init/config.xsd -index 938dcdb8fb..e7bfb5dfc5 100644 ---- a/repos/os/src/init/config.xsd -+++ b/repos/os/src/init/config.xsd -@@ -1,7 +1,7 @@ - - - -- -+ - - - -@@ -90,6 +90,7 @@ - - - -+ - - - -@@ -160,6 +161,12 @@ - - - -+ -+ -+ -+ -+ -+ - - - -@@ -168,7 +175,7 @@ - - - -- -+ - - - diff --git a/packages/genodelabs/ports.nix b/packages/genodelabs/ports.nix index 1f94365..ff5bbab 100644 --- a/packages/genodelabs/ports.nix +++ b/packages/genodelabs/ports.nix @@ -7,6 +7,7 @@ with buildPackages; { dde_rump = { hash = "sha256-Wr5otGkWEa+5xImsFHQzwap5LckNEbyWA/7xbNcOreI="; nativeBuildInputs = [ subversion ]; + patches = [ ./svn-trust-server-cert.patch ]; }; expat.hash = "sha256-6Kz8qHmSg9/r+o3UJX8ZyB5aDjmfrbsUW/TppbB16jk="; jitterentropy.hash = "sha256-6KS732GxtUMz0xPYKtshdn039DgdJq11vTDQesZn4Ds="; @@ -26,7 +27,10 @@ with buildPackages; { nativeBuildInputs = [ python ]; }; mupdf.hash = "sha256-+Q4IwYGLynoud2IEsKGfZQjpPRV6wFv5iI/ReAKBZcM="; - openssl.hash = "sha256-F0olTWYUwD//eJZ14ibN/IvbFXw3WQUZ/6cPI3lsxZI="; + openssl = { + hash = "sha256-F0olTWYUwD//eJZ14ibN/IvbFXw3WQUZ/6cPI3lsxZI="; + patches = [ ./openssl.patch ]; + }; qemu-usb.hash = "sha256-F4ZXeH5sx3FOcD42zFOxKFMsqGookKdav1NJ7YgVw98="; stb.hash = "sha256-9LSH1i8jcEvjRAmTvgtK+Axy9hO7uiSzmSgBvs0zkTc="; stdcxx.hash = "sha256-U5/+yUBXQ+rKmy6hP7OomIU4g2KvSn2qTltQFzNz9Wo=";