Something went wrong. Try again.
flake for building a declarative fusesoc dev environment
Something went wrong. Try again.
fusesoc-flake flake.nix
4.6 kB · 135 lines
Nix
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136{ description = "Helper for a declarative fusesoc environment";
inputs = { nixpkgs.url = "github:Nixos/nixpkgs/nixos-unstable"; };
outputs = { self, nixpkgs, ... }: let inherit (nixpkgs) lib; forEachSystem = systems: f: builtins.foldl' (lib.recursiveUpdate) { } ( map (system: builtins.mapAttrs (_: v: { ${system} = v; }) (f system)) systems ); in { overlays.default = final: _: { fusesocTools = final.callPackage ./lib/fusesocLib.nix { }; }; } // (forEachSystem [ "aarch64-darwin" "aarch64-linux" "i686-linux" "x86_64-darwin" "x86_64-linux" ] ( system: let pkgs = nixpkgs.legacyPackages.${system}; inherit (self.packages.${system}) fusesoc; inherit (self.legacyPackages.${system}) fusesocTools fusesocCores; coreList = (pkgs.callPackage ./cores/fusesoc-cores.nix { fusesocLib = fusesocTools; }) ++ (fusesocTools.importCores ( pkgs.fetchFromGitHub { name = "openrisc-cores-github"; owner = "openrisc"; repo = "openrisc-cores"; rev = "b87ad6a7799c996814200c51a7f58d27ab93818f"; hash = "sha256-R7KWnrerYV4ZA+NE6z4yWS9fgfKyUxP/LoBB0z0EOk8="; } )) ++ [ (fusesocTools.importCore { coreName = "elf-loader.core"; coreRoot = pkgs.fetchFromGitHub { name = "elf-loader-github"; owner = "fusesoc"; repo = "elf-loader"; rev = "7a8f63ae203cb8eef0cc0b96c52a1056ae2a423e"; hash = "sha256-ABzox3UanVqTJSuXuT4IEyxYQuvAxCvpzJiuaXZu8Co="; }; }) ]; in { legacyPackages = { inherit (self.packages.${system}) fusesoc; fusesocCores = fusesocTools.mkCoreSet coreList; fusesocTools = pkgs.callPackage ./lib/fusesocLib.nix { }; };
packages = { default = fusesocTools.dumpCores fusesocCores;
# fusesoc lib is accessible thru `packages.${system}.fusesoc.lib` (deprecated) fusesoc = pkgs.fusesoc.overrideAttrs ( _: prev: { passthru = prev.passthru // { lib = lib.warn "use `fusesoc-flake.legacyPackages.${system}.fusesocTools` instead of `fusesoc-flake.packages.${system}.fusesoc.lib`" ( fusesocTools // { cores = lib.warn "use `fusesoc-flake.legacyPackages.${system}.fusesocCores` instead of `fusesoc-flake.packages.${system}.fusesoc.lib.cores`" ( fusesocTools.mkCoreSet coreList ); # Bundle fusesoc "stdlib" under fusesoc.lib.cores for convenience } ); }; } ); }; devShells.default = pkgs.mkShell { packages = [ fusesoc pkgs.iverilog pkgs.verilator pkgs.icestorm pkgs.yosys pkgs.nextpnr ]; shellHook = '' export FUSESOC_CONFIG=${fusesocTools.mkConf fusesocCores} ''; }; checks = let noVendor = fusesocCores."".""; in { inherit (self.packages.${system}) default;
# Runnable flows ethmac-lint = noVendor.ethmac.run.lint.withTools [ pkgs.verilator ]; adv_debug_sys-jsp_tb = noVendor.adv_debug_sys.run.jsp_tb.withTools [ pkgs.iverilog ]; inherit ((noVendor.fifo.withTools [ pkgs.iverilog ]).run) fifo_fwft_tb dual_clock_fifo_tb fifo_tb ; "i2c-sim" = noVendor.i2c.run.sim.withTools [ pkgs.iverilog ]; servant-tinyfpga_bx = noVendor.servant.run.tinyfpga_bx.withTools [ pkgs.icestorm pkgs.yosys pkgs.nextpnr ]; blinky-tinyfpga_bx = fusesocCores.fusesoc.utils.blinky.run.tinyfpga_bx.withTools [ pkgs.icestorm pkgs.yosys pkgs.nextpnr ]; }; } ) );}