diff --git a/pkgs/vivado/vivado-unwrapped.nix b/pkgs/vivado/vivado-unwrapped.nix index e7191e6..6204f3f 100644 --- a/pkgs/vivado/vivado-unwrapped.nix +++ b/pkgs/vivado/vivado-unwrapped.nix @@ -1,6 +1,7 @@ { buildFHSEnv, lib, + libgcc, requireFile, stdenvNoCC, writeText, @@ -108,6 +109,7 @@ stdenvNoCC.mkDerivation ( export HOME=/home/user ''; }; + in { @@ -122,14 +124,49 @@ stdenvNoCC.mkDerivation ( "unpackPhase" "installPhase" ]; + buildInputs = [ + libgcc.lib + ]; installPhase = '' mkdir -p $out mkdir -p $out/share mkdir -p $out/share/menus/applications-merged + + install_dir=$out/opt/Xilinx + + echo "Running installer in fhs env..." ${installerFHS}/bin/vivado-installer-env ./xsetup \ --agree XilinxEULA,3rdPartyEULA \ --batch Install -c ${configFile} \ - --location $out/opt/Xilinx + --location $install_dir + + echo "Patching vitis launch script for debug output..." + substituteInPlace $install_dir/${finalAttrs.version}/Vitis/bin/vitis \ + --replace-fail " > /dev/null 2>&1" "" + + echo "Replacing default libraries with system libs..." + mkdir -p $out/lib + gcclibs=( + libgcc_s.so.1 + libgomp.so.1 + libstdc++.so + libstdc++.so.6 + ) + for lib in ''${gcclibs[@]}; do + ln -s ${libgcc.lib}/lib/$lib $out/lib/$lib + done + lib_dirs=( + ${finalAttrs.version}/Vivado + ${finalAttrs.version}/Vitis + xic + .xinstall/${finalAttrs.version} + .xinstall/xic + .xinstall/DocNav + ) + for dir in ''${lib_dirs[@]}; do + rm -rf $install_dir/$dir/lib/lnx64.o/Default + ln -s $out/lib $install_dir/$dir/lib/lnx64.o/Default + done ''; meta = { diff --git a/pkgs/vivado/vivado.nix b/pkgs/vivado/vivado.nix index 565d516..b4d1a91 100644 --- a/pkgs/vivado/vivado.nix +++ b/pkgs/vivado/vivado.nix @@ -6,9 +6,13 @@ lib, runtimeShell, macAddress ? lib.warn '' - Input your machine's MAC address with `vivado.override {macAddress = "xx:xx:xx:xx:xx:xx"} for licensing to work! + In order for licensing to work, you need to manually provide your licensed machine's MAC address. + This can be done in two ways: + a) Set an env var `XILINX_NIC_ID=xx:xx:xx:xx:xx:xx` + b) Override the package `(vivado.override { macAddress = "xx:xx:xx:xx:xx:xx"; })` + If both are configured, the environment variable takes precedence. Run `vlm` to see the current licensing status of your installation. - '' "00:00:00:00:00:00", + '' "aa:aa:aa:aa:aa:aa", licensePath ? null, extraProfile ? "", extraPkgs ? pkgs: [ ], @@ -248,14 +252,8 @@ buildFHSEnv (finalAttrs: rec { ++ vitisBins ++ vivadoBins ); - XILINXD_LICENSE_FILE = lib.optionalString (!isNull licensePath) '' - : ''${XILINXD_LICENSE_FILE:=${licensePath}} - export XILINXD_LICENSE_FILE - ''; in '' - ${XILINXD_LICENSE_FILE} - : ''${XILINX_NIC_ID:=${macAddress}} progs_to_wrap=( ${toWrap} ) @@ -269,10 +267,11 @@ buildFHSEnv (finalAttrs: rec { mkdir -p "$(dirname "$wrapped")" echo "#!${runtimeShell}" >> "$wrapped" echo 'args="$@"' >> "$wrapped" + echo ": \''${XILINX_NIC_ID:=${macAddress}}" >> "$wrapped" echo "unshare --net --map-root-user ${runtimeShell} -c \"${ builtins.concatStringsSep "; " [ "ip link add eth0 type dummy" - "ip link set dev eth0 address $XILINX_NIC_ID" + ''ip link set dev eth0 address \$XILINX_NIC_ID'' ''exec $wrapper $prog \$args'' ] }\"" >> "$wrapped" @@ -301,15 +300,23 @@ buildFHSEnv (finalAttrs: rec { runScript = ""; - profile = '' - export LC_NUMERIC="en_US.UTF-8" - export GDK_BACKEND=x11 - export DISPLAY="''${DISPLAY:-:0}" - export _JAVA_AWT_WM_NONREPARENTING=1 - export ELECTRON_OZONE_PLATFORM_HINT=x11 - source ${unwrapped}/opt/Xilinx/${version}/Vivado/settings64.sh - '' - + extraProfile; + profile = + let + XILINXD_LICENSE_FILE = lib.optionalString (!isNull licensePath) '' + : ''${XILINXD_LICENSE_FILE:=${licensePath}} + export XILINXD_LICENSE_FILE + ''; + in + '' + ${XILINXD_LICENSE_FILE} + export LC_NUMERIC="en_US.UTF-8" + export GDK_BACKEND=x11 + export DISPLAY="''${DISPLAY:-:0}" + export _JAVA_AWT_WM_NONREPARENTING=1 + export ELECTRON_OZONE_PLATFORM_HINT=x11 + source ${unwrapped}/opt/Xilinx/${version}/Vivado/settings64.sh + '' + + extraProfile; # wanted by $unwrapped/opt/Xilinx/${version}/data/emulation/sctlm/lib/libhls_emsyn.so: # "libLLVM-3.1.so"