2
0
Fork 0

Add package manifests at testing site

The manifests can be generated at late as possible. Also, in the future
a list of binaries in use by an init expression can be extracted and
selected from a list of input packages.
This commit is contained in:
Emery Hemingway 2020-03-26 20:54:27 +05:30
parent 9e07ce1156
commit db7d458b5e
6 changed files with 58 additions and 62 deletions

View File

@ -3,21 +3,10 @@
{ system, legacyPackages, localPackages, depot, apps }: { system, legacyPackages, localPackages, depot, apps }:
let let
dhallPackages = import ./dhall { inherit (localPackages) callPackage; }; inherit (legacyPackages) callPackage;
dhallPackages = localPackages.callPackage ./dhall { };
mkDhallManifest = drv: genodeLabs = import ./genodelabs { nixpkgs = legacyPackages; };
legacyPackages.runCommand "${drv.name}.dhall" { inherit drv; }
"${apps.generate-manifest.program} $drv > $out";
addManifest = drv: { manifest = mkDhallManifest drv; } // drv;
callPackage' = path: attrs:
addManifest (legacyPackages.callPackage path attrs);
genodeLabs = import ./genodelabs {
nixpkgs = legacyPackages;
inherit addManifest;
};
inherit (genodeLabs) buildUpstream; inherit (genodeLabs) buildUpstream;
buildWorld = let buildWorld = let
@ -105,10 +94,9 @@ in rec {
NOVA = legacyPackages.callPackage ./NOVA { }; NOVA = legacyPackages.callPackage ./NOVA { };
solo5 = let drv = callPackage' ./solo5 { }; solo5 = let drv = callPackage ./solo5 { };
in drv // { tests = addManifest drv.tests // { pname = "solo5-tests"; }; }; in drv // { tests = drv.tests // { pname = "solo5-tests"; }; };
sotest-producer = callPackage' ./sotest-producer { };
stdcxx = callPackage' ./stdcxx { }; stdcxx = callPackage' ./stdcxx { };
sotest-producer = callPackage ./sotest-producer { };
} }

View File

@ -1,4 +1,4 @@
{ nixpkgs, addManifest }: { nixpkgs }:
let let
genodeSources = let genodeSources = let
@ -94,43 +94,41 @@ let
buildUpstream = { name, targets, portInputs ? [ ], nativeBuildInputs ? [ ] buildUpstream = { name, targets, portInputs ? [ ], nativeBuildInputs ? [ ]
, ... }@extraAttrs: , ... }@extraAttrs:
let stdenv'.mkDerivation (extraAttrs // {
drv = stdenv'.mkDerivation (extraAttrs // { pname = name;
pname = name; inherit (genodeSources) version;
inherit (genodeSources) version; inherit targets;
inherit targets;
dontUnpack = true; dontUnpack = true;
nativeBuildInputs = with nixpkgs.buildPackages; nativeBuildInputs = with nixpkgs.buildPackages;
[ binutils bison flex stdenv.cc tcl which ] ++ nativeBuildInputs; [ binutils bison flex stdenv.cc tcl which ] ++ nativeBuildInputs;
enableParallelBuilding = true; enableParallelBuilding = true;
configurePhase = let configurePhase = let
linkPorts = toString linkPorts = toString
(builtins.map (drv: " ln -sv ${drv}/* contrib/;") portInputs); (builtins.map (drv: " ln -sv ${drv}/* contrib/;") portInputs);
in '' in ''
runHook preConfigure runHook preConfigure
export CONTRIB_DIR=$NIX_BUILD_TOP/contrib export CONTRIB_DIR=$NIX_BUILD_TOP/contrib
export BUILD_DIR=$NIX_BUILD_TOP/build export BUILD_DIR=$NIX_BUILD_TOP/build
${genodeSources}/tool/create_builddir ${arch} ${genodeSources}/tool/create_builddir ${arch}
substituteInPlace build/etc/build.conf \ substituteInPlace build/etc/build.conf \
--replace "#REPOSITORIES" "REPOSITORIES" --replace "#REPOSITORIES" "REPOSITORIES"
mkdir $CONTRIB_DIR; ${linkPorts} mkdir $CONTRIB_DIR; ${linkPorts}
runHook postConfigure runHook postConfigure
''; '';
makeFlags = [ "-C build" ] ++ targets; makeFlags = [ "-C build" ] ++ targets;
installPhase = '' installPhase = ''
runHook preInstall runHook preInstall
find build/bin -name '*.xsd' -delete find build/bin -name '*.xsd' -delete
find build/bin -follow -type f -exec install -Dt $out '{}' \; find build/bin -follow -type f -exec install -Dt $out '{}' \;
runHook postInstall runHook postInstall
''; '';
}); });
in addManifest drv;
buildOverrides = import ./targets.nix { buildOverrides = import ./targets.nix {
inherit (nixpkgs) buildPackages; inherit (nixpkgs) buildPackages;

View File

@ -15,10 +15,20 @@ let
depot = genode-depot.packages.${system}; depot = genode-depot.packages.${system};
testPkgs = genodepkgs; testPkgs = genodepkgs;
addManifest = drv:
drv // {
manifest = hostPkgs.runCommand "${drv.name}.dhall" { inherit drv; } ''
set -eu
echo -n '[' >> $out
find $drv/ -type f -printf ',{mapKey= "%f",mapValue="%p"}' >> $out
echo -n ']' >> $out
'';
};
linux = linux =
(call: ((tests call) // { block_router = call ./block_router.nix { }; })) (call: ((tests call) // { block_router = call ./block_router.nix { }; }))
(import ./driver-linux.nix { (import ./driver-linux.nix {
inherit apps testPkgs hostPkgs lib depot; inherit apps testPkgs hostPkgs lib depot addManifest;
}).callTest; }).callTest;
nova = (call: nova = (call:
@ -28,7 +38,7 @@ let
pci = call ./pci.nix { }; pci = call ./pci.nix { };
rtc = call ./rtc.nix { }; rtc = call ./rtc.nix { };
})) (import ./driver-nova.nix { })) (import ./driver-nova.nix {
inherit apps system testPkgs hostPkgs lib depot; inherit apps system testPkgs hostPkgs lib depot addManifest;
}).callTest; }).callTest;
hw = (call: hw = (call:
@ -37,7 +47,7 @@ let
pci = call ./pci.nix { }; pci = call ./pci.nix { };
rtc = call ./rtc.nix { }; rtc = call ./rtc.nix { };
})) (import ./driver-hw.nix { })) (import ./driver-hw.nix {
inherit apps system testPkgs hostPkgs lib depot; inherit apps system testPkgs hostPkgs lib depot addManifest;
}).callTest; }).callTest;
testsToList = tests: testsToList = tests:

