Get further building for versa ecp5
[soc.git] / flake.nix
1 # The license for this file is included in the `nix` directory next to this file.
2
3 {
4 description = "FOSS CPU/GPU/VPU/SoC all in one, see https://libre-soc.org/";
5
6 inputs.nixpkgs.url = "github:L-as/nixpkgs?ref=libresoc"; # for alliance and migen
7 inputs.c4m-jtag.url = "git+https://git.libre-soc.org/git/c4m-jtag.git";
8 inputs.c4m-jtag.flake = false;
9 inputs.nmigen.url = "git+https://git.libre-soc.org/git/nmigen.git";
10 inputs.nmigen.flake = false;
11 inputs.nmigen-soc.url = "git+https://git.libre-soc.org/git/nmigen-soc.git";
12 inputs.nmigen-soc.flake = false;
13 inputs.migen.url = "github:m-labs/migen";
14 inputs.migen.flake = false;
15 inputs.nix-litex.url = "git+https://git.sr.ht/~lschuermann/nix-litex?ref=main";
16 inputs.nix-litex.flake = false;
17
18 outputs = { self, nixpkgs, c4m-jtag, nmigen, nmigen-soc, nix-litex, migen }:
19 let
20 getv = x: builtins.substring 0 8 x.lastModifiedDate;
21
22 supportedSystems = [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin" ];
23
24 forAllSystems = nixpkgs.lib.genAttrs supportedSystems;
25
26 litex = pkgs: import "${nix-litex}/pkgs" {
27 inherit pkgs;
28 pkgMetas = builtins.fromTOML (builtins.readFile ./nix/litex.toml);
29 skipChecks = true; # FIXME: remove once checks work
30 };
31
32 nixpkgsFor = forAllSystems (system: import nixpkgs { inherit system; overlays = [ self.overlay ]; });
33
34 lib = nixpkgs.lib;
35 in
36 {
37 overlay = final: prev: {
38 python37Packages = prev.python37Packages.override {
39 overrides = lib.composeExtensions (litex final).pythonOverlay (pfinal: pprev: {
40 libresoc-ieee754fpu = pfinal.callPackage ./nix/ieee754fpu.nix {};
41 libresoc-openpower-isa = pfinal.callPackage ./nix/openpower-isa.nix {};
42 c4m-jtag = pfinal.callPackage (import ./nix/c4m-jtag.nix { src = c4m-jtag; version = getv c4m-jtag; }) {};
43 bigfloat = pfinal.callPackage ./nix/bigfloat.nix {};
44 modgrammar = pfinal.callPackage ./nix/modgrammar.nix {};
45 libresoc-nmutil = pfinal.callPackage ./nix/nmutil.nix {};
46 libresoc-soc = pfinal.callPackage (import ./nix/soc.nix { version = getv self; }) {};
47
48 nmigen-soc = pprev.nmigen-soc.overrideAttrs (_: {
49 doCheck = false;
50 src = nmigen-soc;
51 setuptoolsCheckPhase = "true";
52 });
53
54 nmigen = pprev.nmigen.overrideAttrs (_: {
55 src = nmigen;
56 });
57
58 migen = pprev.migen.overrideAttrs (_: {
59 src = migen;
60 });
61 });
62 };
63
64 libresoc-pre-litex = final.callPackage (import ./nix/pre-litex.nix { version = getv self; }) { python3Packages = final.python37Packages; };
65 libresoc-ls180 = final.callPackage (import ./nix/ls180.nix { version = getv self; }) { python3Packages = final.python37Packages; };
66 libresoc-ecp5 = final.callPackage (import ./nix/ecp5.nix { version = getv self; }) { python3Packages = final.python37Packages; };
67 libresoc-pinmux = final.callPackage (import ./nix/pinmux.nix { version = getv self; }) {};
68 };
69
70 packages = forAllSystems (system: {
71 soc = nixpkgsFor.${system}.python37Packages.libresoc-soc;
72 pre-litex = nixpkgsFor.${system}.libresoc-pre-litex;
73 pinmux = nixpkgsFor.${system}.libresoc-pinmux;
74 ls180 = nixpkgsFor.${system}.libresoc-ls180;
75 ecp5 = nixpkgsFor.${system}.libresoc-ecp5;
76 openpower-isa = nixpkgsFor.${system}.python37Packages.libresoc-openpower-isa;
77 debugNixpkgs = nixpkgsFor.${system};
78 });
79
80 defaultPackage = forAllSystems (system: self.packages.${system}.pre-litex);
81 };
82 }