This commit is contained in:
saji 2025-02-07 09:17:26 -06:00
parent f4cc382020
commit 7ef2f89307
20 changed files with 292 additions and 139 deletions

View file

@ -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"
}
}
},

110
flake.nix
View file

@ -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 @@
];
};
});
};
};
}

View file

@ -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) { };
})
];
}

11
pkgs/default.nix Normal file
View file

@ -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;
}

View file

@ -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=";
};

View file

@ -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 = [

View file

@ -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=";
};

View file

@ -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=";
};

View file

@ -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=";
};

View file

@ -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 = [

View file

@ -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=";
};

View file

@ -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=";
};

View file

@ -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=";
};

0
readme.md Normal file
View file

View file

@ -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.
];
};
});
};
}

6
treefmt.nix Normal file
View file

@ -0,0 +1,6 @@
{ pkgs, ... }:
{
# Used to find the project root
projectRootFile = "flake.nix";
programs.nixfmt.enable = true;
}