View File

@ -1,6 +1,6 @@
# SPDX-License-Identifier: CC0-1.0 # SPDX-License-Identifier: CC0-1.0
{ system, apps, testPkgs, hostPkgs, lib, depot }: { system, apps, testPkgs, hostPkgs, lib, depot, addManifest }:
let let
testDriver = with hostPkgs; testDriver = with hostPkgs;
@ -40,9 +40,9 @@ let
mkTest = { name ? "unamed", testScript ? defaultScript, testConfig mkTest = { name ? "unamed", testScript ? defaultScript, testConfig
, testInputs ? [ ], testEnv ? { }, qemuArgs ? [ ], ... }@t: , testInputs ? [ ], testEnv ? { }, qemuArgs ? [ ], ... }@t:
let let
manifest = lib.mergeManifests (with testPkgs; manifest = lib.mergeManifests (map addManifest (with testPkgs;
[ base-hw-pc (genodeSources.make "init") sotest-producer ] [ base-hw-pc (genodeSources.make "init") sotest-producer ]
++ testInputs); ++ testInputs));
testConfig' = "${./test-wrapper.dhall} ${testConfig} (toMap ${manifest})"; testConfig' = "${./test-wrapper.dhall} ${testConfig} (toMap ${manifest})";
testEnv' = { testEnv' = {
DHALL_GENODE = "${testPkgs.dhallGenode}/source.dhall"; DHALL_GENODE = "${testPkgs.dhallGenode}/source.dhall";

View File

@ -1,6 +1,6 @@
# SPDX-License-Identifier: CC0-1.0 # SPDX-License-Identifier: CC0-1.0
{ apps, testPkgs, hostPkgs, lib, depot }: { apps, testPkgs, hostPkgs, lib, depot, addManifest }:
let let
testDriver = with hostPkgs; testDriver = with hostPkgs;
@ -38,8 +38,8 @@ let
, env ? { }, ... }: , env ? { }, ... }:
with testPkgs; with testPkgs;
let let
manifest = lib.mergeManifests manifest = lib.mergeManifests (map addManifest
(with testPkgs; [ base-linux init sotest-producer ] ++ testInputs); ((with testPkgs; [ base-linux init sotest-producer ] ++ testInputs)));
testConfig' = "${./test-wrapper.dhall} ${testConfig} (toMap ${manifest})"; testConfig' = "${./test-wrapper.dhall} ${testConfig} (toMap ${manifest})";
env' = { env' = {
DHALL_GENODE = "${testPkgs.dhallGenode}/source.dhall"; DHALL_GENODE = "${testPkgs.dhallGenode}/source.dhall";

View File

@ -1,6 +1,6 @@
# SPDX-License-Identifier: CC0-1.0 # SPDX-License-Identifier: CC0-1.0
{ system, apps, testPkgs, hostPkgs, lib, depot }: { system, apps, testPkgs, hostPkgs, lib, depot, addManifest }:
let let
testDriver = with hostPkgs; testDriver = with hostPkgs;
@ -40,9 +40,9 @@ let
mkTest = { name ? "unamed", testScript ? defaultScript, testConfig mkTest = { name ? "unamed", testScript ? defaultScript, testConfig
, testInputs ? [ ], testEnv ? { }, qemuArgs ? [ ], ... }@t: , testInputs ? [ ], testEnv ? { }, qemuArgs ? [ ], ... }@t:
let let
manifest = lib.mergeManifests (with testPkgs; manifest = lib.mergeManifests (map addManifest (with testPkgs;
[ base-nova (genodeSources.make "init") sotest-producer ] [ base-nova (genodeSources.make "init") sotest-producer ]
++ testInputs); ++ testInputs));
testConfig' = "${./test-wrapper.dhall} ${testConfig} (toMap ${manifest})"; testConfig' = "${./test-wrapper.dhall} ${testConfig} (toMap ${manifest})";
testEnv' = { testEnv' = {
DHALL_GENODE = "${testPkgs.dhallGenode}/source.dhall"; DHALL_GENODE = "${testPkgs.dhallGenode}/source.dhall";