2
0
Fork 0
genodepkgs/packages/genodelabs/default.nix

66 lines
1.9 KiB
Nix

{ nixpkgs, apps }:
{ name, targets, libTargets ? [ ], arch ? "x86_64", kernel ? "linux"
, 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 = "19.11";
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 libTargets;
src = nixpkgs.fetchFromGitHub {
owner = "genodelabs";
repo = "genode";
rev = version;
sha256 = "0j0wfwqmv8mivfkpra1pb02a8dy1nnsakr3v6l5y964dfkq3737i";
};
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
'';
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[@]}"}
)
for LIB in $libTargets; do
make "''${flagsArray[@]}" LIB=$LIB
done
make "''${flagsArray[@]}" $targets
runHook postBuild
'';
installPhase = ''
runHook preInstall
find build/bin -execdir install -Dt $out/bin '{}' \;
runHook postInstall
${apps.generate-manifest.program} $out > $manifest
'';
} // extraAttrs)