lock: 1.3.0 -> 1.3.4 (#364295)
[NixPkgs.git] / pkgs / by-name / ne / nextpnr / package.nix
blob7f49f10a542709fe70a3c67dc147c552f1fe2179
2   lib,
3   stdenv,
4   fetchFromGitHub,
5   cmake,
6   boost,
7   python3,
8   eigen,
9   python3Packages,
10   icestorm,
11   trellis,
12   llvmPackages,
14   enableGui ? false,
15   wrapQtAppsHook ? null,
16   qtbase ? null,
17   OpenGL ? null,
20 let
21   boostPython = boost.override {
22     python = python3;
23     enablePython = true;
24   };
26   pname = "nextpnr";
27   version = "0.7";
29   main_src = fetchFromGitHub {
30     owner = "YosysHQ";
31     repo = "nextpnr";
32     rev = "${pname}-${version}";
33     hash = "sha256-YIAQcCg9RjvCys1bQ3x+sTgTmnmEeXVbt9Lr6wtg1pA=";
34     name = "nextpnr";
35   };
37   test_src = fetchFromGitHub {
38     owner = "YosysHQ";
39     repo = "nextpnr-tests";
40     rev = "00c55a9eb9ea2e062b51fe0d64741412b185d95d";
41     hash = "sha256-83suMftMtnaRFq3T2/I7Uahb11WZlXhwYt6Q/rqi2Yo=";
42     name = "nextpnr-tests";
43   };
46 stdenv.mkDerivation rec {
47   inherit pname version;
49   srcs = [
50     main_src
51     test_src
52   ];
54   sourceRoot = main_src.name;
56   nativeBuildInputs = [
57     cmake
58     python3
59   ] ++ (lib.optional enableGui wrapQtAppsHook);
60   buildInputs =
61     [
62       boostPython
63       eigen
64       python3Packages.apycula
65     ]
66     ++ (lib.optional enableGui qtbase)
67     ++ (lib.optional stdenv.cc.isClang llvmPackages.openmp);
69   cmakeFlags =
70     let
71       # the specified version must always start with "nextpnr-", so add it if
72       # missing (e.g. if the user overrides with a git hash)
73       rev = main_src.rev;
74       version = if (lib.hasPrefix "nextpnr-" rev) then rev else "nextpnr-${rev}";
75     in
76     [
77       "-DCURRENT_GIT_VERSION=${version}"
78       "-DARCH=generic;ice40;ecp5;gowin;himbaechel"
79       "-DBUILD_TESTS=ON"
80       "-DICESTORM_INSTALL_PREFIX=${icestorm}"
81       "-DTRELLIS_INSTALL_PREFIX=${trellis}"
82       "-DTRELLIS_LIBDIR=${trellis}/lib/trellis"
83       "-DGOWIN_BBA_EXECUTABLE=${python3Packages.apycula}/bin/gowin_bba"
84       "-DUSE_OPENMP=ON"
85       # warning: high RAM usage
86       "-DSERIALIZE_CHIPDBS=OFF"
87       "-DHIMBAECHEL_GOWIN_DEVICES=all"
88     ]
89     ++ (lib.optional enableGui "-DBUILD_GUI=ON")
90     ++ (lib.optional (
91       enableGui && stdenv.hostPlatform.isDarwin
92     ) "-DOPENGL_INCLUDE_DIR=${OpenGL}/Library/Frameworks");
94   patchPhase = with builtins; ''
95     # use PyPy for icestorm if enabled
96     substituteInPlace ./ice40/CMakeLists.txt \
97       --replace ''\'''${PYTHON_EXECUTABLE}' '${icestorm.pythonInterp}'
98   '';
100   preBuild = ''
101     ln -s ../${test_src.name} tests
102   '';
104   doCheck = true;
106   postFixup = lib.optionalString enableGui ''
107     wrapQtApp $out/bin/nextpnr-generic
108     wrapQtApp $out/bin/nextpnr-ice40
109     wrapQtApp $out/bin/nextpnr-ecp5
110     wrapQtApp $out/bin/nextpnr-gowin
111     wrapQtApp $out/bin/nextpnr-himbaechel
112   '';
114   strictDeps = true;
116   meta = with lib; {
117     description = "Place and route tool for FPGAs";
118     homepage = "https://github.com/yosyshq/nextpnr";
119     license = licenses.isc;
120     platforms = platforms.all;
121     maintainers = with maintainers; [ thoughtpolice ];
122   };