sigil/flake.nix

246 lines
8.0 KiB
Nix
Raw Normal View History

2019-10-28 20:19:52 +01:00
{
2019-11-05 17:38:47 +01:00
description = "Genode packages";
2019-10-28 20:19:52 +01:00
inputs.nixpkgs.url = "github:ehmry/nixpkgs/genodepkgs";
outputs = { self, nixpkgs, nimble }:
2019-11-05 17:38:47 +01:00
let
systems = {
localSystem = [ "x86_64-linux" ];
crossSystem = [ "aarch64-genode" "x86_64-genode" ];
};
systemSpace = nixpkgs.lib.cartesianProductOfSets systems;
forAllLocalSystems = f:
nixpkgs.lib.genAttrs systems.localSystem (system: f system);
forAllCrossSystems = f:
with builtins;
let
f' = { localSystem, crossSystem }:
let system = localSystem + "-" + crossSystem;
in {
name = system;
value = f { inherit system localSystem crossSystem; };
};
list = map f' systemSpace;
attrSet = listToAttrs list;
in attrSet;
forAllSystems = f:
(forAllCrossSystems f) // (forAllLocalSystems (system:
f {
inherit system;
localSystem = system;
crossSystem = system;
}));
in rec {
2020-08-02 16:46:34 +02:00
overlay =
# Overlay of fixes applied to Nixpkgs
import ./overlay { flake = self; };
2020-08-02 16:46:34 +02:00
lib =
# Local utilities merged with the Nixpkgs lib
2021-01-05 15:11:42 +01:00
nixpkgs.lib.extend (final: prev: {
inherit forAllSystems forAllLocalSystems forAllCrossSystems;
/* For a the name of a derivation output and a derivation,
generate a set of { cap, closure, and path } for a singular
file found within the subdirectory of the output with the
same name as that output. In the case that the derivation
does not have this named output, the subdirectory will be
taken from the default output. This subdirectory must
contain a single file, and the output must contain an
ERIS manifest file.
*/
getEris = output: pkg:
with builtins;
let
pkg' = prev.getOutput output pkg;
erisInfo =
fromJSON (readFile "${pkg'}/nix-support/eris-manifest.json");
caps = filter
({ path, ... }: prev.strings.hasPrefix "${pkg'}/${output}" path)
(prev.attrsets.mapAttrsToList (path:
{ cap, closure }: {
path = "${pkg'}${
substring (stringLength pkg') (stringLength path) path
}"; # hack to build a string with context
inherit cap closure;
}) erisInfo);
in assert length caps == 1; head caps;
2021-01-05 15:11:42 +01:00
nixosSystem = { modules, ... }@args:
import "${nixpkgs}/nixos/lib/eval-config.nix" (args // {
lib = final;
2021-01-05 15:11:42 +01:00
baseModules =
# TODO: do not blacklist modules for the Linux guests
with builtins;
let
isNotModule = suffix:
let x = "${nixpkgs}/nixos/modules/${suffix}";
in y: x != y;
filters = map isNotModule
(import ./nixos-modules/base-modules-blacklist.nix);
isCompatible = p:
let p' = toString p;
in all (f: f p') filters;
in filter isCompatible
(import "${nixpkgs}/nixos/modules/module-list.nix");
modules = modules ++ [
({ config, lib, ... }: {
options = with lib; {
system.boot.loader.id = mkOption {
internal = true;
default = "";
};
system.boot.loader.kernelFile = mkOption {
internal = true;
default = pkgs.stdenv.hostPlatform.platform.kernelTarget;
type = types.str;
};
system.boot.loader.initrdFile = mkOption {
internal = true;
default = "initrd";
type = types.str;
};
systemd.defaultUnit = mkOption {
default = "multi-user.target";
type = types.str;
};
};
config = {
boot.loader.grub.enable = lib.mkDefault false;
fileSystems."/" = { };
networking.enableIPv6 = lib.mkForce false;
systemd.network.enable = lib.mkForce false;
system.nixos.versionSuffix = ".${
final.substring 0 8
(self.lastModifiedDate or self.lastModified or "19700101")
}.${self.shortRev or "dirty"}";
system.nixos.revision = final.mkIf (self ? rev) self.rev;
system.build.toplevel = config.system.build.initXml;
};
})
];
});
});
2021-03-02 23:35:55 +01:00
/* The nixpkgs.legacyPackages after overlaying
and with some additional Genode packages.
*/
legacyPackages = let f = import nixpkgs;
in forAllSystems ({ system, localSystem, crossSystem }:
if localSystem == crossSystem then
f {
inherit system;
overlays = [ self.overlay nimble.overlay ];
}
else
f {
inherit localSystem;
crossSystem = {
system = crossSystem;
useLLVM = true;
};
config.allowUnsupportedSystem = true;
overlays = [ self.overlay nimble.overlay ];
});
2020-08-02 16:46:34 +02:00
packages =
# Genode native packages, not packages in the traditional
# sense in that these cannot be installed within a profile
forAllCrossSystems ({ system, localSystem, crossSystem }:
nixpkgs.lib.filterAttrs (n: v: v != null)
2021-03-02 23:35:55 +01:00
self.legacyPackages.${system}.genodePackages);
2020-08-02 16:46:34 +02:00
devShell =
# Development shell for working with the
# upstream Genode source repositories
forAllLocalSystems (system:
let
pkgs = nixpkgs.legacyPackages.${system};
2020-08-02 16:46:34 +02:00
fhs = pkgs.buildFHSUserEnv {
name = "genode-env";
targetPkgs = pkgs:
(with pkgs; [
binutils
bison
expect
flex
git
glibc.dev
gnumake
libxml2
qemu
rpcsvc-proto
subversion
2020-08-02 16:46:34 +02:00
tcl
wget
2020-08-02 16:46:34 +02:00
which
xorriso
]);
runScript = "bash";
extraBuildCommands = let
toolchain = pkgs.fetchzip {
url =
"file://${packages.x86_64-linux-x86_64-genode.genodeSources.toolchain.src}";
hash = "sha256-26rPvLUPEJm40zLSqTquwuFTJ1idTB0T4VXgaHRN+4o=";
};
in "ln -s ${toolchain}/local usr/local";
};
2020-08-02 16:46:34 +02:00
in pkgs.stdenv.mkDerivation {
name = "genode-fhs-shell";
nativeBuildInputs = [ fhs ];
shellHook = "exec genode-env";
2020-03-24 13:47:30 +01:00
});
2020-12-10 20:23:53 +01:00
nixosModules =
# Modules for composing Genode and NixOS
import ./nixos-modules { flake = self; };
2020-08-02 16:46:34 +02:00
checks =
# Checks for continous testing
let tests = import ./tests;
in with (forAllCrossSystems ({ system, localSystem, crossSystem }:
tests {
flake = self;
inherit system localSystem crossSystem;
pkgs = self.legacyPackages.${system};
2020-08-15 19:54:01 +02:00
} // {
2021-03-02 23:35:55 +01:00
ports = self.legacyPackages.${localSystem}.symlinkJoin {
2020-08-15 19:54:01 +02:00
name = "ports";
paths = (builtins.attrValues
self.packages.${system}.genodeSources.ports);
};
2020-09-18 00:56:24 +02:00
})); {
x86_64-linux = x86_64-linux-aarch64-genode
// x86_64-linux-x86_64-genode;
};
2020-12-02 13:06:00 +01:00
hydraJobs = self.checks;
};
2019-10-28 20:19:52 +01:00
}