From 693ac303e04599ecc0ccdbd0f31e5ff5f3bb7492 Mon Sep 17 00:00:00 2001 From: Emery Hemingway Date: Mon, 7 Oct 2019 17:05:37 +0200 Subject: [PATCH] Use a host-only Nixpkgs for test environment Discriminate test-packages and host-packages when building tests. This avoids the test tooling being tainted with the hostPlatform and targetPlatform of the test. For example, QEMU must be built independently and isolated from the guest platform, for the sake of test control and minimizing rebuilds. --- default.nix | 7 +------ nixpkgs.nix | 6 ++++++ tests/default.nix | 20 +++++++++++------- tests/driver-linux.nix | 47 +++++++++++++++++++++++------------------- 4 files changed, 45 insertions(+), 35 deletions(-) create mode 100644 nixpkgs.nix diff --git a/default.nix b/default.nix index 2ff7811..d8ce6cc 100644 --- a/default.nix +++ b/default.nix @@ -16,12 +16,7 @@ let toolchainOverlay = import ./toolchain-overlay; # Overlay of toolchain patches - nixpkgs' = builtins.fetchGit { - # A branch of Nixpkgs with a custom "crossSystem" mechanism - url = "https://github.com/ehmry/nixpkgs.git"; - ref = "hybrid-19.09"; - rev = "9a704b7def9bc9ea04d12d6a0d55ebebe0af982a"; - }; + nixpkgs' = import ./nixpkgs.nix; in { nixpkgs ? nixpkgs', dhall-haskell ? ./dhall-haskell.nix }: diff --git a/nixpkgs.nix b/nixpkgs.nix new file mode 100644 index 0000000..e5b710b --- /dev/null +++ b/nixpkgs.nix @@ -0,0 +1,6 @@ +# A branch of Nixpkgs with a custom "crossSystem" mechanism +builtins.fetchGit { + url = "https://github.com/ehmry/nixpkgs.git"; + ref = "hybrid-19.09"; + rev = "9a704b7def9bc9ea04d12d6a0d55ebebe0af982a"; +} diff --git a/tests/default.nix b/tests/default.nix index f399fc3..42cbe9d 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -10,21 +10,24 @@ let signal = call ./signal.nix { }; solo5 = call ./solo5.nix { }; }; -in { pkgs ? (import ./.. { }) }: + nixpkgs' = import ./../nixpkgs.nix; +in { nixpkgs ? nixpkgs' }: let + hostPkgs = import nixpkgs { }; + testPkgs = import ./.. { inherit nixpkgs; }; - lib = pkgs.buildPackages.pkgs.lib // { + lib = hostPkgs.lib // { renderDhallInit = path: args: - pkgs.buildPackages.runCommand "init.xml" { - buildInputs = with pkgs.buildPackages; [ linux-dhall ]; + hostPkgs.runCommand "init.xml" { + buildInputs = [ testPkgs.buildPackages.linux-dhall ]; initConfig = path; initArgs = args; - DHALL_PRELUDE = "${pkgs.dhallPackages.prelude}/package.dhall"; - DHALL_GENODE = "${pkgs.dhallPackages.genode}/package.dhall"; + DHALL_PRELUDE = "${testPkgs.dhallPackages.prelude}/package.dhall"; + DHALL_GENODE = "${testPkgs.dhallPackages.genode}/package.dhall"; } '' - set -v + export XDG_CACHE_HOME=$NIX_BUILD_TOP echo 'let Prelude = env:DHALL_GENODE in Prelude.Init.render (Prelude.Init.defaults ⫽ { children = toMap (env:initConfig env:initArgs) })' \ | dhall text \ > $out @@ -33,5 +36,6 @@ let }; in { - linux = tests (import ./driver-linux.nix { inherit pkgs lib; }).callTest; + linux = tests + (import ./driver-linux.nix { inherit testPkgs hostPkgs lib; }).callTest; } diff --git a/tests/driver-linux.nix b/tests/driver-linux.nix index dba5502..b428204 100644 --- a/tests/driver-linux.nix +++ b/tests/driver-linux.nix @@ -2,10 +2,10 @@ # # SPDX-License-Identifier: LicenseRef-Hippocratic-1.1 -{ pkgs, lib }: +{ testPkgs, hostPkgs, lib }: let - testDriver = with pkgs.buildPackages; + testDriver = with hostPkgs; stdenv.mkDerivation { name = "genode-test-driver"; @@ -23,7 +23,7 @@ let }; runTests = driver: - pkgs.stdenv.mkDerivation { + hostPkgs.stdenv.mkDerivation { name = "test-run-${driver.testName}"; buildCommand = '' @@ -39,7 +39,7 @@ let makeTest = { testScript, testConfig, name ? "unamed", ... }@t: let - baseSetup = with pkgs; '' + baseSetup = with testPkgs; '' file link -s core ${depot.base-linux}/bin/core file link -s timer ${depot.base-linux}/bin/timer file link -s ld.lib.so ${depot.base-linux}/lib/ld.lib.so @@ -48,22 +48,23 @@ let file link -s test.config $env(testConfig) ''; - driver = pkgs.buildPackages.runCommand "genode-test-driver-${name}" { - buildInputs = with pkgs.buildPackages; [ makeWrapper expect ]; - inherit baseSetup testConfig testScript; - preferLocalBuild = true; - testName = name; - } '' - mkdir -p $out/bin - echo "$testConfig" > $out/test.config - echo "$testScript" > $out/test-script - echo "$baseSetup" > $out/base-setup - ln -s ${testDriver}/bin/genode-test-driver $out/bin/ - wrapProgram $out/bin/genode-test-driver \ - --run "export testConfig=\"$testConfig\"" \ - --run "export testScript=\"\$(cat $out/test-script)\"" \ - --run "export baseSetup=\"\$(cat $out/base-setup)\"" \ - ''; + driver = with hostPkgs; + runCommand "genode-test-driver-${name}" { + buildInputs = [ makeWrapper expect ]; + inherit baseSetup testConfig testScript; + preferLocalBuild = true; + testName = name; + } '' + mkdir -p $out/bin + echo "$testConfig" > $out/test.config + echo "$testScript" > $out/test-script + echo "$baseSetup" > $out/base-setup + ln -s ${testDriver}/bin/genode-test-driver $out/bin/ + wrapProgram $out/bin/genode-test-driver \ + --run "export testConfig=\"$testConfig\"" \ + --run "export testScript=\"\$(cat $out/test-script)\"" \ + --run "export baseSetup=\"\$(cat $out/base-setup)\"" \ + ''; passMeta = drv: drv @@ -74,5 +75,9 @@ let in test // { inherit driver test; }; in { - callTest = path: args: makeTest (import path ({ inherit pkgs lib; } // args)); + callTest = path: args: + makeTest (import path ({ + pkgs = testPkgs; + inherit lib; + } // args)); }