diff --git a/flake.lock b/flake.lock index 6294073..d493fdd 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "nixpkgs": { "locked": { - "lastModified": 1712791164, - "narHash": "sha256-3sbWO1mbpWsLepZGbWaMovSO7ndZeFqDSdX0hZ9nVyw=", + "lastModified": 1738680400, + "narHash": "sha256-ooLh+XW8jfa+91F1nhf9OF7qhuA/y1ChLx6lXDNeY5U=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "1042fd8b148a9105f3c0aca3a6177fd1d9360ba5", + "rev": "799ba5bffed04ced7067a91798353d360788b30d", "type": "github" }, "original": { @@ -16,9 +16,44 @@ "type": "github" } }, + "nixpkgs_2": { + "locked": { + "lastModified": 1735554305, + "narHash": "sha256-zExSA1i/b+1NMRhGGLtNfFGXgLtgo+dcuzHzaWA6w3Q=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "0e82ab234249d8eee3e8c91437802b32c74bb3fd", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, "root": { "inputs": { - "nixpkgs": "nixpkgs" + "nixpkgs": "nixpkgs", + "treefmt-nix": "treefmt-nix" + } + }, + "treefmt-nix": { + "inputs": { + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1738680491, + "narHash": "sha256-8X7tR3kFGkE7WEF5EXVkt4apgaN85oHZdoTGutCFs6I=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "64dbb922d51a42c0ced6a7668ca008dded61c483", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" } } }, diff --git a/flake.nix b/flake.nix index bf6c3da..00b4ce5 100644 --- a/flake.nix +++ b/flake.nix @@ -3,48 +3,84 @@ inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + treefmt-nix.url = "github:numtide/treefmt-nix"; }; - outputs = inputs@{ nixpkgs, ... }: + outputs = + inputs@{ + self, + nixpkgs, + treefmt-nix, + ... + }: let - # litex-overlay = final: prev: { - # pythonPackagesExtensions = prev.pythonPackagesExtensions ++ [ - # (python-final: python-prev: { - # litex = python-final.callPackage (import ./litex.nix) { }; - # # can add more packages here! - # }) - # ]; - # }; - litex-overlay = import ./litex; - systems = [ "x86_64-linux" "aarch64-linux" "aarch64-darwin" "x86_64-darwin" ]; - forAllSystems = function: - nixpkgs.lib.genAttrs systems (system: function ( - import nixpkgs { - inherit system; - config.allowUnfree = true; - overlays = [ - litex-overlay - ]; # patches, version pins, new pkgs here. - } - )); - in { + + systems = [ + "x86_64-linux" + "aarch64-linux" + "aarch64-darwin" + "x86_64-darwin" + ]; + forAllSystems = + function: + nixpkgs.lib.genAttrs systems ( + system: + function ( + import nixpkgs { + inherit system; + config.allowUnfree = true; + overlays = [ + self.overlays.default + ]; + } + ) + ); + litex-pkgs = import ./pkgs; + + treefmtEval = forAllSystems (pkgs: treefmt-nix.lib.evalModule pkgs ./treefmt.nix); + in + { + overlays.default = final: prev: { + pythonPackagesExtensions = prev.pythonPackagesExtensions ++ [ + ( + python-final: python-prev: + builtins.mapAttrs (name: value: python-final.callPackage value { }) litex-pkgs + ) + ]; + }; + + formatter = forAllSystems (pkgs: treefmtEval.${pkgs.system}.config.build.wrapper); + + checks = forAllSystems (pkgs: { + formatting = treefmtEval.${pkgs.system}.config.build.check self; + }); + + # this is mainly so that nix-update works. I have no idea if this works without it. + # use at your own peril. + packages = forAllSystems ( + pkgs: builtins.mapAttrs (name: value: pkgs.python3Packages.callPackage value { }) litex-pkgs + ); + + # example, not really something you should import unless you want everything. devShells = forAllSystems (pkgs: { default = pkgs.mkShell { packages = with pkgs; [ - (python3.withPackages (ps: with ps; [ - cocotb - cocotb-bus - litex - litedram - liteeth - litescope - litespi - liteiclink - pythondata-cpu-vexriscv - pythondata-software-compiler_rt - pythondata-software-picolibc - amaranth - ])) + (python3.withPackages ( + ps: with ps; [ + cocotb + cocotb-bus + litex + litedram + liteeth + litescope + litespi + liteiclink + pythondata-cpu-vexriscv + pythondata-software-compiler_rt + pythondata-software-picolibc + amaranth + ] + )) yosys nextpnr # simulators @@ -58,5 +94,5 @@ ]; }; }); - }; + }; } diff --git a/litex/default.nix b/litex/default.nix deleted file mode 100644 index 3e9ed12..0000000 --- a/litex/default.nix +++ /dev/null @@ -1,19 +0,0 @@ -# an overlay to -let - tag = "2023.12"; -in final: prev: { - pythonPackagesExtensions = prev.pythonPackagesExtensions ++ [ - (python-final: python-prev: { - litex = python-final.callPackage(import ./litex.nix tag) { }; - litedram = python-final.callPackage(import ./litedram.nix tag) { }; - liteeth = python-final.callPackage(import ./liteeth.nix tag) { }; - litescope = python-final.callPackage(import ./litescope.nix tag) { }; - litespi = python-final.callPackage(import ./litespi.nix tag) { }; - liteiclink = python-final.callPackage(import ./liteiclink.nix tag) { }; - pythondata-cpu-vexriscv = python-final.callPackage(import ./pythondata-cpu-vexriscv.nix tag) { }; - pythondata-software-compiler_rt = python-final.callPackage(import ./pythondata-software-compiler_rt.nix tag) { }; - pythondata-software-picolibc = python-final.callPackage(import ./pythondata-software-picolibc.nix tag) { }; - }) - ]; -} - diff --git a/pkgs/default.nix b/pkgs/default.nix new file mode 100644 index 0000000..8a6d0da --- /dev/null +++ b/pkgs/default.nix @@ -0,0 +1,11 @@ +{ + litex = import ./litex.nix; + litedram = import ./litedram.nix; + liteeth = import ./liteeth.nix; + litescope = import ./litescope.nix; + litespi = import ./litespi.nix; + liteiclink = import ./liteiclink.nix; + pythondata-cpu-vexriscv = import ./pythondata-cpu-vexriscv.nix; + pythondata-software-compiler_rt = import ./pythondata-software-compiler_rt.nix; + pythondata-software-picolibc = import ./pythondata-software-picolibc.nix; +} diff --git a/litex/litedram.nix b/pkgs/litedram.nix similarity index 68% rename from litex/litedram.nix rename to pkgs/litedram.nix index 7eb6c18..7a09061 100644 --- a/litex/litedram.nix +++ b/pkgs/litedram.nix @@ -1,17 +1,18 @@ -tag: { - pkgs -, lib -, buildPythonPackage -, migen -, pyyaml -}: buildPythonPackage { +{ + pkgs, + lib, + buildPythonPackage, + migen, + pyyaml, +}: +buildPythonPackage rec { pname = "litedram"; - version = "${tag}"; + version = "2023.12"; src = pkgs.fetchFromGitHub { owner = "enjoy-digital"; repo = "litedram"; - rev = "${tag}"; + rev = "${version}"; hash = "sha256-EaUszy0v6r5sKM5d5YmpRbR8Cf9xITObU71zUpg9cLU="; }; diff --git a/litex/liteeth.nix b/pkgs/liteeth.nix similarity index 57% rename from litex/liteeth.nix rename to pkgs/liteeth.nix index dfb1f43..84ef19f 100644 --- a/litex/liteeth.nix +++ b/pkgs/liteeth.nix @@ -1,20 +1,21 @@ -tag: { - pkgs -, lib -, buildPythonPackage -, migen -, setuptools -, litex -, pyyaml -}: buildPythonPackage { +{ + pkgs, + lib, + buildPythonPackage, + migen, + setuptools, + litex, + pyyaml, +}: +buildPythonPackage rec { pname = "liteeth"; - version = "${tag}"; + version = "2024.12"; src = pkgs.fetchFromGitHub { owner = "enjoy-digital"; repo = "liteeth"; - rev = "${tag}"; - hash = "sha256-DUNwDzcFLVmL5F/ZWmok7T7jO7ixC9IuDr1WUarnAqk="; + rev = "${version}"; + hash = "sha256-qyyw/NEI21o+lkm8q9vT7O9PLkTgObe/xZKeFvy/4/4="; }; buildInputs = [ diff --git a/litex/liteiclink.nix b/pkgs/liteiclink.nix similarity index 71% rename from litex/liteiclink.nix rename to pkgs/liteiclink.nix index f6a32b7..eba1182 100644 --- a/litex/liteiclink.nix +++ b/pkgs/liteiclink.nix @@ -1,15 +1,16 @@ -tag: { - pkgs -, buildPythonPackage -, litex -}: buildPythonPackage { +{ + pkgs, + buildPythonPackage, + litex, +}: +buildPythonPackage rec { pname = "liteiclink"; - version = "${tag}"; + version = "2023.12"; src = pkgs.fetchFromGitHub { owner = "enjoy-digital"; repo = "liteiclink"; - rev = "${tag}"; + rev = "${version}"; hash = "sha256-5Hp5vFqmfkXo1q60FvOkToTy952svirChIPIvkam04M="; }; diff --git a/litex/litescope.nix b/pkgs/litescope.nix similarity index 66% rename from litex/litescope.nix rename to pkgs/litescope.nix index a731763..3bf9121 100644 --- a/litex/litescope.nix +++ b/pkgs/litescope.nix @@ -1,18 +1,19 @@ -tag: { - pkgs -, lib -, buildPythonPackage -, migen -, setuptools -, litex -}: buildPythonPackage { +{ + pkgs, + lib, + buildPythonPackage, + migen, + setuptools, + litex, +}: +buildPythonPackage rec { pname = "litescope"; - version = "${tag}"; + version = "2023.12"; src = pkgs.fetchFromGitHub { owner = "enjoy-digital"; repo = "litescope"; - rev = "${tag}"; + rev = "${version}"; hash = "sha256-OWC+XwB+BzlCQkPKJCbQ0W4T6JbsInldrn9jYYjWypM="; }; diff --git a/litex/litespi.nix b/pkgs/litespi.nix similarity index 70% rename from litex/litespi.nix rename to pkgs/litespi.nix index 9437817..72b6e01 100644 --- a/litex/litespi.nix +++ b/pkgs/litespi.nix @@ -1,18 +1,19 @@ -tag: { - pkgs -, lib -, buildPythonPackage -, migen -, setuptools -, litex -}: buildPythonPackage { +{ + pkgs, + lib, + buildPythonPackage, + migen, + setuptools, + litex, +}: +buildPythonPackage rec { pname = "litespi"; - version = "${tag}"; + version = "2023.12"; src = pkgs.fetchFromGitHub { owner = "litex-hub"; repo = "litespi"; - rev = "${tag}"; + rev = "${version}"; hash = "sha256-XYeWokF1IGtZWRK+6jhRSN91MOV5vyh5aO08sbtFBxw="; }; diff --git a/litex/litex.nix b/pkgs/litex.nix similarity index 50% rename from litex/litex.nix rename to pkgs/litex.nix index 15255a5..19b84ad 100644 --- a/litex/litex.nix +++ b/pkgs/litex.nix @@ -1,21 +1,22 @@ -tag: { - pkgs -, lib -, buildPythonPackage -, pyserial -, migen -, requests -, packaging -, pexpect -}: buildPythonPackage { +{ + pkgs, + lib, + buildPythonPackage, + pyserial, + migen, + requests, + packaging, + pexpect, +}: +buildPythonPackage rec { pname = "litex"; - version = "${tag}"; + version = "2024.12"; src = pkgs.fetchFromGitHub { owner = "enjoy-digital"; repo = "litex"; - rev = "${tag}"; - hash = "sha256-OcwqYLQ7ec2vTewdIJqP/aTCJ4yI43OIOkTMD/hIKO0="; + rev = "${version}"; + hash = "sha256-T28kpdDstMHZtSlRrmA1JZ3lP2/3tfzEh58tU44ik7E="; }; buildInputs = [ diff --git a/litex/pythondata-cpu-vexriscv.nix b/pkgs/pythondata-cpu-vexriscv.nix similarity index 67% rename from litex/pythondata-cpu-vexriscv.nix rename to pkgs/pythondata-cpu-vexriscv.nix index 4f93207..72882ad 100644 --- a/litex/pythondata-cpu-vexriscv.nix +++ b/pkgs/pythondata-cpu-vexriscv.nix @@ -1,14 +1,15 @@ -tag: { - pkgs -, buildPythonPackage -}: buildPythonPackage rec { +{ + pkgs, + buildPythonPackage, +}: +buildPythonPackage rec { pname = "pythondata-cpu-vexriscv"; - version = "${tag}"; + version = "2023.12"; src = pkgs.fetchFromGitHub { owner = "litex-hub"; repo = "pythondata-cpu-vexriscv"; - rev = "${tag}"; + rev = "${version}"; hash = "sha256-1RgwJCYxtiP5dfRHulfTNBgu6fum6RfoqkbFIlRTgKI="; }; diff --git a/litex/pythondata-software-compiler_rt.nix b/pkgs/pythondata-software-compiler_rt.nix similarity index 69% rename from litex/pythondata-software-compiler_rt.nix rename to pkgs/pythondata-software-compiler_rt.nix index 9629e9e..5f36c1b 100644 --- a/litex/pythondata-software-compiler_rt.nix +++ b/pkgs/pythondata-software-compiler_rt.nix @@ -1,14 +1,15 @@ -tag: { - pkgs -, buildPythonPackage -}: buildPythonPackage rec { +{ + pkgs, + buildPythonPackage, +}: +buildPythonPackage rec { pname = "pythondata-software-compiler_rt"; - version = "${tag}"; + version = "2023.12"; src = pkgs.fetchFromGitHub { owner = "litex-hub"; repo = "pythondata-software-compiler_rt"; - rev = "${tag}"; + rev = "${version}"; hash = "sha256-s/tfxhPwYAnu1z1LxEimeYWjX6IHbF2uD/1HjvQn/xo="; }; diff --git a/litex/pythondata-software-picolibc.nix b/pkgs/pythondata-software-picolibc.nix similarity index 68% rename from litex/pythondata-software-picolibc.nix rename to pkgs/pythondata-software-picolibc.nix index 770b110..7c5475f 100644 --- a/litex/pythondata-software-picolibc.nix +++ b/pkgs/pythondata-software-picolibc.nix @@ -1,14 +1,15 @@ -tag: { - pkgs -, buildPythonPackage -}: buildPythonPackage rec { +{ + pkgs, + buildPythonPackage, +}: +buildPythonPackage rec { pname = "pythondata-software-picolibc"; - version = "${tag}"; + version = "2023.12"; src = pkgs.fetchFromGitHub { owner = "litex-hub"; repo = "pythondata-software-picolibc"; - rev = "${tag}"; + rev = "${version}"; hash = "sha256-5OY17BA37c6aHOvUwb0gJwXxGey4TdUiTTxJD5wuSGU="; }; diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..e69de29 diff --git a/Makefile b/templates/default/Makefile similarity index 100% rename from Makefile rename to templates/default/Makefile diff --git a/README.md b/templates/default/README.md similarity index 100% rename from README.md rename to templates/default/README.md diff --git a/templates/default/flake.nix b/templates/default/flake.nix new file mode 100644 index 0000000..dc09248 --- /dev/null +++ b/templates/default/flake.nix @@ -0,0 +1,75 @@ +{ + description = "ECP5 toolchain template project"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + }; + + outputs = + inputs@{ nixpkgs, ... }: + let + # litex-overlay = final: prev: { + # pythonPackagesExtensions = prev.pythonPackagesExtensions ++ [ + # (python-final: python-prev: { + # litex = python-final.callPackage (import ./litex.nix) { }; + # # can add more packages here! + # }) + # ]; + # }; + litex-overlay = import ./litex; + systems = [ + "x86_64-linux" + "aarch64-linux" + "aarch64-darwin" + "x86_64-darwin" + ]; + forAllSystems = + function: + nixpkgs.lib.genAttrs systems ( + system: + function ( + import nixpkgs { + inherit system; + config.allowUnfree = true; + overlays = [ + litex-overlay + ]; # patches, version pins, new pkgs here. + } + ) + ); + in + { + devShells = forAllSystems (pkgs: { + default = pkgs.mkShell { + packages = with pkgs; [ + (python3.withPackages ( + ps: with ps; [ + cocotb + cocotb-bus + litex + litedram + liteeth + litescope + litespi + liteiclink + pythondata-cpu-vexriscv + pythondata-software-compiler_rt + pythondata-software-picolibc + amaranth + ] + )) + yosys + nextpnr + # simulators + verilog + verilator + # support package + trellis + # loader + openfpgaloader + ecpdap # easier to poke probes. + ]; + }; + }); + }; +} diff --git a/src/blink.lpf b/templates/default/src/blink.lpf similarity index 100% rename from src/blink.lpf rename to templates/default/src/blink.lpf diff --git a/src/blink.v b/templates/default/src/blink.v similarity index 100% rename from src/blink.v rename to templates/default/src/blink.v diff --git a/treefmt.nix b/treefmt.nix new file mode 100644 index 0000000..9412918 --- /dev/null +++ b/treefmt.nix @@ -0,0 +1,6 @@ +{ pkgs, ... }: +{ + # Used to find the project root + projectRootFile = "flake.nix"; + programs.nixfmt.enable = true; +}