about summary refs log tree commit diff
path: root/pkgs/development/python-modules/nmigen/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/python-modules/nmigen/default.nix')
-rw-r--r--pkgs/development/python-modules/nmigen/default.nix65
1 files changed, 65 insertions, 0 deletions
diff --git a/pkgs/development/python-modules/nmigen/default.nix b/pkgs/development/python-modules/nmigen/default.nix
new file mode 100644
index 000000000000..7375eda43271
--- /dev/null
+++ b/pkgs/development/python-modules/nmigen/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, buildPythonPackage
+, pythonOlder
+, fetchFromGitHub
+, pyvcd
+, bitarray
+, jinja2
+
+# nmigen.{test,build} call out to these
+, yosys
+, symbiyosys
+, nextpnr ? null
+, icestorm ? null
+, trellis ? null
+
+# for tests
+, yices
+}:
+
+buildPythonPackage rec {
+  pname = "nmigen";
+  version = "unstable-2019-08-31";
+  realVersion = lib.substring 0 7 src.rev;
+
+  src = fetchFromGitHub {
+    owner = "m-labs";
+    repo = "nmigen";
+    rev = "2e206220462c67aa6ae97f7515a2191440fd61b3";
+    sha256 = "0y3w6vd493jqm9b8ppgwzs02v1al8w1n5gylljlsw70ci7fyk4qa";
+  };
+
+  disabled = pythonOlder "3.6";
+
+  propagatedBuildInputs = [ pyvcd bitarray jinja2 ];
+
+  checkInputs = [ yosys yices ];
+
+  postPatch = let
+    tool = pkg: name:
+      if pkg == null then {} else { "${name}" = "${pkg}/bin/${name}"; };
+
+    # Only FOSS toolchain supported out of the box, sorry!
+    toolchainOverrides =
+      tool yosys "yosys" //
+      tool symbiyosys "sby" //
+      tool nextpnr "nextpnr-ice40" //
+      tool nextpnr "nextpnr-ecp5" //
+      tool icestorm "icepack" //
+      tool trellis "ecppack";
+  in ''
+    substituteInPlace setup.py \
+      --replace 'versioneer.get_version()' '"${realVersion}"'
+
+    substituteInPlace nmigen/_toolchain.py \
+      --replace 'overrides = {}' \
+                'overrides = ${builtins.toJSON toolchainOverrides}'
+  '';
+
+  meta = with lib; {
+    description = "A refreshed Python toolbox for building complex digital hardware";
+    homepage = https://github.com/m-labs/nmigen;
+    license = licenses.bsd0;
+    maintainers = with maintainers; [ emily ];
+  };
+}