diff options
Diffstat (limited to 'flake.nix')
-rw-r--r-- | flake.nix | 195 |
1 files changed, 106 insertions, 89 deletions
@@ -5,105 +5,122 @@ inputs.nixpkgs.follows = "nixpkgs"; }; }; - outputs = { self, fenix-flake, flake-utils, nixpkgs }: - flake-utils.lib.eachSystem [ "aarch64-linux" "x86_64-linux" ] (system: - let - pkgsBuild = nixpkgs.legacyPackages.${system}; - pkgsHost = import nixpkgs { - inherit system; - crossSystem.config = "riscv64-unknown-none-elf"; - }; - fenix = fenix-flake.packages.${system}; + outputs = + { + self, + fenix-flake, + flake-utils, + nixpkgs, + }: + flake-utils.lib.eachSystem + [ + "aarch64-linux" + "x86_64-linux" + ] + ( + system: + let + pkgsBuild = nixpkgs.legacyPackages.${system}; + pkgsHost = import nixpkgs { + inherit system; + crossSystem.config = "riscv64-unknown-none-elf"; + }; + fenix = fenix-flake.packages.${system}; - toolchain = fenix.combine [ - fenix.stable.cargo - fenix.stable.rustc - fenix.stable.clippy - fenix.targets.riscv64gc-unknown-none-elf.stable.rust-std - ]; - rust = pkgsHost.makeRustPlatform { - cargo = toolchain; - rustc = toolchain; - }; + toolchain = fenix.combine [ + fenix.stable.cargo + fenix.stable.rustc + fenix.stable.clippy + fenix.targets.riscv64gc-unknown-none-elf.stable.rust-std + ]; + rust = pkgsHost.makeRustPlatform { + cargo = toolchain; + rustc = toolchain; + }; - packages = rec { - boards = import ./boards { - inherit libkernel; - pkgs = pkgsHost; + packages = rec { + boards = import ./boards { + inherit libkernel; + pkgs = pkgsHost; + }; + libkernel = pkgsBuild.callPackage ./kernel { inherit rust; }; }; - libkernel = pkgsBuild.callPackage ./kernel { inherit rust; }; - }; - run-vm = pkgsBuild.writeShellApplication { - name = "run-vm"; + run-vm = pkgsBuild.writeShellApplication { + name = "run-vm"; - runtimeInputs = [ pkgsBuild.qemu ]; + runtimeInputs = [ pkgsBuild.qemu ]; - text = '' - set -x - qemu-system-riscv64 \ - -machine virt \ - -m 1G \ - -nographic \ - -bios none \ - -kernel ${packages.boards.qemu-virt}/kernel.elf \ - "$@" - ''; - }; - in { - apps = { - default = { - type = "app"; - program = pkgsBuild.lib.getExe run-vm; + text = '' + set -x + qemu-system-riscv64 \ + -machine virt \ + -m 1G \ + -nographic \ + -bios none \ + -kernel ${packages.boards.qemu-virt}/kernel.elf \ + "$@" + ''; }; + in + { + apps = { + default = { + type = "app"; + program = pkgsBuild.lib.getExe run-vm; + }; - run = { - type = "app"; - program = pkgsBuild.lib.getExe run-vm; - }; + run = { + type = "app"; + program = pkgsBuild.lib.getExe run-vm; + }; - debug = { - type = "app"; - program = pkgsBuild.lib.getExe (pkgsBuild.writeShellApplication { - name = "run-vm-debug"; - runtimeInputs = [ run-vm ]; - text = '' - port=$(( 1000 * ("$(id -u)" - 990) )) - run-vm -gdb tcp::$port -S "$@" - ''; - }); - }; + debug = { + type = "app"; + program = pkgsBuild.lib.getExe ( + pkgsBuild.writeShellApplication { + name = "run-vm-debug"; + runtimeInputs = [ run-vm ]; + text = '' + port=$(( 1000 * ("$(id -u)" - 990) )) + run-vm -gdb tcp::$port -S "$@" + ''; + } + ); + }; - gdb = { - type = "app"; - program = pkgsBuild.lib.getExe (pkgsBuild.writeShellApplication { - name = "gdb"; - runtimeInputs = [ toolchain ]; - text = '' - port=$(( 1000 * ("$(id -u)" - 990) )) - rust-gdb ${packages.boards.qemu-virt}/kernel.elf \ - -ex "target remote 127.0.0.1:$port" \ - -ex "set riscv use-compressed-breakpoints yes" \ - -ex "layout asm" \ - -ex "layout regs" \ - -ex "focus cmd" \ - -ex "tbreak hart0_boot" \ - -ex "c" - ''; - }); + gdb = { + type = "app"; + program = pkgsBuild.lib.getExe ( + pkgsBuild.writeShellApplication { + name = "gdb"; + runtimeInputs = [ toolchain ]; + text = '' + port=$(( 1000 * ("$(id -u)" - 990) )) + rust-gdb ${packages.boards.qemu-virt}/kernel.elf \ + -ex "target remote 127.0.0.1:$port" \ + -ex "set riscv use-compressed-breakpoints yes" \ + -ex "layout asm" \ + -ex "layout regs" \ + -ex "focus cmd" \ + -ex "tbreak hart0_boot" \ + -ex "c" + ''; + } + ); + }; }; - }; - devShells.default = pkgsBuild.mkShell { - inputsFrom = - builtins.attrValues (flake-utils.lib.flattenTree packages); - nativeBuildInputs = [ - pkgsBuild.cargo-watch - pkgsBuild.qemu - pkgsHost.stdenv.cc.bintools.bintools - ]; - CARGO_BUILD_TARGET = "riscv64gc-unknown-none-elf"; - }; + devShells.default = pkgsBuild.mkShell { + inputsFrom = builtins.attrValues (flake-utils.lib.flattenTree packages); + nativeBuildInputs = [ + pkgsBuild.cargo-watch + pkgsBuild.qemu + pkgsHost.stdenv.cc.bintools.bintools + ]; + CARGO_BUILD_TARGET = "riscv64gc-unknown-none-elf"; + }; - packages = flake-utils.lib.flattenTree packages; - }); + packages = flake-utils.lib.flattenTree packages; + } + ); } |