sigil/packages/genodelabs/default.nix

65 lines
1.9 KiB
Nix

{ nixpkgs, apps }:
{ name, targets, arch, kernel ? "hw", board ? "pc", ... }@extraAttrs:
let
sourceForgeToolchain =
nixpkgs.buildPackages.callPackage ./../genode/toolchain.nix { };
stdenvGcc = let
env = nixpkgs.stdenvAdapters.overrideCC nixpkgs.stdenv sourceForgeToolchain;
in assert env.cc.isGNU; env;
version = "20.02";
toolPrefix = if arch == "x86_64" then
"genode-x86-"
else
throw "unknown tool prefix for Genode arch ${arch}";
in stdenvGcc.mkDerivation ({
outputs = [ "out" "manifest" ];
pname = name;
inherit version targets;
src = nixpkgs.fetchFromGitHub {
owner = "genodelabs";
repo = "genode";
rev = version;
sha256 = "0idk92ibrasla0y2xkrmyh49dx0nzg96gqkcmn6r3w5r3fdpsfjy";
};
nativeBuildInputs = with nixpkgs.buildPackages; [ binutils tcl which ];
enableParallelBuilding = true;
configurePhase = ''
patchShebangs ./tool/check_abi
patchShebangs ./tool/create_builddir
substituteInPlace repos/base/etc/tools.conf \
--replace "/usr/local/genode/tool/19.05/bin/" ""
substituteInPlace tool/check_abi \
--replace "exec nm" "exec ${toolPrefix}nm"
./tool/create_builddir ${arch} BUILD_DIR=build
substituteInPlace build/etc/build.conf \
--replace "#REPOSITORIES" "REPOSITORIES"
'';
makeFlags = [ "-C build" "KERNEL=${kernel}" "BOARD=${board}" ];
buildPhase = ''
runHook preBuild
local flagsArray=(
''${enableParallelBuilding:+-j''${NIX_BUILD_CORES} -l''${NIX_BUILD_CORES}}
SHELL=$SHELL
$makeFlags ''${makeFlagsArray+"''${makeFlagsArray[@]}"}
$buildFlags ''${buildFlagsArray+"''${buildFlagsArray[@]}"}
)
make "''${flagsArray[@]}" $targets
runHook postBuild
'';
installPhase = ''
runHook preInstall
find -name '*.xsd' -delete
find build/bin -execdir install -Dt $out/bin '{}' \;
runHook postInstall
${apps.generate-manifest.program} $out > $manifest
'';
} // extraAttrs)