From 1ba1fa865534078cf42a227196c365dc8f54c267 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Forsman?= Date: Sat, 23 Sep 2023 18:18:02 +0200 Subject: [PATCH 01/14] quartus-prime-lite: run mkdir as needed Instead of maintaining both a list of executables to wrap and their directory names, extract the directory names from the executables and run mkdir as needed. Keep DRY. --- pkgs/applications/editors/quartus-prime/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/applications/editors/quartus-prime/default.nix b/pkgs/applications/editors/quartus-prime/default.nix index a3eee45ed4d04..1465f8fc7f721 100644 --- a/pkgs/applications/editors/quartus-prime/default.nix +++ b/pkgs/applications/editors/quartus-prime/default.nix @@ -67,10 +67,10 @@ in buildFHSEnvChroot rec { ln -s ${desktopItem}/share/applications/* $out/share/applications ln -s ${unwrapped}/licenses/images/dc_quartus_panel_logo.png $out/share/icons/128x128/quartus.png - mkdir -p $out/quartus/bin $out/quartus/sopc_builder/bin $out/modelsim_ase/bin WRAPPER=$out/bin/${name} EXECUTABLES="${lib.concatStringsSep " " (quartusExecutables ++ qsysExecutables ++ modelsimExecutables)}" for executable in $EXECUTABLES; do + mkdir -p "$(dirname "$out/$executable")" echo "#!${stdenv.shell}" >> $out/$executable echo "$WRAPPER ${unwrapped}/$executable \"\$@\"" >> $out/$executable done From 9951cb98f49c96d71cb2e1f8b38f332c87f4cfce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Forsman?= Date: Sat, 23 Sep 2023 18:20:10 +0200 Subject: [PATCH 02/14] quartus-prime-lite: lower case local shell variables Upper case shell variables are generally for internal variables (SHELL, BASH_VERSION) or environment variables (PAGER, EDITOR). Other variables should be lower case. --- pkgs/applications/editors/quartus-prime/default.nix | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pkgs/applications/editors/quartus-prime/default.nix b/pkgs/applications/editors/quartus-prime/default.nix index 1465f8fc7f721..ca8658395210d 100644 --- a/pkgs/applications/editors/quartus-prime/default.nix +++ b/pkgs/applications/editors/quartus-prime/default.nix @@ -67,18 +67,18 @@ in buildFHSEnvChroot rec { ln -s ${desktopItem}/share/applications/* $out/share/applications ln -s ${unwrapped}/licenses/images/dc_quartus_panel_logo.png $out/share/icons/128x128/quartus.png - WRAPPER=$out/bin/${name} - EXECUTABLES="${lib.concatStringsSep " " (quartusExecutables ++ qsysExecutables ++ modelsimExecutables)}" - for executable in $EXECUTABLES; do + wrapper=$out/bin/${name} + executables="${lib.concatStringsSep " " (quartusExecutables ++ qsysExecutables ++ modelsimExecutables)}" + for executable in $executables; do mkdir -p "$(dirname "$out/$executable")" echo "#!${stdenv.shell}" >> $out/$executable - echo "$WRAPPER ${unwrapped}/$executable \"\$@\"" >> $out/$executable + echo "$wrapper ${unwrapped}/$executable \"\$@\"" >> $out/$executable done cd $out - chmod +x $EXECUTABLES + chmod +x $executables # link into $out/bin so executables become available on $PATH - ln --symbolic --relative --target-directory ./bin $EXECUTABLES + ln --symbolic --relative --target-directory ./bin $executables ''; # LD_PRELOAD fixes issues in the licensing system that cause memory corruption and crashes when From b27f7919d125aa7506b108504894b7dee2466802 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Forsman?= Date: Sat, 23 Sep 2023 19:03:19 +0200 Subject: [PATCH 03/14] quartus-prime-lite: list progs to wrap in sh instead of Nix This opens up for using sh globbing (and possibly wrapping *all* programs), something which is not possible when the program list is coded in Nix. --- .../editors/quartus-prime/default.nix | 40 +++++++++---------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/pkgs/applications/editors/quartus-prime/default.nix b/pkgs/applications/editors/quartus-prime/default.nix index ca8658395210d..e8885ce9ee0af 100644 --- a/pkgs/applications/editors/quartus-prime/default.nix +++ b/pkgs/applications/editors/quartus-prime/default.nix @@ -49,36 +49,34 @@ in buildFHSEnvChroot rec { passthru = { inherit unwrapped; }; - extraInstallCommands = let - quartusExecutables = (map (c: "quartus/bin/quartus_${c}") [ - "asm" "cdb" "cpf" "drc" "eda" "fit" "jbcc" "jli" "map" "pgm" "pow" - "sh" "si" "sim" "sta" "stp" "tan" - ]) ++ [ "quartus/bin/quartus" ]; - - qsysExecutables = map (c: "quartus/sopc_builder/bin/qsys-${c}") [ - "generate" "edit" "script" - ]; - # Should we install all executables ? - modelsimExecutables = map (c: "modelsim_ase/bin/${c}") [ - "vsim" "vlog" "vlib" - ]; - in '' + extraInstallCommands = '' mkdir -p $out/share/applications $out/share/icons/128x128 ln -s ${desktopItem}/share/applications/* $out/share/applications ln -s ${unwrapped}/licenses/images/dc_quartus_panel_logo.png $out/share/icons/128x128/quartus.png + progs_to_wrap=( + "${unwrapped}"/quartus/bin/quartus + "${unwrapped}"/quartus/bin/quartus_{asm,cdb,cpf,drc,eda,fit,jbcc,jli,map,pgm,pow,sh,si,sim,sta,stp,tan} + "${unwrapped}"/quartus/sopc_builder/bin/qsys-{generate,edit,script} + # Should we install all executables? + "${unwrapped}"/modelsim_ase/bin/{vsim,vlog,vlib} + ) + wrapper=$out/bin/${name} - executables="${lib.concatStringsSep " " (quartusExecutables ++ qsysExecutables ++ modelsimExecutables)}" - for executable in $executables; do - mkdir -p "$(dirname "$out/$executable")" - echo "#!${stdenv.shell}" >> $out/$executable - echo "$wrapper ${unwrapped}/$executable \"\$@\"" >> $out/$executable + progs_wrapped=() + for prog in ''${progs_to_wrap[@]}; do + relname="''${prog#"${unwrapped}/"}" + wrapped="$out/$relname" + progs_wrapped+=("$wrapped") + mkdir -p "$(dirname "$wrapped")" + echo "#!${stdenv.shell}" >> "$wrapped" + echo "$wrapper $prog \"\$@\"" >> "$wrapped" done cd $out - chmod +x $executables + chmod +x ''${progs_wrapped[@]} # link into $out/bin so executables become available on $PATH - ln --symbolic --relative --target-directory ./bin $executables + ln --symbolic --relative --target-directory ./bin ''${progs_wrapped[@]} ''; # LD_PRELOAD fixes issues in the licensing system that cause memory corruption and crashes when From 70faf24f4003f4cded978c7f7aecda35b7854100 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Forsman?= Date: Sat, 23 Sep 2023 20:03:22 +0200 Subject: [PATCH 04/14] quartus-prime-lite: add /lib/ld-lsb*.so.3 dynamic loaders to FHS env (In preparation for adding lmutil.) Quartus is a mix of 32- and 64-bit programs, and these "lsb" loaders are required by some of the unwrapped binaries: $ find /nix/store/HASH-quartus-prime-lite-unwrapped-20.1.1.720 -type f -executable | xargs -n1 patchelf --print-interpreter |& grep "ld-lsb" | sort -u /lib64/ld-lsb-x86-64.so.3 /lib/ld-lsb.so.3 --- pkgs/applications/editors/quartus-prime/default.nix | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pkgs/applications/editors/quartus-prime/default.nix b/pkgs/applications/editors/quartus-prime/default.nix index e8885ce9ee0af..11bcacd0d0a93 100644 --- a/pkgs/applications/editors/quartus-prime/default.nix +++ b/pkgs/applications/editors/quartus-prime/default.nix @@ -17,6 +17,11 @@ in buildFHSEnvChroot rec { name = "quartus-prime-lite"; # wrapped targetPkgs = pkgs: with pkgs; [ + (runCommand "ld-lsb-compat" {} '' + mkdir -p "$out/lib" + ln -sr "${glibc}/lib/ld-linux-x86-64.so.2" "$out/lib/ld-lsb-x86-64.so.3" + ln -sr "${pkgsi686Linux.glibc}/lib/ld-linux.so.2" "$out/lib/ld-lsb.so.3" + '') # quartus requirements glib xorg.libICE From 7a2e3db96258f55fc5fe75df4843beaf2fbcfc72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Forsman?= Date: Sat, 23 Sep 2023 20:05:58 +0200 Subject: [PATCH 05/14] quartus-prime-lite: add lmutil It's tool to check the validity of licenses, and vsim suggests running it when it has issues validating a license. (At least in Quartus 22.1.2.) --- pkgs/applications/editors/quartus-prime/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/applications/editors/quartus-prime/default.nix b/pkgs/applications/editors/quartus-prime/default.nix index 11bcacd0d0a93..469e010eb19a8 100644 --- a/pkgs/applications/editors/quartus-prime/default.nix +++ b/pkgs/applications/editors/quartus-prime/default.nix @@ -65,6 +65,7 @@ in buildFHSEnvChroot rec { "${unwrapped}"/quartus/sopc_builder/bin/qsys-{generate,edit,script} # Should we install all executables? "${unwrapped}"/modelsim_ase/bin/{vsim,vlog,vlib} + "${unwrapped}"/modelsim_ase/linuxaloem/lmutil ) wrapper=$out/bin/${name} From 8467f914781905ae94c2caf98ea357c00539cc90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Forsman?= Date: Sat, 23 Sep 2023 20:24:07 +0200 Subject: [PATCH 06/14] quartus-prime-lite: add vcom, vdel, vmap These are useful for Modelsim scripting. --- pkgs/applications/editors/quartus-prime/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/applications/editors/quartus-prime/default.nix b/pkgs/applications/editors/quartus-prime/default.nix index 469e010eb19a8..e1edfb3b602f5 100644 --- a/pkgs/applications/editors/quartus-prime/default.nix +++ b/pkgs/applications/editors/quartus-prime/default.nix @@ -64,7 +64,7 @@ in buildFHSEnvChroot rec { "${unwrapped}"/quartus/bin/quartus_{asm,cdb,cpf,drc,eda,fit,jbcc,jli,map,pgm,pow,sh,si,sim,sta,stp,tan} "${unwrapped}"/quartus/sopc_builder/bin/qsys-{generate,edit,script} # Should we install all executables? - "${unwrapped}"/modelsim_ase/bin/{vsim,vlog,vlib} + "${unwrapped}"/modelsim_ase/bin/{vsim,vlog,vlib,vcom,vdel,vmap} "${unwrapped}"/modelsim_ase/linuxaloem/lmutil ) From 9d7f19353b473ecd7906b0bf6218735361e6203c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Forsman?= Date: Sat, 23 Sep 2023 20:30:18 +0200 Subject: [PATCH 07/14] quartus-prime-lite: expose all of quartus/bin/* * Upstream recommends it (adding $QUARTUS_ROOTDIR/bin to $PATH). * It's cool that nixpkgs *can* do these tricks (only expose a subset of programs), but in this case I don't think it's a good idea. For example, before this change I was missing the `jtagconfig` program. * This increases the number of programs in .../bin from 29 to 80. --- pkgs/applications/editors/quartus-prime/default.nix | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pkgs/applications/editors/quartus-prime/default.nix b/pkgs/applications/editors/quartus-prime/default.nix index e1edfb3b602f5..1ec9d3588979c 100644 --- a/pkgs/applications/editors/quartus-prime/default.nix +++ b/pkgs/applications/editors/quartus-prime/default.nix @@ -60,8 +60,7 @@ in buildFHSEnvChroot rec { ln -s ${unwrapped}/licenses/images/dc_quartus_panel_logo.png $out/share/icons/128x128/quartus.png progs_to_wrap=( - "${unwrapped}"/quartus/bin/quartus - "${unwrapped}"/quartus/bin/quartus_{asm,cdb,cpf,drc,eda,fit,jbcc,jli,map,pgm,pow,sh,si,sim,sta,stp,tan} + "${unwrapped}"/quartus/bin/* "${unwrapped}"/quartus/sopc_builder/bin/qsys-{generate,edit,script} # Should we install all executables? "${unwrapped}"/modelsim_ase/bin/{vsim,vlog,vlib,vcom,vdel,vmap} From f7d59bb1fbefe591f56fb516b62c9b6419a03f8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Forsman?= Date: Sat, 23 Sep 2023 23:58:50 +0200 Subject: [PATCH 08/14] quartus-prime-lite: eliminate two unneeded execve syscalls * Set LD_PRELOAD in the profile snippet to eliminate one execve() for `env`. * Set runScript to "" to eliminate one execve() for bash. --- pkgs/applications/editors/quartus-prime/default.nix | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/editors/quartus-prime/default.nix b/pkgs/applications/editors/quartus-prime/default.nix index 1ec9d3588979c..ef9164f3228cb 100644 --- a/pkgs/applications/editors/quartus-prime/default.nix +++ b/pkgs/applications/editors/quartus-prime/default.nix @@ -89,7 +89,10 @@ in buildFHSEnvChroot rec { # (a similiar fix involving LD_PRELOADing tcmalloc did not solve the issue in my situation) # we use the name so that quartus can load the 64 bit verson and modelsim can load the 32 bit version # https://community.intel.com/t5/Intel-FPGA-Software-Installation/Running-Quartus-Prime-Standard-on-WSL-crashes-in-libudev-so/m-p/1189032 - runScript = writeScript "${name}-wrapper" '' - exec env LD_PRELOAD=libudev.so.0 "$@" + profile = '' + export LD_PRELOAD=libudev.so.0 ''; + + # Run the wrappers directly, instead of going via bash. + runScript = ""; } From cceca28e1a1e0df71f4a96b3a909b59f8c03eca6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Forsman?= Date: Sun, 24 Sep 2023 00:08:50 +0200 Subject: [PATCH 09/14] quartus-prime-lite: don't overwrite LD_PRELOAD Instead, merge the user provided LD_PRELOAD environment variable with the hardcoded libudev.so.1 entry. User provided libs are loaded first. --- pkgs/applications/editors/quartus-prime/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/applications/editors/quartus-prime/default.nix b/pkgs/applications/editors/quartus-prime/default.nix index ef9164f3228cb..8da6cd44ca704 100644 --- a/pkgs/applications/editors/quartus-prime/default.nix +++ b/pkgs/applications/editors/quartus-prime/default.nix @@ -90,7 +90,7 @@ in buildFHSEnvChroot rec { # we use the name so that quartus can load the 64 bit verson and modelsim can load the 32 bit version # https://community.intel.com/t5/Intel-FPGA-Software-Installation/Running-Quartus-Prime-Standard-on-WSL-crashes-in-libudev-so/m-p/1189032 profile = '' - export LD_PRELOAD=libudev.so.0 + export LD_PRELOAD=''${LD_PRELOAD:+$LD_PRELOAD:}libudev.so.0 ''; # Run the wrappers directly, instead of going via bash. From a868ce987b30aa15fae192bc17100eb27d4dc65a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Forsman?= Date: Sun, 24 Sep 2023 12:03:37 +0200 Subject: [PATCH 10/14] quartus-prime-lite: buildFHSEnvChroot -> buildFHSEnv The former is deprecated. The latter is implemented with buildFHSEnvBubblewrap. The reason this package was switched to buildFHSEnvChroot in the first place[1] is fixed by passing `multiArch = true` (which brings e.g. 32-bit dynamic loader /lib/ld-linux.so.2). [1] Commit cae417d315dd27 ("quartus-prime: use buildFHSEnvChroot") --- pkgs/applications/editors/quartus-prime/default.nix | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/editors/quartus-prime/default.nix b/pkgs/applications/editors/quartus-prime/default.nix index 8da6cd44ca704..d2ffcd088fb84 100644 --- a/pkgs/applications/editors/quartus-prime/default.nix +++ b/pkgs/applications/editors/quartus-prime/default.nix @@ -1,4 +1,4 @@ -{ stdenv, lib, buildFHSEnvChroot, callPackage, makeDesktopItem, writeScript +{ stdenv, lib, buildFHSEnv, callPackage, makeDesktopItem, writeScript , supportedDevices ? [ "Arria II" "Cyclone V" "Cyclone IV" "Cyclone 10 LP" "MAX II/V" "MAX 10 FPGA" ] , unwrapped ? callPackage ./quartus.nix { inherit supportedDevices; } }: @@ -13,7 +13,7 @@ let categories = [ "Development" ]; }; # I think modelsim_ase/linux/vlm checksums itself, so use FHSUserEnv instead of `patchelf` -in buildFHSEnvChroot rec { +in buildFHSEnv rec { name = "quartus-prime-lite"; # wrapped targetPkgs = pkgs: with pkgs; [ @@ -31,6 +31,10 @@ in buildFHSEnvChroot rec { xorg.libXtst xorg.libXi ]; + + # Also support 32-bit executables. + multiArch = true; + multiPkgs = pkgs: with pkgs; let # This seems ugly - can we override `libpng = libpng12` for all `pkgs`? freetype = pkgs.freetype.override { libpng = libpng12; }; From 3338d3c50fe5cc314ac2622b7a36fbf2d702b509 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Forsman?= Date: Sun, 24 Sep 2023 19:52:00 +0200 Subject: [PATCH 11/14] quartus-prime-lite: move passthru towards end Coding style. --- pkgs/applications/editors/quartus-prime/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/editors/quartus-prime/default.nix b/pkgs/applications/editors/quartus-prime/default.nix index d2ffcd088fb84..84a587e9621ae 100644 --- a/pkgs/applications/editors/quartus-prime/default.nix +++ b/pkgs/applications/editors/quartus-prime/default.nix @@ -56,8 +56,6 @@ in buildFHSEnv rec { libxcrypt-legacy ]; - passthru = { inherit unwrapped; }; - extraInstallCommands = '' mkdir -p $out/share/applications $out/share/icons/128x128 ln -s ${desktopItem}/share/applications/* $out/share/applications @@ -99,4 +97,6 @@ in buildFHSEnv rec { # Run the wrappers directly, instead of going via bash. runScript = ""; + + passthru = { inherit unwrapped; }; } From fcc362415e8af30817542dcf5bf4784c73c11b0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Forsman?= Date: Fri, 6 Oct 2023 17:00:47 +0200 Subject: [PATCH 12/14] quartus-prime-lite: modelsim: fix compiling encrypted device models LD_PRELOADing libudev breaks compiling encrypted device models in ModelSim, so only use LD_PRELOAD for non-ModelSim wrappers. Before: $ "$(NIXPKGS_ALLOW_UNFREE=1 nix-build -A quartus-prime-lite)/bin/vlog" "$(NIXPKGS_ALLOW_UNFREE=1 nix-build -A quartus-prime-lite.unwrapped)/modelsim_ase/altera/verilog/src/arriav_atoms_ncrypt.v" [...] ** Error: /nix/store/szcr2q24izqvhz7ybalar43y5xdg172a-quartus-prime-lite-unwrapped-20.1.1.720/modelsim_ase/altera/verilog/src/arriav_atoms_ncrypt.v(38): (vlog-2163) Macro ` is undefined. ** Error: /nix/store/szcr2q24izqvhz7ybalar43y5xdg172a-quartus-prime-lite-unwrapped-20.1.1.720/modelsim_ase/altera/verilog/src/arriav_atoms_ncrypt.v(38): (vlog-2163) Macro ` is undefined. ** Error: (vlog-13069) /nix/store/szcr2q24izqvhz7ybalar43y5xdg172a-quartus-prime-lite-unwrapped-20.1.1.720/modelsim_ase/altera/verilog/src/arriav_atoms_ncrypt.v(38): syntax error in protected region. [...] Errors: 4, Warnings: 0 After: $ "$(NIXPKGS_ALLOW_UNFREE=1 nix-build -A quartus-prime-lite)/bin/vlog" "$(NIXPKGS_ALLOW_UNFREE=1 nix-build -A quartus-prime-lite.unwrapped)/modelsim_ase/altera/verilog/src/arriav_atoms_ncrypt.v" [...] Errors: 0, Warnings: 0 --- .../editors/quartus-prime/default.nix | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/pkgs/applications/editors/quartus-prime/default.nix b/pkgs/applications/editors/quartus-prime/default.nix index 84a587e9621ae..cdeabc837ab2b 100644 --- a/pkgs/applications/editors/quartus-prime/default.nix +++ b/pkgs/applications/editors/quartus-prime/default.nix @@ -77,6 +77,11 @@ in buildFHSEnv rec { progs_wrapped+=("$wrapped") mkdir -p "$(dirname "$wrapped")" echo "#!${stdenv.shell}" >> "$wrapped" + case "$relname" in + modelsim_ase/*) + echo "export NIXPKGS_IS_MODELSIM_WRAPPER=1" >> "$wrapped" + ;; + esac echo "$wrapper $prog \"\$@\"" >> "$wrapped" done @@ -86,13 +91,20 @@ in buildFHSEnv rec { ln --symbolic --relative --target-directory ./bin ''${progs_wrapped[@]} ''; - # LD_PRELOAD fixes issues in the licensing system that cause memory corruption and crashes when - # starting most operations in many containerized environments, including WSL2, Docker, and LXC - # (a similiar fix involving LD_PRELOADing tcmalloc did not solve the issue in my situation) - # we use the name so that quartus can load the 64 bit verson and modelsim can load the 32 bit version - # https://community.intel.com/t5/Intel-FPGA-Software-Installation/Running-Quartus-Prime-Standard-on-WSL-crashes-in-libudev-so/m-p/1189032 profile = '' - export LD_PRELOAD=''${LD_PRELOAD:+$LD_PRELOAD:}libudev.so.0 + # LD_PRELOAD fixes issues in the licensing system that cause memory corruption and crashes when + # starting most operations in many containerized environments, including WSL2, Docker, and LXC + # (a similiar fix involving LD_PRELOADing tcmalloc did not solve the issue in my situation) + # we use the name so that quartus can load the 64 bit verson and modelsim can load the 32 bit version + # https://community.intel.com/t5/Intel-FPGA-Software-Installation/Running-Quartus-Prime-Standard-on-WSL-crashes-in-libudev-so/m-p/1189032 + # + # But, as can be seen in the above resource, LD_PRELOADing libudev breaks + # compiling encrypted device libraries in ModelSim (with error + # `(vlog-2163) Macro ` is undefined.`), so only use LD_PRELOAD + # for non-ModelSim wrappers. + if [ "$NIXPKGS_IS_MODELSIM_WRAPPER" != 1 ]; then + export LD_PRELOAD=''${LD_PRELOAD:+$LD_PRELOAD:}libudev.so.0 + fi ''; # Run the wrappers directly, instead of going via bash. From 699b86304aad27ae8b0c109c0f1d9c45bd3ed6ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Forsman?= Date: Fri, 6 Oct 2023 17:15:54 +0200 Subject: [PATCH 13/14] quartus-prime-lite: test building encrypted device model Prevent regressions. --- pkgs/applications/editors/quartus-prime/default.nix | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/pkgs/applications/editors/quartus-prime/default.nix b/pkgs/applications/editors/quartus-prime/default.nix index cdeabc837ab2b..c55603b3c214d 100644 --- a/pkgs/applications/editors/quartus-prime/default.nix +++ b/pkgs/applications/editors/quartus-prime/default.nix @@ -1,4 +1,5 @@ { stdenv, lib, buildFHSEnv, callPackage, makeDesktopItem, writeScript +, runCommand, quartus-prime-lite , supportedDevices ? [ "Arria II" "Cyclone V" "Cyclone IV" "Cyclone 10 LP" "MAX II/V" "MAX 10 FPGA" ] , unwrapped ? callPackage ./quartus.nix { inherit supportedDevices; } }: @@ -110,5 +111,13 @@ in buildFHSEnv rec { # Run the wrappers directly, instead of going via bash. runScript = ""; - passthru = { inherit unwrapped; }; + passthru = { + inherit unwrapped; + tests = { + modelsimEncryptedModel = runCommand "quartus-prime-lite-test-modelsim-encrypted-model" {} '' + "${quartus-prime-lite}/bin/vlog" "${quartus-prime-lite.unwrapped}/modelsim_ase/altera/verilog/src/arriav_atoms_ncrypt.v" + touch "$out" + ''; + }; + }; } From 1da59d21ca4526d7449ed73ef652cfed0a4cf8ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Forsman?= Date: Fri, 6 Oct 2023 17:02:25 +0200 Subject: [PATCH 14/14] quartus-prime-lite: use runtimeShell in wrappers stdenv.shell is a shell for building, runtimeShell is for running, so the latter should be used in wrappers. (The distinction only matters when cross-compiling.) --- pkgs/applications/editors/quartus-prime/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/editors/quartus-prime/default.nix b/pkgs/applications/editors/quartus-prime/default.nix index c55603b3c214d..d68925e752f45 100644 --- a/pkgs/applications/editors/quartus-prime/default.nix +++ b/pkgs/applications/editors/quartus-prime/default.nix @@ -1,4 +1,4 @@ -{ stdenv, lib, buildFHSEnv, callPackage, makeDesktopItem, writeScript +{ lib, buildFHSEnv, callPackage, makeDesktopItem, writeScript, runtimeShell , runCommand, quartus-prime-lite , supportedDevices ? [ "Arria II" "Cyclone V" "Cyclone IV" "Cyclone 10 LP" "MAX II/V" "MAX 10 FPGA" ] , unwrapped ? callPackage ./quartus.nix { inherit supportedDevices; } @@ -77,7 +77,7 @@ in buildFHSEnv rec { wrapped="$out/$relname" progs_wrapped+=("$wrapped") mkdir -p "$(dirname "$wrapped")" - echo "#!${stdenv.shell}" >> "$wrapped" + echo "#!${runtimeShell}" >> "$wrapped" case "$relname" in modelsim_ase/*) echo "export NIXPKGS_IS_MODELSIM_WRAPPER=1" >> "$wrapped"