|
|
|
@ -1,7 +1,9 @@
|
|
|
|
|
{ flake, buildPackages, targetPackages }:
|
|
|
|
|
{ flake, pkgs }:
|
|
|
|
|
|
|
|
|
|
let
|
|
|
|
|
platform = targetPackages.targetPlatform;
|
|
|
|
|
inherit (pkgs) lib buildPackages targetPackages;
|
|
|
|
|
|
|
|
|
|
platform = pkgs.targetPlatform;
|
|
|
|
|
|
|
|
|
|
arch = with platform;
|
|
|
|
|
if isx86_64 then
|
|
|
|
@ -11,8 +13,6 @@ let
|
|
|
|
|
else
|
|
|
|
|
throw "unknown Genode arch for platform ${platform.system}";
|
|
|
|
|
|
|
|
|
|
inherit (buildPackages) callPackage fetchurl lib;
|
|
|
|
|
|
|
|
|
|
upstreamSources = flake.inputs.genode;
|
|
|
|
|
|
|
|
|
|
genodeSources =
|
|
|
|
@ -61,7 +61,7 @@ let
|
|
|
|
|
let
|
|
|
|
|
havePatches = patches != [ ];
|
|
|
|
|
version = portVersions.${name};
|
|
|
|
|
in with buildPackages;
|
|
|
|
|
in with buildPackages.buildPackages;
|
|
|
|
|
stdenvNoCC.mkDerivation (args // {
|
|
|
|
|
name = name + "-port-" + version;
|
|
|
|
|
inherit version patches;
|
|
|
|
@ -121,10 +121,9 @@ let
|
|
|
|
|
# The "ports" mechanism is hardly deterministic, so prepare with
|
|
|
|
|
# a pinned nixpkgs revision for a pinned platform.
|
|
|
|
|
|
|
|
|
|
toolchain = callPackage ./toolchain.nix { };
|
|
|
|
|
toolchain = buildPackages.buildPackages.callPackage ./toolchain.nix { };
|
|
|
|
|
|
|
|
|
|
stdenv' =
|
|
|
|
|
targetPackages.stdenvAdapters.overrideCC targetPackages.stdenv toolchain;
|
|
|
|
|
stdenv' = pkgs.stdenvAdapters.overrideCC pkgs.stdenv toolchain;
|
|
|
|
|
|
|
|
|
|
buildUpstream =
|
|
|
|
|
# Build from the Genode sources
|
|
|
|
@ -179,14 +178,14 @@ let
|
|
|
|
|
buildDepot =
|
|
|
|
|
# Build a Depot target from the Genode sources
|
|
|
|
|
{ name, apiOnly ? false, portInputs ? [ ], nativeBuildInputs ? [ ]
|
|
|
|
|
, meta ? { }, ... }@extraAttrs:
|
|
|
|
|
, buildInputs ? [ ], meta ? { }, ... }@extraAttrs:
|
|
|
|
|
|
|
|
|
|
stdenv'.mkDerivation (extraAttrs // {
|
|
|
|
|
pname = name;
|
|
|
|
|
inherit (genodeSources) version;
|
|
|
|
|
enableParallelBuilding = true;
|
|
|
|
|
|
|
|
|
|
nativeBuildInputs = with buildPackages;
|
|
|
|
|
nativeBuildInputs = with buildPackages.buildPackages;
|
|
|
|
|
[ binutils bison flex stdenv.cc tcl which ] ++ nativeBuildInputs;
|
|
|
|
|
|
|
|
|
|
src = genodeSources;
|
|
|
|
@ -234,7 +233,21 @@ let
|
|
|
|
|
meta = { platforms = lib.platforms.genode; } // meta;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
buildOverrides = callPackage ./targets.nix { inherit ports; };
|
|
|
|
|
makePackages = let
|
|
|
|
|
overrides = import ./make-targets.nix {
|
|
|
|
|
inherit (pkgs) buildPackages genodePackages;
|
|
|
|
|
inherit ports;
|
|
|
|
|
};
|
|
|
|
|
in lib.attrsets.mapAttrs
|
|
|
|
|
(name: value: (buildUpstream ({ inherit name; } // value))) overrides;
|
|
|
|
|
|
|
|
|
|
depotPackages = lib.attrsets.mapAttrs
|
|
|
|
|
(name: value: (buildDepot ({ inherit name; } // value)))
|
|
|
|
|
(import ./depot-targets.nix {
|
|
|
|
|
inherit (pkgs) genodePackages;
|
|
|
|
|
inherit ports;
|
|
|
|
|
buildPackages = buildPackages.buildPackages;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
specs = with platform;
|
|
|
|
|
[ ]
|
|
|
|
@ -283,20 +296,69 @@ let
|
|
|
|
|
'';
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
in genodeSources // {
|
|
|
|
|
inherit buildUpstream buildDepot ports specs toolchain genodeBase;
|
|
|
|
|
|
|
|
|
|
make = target:
|
|
|
|
|
let
|
|
|
|
|
name = builtins.replaceStrings [ "/" ] [ "-" ] target;
|
|
|
|
|
attrs = buildOverrides.${name} or { };
|
|
|
|
|
in buildUpstream ({
|
|
|
|
|
inherit name;
|
|
|
|
|
targets = [ target ];
|
|
|
|
|
} // attrs);
|
|
|
|
|
|
|
|
|
|
depot = name:
|
|
|
|
|
let attrs = buildOverrides.${name} or { };
|
|
|
|
|
in buildDepot ({ inherit name; } // attrs);
|
|
|
|
|
|
|
|
|
|
basePatches = [ ./cxx-align.patch ];
|
|
|
|
|
|
|
|
|
|
in makePackages // depotPackages // {
|
|
|
|
|
|
|
|
|
|
genodeSources = genodeSources // {
|
|
|
|
|
inherit buildUpstream buildDepot genodeBase ports specs toolchain;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
base-hw-pc = buildUpstream {
|
|
|
|
|
name = "base-hw-pc";
|
|
|
|
|
outputs = [ "out" "coreObj" "bootstrapObj" ];
|
|
|
|
|
KERNEL = "hw";
|
|
|
|
|
BOARD = "pc";
|
|
|
|
|
targets = [ "bootstrap" "core" "timer" "lib/ld" ];
|
|
|
|
|
patches = basePatches;
|
|
|
|
|
postInstall = ''
|
|
|
|
|
mv $out/lib/ld-hw.lib.so $out/lib/ld.lib.so
|
|
|
|
|
mv $out/bin/hw_timer_drv $out/bin/timer_drv
|
|
|
|
|
install build/bin/core-hw-pc.o $coreObj
|
|
|
|
|
install build/bin/bootstrap-hw-pc.o $bootstrapObj
|
|
|
|
|
'';
|
|
|
|
|
meta.platforms = [ "x86_64-genode" ];
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
base-hw-virt_qemu = buildUpstream {
|
|
|
|
|
name = "base-hw-virt_qemu";
|
|
|
|
|
outputs = [ "out" "coreObj" "bootstrapObj" ];
|
|
|
|
|
KERNEL = "hw";
|
|
|
|
|
BOARD = "virt_qemu";
|
|
|
|
|
targets = [ "bootstrap" "core" "timer" "lib/ld" ];
|
|
|
|
|
patches = basePatches;
|
|
|
|
|
postInstall = ''
|
|
|
|
|
mv $out/lib/ld-hw.lib.so $out/lib/ld.lib.so
|
|
|
|
|
mv $out/bin/hw_timer_drv $out/bin/timer_drv
|
|
|
|
|
install build/bin/core-hw-virt_qemu.o $coreObj
|
|
|
|
|
install build/bin/bootstrap-hw-virt_qemu.o $bootstrapObj
|
|
|
|
|
'';
|
|
|
|
|
meta.platforms = [ "aarch64-genode" ];
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
base-linux = buildUpstream {
|
|
|
|
|
name = "base-linux";
|
|
|
|
|
KERNEL = "linux";
|
|
|
|
|
BOARD = "linux";
|
|
|
|
|
targets = [ "core" "timer" "lib/ld" ];
|
|
|
|
|
patches = basePatches;
|
|
|
|
|
postInstall = ''
|
|
|
|
|
mv $out/lib/ld-linux.lib.so $out/lib/ld.lib.so
|
|
|
|
|
mv $out/bin/linux_timer_drv $out/bin/timer_drv
|
|
|
|
|
'';
|
|
|
|
|
HOST_INC_DIR = buildPackages.glibc.dev + "/include";
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
base-nova = buildUpstream {
|
|
|
|
|
name = "base-nova";
|
|
|
|
|
outputs = [ "out" "coreObj" ];
|
|
|
|
|
KERNEL = "nova";
|
|
|
|
|
targets = [ "core" "timer" "lib/ld" ];
|
|
|
|
|
patches = basePatches;
|
|
|
|
|
postInstall = ''
|
|
|
|
|
mv $out/lib/ld-nova.lib.so $out/lib/ld.lib.so
|
|
|
|
|
mv $out/bin/nova_timer_drv $out/bin/timer_drv
|
|
|
|
|
install build/bin/core-nova.o $coreObj
|
|
|
|
|
'';
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|