summaryrefslogtreecommitdiff
path: root/boards/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'boards/default.nix')
-rw-r--r--boards/default.nix72
1 files changed, 47 insertions, 25 deletions
diff --git a/boards/default.nix b/boards/default.nix
index dd09255..6c8c8a9 100644
--- a/boards/default.nix
+++ b/boards/default.nix
@@ -1,33 +1,55 @@
-{ libkernel, pkgs }:
+{
+ arches,
+ libkernel,
+ nixpkgs,
+ pkgs,
+ python,
+ system,
+}:
let
- mkKernel = { name, asmFile, linkerScript }:
- pkgs.stdenvNoCC.mkDerivation {
- pname = "${libkernel.pname}-${name}";
- version = libkernel.version;
- inherit asmFile linkerScript;
+ mkKernel =
+ path:
+ let
+ args = import path;
+ arch = arches.${args.vernos-arch};
+ libkernel-arch = libkernel.${args.vernos-arch};
+ pkgs-arch = import nixpkgs {
+ inherit system;
+ crossSystem.config = arch.crossSystem;
+ };
+ in
- nativeBuildInputs = [ pkgs.stdenv.cc.bintools.bintools ];
+ pkgs-arch.stdenvNoCC.mkDerivation (
+ {
+ pname = "vernos-kernel-${args.vernos-board}";
+ version = libkernel-arch.version;
- dontUnpack = true;
- buildPhase = ''
- runHook preBuild
+ nativeBuildInputs = [
+ pkgs.ninja
+ pkgs-arch.stdenv.cc.bintools.bintools
+ python
+ ];
- riscv64-unknown-none-elf-as -g -march=rv64gc -mabi=lp64d -o asm.o \
- $asmFile
+ dontUnpack = true;
+ configurePhase = ''
+ runHook preConfigure
+ python3 ${./configure.py} ${args.vernos-arch} ${args.vernos-board} \
+ ${libkernel-arch} $src
+ runHook postConfigure
+ '';
+ installPhase = ''
+ runHook preInstall
+ install -Dt $out kernel.elf
+ runHook postInstall
+ '';
- riscv64-unknown-none-elf-ld --gc-sections -T$linkerScript -o kernel.elf \
- asm.o ${libkernel}/lib/libkernel.a
+ AS = "${arch.crossSystem}-as";
+ LD = "${arch.crossSystem}-ld";
+ }
+ // args
+ );
- runHook postBuild
- '';
- installPhase = ''
- runHook preInstall
- install -Dt $out kernel.elf
- runHook postInstall
- '';
- };
+in
-in pkgs.lib.recurseIntoAttrs {
- qemu-virt = pkgs.callPackage ./qemu-virt { inherit mkKernel; };
-}
+nixpkgs.lib.recurseIntoAttrs { qemu-virt = mkKernel ./qemu-virt; }