{ 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)