commit 1a08aaad019ea85704626910b6caf120abad7114
parent 0a06319d0cb165f0d2a05e227fc01b17f98f2dff
Author: Daniel Barlow <dan@telent.net>
Date: Fri, 10 Feb 2023 23:10:44 +0000
move outputs into a module
Diffstat:
6 files changed, 108 insertions(+), 76 deletions(-)
diff --git a/default.nix b/default.nix
@@ -11,8 +11,7 @@ let
overlays = [overlay];
config = {allowUnsupportedSystem = true; };
});
- inherit (pkgs) callPackage writeText liminix fetchFromGitHub;
- inherit (pkgs.lib) concatStringsSep;
+
config = (import ./merge-modules.nix) [
./modules/base.nix
device.module
@@ -20,79 +19,13 @@ let
./modules/s6
./modules/users.nix
(if phram then ./modules/phram.nix else (args: {}))
+ ./modules/outputs.nix
] pkgs;
- squashfs = liminix.builders.squashfs config.filesystem.contents;
-
- openwrt = fetchFromGitHub {
- name = "openwrt-source";
- repo = "openwrt";
- owner = "openwrt";
- rev = "a5265497a4f6da158e95d6a450cb2cb6dc085cab";
- hash = "sha256-YYi4gkpLjbOK7bM2MGQjAyEBuXJ9JNXoz/JEmYf8xE8=";
- };
- outputs = rec {
- inherit squashfs;
- kernel = liminix.builders.kernel.override {
- inherit (config.kernel) config src extraPatchPhase;
- };
- dtb = (callPackage ./kernel/dtb.nix {}) {
- dts = config.kernel.dts;
- includes = [
- "${openwrt}/target/linux/ath79/dts"
- "${kernel.headers}/include"
- ];
- };
- uimage = (callPackage ./kernel/uimage.nix {}) {
- commandLine = concatStringsSep " " config.boot.commandLine;
- inherit (config.device) loadAddress entryPoint;
- inherit kernel;
- inherit dtb;
- };
- combined-image = pkgs.runCommand "firmware.bin" {
- nativeBuildInputs = [ pkgs.buildPackages.ubootTools ];
- } ''
- mkdir $out
- dd if=${uimage} of=$out/firmware.bin bs=128k conv=sync
- dd if=${squashfs} of=$out/firmware.bin bs=128k conv=sync,nocreat,notrunc oflag=append
- '';
- boot-scr =
- let
- inherit (pkgs.lib.trivial) toHexString;
- uimageStart = 10485760; # 0xa00000
- squashfsStart = uimageStart + 4 * 1024 * 1024;
- squashfsSize = 8;
- cmd = "mtdparts=phram0:${toString squashfsSize}M(nix) phram.phram=phram0,0x${toHexString squashfsStart},${toString squashfsSize}Mi memmap=${toString squashfsSize}M\$0x${toHexString squashfsStart} root=1f00";
- in
- pkgs.buildPackages.writeScript "firmware.bin" ''
- setenv serverip 192.168.8.148
- setenv ipaddr 192.168.8.251
- setenv bootargs '${concatStringsSep " " config.boot.commandLine} ${cmd}'
- tftp 0x8${toHexString uimageStart} result/uimage ; tftp 0x8${toHexString squashfsStart} result/squashfs
- bootm 0x${toHexString uimageStart}
- '';
-
- directory = pkgs.runCommand "liminix" {} (''
- mkdir $out
- cd $out
- ln -s ${squashfs} squashfs
- ln -s ${kernel} vmlinux
- ln -s ${manifest} manifest
- ln -s ${kernel.headers} build
- '' +
- (if config.device.loadAddress != null then
- ''
- ln -s {uimage} uimage
- ${if phram then "ln -s ${boot-scr} boot.scr" else ""}
- ln -s ${boot-scr} flash.scr
- '' else ""));
- # this exists so that you can run "nix-store -q --tree" on it and find
- # out what's in the image, which is nice if it's unexpectedly huge
- manifest = writeText "manifest.json" (builtins.toJSON config.filesystem.contents);
- tftpd = pkgs.buildPackages.tufted;
- };
in {
- outputs = outputs // { default = outputs.${config.device.defaultOutput}; };
+ outputs = config.outputs // {
+ default = config.outputs.${config.device.defaultOutput};
+ };
# this is just here as a convenience, so that we can get a
# cross-compiling nix-shell for any package we're customizing
diff --git a/devices/gl-ar750/default.nix b/devices/gl-ar750/default.nix
@@ -59,7 +59,12 @@
patches ${openwrt}/target/linux/generic/hack-5.15/*.patch
patches ${openwrt}/target/linux/ath79/patches-5.15/*.patch
'';
- dts = "${openwrt}/target/linux/ath79/dts/qca9531_glinet_gl-ar750.dts";
+ dts = {
+ src = "${openwrt}/target/linux/ath79/dts/qca9531_glinet_gl-ar750.dts";
+ includes = [
+ "${openwrt}/target/linux/ath79/dts"
+ ];
+ };
config = {
MIPS_ELF_APPENDED_DTB = "y";
OF = "y";
diff --git a/devices/gl-mt300a/default.nix b/devices/gl-mt300a/default.nix
@@ -46,7 +46,12 @@
patches ${openwrt}/target/linux/generic/hack-5.15/*.patch
patches ${openwrt}/target/linux/ramips/patches-5.15/*.patch
'';
- dts = "${openwrt}/target/linux/ramips/dts/mt7620a_glinet_gl-mt300a.dts";
+ dts = {
+ src = "${openwrt}/target/linux/ramips/dts/mt7620a_glinet_gl-mt300a.dts";
+ includes = [
+ "${openwrt}/target/linux/ramips/dts"
+ ];
+ };
config = {
MIPS_ELF_APPENDED_DTB = "y";
OF = "y";
diff --git a/devices/gl-mt300n-v2/default.nix b/devices/gl-mt300n-v2/default.nix
@@ -46,7 +46,12 @@
patches ${openwrt}/target/linux/generic/hack-5.15/*.patch
patches ${openwrt}/target/linux/ramips/patches-5.15/*.patch
'';
- dts = "${openwrt}/target/linux/ramips/dts/mt7628an_glinet_gl-mt300n-v2.dts";
+ dts = {
+ src = "${openwrt}/target/linux/ramips/dts/mt7628an_glinet_gl-mt300n-v2.dts";
+ includes = [
+ "${openwrt}/target/linux/ramips/dts"
+ ];
+ };
config = {
MIPS_ELF_APPENDED_DTB = "y";
OF = "y";
diff --git a/modules/base.nix b/modules/base.nix
@@ -29,7 +29,13 @@ in {
default = "true";
type = types.lines;
} ;
- dts = mkOption { type = types.path; };
+ dts = {
+ src = mkOption { type = types.path; };
+ includes = mkOption {
+ default = [];
+ type = types.listOf types.path;
+ };
+ };
config = mkOption {
# mostly the values are y n or m, but sometimes
# other strings are also used
diff --git a/modules/outputs.nix b/modules/outputs.nix
@@ -0,0 +1,78 @@
+{
+ config
+, pkgs
+, lib
+, ...
+}:
+let
+ inherit (lib) mkOption types concatStringsSep;
+ inherit (pkgs) liminix callPackage writeText;
+in
+{
+ options = {
+ outputs = mkOption {
+ type = types.attrsOf types.package;
+ default = {};
+ };
+ };
+ config = {
+ outputs = rec {
+ squashfs = liminix.builders.squashfs config.filesystem.contents;
+ tftpd = pkgs.buildPackages.tufted;
+ kernel = liminix.builders.kernel.override {
+ inherit (config.kernel) config src extraPatchPhase;
+ };
+ dtb = (callPackage ../kernel/dtb.nix {}) {
+ dts = config.kernel.dts.src;
+ includes = config.kernel.dts.includes ++ [
+ "${kernel.headers}/include"
+ ];
+ };
+ uimage = (callPackage ../kernel/uimage.nix {}) {
+ commandLine = concatStringsSep " " config.boot.commandLine;
+ inherit (config.device) loadAddress entryPoint;
+ inherit kernel;
+ inherit dtb;
+ };
+ combined-image = pkgs.runCommand "firmware.bin" {
+ nativeBuildInputs = [ pkgs.buildPackages.ubootTools ];
+ } ''
+ mkdir $out
+ dd if=${uimage} of=$out/firmware.bin bs=128k conv=sync
+ dd if=${squashfs} of=$out/firmware.bin bs=128k conv=sync,nocreat,notrunc oflag=append
+ '';
+ boot-scr =
+ let
+ inherit (pkgs.lib.trivial) toHexString;
+ uimageStart = 10485760; # 0xa00000
+ squashfsStart = uimageStart + 4 * 1024 * 1024;
+ squashfsSize = 8;
+ cmd = "mtdparts=phram0:${toString squashfsSize}M(nix) phram.phram=phram0,0x${toHexString squashfsStart},${toString squashfsSize}Mi memmap=${toString squashfsSize}M\$0x${toHexString squashfsStart} root=1f00";
+ in
+ pkgs.buildPackages.writeScript "firmware.bin" ''
+ setenv serverip 192.168.8.148
+ setenv ipaddr 192.168.8.251
+ setenv bootargs '${concatStringsSep " " config.boot.commandLine} ${cmd}'
+ tftp 0x8${toHexString uimageStart} result/uimage ; tftp 0x8${toHexString squashfsStart} result/squashfs
+ bootm 0x${toHexString uimageStart}
+ '';
+
+ directory = pkgs.runCommand "liminix" {} (''
+ mkdir $out
+ cd $out
+ ln -s ${squashfs} squashfs
+ ln -s ${kernel} vmlinux
+ ln -s ${manifest} manifest
+ ln -s ${kernel.headers} build
+ '' +
+ (if config.device.loadAddress != null then
+ ''
+ ln -s ${uimage} uimage
+ ln -s ${boot-scr} flash.scr
+ '' else ""));
+ # this exists so that you can run "nix-store -q --tree" on it and find
+ # out what's in the image, which is nice if it's unexpectedly huge
+ manifest = writeText "manifest.json" (builtins.toJSON config.filesystem.contents);
+ };
+ };
+}