diff options
Diffstat (limited to 'boards/default.nix')
-rw-r--r-- | boards/default.nix | 72 |
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; } |