{ inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; inputs.bscpkgs.url = "git+https://git.sr.ht/~rodarima/bscpkgs"; outputs = {self, nixpkgs, ...}@inputs: let system = "x86_64-linux"; nixosSystem = import (nixpkgs + "/nixos/lib/eval-config.nix"); mkRoots = pkgs: list: pkgs.writeText "gcroots.json" (builtins.toJSON (map (x: { drv = x; attrs = x.drvAttrs; }) list)); in { #overlay = import ./overlay.nix; nixosConfigurations = { # The qemu configuration defines a system that runs in the RISC-V # architecture, but is build from an x86 host machine. qemu = nixosSystem { specialArgs = { inherit self; }; system = "${system}"; modules = [ ./configuration.nix ./vm.nix ]; }; # Same, but disable compressed instructions qemu-nc = nixosSystem { specialArgs = { inherit self; }; system = "${system}"; modules = [ ./configuration.nix ./vm.nix ./no-compressed.nix ]; }; # FPGA Lagarto Hun CPU lagarto-hun = nixosSystem { specialArgs = { inherit self; }; system = "${system}"; modules = [ ./configuration.nix ./lagarto-hun.nix ./no-compressed.nix ]; }; # FPGA Lagarto Ox CPU lagarto-ox = nixosSystem { specialArgs = { inherit self; }; system = "${system}"; modules = [ ./configuration.nix ./lagarto-ox.nix ./no-compressed.nix ]; }; }; # A development shell with QEMU ready to boot the RISC-V system in an x86 # machine. devShells.x86_64-linux.qemu-lagarto-hun = let nixosconf = self.nixosConfigurations.qemu-nc; syspkgs = nixosconf.pkgs; toplevel = nixosconf.config.system.build.toplevel; in syspkgs.mkShell { pname = "qemu-shell"; nativeBuildInputs = with syspkgs; [ qemu e2fsprogs ]; # Here we tell the run script where to find the system NIXOS_SYSTEM_TOPLEVEL = toplevel; OPENSBI = syspkgs.opensbi-uboot; }; devShells.x86_64-linux.lagarto-hun = let nixosconf = self.nixosConfigurations.lagarto-hun; syspkgs = nixosconf.pkgs; build = nixosconf.config.system.build; in syspkgs.mkShell { pname = "lagarto-hun-shell"; COMMIT = if self ? rev then self.rev else "dirty"; TOPLEVEL = build.toplevel; OPENSBI = syspkgs.opensbi; KERNEL = build.kernel; INITRD = build.initialRamdisk; ROOTFS = build.sdImage; UBOOT_ENV = syspkgs.uboot-env; shellHook = '' echo "Here are the current system pieces:" echo " COMMIT = $COMMIT" echo " TOPLEVEL = $TOPLEVEL" echo " KERNEL = $KERNEL" echo " OPENSBI = $OPENSBI" echo " INITRD = $INITRD" echo " ROOTFS = $ROOTFS" echo " UBOOT_ENV = $UBOOT_ENV" ''; }; devShells.x86_64-linux.lagarto-ox = let nixosconf = self.nixosConfigurations.lagarto-ox; syspkgs = nixosconf.pkgs; build = nixosconf.config.system.build; in syspkgs.mkShell rec { pname = "lagarto-ox-shell"; COMMIT = if self ? rev then self.rev else "dirty"; TOPLEVEL = build.toplevel; OPENSBI = syspkgs.opensbi; KERNEL = build.kernel; INITRD = build.initialRamdisk; ROOTFS = build.sdImage; UBOOT_ENV = syspkgs.uboot-env; BITSTREAM = syspkgs.bitstream; BOOTROM = syspkgs.bootrom; GCROOT = mkRoots syspkgs [ syspkgs.stdenv KERNEL OPENSBI syspkgs.riscv-tools ]; shellHook = '' echo "Here are the current system pieces:" echo " COMMIT = $COMMIT" echo " TOPLEVEL = $TOPLEVEL" echo " KERNEL = $KERNEL" echo " OPENSBI = $OPENSBI" echo " INITRD = $INITRD" echo " ROOTFS = $ROOTFS" echo " UBOOT_ENV = $UBOOT_ENV" echo " BITSTREAM = $BITSTREAM" echo " BOOTROM = $BOOTROM" echo " GCROOT = $GCROOT" ''; }; devShells.x86_64-linux.lagarto-ox-rd = let nixosconf = self.nixosConfigurations.lagarto-ox; syspkgs = nixosconf.pkgs; in self.outputs.devShells.x86_64-linux.lagarto-ox.overrideAttrs (old:{ TOPLEVEL = ""; ROOTFS = ""; GCROOT = mkRoots syspkgs [ syspkgs.stdenv old.OPENSBI ]; }); devShells.x86_64-linux.default = self.outputs.devShells.x86_64-linux.lagarto-ox-rd; }; }