Pin version of yosys
[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.yosys.url = "github:YosysHQ/yosys?rev=a58571d0fe8971cb7d3a619a31b2c21be6d75bac";
16 inputs.yosys.flake = false;
17 inputs.nix-litex.url = "git+https://git.sr.ht/~lschuermann/nix-litex?ref=main";
18 inputs.nix-litex.flake = false;
19
20 outputs = { self, nixpkgs, c4m-jtag, nmigen, nmigen-soc, nix-litex, migen, yosys }:
21 let
22 getv = x: builtins.substring 0 8 x.lastModifiedDate;
23
24 supportedSystems = [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin" ];
25
26 forAllSystems = nixpkgs.lib.genAttrs supportedSystems;
27
28 litex = pkgs: import "${nix-litex}/pkgs" {
29 inherit pkgs;
30 pkgMetas = builtins.fromTOML (builtins.readFile ./nix/litex.toml);
31 skipChecks = true; # FIXME: remove once checks work
32 };
33
34 nixpkgsFor = forAllSystems (system: import nixpkgs { inherit system; overlays = [ self.overlay ]; });
35
36 lib = nixpkgs.lib;
37 in
38 {
39 overlay = final: prev: {
40 python37Packages = prev.python37Packages.override {
41 overrides = lib.composeExtensions (litex final).pythonOverlay (pfinal: pprev: {
42 libresoc-ieee754fpu = pfinal.callPackage ./nix/ieee754fpu.nix {};
43 libresoc-openpower-isa = pfinal.callPackage ./nix/openpower-isa.nix {};
44 c4m-jtag = pfinal.callPackage (import ./nix/c4m-jtag.nix { src = c4m-jtag; version = getv c4m-jtag; }) {};
45 bigfloat = pfinal.callPackage ./nix/bigfloat.nix {};
46 modgrammar = pfinal.callPackage ./nix/modgrammar.nix {};
47 libresoc-nmutil = pfinal.callPackage ./nix/nmutil.nix {};
48 libresoc-soc = pfinal.callPackage (import ./nix/soc.nix { version = getv self; }) {};
49
50 nmigen-soc = pprev.nmigen-soc.overrideAttrs (_: {
51 doCheck = false;
52 src = nmigen-soc;
53 setuptoolsCheckPhase = "true";
54 });
55
56 nmigen = pprev.nmigen.overrideAttrs (_: {
57 src = nmigen;
58 });
59
60 migen = pprev.migen.overrideAttrs (_: {
61 src = migen;
62 });
63 });
64 };
65
66 yosys = prev.yosys.overrideAttrs (_: {
67 version = "0.9+4052";
68 src = yosys;
69 });
70
71 libresoc-pre-litex = final.callPackage (import ./nix/pre-litex.nix { version = getv self; }) { python3Packages = final.python37Packages; };
72 libresoc-ls180 = final.callPackage (import ./nix/ls180.nix { version = getv self; }) { python3Packages = final.python37Packages; };
73 libresoc-ecp5 = final.callPackage (import ./nix/ecp5.nix { version = getv self; }) { python3Packages = final.python37Packages; };
74 libresoc-pinmux = final.callPackage (import ./nix/pinmux.nix { version = getv self; }) {};
75 };
76
77 packages = forAllSystems (system: {
78 soc = nixpkgsFor.${system}.python37Packages.libresoc-soc;
79 pre-litex = nixpkgsFor.${system}.libresoc-pre-litex;
80 pinmux = nixpkgsFor.${system}.libresoc-pinmux;
81 ls180 = nixpkgsFor.${system}.libresoc-ls180;
82 ecp5 = nixpkgsFor.${system}.libresoc-ecp5;
83 openpower-isa = nixpkgsFor.${system}.python37Packages.libresoc-openpower-isa;
84 debugNixpkgs = nixpkgsFor.${system};
85 });
86
87 defaultPackage = forAllSystems (system: self.packages.${system}.pre-litex);
88 };
89 }