From 71ca02a7ec75f90e7c57d673cb92ca3546658476 Mon Sep 17 00:00:00 2001 From: Matt Huszagh Date: Sat, 18 Jul 2020 11:50:51 -0700 Subject: [PATCH 01/14] vivado: init at 2017.2 --- .../science/electronics/vivado/builder.sh | 70 +++++++++++++++++ .../science/electronics/vivado/default.nix | 77 +++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 + 3 files changed, 149 insertions(+) create mode 100644 pkgs/applications/science/electronics/vivado/builder.sh create mode 100644 pkgs/applications/science/electronics/vivado/default.nix diff --git a/pkgs/applications/science/electronics/vivado/builder.sh b/pkgs/applications/science/electronics/vivado/builder.sh new file mode 100644 index 000000000000000..bea419200026f86 --- /dev/null +++ b/pkgs/applications/science/electronics/vivado/builder.sh @@ -0,0 +1,70 @@ +source $stdenv/setup + +echo "unpacking $src..." +mkdir extracted +tar xzf $src -C extracted --strip-components=1 + +echo "running installer..." + +cat < install_config.txt +Edition=Vivado HL WebPACK +Destination=$out/opt +Modules=Software Development Kit (SDK):1,DocNav:0,Kintex UltraScale:0,Zynq-7000:1,System Generator for DSP:0,Artix-7:1,Kintex-7:0 +InstallOptions=Acquire or Manage a License Key:0,Enable WebTalk for SDK to send usage statistics to Xilinx:0 +CreateProgramGroupShortcuts=0 +ProgramGroupFolder=Xilinx Design Tools +CreateShortcutsForAllUsers=0 +CreateDesktopShortcuts=0 +CreateFileAssociation=0 +EOF + +patchShebangs extracted + +patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \ + extracted/tps/lnx64/jre/bin/java + +mkdir -p $out/opt + +sed -i -- 's|/bin/rm|rm|g' extracted/xsetup + +# The installer will be killed as soon as it says that post install tasks have failed. +# This is required because it tries to run the unpatched scripts to check if the installation +# has succeeded. However, these scripts will fail because they have not been patched yet, +# and the installer will proceed to delete the installation if not killed. +(extracted/xsetup --agree 3rdPartyEULA,WebTalkTerms,XilinxEULA --batch Install --config install_config.txt || true) | while read line +do + [[ "${line}" == *"Execution of Pre/Post Installation Tasks Failed"* ]] && echo "killing installer!" && ((pkill -9 -f "extracted/tps/lnx64/jre/bin/java") || true) + echo ${line} +done +rm -rf extracted +# Patch installed files +patchShebangs $out/opt/Vivado/2017.2/bin +patchShebangs $out/opt/SDK/2017.2/bin +echo "Shebangs patched" +# Hack around lack of libtinfo in NixOS +ln -s $ncurses/lib/libncursesw.so.6 $out/opt/Vivado/2017.2/lib/lnx64.o/libtinfo.so.5 +ln -s $ncurses/lib/libncursesw.so.6 $out/opt/SDK/2017.2/lib/lnx64.o/libtinfo.so.5 +# Patch ELFs +for f in $out/opt/Vivado/2017.2/bin/unwrapped/lnx64.o/* +do + patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $f || true +done +for f in $out/opt/SDK/2017.2/bin/unwrapped/lnx64.o/* +do + patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $f || true +done +patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $out/opt/SDK/2017.2/eclipse/lnx64.o/eclipse +patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $out/opt/SDK/2017.2/tps/lnx64/jre/bin/java +echo "ELFs patched" +wrapProgram $out/opt/Vivado/2017.2/bin/vivado --prefix LD_LIBRARY_PATH : "$libPath" +wrapProgram $out/opt/SDK/2017.2/bin/xsdk --prefix LD_LIBRARY_PATH : "$libPath" +wrapProgram $out/opt/SDK/2017.2/eclipse/lnx64.o/eclipse --prefix LD_LIBRARY_PATH : "$libPath" +wrapProgram $out/opt/SDK/2017.2/tps/lnx64/jre/bin/java --prefix LD_LIBRARY_PATH : "$libPath" +# wrapProgram on its own will not work because of the way the Vivado script runs ./launch +# Therefore, we need Even More Patches... +sed -i -- 's|`basename "\$0"`|vivado|g' $out/opt/Vivado/2017.2/bin/.vivado-wrapped +sed -i -- 's|`basename "\$0"`|xsdk|g' $out/opt/SDK/2017.2/bin/.xsdk-wrapped +# Add vivado and xsdk to bin folder +mkdir $out/bin +ln -s $out/opt/Vivado/2017.2/bin/vivado $out/bin/vivado +ln -s $out/opt/SDK/2017.2/bin/xsdk $out/bin/xsdk diff --git a/pkgs/applications/science/electronics/vivado/default.nix b/pkgs/applications/science/electronics/vivado/default.nix new file mode 100644 index 000000000000000..8de98da98745002 --- /dev/null +++ b/pkgs/applications/science/electronics/vivado/default.nix @@ -0,0 +1,77 @@ +{ stdenv +, coreutils +, fetchurl +, patchelf +, procps +, makeWrapper +, requireFile +, ncurses5 +, zlib +, libuuid +, libSM +, libICE +, libX11 +, libXrender +, libxcb +, libXext +, libXtst +, libXi +, glib +, freetype +, gtk2 +}: + +stdenv.mkDerivation rec { + pname = "vivado"; + version = "2017.2"; + + buildInputs = [ + patchelf + procps + ncurses5 + makeWrapper + coreutils + ]; + + builder = ./builder.sh; + inherit ncurses5; + + # requireFile prevents rehashing each time, which saves time during + # rebuilds. + src = requireFile rec { + name = "Xilinx_Vivado_SDK_2017.2_0616_1.tar.gz"; + message = '' + This nix expression requires that ${name} is already part of the store. + Login to Xilinx, download from + https://www.xilinx.com/support/download.html, + rename the file to ${name}, and add it to the nix store with + "nix-prefetch-url file:///path/to/${name}". + ''; + sha256 = "06pb4wjz76wlwhhzky9vkyi4aq6775k63c2kw3j9prqdipxqzf9j"; + }; + + libPath = stdenv.lib.makeLibraryPath [ + stdenv.cc.cc + ncurses5 + zlib + libuuid + libSM + libICE + libX11 + libXrender + libxcb + libXext + libXtst + libXi + glib + freetype + gtk2 + ]; + + meta = with stdenv.lib; { + description = "Xilinx Vivado"; + homepage = "https://www.xilinx.com/products/design-tools/vivado.html"; + license = licenses.unfree; + maintainers = with maintainers; [ matthuszagh ]; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index dd2356a814711aa..e053a8a89240b70 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -12636,6 +12636,8 @@ with pkgs; viu = callPackage ../tools/graphics/viu { }; + vivado = callPackage ../applications/science/electronics/vivado { }; + vix = callPackage ../tools/misc/vix { }; vkBasalt = callPackage ../tools/graphics/vkBasalt { From 2a7de511255b054a4ab839677a97077f2f317fb2 Mon Sep 17 00:00:00 2001 From: Matt Huszagh Date: Thu, 1 Dec 2022 12:32:16 -0800 Subject: [PATCH 02/14] replace stdenv.lib with lib --- pkgs/applications/science/electronics/vivado/default.nix | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/science/electronics/vivado/default.nix b/pkgs/applications/science/electronics/vivado/default.nix index 8de98da98745002..bb972e3897f1076 100644 --- a/pkgs/applications/science/electronics/vivado/default.nix +++ b/pkgs/applications/science/electronics/vivado/default.nix @@ -1,4 +1,5 @@ { stdenv +, lib , coreutils , fetchurl , patchelf @@ -50,7 +51,7 @@ stdenv.mkDerivation rec { sha256 = "06pb4wjz76wlwhhzky9vkyi4aq6775k63c2kw3j9prqdipxqzf9j"; }; - libPath = stdenv.lib.makeLibraryPath [ + libPath = lib.makeLibraryPath [ stdenv.cc.cc ncurses5 zlib @@ -68,7 +69,7 @@ stdenv.mkDerivation rec { gtk2 ]; - meta = with stdenv.lib; { + meta = with lib; { description = "Xilinx Vivado"; homepage = "https://www.xilinx.com/products/design-tools/vivado.html"; license = licenses.unfree; From 5b45e40aac53af083d87df00e2b1381f15f304a2 Mon Sep 17 00:00:00 2001 From: Matt Huszagh Date: Fri, 2 Dec 2022 21:41:29 -0800 Subject: [PATCH 03/14] vivado: migrate builder.sh to buildPhase --- .../science/electronics/vivado/default.nix | 78 ++++++++++++++++++- 1 file changed, 77 insertions(+), 1 deletion(-) diff --git a/pkgs/applications/science/electronics/vivado/default.nix b/pkgs/applications/science/electronics/vivado/default.nix index bb972e3897f1076..d077e1b03198cbe 100644 --- a/pkgs/applications/science/electronics/vivado/default.nix +++ b/pkgs/applications/science/electronics/vivado/default.nix @@ -34,7 +34,6 @@ stdenv.mkDerivation rec { coreutils ]; - builder = ./builder.sh; inherit ncurses5; # requireFile prevents rehashing each time, which saves time during @@ -51,6 +50,83 @@ stdenv.mkDerivation rec { sha256 = "06pb4wjz76wlwhhzky9vkyi4aq6775k63c2kw3j9prqdipxqzf9j"; }; + dontUnpack = true; + + buildPhase = '' + source $stdenv/setup + + echo "unpacking $src..." + mkdir extracted + tar xzf $src -C extracted --strip-components=1 + + echo "running installer..." + + cat < install_config.txt + Edition=Vivado HL WebPACK + Destination=$out/opt + Modules=Software Development Kit (SDK):1,DocNav:0,Kintex UltraScale:0,Zynq-7000:1,System Generator for DSP:0,Artix-7:1,Kintex-7:0 + InstallOptions=Acquire or Manage a License Key:0,Enable WebTalk for SDK to send usage statistics to Xilinx:0 + CreateProgramGroupShortcuts=0 + ProgramGroupFolder=Xilinx Design Tools + CreateShortcutsForAllUsers=0 + CreateDesktopShortcuts=0 + CreateFileAssociation=0 + EOF + + patchShebangs extracted + + patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \ + extracted/tps/lnx64/jre/bin/java + + mkdir -p $out/opt + + sed -i -- 's|/bin/rm|rm|g' extracted/xsetup + + # The installer will be killed as soon as it says that post install tasks have failed. + # This is required because it tries to run the unpatched scripts to check if the installation + # has succeeded. However, these scripts will fail because they have not been patched yet, + # and the installer will proceed to delete the installation if not killed. + (extracted/xsetup --agree 3rdPartyEULA,WebTalkTerms,XilinxEULA --batch Install --config install_config.txt || true) | while read line + do + [[ "''${line}" == *"Execution of Pre/Post Installation Tasks Failed"* ]] && echo "killing installer!" && ((pkill -9 -f "extracted/tps/lnx64/jre/bin/java") || true) + echo ''${line} + done + rm -rf extracted + # Patch installed files + patchShebangs $out/opt/Vivado/2017.2/bin + patchShebangs $out/opt/SDK/2017.2/bin + echo "Shebangs patched" + # Hack around lack of libtinfo in NixOS + ln -s $ncurses/lib/libncursesw.so.6 $out/opt/Vivado/2017.2/lib/lnx64.o/libtinfo.so.5 + ln -s $ncurses/lib/libncursesw.so.6 $out/opt/SDK/2017.2/lib/lnx64.o/libtinfo.so.5 + # Patch ELFs + for f in $out/opt/Vivado/2017.2/bin/unwrapped/lnx64.o/* + do + patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $f || true + done + for f in $out/opt/SDK/2017.2/bin/unwrapped/lnx64.o/* + do + patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $f || true + done + patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $out/opt/SDK/2017.2/eclipse/lnx64.o/eclipse + patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $out/opt/SDK/2017.2/tps/lnx64/jre/bin/java + echo "ELFs patched" + wrapProgram $out/opt/Vivado/2017.2/bin/vivado --prefix LD_LIBRARY_PATH : "$libPath" + wrapProgram $out/opt/SDK/2017.2/bin/xsdk --prefix LD_LIBRARY_PATH : "$libPath" + wrapProgram $out/opt/SDK/2017.2/eclipse/lnx64.o/eclipse --prefix LD_LIBRARY_PATH : "$libPath" + wrapProgram $out/opt/SDK/2017.2/tps/lnx64/jre/bin/java --prefix LD_LIBRARY_PATH : "$libPath" + # wrapProgram on its own will not work because of the way the Vivado script runs ./launch + # Therefore, we need Even More Patches... + sed -i -- 's|`basename "\$0"`|vivado|g' $out/opt/Vivado/2017.2/bin/.vivado-wrapped + sed -i -- 's|`basename "\$0"`|xsdk|g' $out/opt/SDK/2017.2/bin/.xsdk-wrapped + # Add vivado and xsdk to bin folder + mkdir $out/bin + ln -s $out/opt/Vivado/2017.2/bin/vivado $out/bin/vivado + ln -s $out/opt/SDK/2017.2/bin/xsdk $out/bin/xsdk + ''; + + dontInstall = true; + libPath = lib.makeLibraryPath [ stdenv.cc.cc ncurses5 From cb4b3b1c821f4fd222fd1166cbd00abdfcd5e9d6 Mon Sep 17 00:00:00 2001 From: Matt Huszagh Date: Fri, 2 Dec 2022 21:52:23 -0800 Subject: [PATCH 04/14] vivado: don't inherit ncurses5 --- pkgs/applications/science/electronics/vivado/default.nix | 2 -- 1 file changed, 2 deletions(-) diff --git a/pkgs/applications/science/electronics/vivado/default.nix b/pkgs/applications/science/electronics/vivado/default.nix index d077e1b03198cbe..a8d21489cbfb0bb 100644 --- a/pkgs/applications/science/electronics/vivado/default.nix +++ b/pkgs/applications/science/electronics/vivado/default.nix @@ -34,8 +34,6 @@ stdenv.mkDerivation rec { coreutils ]; - inherit ncurses5; - # requireFile prevents rehashing each time, which saves time during # rebuilds. src = requireFile rec { From 8b046d8d70a37422c79a2539ef9afbb30e92a699 Mon Sep 17 00:00:00 2001 From: Matt Huszagh Date: Fri, 2 Dec 2022 21:52:46 -0800 Subject: [PATCH 05/14] vivado: no need to source $stdenv/setup --- pkgs/applications/science/electronics/vivado/default.nix | 2 -- 1 file changed, 2 deletions(-) diff --git a/pkgs/applications/science/electronics/vivado/default.nix b/pkgs/applications/science/electronics/vivado/default.nix index a8d21489cbfb0bb..b3d543a23587498 100644 --- a/pkgs/applications/science/electronics/vivado/default.nix +++ b/pkgs/applications/science/electronics/vivado/default.nix @@ -51,8 +51,6 @@ stdenv.mkDerivation rec { dontUnpack = true; buildPhase = '' - source $stdenv/setup - echo "unpacking $src..." mkdir extracted tar xzf $src -C extracted --strip-components=1 From b6b9012288f70a30319fbfdaed697908426e8d9e Mon Sep 17 00:00:00 2001 From: Matt Huszagh Date: Fri, 2 Dec 2022 22:13:09 -0800 Subject: [PATCH 06/14] vivado: don't unpack in buildPhase --- .../science/electronics/vivado/default.nix | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/pkgs/applications/science/electronics/vivado/default.nix b/pkgs/applications/science/electronics/vivado/default.nix index b3d543a23587498..b1ab72c2ba4b4cf 100644 --- a/pkgs/applications/science/electronics/vivado/default.nix +++ b/pkgs/applications/science/electronics/vivado/default.nix @@ -48,13 +48,7 @@ stdenv.mkDerivation rec { sha256 = "06pb4wjz76wlwhhzky9vkyi4aq6775k63c2kw3j9prqdipxqzf9j"; }; - dontUnpack = true; - buildPhase = '' - echo "unpacking $src..." - mkdir extracted - tar xzf $src -C extracted --strip-components=1 - echo "running installer..." cat < install_config.txt @@ -69,25 +63,24 @@ stdenv.mkDerivation rec { CreateFileAssociation=0 EOF - patchShebangs extracted + patchShebangs . patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \ - extracted/tps/lnx64/jre/bin/java + tps/lnx64/jre/bin/java mkdir -p $out/opt - sed -i -- 's|/bin/rm|rm|g' extracted/xsetup + sed -i -- 's|/bin/rm|rm|g' xsetup # The installer will be killed as soon as it says that post install tasks have failed. # This is required because it tries to run the unpatched scripts to check if the installation # has succeeded. However, these scripts will fail because they have not been patched yet, # and the installer will proceed to delete the installation if not killed. - (extracted/xsetup --agree 3rdPartyEULA,WebTalkTerms,XilinxEULA --batch Install --config install_config.txt || true) | while read line + (./xsetup --agree 3rdPartyEULA,WebTalkTerms,XilinxEULA --batch Install --config install_config.txt || true) | while read line do - [[ "''${line}" == *"Execution of Pre/Post Installation Tasks Failed"* ]] && echo "killing installer!" && ((pkill -9 -f "extracted/tps/lnx64/jre/bin/java") || true) + [[ "''${line}" == *"Execution of Pre/Post Installation Tasks Failed"* ]] && echo "killing installer!" && ((pkill -9 -f "tps/lnx64/jre/bin/java") || true) echo ''${line} done - rm -rf extracted # Patch installed files patchShebangs $out/opt/Vivado/2017.2/bin patchShebangs $out/opt/SDK/2017.2/bin From 8c97a145fc3c883a9fb009152dc864f265f4bb50 Mon Sep 17 00:00:00 2001 From: Matt Huszagh Date: Fri, 2 Dec 2022 22:23:40 -0800 Subject: [PATCH 07/14] vivado: replace 2017.2 with $version --- .../science/electronics/vivado/default.nix | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/pkgs/applications/science/electronics/vivado/default.nix b/pkgs/applications/science/electronics/vivado/default.nix index b1ab72c2ba4b4cf..792ea9beca97a8d 100644 --- a/pkgs/applications/science/electronics/vivado/default.nix +++ b/pkgs/applications/science/electronics/vivado/default.nix @@ -82,36 +82,36 @@ stdenv.mkDerivation rec { echo ''${line} done # Patch installed files - patchShebangs $out/opt/Vivado/2017.2/bin - patchShebangs $out/opt/SDK/2017.2/bin + patchShebangs $out/opt/Vivado/$version/bin + patchShebangs $out/opt/SDK/$version/bin echo "Shebangs patched" # Hack around lack of libtinfo in NixOS - ln -s $ncurses/lib/libncursesw.so.6 $out/opt/Vivado/2017.2/lib/lnx64.o/libtinfo.so.5 - ln -s $ncurses/lib/libncursesw.so.6 $out/opt/SDK/2017.2/lib/lnx64.o/libtinfo.so.5 + ln -s $ncurses/lib/libncursesw.so.6 $out/opt/Vivado/$version/lib/lnx64.o/libtinfo.so.5 + ln -s $ncurses/lib/libncursesw.so.6 $out/opt/SDK/$version/lib/lnx64.o/libtinfo.so.5 # Patch ELFs - for f in $out/opt/Vivado/2017.2/bin/unwrapped/lnx64.o/* + for f in $out/opt/Vivado/$version/bin/unwrapped/lnx64.o/* do patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $f || true done - for f in $out/opt/SDK/2017.2/bin/unwrapped/lnx64.o/* + for f in $out/opt/SDK/$version/bin/unwrapped/lnx64.o/* do patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $f || true done - patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $out/opt/SDK/2017.2/eclipse/lnx64.o/eclipse - patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $out/opt/SDK/2017.2/tps/lnx64/jre/bin/java + patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $out/opt/SDK/$version/eclipse/lnx64.o/eclipse + patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $out/opt/SDK/$version/tps/lnx64/jre/bin/java echo "ELFs patched" - wrapProgram $out/opt/Vivado/2017.2/bin/vivado --prefix LD_LIBRARY_PATH : "$libPath" - wrapProgram $out/opt/SDK/2017.2/bin/xsdk --prefix LD_LIBRARY_PATH : "$libPath" - wrapProgram $out/opt/SDK/2017.2/eclipse/lnx64.o/eclipse --prefix LD_LIBRARY_PATH : "$libPath" - wrapProgram $out/opt/SDK/2017.2/tps/lnx64/jre/bin/java --prefix LD_LIBRARY_PATH : "$libPath" + wrapProgram $out/opt/Vivado/$version/bin/vivado --prefix LD_LIBRARY_PATH : "$libPath" + wrapProgram $out/opt/SDK/$version/bin/xsdk --prefix LD_LIBRARY_PATH : "$libPath" + wrapProgram $out/opt/SDK/$version/eclipse/lnx64.o/eclipse --prefix LD_LIBRARY_PATH : "$libPath" + wrapProgram $out/opt/SDK/$version/tps/lnx64/jre/bin/java --prefix LD_LIBRARY_PATH : "$libPath" # wrapProgram on its own will not work because of the way the Vivado script runs ./launch # Therefore, we need Even More Patches... - sed -i -- 's|`basename "\$0"`|vivado|g' $out/opt/Vivado/2017.2/bin/.vivado-wrapped - sed -i -- 's|`basename "\$0"`|xsdk|g' $out/opt/SDK/2017.2/bin/.xsdk-wrapped + sed -i -- 's|`basename "\$0"`|vivado|g' $out/opt/Vivado/$version/bin/.vivado-wrapped + sed -i -- 's|`basename "\$0"`|xsdk|g' $out/opt/SDK/$version/bin/.xsdk-wrapped # Add vivado and xsdk to bin folder mkdir $out/bin - ln -s $out/opt/Vivado/2017.2/bin/vivado $out/bin/vivado - ln -s $out/opt/SDK/2017.2/bin/xsdk $out/bin/xsdk + ln -s $out/opt/Vivado/$version/bin/vivado $out/bin/vivado + ln -s $out/opt/SDK/$version/bin/xsdk $out/bin/xsdk ''; dontInstall = true; From 665fa0b17b6d63e8aa8ee686d0827ee93a54b222 Mon Sep 17 00:00:00 2001 From: Matt Huszagh Date: Fri, 2 Dec 2022 22:36:55 -0800 Subject: [PATCH 08/14] vivado: move pre-build patching to postPatch --- .../science/electronics/vivado/default.nix | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/pkgs/applications/science/electronics/vivado/default.nix b/pkgs/applications/science/electronics/vivado/default.nix index 792ea9beca97a8d..0eac3c2d71784f1 100644 --- a/pkgs/applications/science/electronics/vivado/default.nix +++ b/pkgs/applications/science/electronics/vivado/default.nix @@ -48,6 +48,15 @@ stdenv.mkDerivation rec { sha256 = "06pb4wjz76wlwhhzky9vkyi4aq6775k63c2kw3j9prqdipxqzf9j"; }; + postPatch = '' + patchShebangs xsetup + + patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \ + tps/lnx64/jre/bin/java + + sed -i -- 's|/bin/rm|rm|g' xsetup + ''; + buildPhase = '' echo "running installer..." @@ -63,15 +72,8 @@ stdenv.mkDerivation rec { CreateFileAssociation=0 EOF - patchShebangs . - - patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \ - tps/lnx64/jre/bin/java - mkdir -p $out/opt - sed -i -- 's|/bin/rm|rm|g' xsetup - # The installer will be killed as soon as it says that post install tasks have failed. # This is required because it tries to run the unpatched scripts to check if the installation # has succeeded. However, these scripts will fail because they have not been patched yet, From 34747c138e22bd94eb3a568651aacb0afa19c112 Mon Sep 17 00:00:00 2001 From: Matt Huszagh Date: Fri, 2 Dec 2022 22:48:15 -0800 Subject: [PATCH 09/14] vivado: move buildPhase contents to installPhase --- pkgs/applications/science/electronics/vivado/default.nix | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/pkgs/applications/science/electronics/vivado/default.nix b/pkgs/applications/science/electronics/vivado/default.nix index 0eac3c2d71784f1..713bdf4b2955750 100644 --- a/pkgs/applications/science/electronics/vivado/default.nix +++ b/pkgs/applications/science/electronics/vivado/default.nix @@ -57,9 +57,9 @@ stdenv.mkDerivation rec { sed -i -- 's|/bin/rm|rm|g' xsetup ''; - buildPhase = '' - echo "running installer..." + dontBuild = true; + installPhase = '' cat < install_config.txt Edition=Vivado HL WebPACK Destination=$out/opt @@ -116,8 +116,6 @@ stdenv.mkDerivation rec { ln -s $out/opt/SDK/$version/bin/xsdk $out/bin/xsdk ''; - dontInstall = true; - libPath = lib.makeLibraryPath [ stdenv.cc.cc ncurses5 From 529374df148c56f7bd137978a85e6384c26935dd Mon Sep 17 00:00:00 2001 From: Matt Huszagh Date: Mon, 5 Dec 2022 11:54:08 -0800 Subject: [PATCH 10/14] vivado: add whitespace to installPhase --- pkgs/applications/science/electronics/vivado/default.nix | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/science/electronics/vivado/default.nix b/pkgs/applications/science/electronics/vivado/default.nix index 713bdf4b2955750..1ebda7881461b58 100644 --- a/pkgs/applications/science/electronics/vivado/default.nix +++ b/pkgs/applications/science/electronics/vivado/default.nix @@ -83,13 +83,15 @@ stdenv.mkDerivation rec { [[ "''${line}" == *"Execution of Pre/Post Installation Tasks Failed"* ]] && echo "killing installer!" && ((pkill -9 -f "tps/lnx64/jre/bin/java") || true) echo ''${line} done + # Patch installed files patchShebangs $out/opt/Vivado/$version/bin patchShebangs $out/opt/SDK/$version/bin - echo "Shebangs patched" + # Hack around lack of libtinfo in NixOS ln -s $ncurses/lib/libncursesw.so.6 $out/opt/Vivado/$version/lib/lnx64.o/libtinfo.so.5 ln -s $ncurses/lib/libncursesw.so.6 $out/opt/SDK/$version/lib/lnx64.o/libtinfo.so.5 + # Patch ELFs for f in $out/opt/Vivado/$version/bin/unwrapped/lnx64.o/* do @@ -101,15 +103,17 @@ stdenv.mkDerivation rec { done patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $out/opt/SDK/$version/eclipse/lnx64.o/eclipse patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $out/opt/SDK/$version/tps/lnx64/jre/bin/java - echo "ELFs patched" + wrapProgram $out/opt/Vivado/$version/bin/vivado --prefix LD_LIBRARY_PATH : "$libPath" wrapProgram $out/opt/SDK/$version/bin/xsdk --prefix LD_LIBRARY_PATH : "$libPath" wrapProgram $out/opt/SDK/$version/eclipse/lnx64.o/eclipse --prefix LD_LIBRARY_PATH : "$libPath" wrapProgram $out/opt/SDK/$version/tps/lnx64/jre/bin/java --prefix LD_LIBRARY_PATH : "$libPath" + # wrapProgram on its own will not work because of the way the Vivado script runs ./launch # Therefore, we need Even More Patches... sed -i -- 's|`basename "\$0"`|vivado|g' $out/opt/Vivado/$version/bin/.vivado-wrapped sed -i -- 's|`basename "\$0"`|xsdk|g' $out/opt/SDK/$version/bin/.xsdk-wrapped + # Add vivado and xsdk to bin folder mkdir $out/bin ln -s $out/opt/Vivado/$version/bin/vivado $out/bin/vivado From 46d4ac8de16bb5b93c780933bdebd300396da9c0 Mon Sep 17 00:00:00 2001 From: Matt Huszagh Date: Mon, 5 Dec 2022 13:29:17 -0800 Subject: [PATCH 11/14] vivado: move parts of installPhase into preFixup --- .../science/electronics/vivado/default.nix | 38 ++++++++++--------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/pkgs/applications/science/electronics/vivado/default.nix b/pkgs/applications/science/electronics/vivado/default.nix index 1ebda7881461b58..9d90e2bf38ac142 100644 --- a/pkgs/applications/science/electronics/vivado/default.nix +++ b/pkgs/applications/science/electronics/vivado/default.nix @@ -83,7 +83,27 @@ stdenv.mkDerivation rec { [[ "''${line}" == *"Execution of Pre/Post Installation Tasks Failed"* ]] && echo "killing installer!" && ((pkill -9 -f "tps/lnx64/jre/bin/java") || true) echo ''${line} done + ''; + + libPath = lib.makeLibraryPath [ + stdenv.cc.cc + ncurses5 + zlib + libuuid + libSM + libICE + libX11 + libXrender + libxcb + libXext + libXtst + libXi + glib + freetype + gtk2 + ]; + preFixup = '' # Patch installed files patchShebangs $out/opt/Vivado/$version/bin patchShebangs $out/opt/SDK/$version/bin @@ -120,24 +140,6 @@ stdenv.mkDerivation rec { ln -s $out/opt/SDK/$version/bin/xsdk $out/bin/xsdk ''; - libPath = lib.makeLibraryPath [ - stdenv.cc.cc - ncurses5 - zlib - libuuid - libSM - libICE - libX11 - libXrender - libxcb - libXext - libXtst - libXi - glib - freetype - gtk2 - ]; - meta = with lib; { description = "Xilinx Vivado"; homepage = "https://www.xilinx.com/products/design-tools/vivado.html"; From ac12b9051054fdeb743601ae46bbd8a41414a679 Mon Sep 17 00:00:00 2001 From: Matt Huszagh Date: Mon, 5 Dec 2022 13:33:43 -0800 Subject: [PATCH 12/14] vivado: reorder src and buildInputs --- .../science/electronics/vivado/default.nix | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/pkgs/applications/science/electronics/vivado/default.nix b/pkgs/applications/science/electronics/vivado/default.nix index 9d90e2bf38ac142..402bff52a396957 100644 --- a/pkgs/applications/science/electronics/vivado/default.nix +++ b/pkgs/applications/science/electronics/vivado/default.nix @@ -26,14 +26,6 @@ stdenv.mkDerivation rec { pname = "vivado"; version = "2017.2"; - buildInputs = [ - patchelf - procps - ncurses5 - makeWrapper - coreutils - ]; - # requireFile prevents rehashing each time, which saves time during # rebuilds. src = requireFile rec { @@ -48,6 +40,14 @@ stdenv.mkDerivation rec { sha256 = "06pb4wjz76wlwhhzky9vkyi4aq6775k63c2kw3j9prqdipxqzf9j"; }; + buildInputs = [ + patchelf + procps + ncurses5 + makeWrapper + coreutils + ]; + postPatch = '' patchShebangs xsetup From 526557d31b972e9dee7efe8fc734b0de293ff2a7 Mon Sep 17 00:00:00 2001 From: Matt Huszagh Date: Mon, 5 Dec 2022 13:34:53 -0800 Subject: [PATCH 13/14] vivado: migrate some buildInputs to nativeBuildInputs and remove others --- pkgs/applications/science/electronics/vivado/default.nix | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pkgs/applications/science/electronics/vivado/default.nix b/pkgs/applications/science/electronics/vivado/default.nix index 402bff52a396957..6171ac3199040bf 100644 --- a/pkgs/applications/science/electronics/vivado/default.nix +++ b/pkgs/applications/science/electronics/vivado/default.nix @@ -40,12 +40,13 @@ stdenv.mkDerivation rec { sha256 = "06pb4wjz76wlwhhzky9vkyi4aq6775k63c2kw3j9prqdipxqzf9j"; }; + nativeBuildInputs = [ + makeWrapper + ]; + buildInputs = [ - patchelf procps ncurses5 - makeWrapper - coreutils ]; postPatch = '' From a298b28f00c8bc812b03a87701ce4c18e81288fe Mon Sep 17 00:00:00 2001 From: Matt Huszagh Date: Wed, 4 Jan 2023 19:29:52 -0800 Subject: [PATCH 14/14] vivado: delete builder.sh --- .../science/electronics/vivado/builder.sh | 70 ------------------- 1 file changed, 70 deletions(-) delete mode 100644 pkgs/applications/science/electronics/vivado/builder.sh diff --git a/pkgs/applications/science/electronics/vivado/builder.sh b/pkgs/applications/science/electronics/vivado/builder.sh deleted file mode 100644 index bea419200026f86..000000000000000 --- a/pkgs/applications/science/electronics/vivado/builder.sh +++ /dev/null @@ -1,70 +0,0 @@ -source $stdenv/setup - -echo "unpacking $src..." -mkdir extracted -tar xzf $src -C extracted --strip-components=1 - -echo "running installer..." - -cat < install_config.txt -Edition=Vivado HL WebPACK -Destination=$out/opt -Modules=Software Development Kit (SDK):1,DocNav:0,Kintex UltraScale:0,Zynq-7000:1,System Generator for DSP:0,Artix-7:1,Kintex-7:0 -InstallOptions=Acquire or Manage a License Key:0,Enable WebTalk for SDK to send usage statistics to Xilinx:0 -CreateProgramGroupShortcuts=0 -ProgramGroupFolder=Xilinx Design Tools -CreateShortcutsForAllUsers=0 -CreateDesktopShortcuts=0 -CreateFileAssociation=0 -EOF - -patchShebangs extracted - -patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \ - extracted/tps/lnx64/jre/bin/java - -mkdir -p $out/opt - -sed -i -- 's|/bin/rm|rm|g' extracted/xsetup - -# The installer will be killed as soon as it says that post install tasks have failed. -# This is required because it tries to run the unpatched scripts to check if the installation -# has succeeded. However, these scripts will fail because they have not been patched yet, -# and the installer will proceed to delete the installation if not killed. -(extracted/xsetup --agree 3rdPartyEULA,WebTalkTerms,XilinxEULA --batch Install --config install_config.txt || true) | while read line -do - [[ "${line}" == *"Execution of Pre/Post Installation Tasks Failed"* ]] && echo "killing installer!" && ((pkill -9 -f "extracted/tps/lnx64/jre/bin/java") || true) - echo ${line} -done -rm -rf extracted -# Patch installed files -patchShebangs $out/opt/Vivado/2017.2/bin -patchShebangs $out/opt/SDK/2017.2/bin -echo "Shebangs patched" -# Hack around lack of libtinfo in NixOS -ln -s $ncurses/lib/libncursesw.so.6 $out/opt/Vivado/2017.2/lib/lnx64.o/libtinfo.so.5 -ln -s $ncurses/lib/libncursesw.so.6 $out/opt/SDK/2017.2/lib/lnx64.o/libtinfo.so.5 -# Patch ELFs -for f in $out/opt/Vivado/2017.2/bin/unwrapped/lnx64.o/* -do - patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $f || true -done -for f in $out/opt/SDK/2017.2/bin/unwrapped/lnx64.o/* -do - patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $f || true -done -patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $out/opt/SDK/2017.2/eclipse/lnx64.o/eclipse -patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $out/opt/SDK/2017.2/tps/lnx64/jre/bin/java -echo "ELFs patched" -wrapProgram $out/opt/Vivado/2017.2/bin/vivado --prefix LD_LIBRARY_PATH : "$libPath" -wrapProgram $out/opt/SDK/2017.2/bin/xsdk --prefix LD_LIBRARY_PATH : "$libPath" -wrapProgram $out/opt/SDK/2017.2/eclipse/lnx64.o/eclipse --prefix LD_LIBRARY_PATH : "$libPath" -wrapProgram $out/opt/SDK/2017.2/tps/lnx64/jre/bin/java --prefix LD_LIBRARY_PATH : "$libPath" -# wrapProgram on its own will not work because of the way the Vivado script runs ./launch -# Therefore, we need Even More Patches... -sed -i -- 's|`basename "\$0"`|vivado|g' $out/opt/Vivado/2017.2/bin/.vivado-wrapped -sed -i -- 's|`basename "\$0"`|xsdk|g' $out/opt/SDK/2017.2/bin/.xsdk-wrapped -# Add vivado and xsdk to bin folder -mkdir $out/bin -ln -s $out/opt/Vivado/2017.2/bin/vivado $out/bin/vivado -ln -s $out/opt/SDK/2017.2/bin/xsdk $out/bin/xsdk