summaryrefslogtreecommitdiffstats
path: root/pkgs/applications/editors/quartus-prime
diff options
context:
space:
mode:
authorKai Wohlfahrt <kai.wohlfahrt@gmail.com>2019-12-11 21:25:48 +0000
committerKai Wohlfahrt <kai.wohlfahrt@gmail.com>2020-01-15 21:15:39 +0000
commit38e6c845dcaf8b0b2c4526ce7fe25f954a840883 (patch)
treea7e43e9f59ede97d359965c1c7dc939b13dc54f0 /pkgs/applications/editors/quartus-prime
parent733113ed97e07d4f6461f4201e3302523b4d6157 (diff)
quartus: init at 19.1.0.670
This requires a FHSUserEnv because the licensing executable checksums itself (I think). The override of libpng is a bit ugly, can this be cleaned up?
Diffstat (limited to 'pkgs/applications/editors/quartus-prime')
-rw-r--r--pkgs/applications/editors/quartus-prime/default.nix119
-rw-r--r--pkgs/applications/editors/quartus-prime/vsim.patch11
2 files changed, 130 insertions, 0 deletions
diff --git a/pkgs/applications/editors/quartus-prime/default.nix b/pkgs/applications/editors/quartus-prime/default.nix
new file mode 100644
index 000000000000..6a6ea80ca458
--- /dev/null
+++ b/pkgs/applications/editors/quartus-prime/default.nix
@@ -0,0 +1,119 @@
+{ buildFHSUserEnv, makeDesktopItem, stdenv, lib, requireFile, unstick, cycloneVSupport ? true }:
+
+let
+ quartus = stdenv.mkDerivation rec {
+ version = "19.1.0.670";
+ pname = "quartus-prime-lite";
+
+ src = let
+ require = {name, sha256}: requireFile {
+ inherit name sha256;
+ url = "${meta.homepage}/${lib.versions.majorMinor version}/?edition=lite&platform=linux";
+ };
+ in map require ([{
+ name = "QuartusLiteSetup-${version}-linux.run";
+ sha256 = "15vxvqxqdk29ahlw3lkm1nzxyhzy4626wb9s5f2h6sjgq64r8m7f";
+ } {
+ name = "ModelSimSetup-${version}-linux.run";
+ sha256 = "0j1vfr91jclv88nam2plx68arxmz4g50sqb840i60wqd5b0l3y6r";
+ }] ++ lib.optional cycloneVSupport {
+ name = "cyclonev-${version}.qdz";
+ sha256 = "0bqxpvjgph0y6slk0jq75mcqzglmqkm0jsx10y9xz5llm6zxzqab";
+ });
+
+ nativeBuildInputs = [ unstick ];
+
+ buildCommand = let
+ installers = lib.sublist 0 2 src;
+ components = lib.sublist 2 ((lib.length src) - 2) src;
+ copyInstaller = installer: ''
+ # `$(cat $NIX_CC/nix-support/dynamic-linker) $src[0]` often segfaults, so cp + patchelf
+ cp ${installer} $TEMP/${installer.name}
+ chmod u+w,+x $TEMP/${installer.name}
+ patchelf --interpreter $(cat $NIX_CC/nix-support/dynamic-linker) $TEMP/${installer.name}
+ '';
+ copyComponent = component: "cp ${component} $TEMP/${component.name}";
+ # leaves enabled: quartus, modelsim_ase, devinfo
+ disabledComponents = [
+ "quartus_help"
+ "quartus_update"
+ "modelsim_ae"
+ # Devices
+ "arria_lite"
+ "cyclone"
+ "cyclone10lp"
+ "max"
+ "max10"
+ ] ++ lib.optional (!cycloneVSupport) "cyclonev";
+ in ''
+ ${lib.concatMapStringsSep "\n" copyInstaller installers}
+ ${lib.concatMapStringsSep "\n" copyComponent components}
+
+ unstick $TEMP/${(builtins.head installers).name} \
+ --disable-components ${lib.concatStringsSep "," disabledComponents} \
+ --mode unattended --installdir $out --accept_eula 1
+
+ # This patch is from https://wiki.archlinux.org/index.php/Altera_Design_Software
+ patch --force --strip 0 --directory $out < ${./vsim.patch}
+
+ rm -r $out/uninstall $out/logs
+ '';
+
+ meta = {
+ homepage = "https://fpgasoftware.intel.com";
+ description = "FPGA design and simulation software";
+ license = lib.licenses.unfree;
+ platforms = lib.platforms.linux;
+ maintainers = with lib.maintainers; [ kwohlfahrt ];
+ };
+ };
+
+ desktopItem = makeDesktopItem {
+ name = quartus.name;
+ exec = "quartus";
+ icon = "quartus";
+ desktopName = "Quartus";
+ genericName = "Quartus FPGA IDE";
+ categories = "Development;";
+ };
+
+# I think modelsim_ase/linux/vlm checksums itself, so use FHSUserEnv instead of `patchelf`
+in buildFHSUserEnv {
+ name = "quartus-prime-lite";
+
+ targetPkgs = pkgs: with pkgs; [
+ # quartus requirements
+ glib
+ xorg.libICE
+ xorg.libSM
+ zlib
+ # qsys requirements
+ xorg.libXtst
+ xorg.libXi
+ ];
+ multiPkgs = pkgs: with pkgs; let
+ # This seems ugly - can we override `libpng = libpng12` for all `pkgs`?
+ freetype = pkgs.freetype.override { libpng = libpng12; };
+ fontconfig = pkgs.fontconfig.override { inherit freetype; };
+ libXft = pkgs.xorg.libXft.override { inherit freetype fontconfig; };
+ in [
+ # modelsim requirements
+ libxml2
+ ncurses5
+ unixODBC
+ libXft
+ # common requirements
+ freetype
+ fontconfig
+ xorg.libX11
+ xorg.libXext
+ xorg.libXrender
+ ];
+
+ extraInstallCommands = ''
+ mkdir -p $out/share/applications
+ cp ${desktopItem}/share/applications/* $out/share/applications
+ '';
+
+ runScript = "${quartus}/quartus/bin/quartus";
+}
diff --git a/pkgs/applications/editors/quartus-prime/vsim.patch b/pkgs/applications/editors/quartus-prime/vsim.patch
new file mode 100644
index 000000000000..36dc41b7ef14
--- /dev/null
+++ b/pkgs/applications/editors/quartus-prime/vsim.patch
@@ -0,0 +1,11 @@
+--- modelsim_ase/vco 1970-01-01 01:00:01.000000000 +0100
++++ modelsim_ase/vco 1970-01-01 01:00:01.000000000 +0100
+@@ -207,7 +207,7 @@
+ 2.[5-9]*) vco="linux" ;;
+ 2.[1-9][0-9]*) vco="linux" ;;
+ 3.[0-9]*) vco="linux" ;;
+- *) vco="linux_rh60" ;;
++ *) vco="linux" ;;
+ esac
+ if [ ! -x "$dir/$vco/vsim" ]; then
+ if [ -x "$dir/linuxle/vsim" ]; then