diff options
Diffstat (limited to 'nixpkgs/pkgs/development/embedded/fpga/lattice-diamond/default.nix')
-rw-r--r-- | nixpkgs/pkgs/development/embedded/fpga/lattice-diamond/default.nix | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/embedded/fpga/lattice-diamond/default.nix b/nixpkgs/pkgs/development/embedded/fpga/lattice-diamond/default.nix new file mode 100644 index 000000000000..f80261720cf6 --- /dev/null +++ b/nixpkgs/pkgs/development/embedded/fpga/lattice-diamond/default.nix @@ -0,0 +1,120 @@ +{ lib, stdenv, rpmextract, patchelf, makeWrapper, file, requireFile, glib, zlib, + freetype, fontconfig, xorg, libusb-compat-0_1, coreutils }: + +stdenv.mkDerivation { + pname = "diamond"; + version = "3.10"; + + nativeBuildInputs = [ rpmextract patchelf makeWrapper file ]; + + src = requireFile { + name = "diamond_3_10-base_x64-111-2-x86_64-linux.rpm"; + url = "http://www.latticesemi.com/view_document?document_id=52180"; + sha256 = "ec0b370cf8bd55831eeed7c5eadcabacbd6e63ac657c20209d672119a07a5c0f"; + }; + + buildCommand = '' + origprefix=usr/local/diamond/3.10_x64 + prefix=diamond + + echo "Unpacking $src..." + rpmextract $src + + # Move $pwd/usr/local/diamond/VERS to $out/diamond, cd. + mkdir -p $out/$prefix + rmdir $out/$prefix + mv $origprefix $out/$prefix + + cd $out + + # Extract all tarballs. + for tb in \ + cae_library/cae_library.tar.gz \ + embedded_source/embedded_source.tar.gz \ + ispfpga/ispfpga.tar.gz \ + synpbase/synpbase.tar.gz \ + tcltk/tcltk.tar.gz \ + bin/bin.tar.gz \ + examples/examples.tar.gz \ + data/data.tar.gz ; do + + echo "Extracting tarball $prefix/$tb" + cd $out/$prefix/$(dirname $tb) + tar xf $(basename $tb) + rm $(basename $tb) + done + + # Patch shebangs in start scripts . + cd $out/$prefix/bin/lin64 + for tool in \ + programmer \ + pgrcmd \ + diamond_env \ + powercal \ + model300 \ + update \ + diamond \ + debugger \ + ddtcmd \ + cableserver \ + revealrva \ + ipexpress \ + fileutility \ + diamond ; do + + echo "Patching script $prefix/bin/lin64/$tool..." + patchShebangs $tool + done + + # Patch executable ELFs. + for path in bin/lin64 ispfpga/bin/lin64 synpbase/linux_a_64 synpbase/linux_a_64/mbin; do + cd $out/$prefix/$path + for f in *; do + if ! file $f | grep -q "ELF 64-bit LSB executable" ; then + continue + fi + echo "Patching ELF $prefix/$path/$f..." + # We force RPATH otherwise libraries from LD_LIBRARY_PATH (which the + # tools mangle by themselves) will not be able to find their + # dependencies from nix. + patchelf \ + --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \ + --set-rpath "$libPath:$out/$prefix/bin/lin64:$out/$prefix/ispfpga/bin/lin64" \ + --force-rpath \ + $f + done + done + + # Patch absolute /usr/bin/id path in script + sed -i -e "s#/usr/bin/id#${coreutils}/bin/id#" $out/$prefix/synpbase/bin/config/platform_set + + # Remove 32-bit libz. + rm $out/$prefix/bin/lin64/libz.{so,so.1} + + # Make wrappers. The purpose of these is just to call the target program + # using its absolute path - otherwise, it will crash. + mkdir -p bin + for tool in diamond pnmainc ddtcmd ; do + makeWrapper $out/$prefix/bin/lin64/$tool $out/bin/$tool + done + ''; + + libPath = lib.makeLibraryPath [ + glib zlib freetype fontconfig + xorg.libSM xorg.libICE xorg.libXrender xorg.libXext xorg.libX11 xorg.libXt + libusb-compat-0_1 + ]; + + meta = { + description = "Vendor development tools for Lattice FPGA devices"; + longDescription = '' + Lattice Diamond software is the leading-edge software design environment + for cost- sensitive, low-power Lattice FPGA architectures. It is the + next-generation replacement for ispLEVER. + ''; + homepage = "https://www.latticesemi.com/latticediamond"; + license = lib.licenses.unfree; + maintainers = with lib.maintainers; [ q3k ]; + platforms = [ "x86_64-linux" ]; + }; +} |