about summary refs log tree commit diff
path: root/pkgs/development/compilers/nextpnr
diff options
context:
space:
mode:
authorAustin Seipp <aseipp@pobox.com>2019-01-12 15:31:17 -0600
committerAustin Seipp <aseipp@pobox.com>2019-01-12 15:51:00 -0600
commit3d36ea6a051c1c4e2f37011ad8f4ff1b9ce0e2dc (patch)
tree46448bc534bf4e53581d8a5b9596d9b1f6d123d7 /pkgs/development/compilers/nextpnr
parent8b5e6b7711b19baded1e972f98386d1dd4bb7b14 (diff)
downloadnixlib-3d36ea6a051c1c4e2f37011ad8f4ff1b9ce0e2dc.tar
nixlib-3d36ea6a051c1c4e2f37011ad8f4ff1b9ce0e2dc.tar.gz
nixlib-3d36ea6a051c1c4e2f37011ad8f4ff1b9ce0e2dc.tar.bz2
nixlib-3d36ea6a051c1c4e2f37011ad8f4ff1b9ce0e2dc.tar.lz
nixlib-3d36ea6a051c1c4e2f37011ad8f4ff1b9ce0e2dc.tar.xz
nixlib-3d36ea6a051c1c4e2f37011ad8f4ff1b9ce0e2dc.tar.zst
nixlib-3d36ea6a051c1c4e2f37011ad8f4ff1b9ce0e2dc.zip
nextpnr: with GUI support, be sure to set QT_PLUGIN_PATH
This is to help QT find all the necessary plugin libraries at startup
time, otherwise it freaks out when run out of 'nix-env' environment or
run directly, e.g.  `./result/bin/nextpnr-ice40 --gui`. The reason for
this is that none of the traditional paths it looks for are available.
The workarounds for this are to otherwise:

  - Install e.g. into environment.systemPackages (presumably it will
then pick up QT libraries in /run/current-system/sw/lib/qt-*)

  - Install 'qtbase' into your user environment (qt will also try to
load dependent libraries out of ~/.nix-profile/lib/qt-*)

However, this QT_PLUGIN_PATH wrapping hack is used elsewhere in the
tree, presumably to mitigate these (poor) workarounds, especially for
non-NixOS users. There seems to be no downside to this.

With this, I have been able to run NextPNR's GUI on an Ubuntu 16.04
system using the 'nixGL' hack by simply running the resulting binary
from anywhere (though there seems to be some glitching artifacts in the
floorplan UI, I suspect this is due to a buggy OpenGL stack rather than
any direct problem with NextPNR or the QT libraries themselves).

This does not mark the GUI build as non-broken yet, though. That will
happen in the future after a bit more testing and splitting nextpnr into
separate minimal/GUI attributes.

Signed-off-by: Austin Seipp <aseipp@pobox.com>
Diffstat (limited to 'pkgs/development/compilers/nextpnr')
-rw-r--r--pkgs/development/compilers/nextpnr/default.nix11
1 files changed, 9 insertions, 2 deletions
diff --git a/pkgs/development/compilers/nextpnr/default.nix b/pkgs/development/compilers/nextpnr/default.nix
index cbd4d0b9f4ee..156657d61d6b 100644
--- a/pkgs/development/compilers/nextpnr/default.nix
+++ b/pkgs/development/compilers/nextpnr/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, cmake
+{ stdenv, fetchFromGitHub, cmake, makeWrapper
 , boost, python3
 , icestorm, trellis
 
@@ -36,7 +36,7 @@ stdenv.mkDerivation rec {
     sha256 = "082ac03s6164s7dwz1l9phshl8m1lizn45jykabrhks5jcccchbh";
   };
 
-  nativeBuildInputs = [ cmake ];
+  nativeBuildInputs = [ cmake makeWrapper ];
   buildInputs
      = [ boostPython python3 ]
     ++ (stdenv.lib.optional enableGui qtbase);
@@ -55,6 +55,13 @@ stdenv.mkDerivation rec {
       --replace 'git log -1 --format=%h' 'echo ${substring 0 11 src.rev}'
   '';
 
+  postInstall = stdenv.lib.optionalString enableGui ''
+    for x in generic ice40 ecp5; do
+      wrapProgram $out/bin/nextpnr-$x \
+        --prefix QT_PLUGIN_PATH : ${qtbase}/lib/qt-${qtbase.qtCompatVersion}/plugins
+    done
+  '';
+
   meta = with stdenv.lib; {
     description = "Place and route tool for FPGAs";
     homepage    = https://github.com/yosyshq/nextpnr;