1{ lib
2, buildPythonPackage
3, pythonOlder
4, fetchFromGitHub
5, fetchpatch
6, setuptools
7, setuptools-scm
8, pyvcd
9, jinja2
10, importlib-resources
11, importlib-metadata
12, git
13
14# for tests
15, pytestCheckHook
16, symbiyosys
17, yices
18, yosys
19}:
20
21buildPythonPackage rec {
22 pname = "amaranth";
23 version = "0.3";
24 # python setup.py --version
25 realVersion = "0.3";
26 disabled = pythonOlder "3.6";
27
28 src = fetchFromGitHub {
29 owner = "amaranth-lang";
30 repo = "amaranth";
31 rev = "39a83f4d995d16364cc9b99da646ff8db6394166";
32 sha256 = "P9AG3t30eGeeCN5+t7mjhRoOWIGZVzWQji9eYXphjA0=";
33 };
34
35 patches = [
36 (fetchpatch {
37 name = "fix-for-setuptools-64.0.2-preparation.patch";
38 url = "https://github.com/amaranth-lang/amaranth/commit/64771a065a280fa683c1e6692383bec4f59f20fa.patch";
39 hash = "sha256-Rsh9vVvUQj9nIcrsRirmR6XwFrfZ2VMaYJ4RCQ8sBE0=";
40 # This commit removes support for Python 3.6, which is unnecessary to fix
41 # the build when using new setuptools. Include only one file, which has a
42 # harmless comment change so that the subsequent patch applies cleanly.
43 includes = ["amaranth/_toolchain/cxx.py"];
44 })
45 (fetchpatch {
46 name = "fix-for-setuptools-64.0.2.patch";
47 url = "https://github.com/amaranth-lang/amaranth/pull/722/commits/e5a56b07c568e5f4cc2603eefebd14c5cc4e13d8.patch";
48 hash = "sha256-C8FyMSKHA7XsEMpO9eYNZx/X5rGaK7p3eXP+jSb6wVg=";
49 })
50 ];
51
52 SETUPTOOLS_SCM_PRETEND_VERSION="${realVersion}";
53
54 nativeBuildInputs = [
55 git
56 setuptools-scm
57 ];
58
59 propagatedBuildInputs = [
60 jinja2
61 pyvcd
62 setuptools
63 ] ++
64 lib.optional (pythonOlder "3.9") importlib-resources ++
65 lib.optional (pythonOlder "3.8") importlib-metadata;
66
67 checkInputs = [
68 pytestCheckHook
69 symbiyosys
70 yices
71 yosys
72 ];
73
74 postPatch = ''
75 substituteInPlace setup.py \
76 --replace "Jinja2~=2.11" "Jinja2>=2.11" \
77 --replace "pyvcd~=0.2.2" "pyvcd"
78
79 # jinja2.contextfunction was removed in jinja2 v3.1
80 substituteInPlace amaranth/build/plat.py \
81 --replace "@jinja2.contextfunction" "@jinja2.pass_context"
82 '';
83
84 pythonImportsCheck = [ "amaranth" ];
85
86 meta = with lib; {
87 description = "A modern hardware definition language and toolchain based on Python";
88 homepage = "https://amaranth-lang.org/docs/amaranth";
89 license = licenses.bsd2;
90 maintainers = with maintainers; [ emily thoughtpolice ];
91 };
92}