From 10b7f30936e56cc17d1378c93b878b357f19e528 Mon Sep 17 00:00:00 2001 From: Federico Beffa Date: Fri, 14 Jan 2022 21:27:56 +0100 Subject: [PATCH] xyce,xyce-parallel: init at 7.4 Co-authored-by: Sandro and Kim Lindberger --- .../science/electronics/xyce/default.nix | 182 ++++++++++++++++++ pkgs/top-level/all-packages.nix | 6 + 2 files changed, 188 insertions(+) create mode 100644 pkgs/applications/science/electronics/xyce/default.nix diff --git a/pkgs/applications/science/electronics/xyce/default.nix b/pkgs/applications/science/electronics/xyce/default.nix new file mode 100644 index 000000000000..8d9b02d909e9 --- /dev/null +++ b/pkgs/applications/science/electronics/xyce/default.nix @@ -0,0 +1,182 @@ +{ stdenv +, fetchFromGitHub +, fetchgit +, lib +, autoconf +, automake +, bison +, blas +, flex +, fftw +, gfortran +, lapack +, libtool_2 +, mpi +, suitesparse +, trilinos +, withMPI ? false + # for doc +, texlive +, pandoc +, enableDocs ? true + # for tests +, bash +, bc +, openssh # required by MPI +, perl +, perlPackages +, python3 +, enableTests ? true +}: + +assert withMPI -> trilinos.withMPI; + +stdenv.mkDerivation rec { + pname = "xyce"; + version = "7.4.0"; + + srcs = [ + # useing fetchurl or fetchFromGitHub doesn't include the manuals + # due to .gitattributes files + (fetchgit { + url = "https://github.com/Xyce/Xyce.git"; + rev = "Release-${version}"; + sha256 = "sha256-sOHjQEo4FqlDseTtxFVdLa0SI/VAf2OkwQV7QSL7SNM="; + }) + (fetchFromGitHub { + owner = "Xyce"; + repo = "Xyce_Regression"; + rev = "Release-${version}"; + sha256 = "sha256-kSGUaFarOHDNJ8kA/TAGkmzicm9O7cfJ7mGFZcbqCZM="; + }) + ]; + + sourceRoot = "./Xyce"; + + preConfigure = "./bootstrap"; + + configureFlags = [ + "CXXFLAGS=-O3" + "--enable-xyce-shareable" + "--enable-shared" + "--enable-stokhos" + "--enable-amesos2" + ] ++ lib.optionals withMPI [ + "--enable-mpi" + "CXX=mpicxx" + "CC=mpicc" + "F77=mpif77" + ]; + + enableParallelBuilding = true; + + nativeBuildInputs = [ + autoconf + automake + gfortran + libtool_2 + ] ++ lib.optionals enableDocs [ + (texlive.combine { + inherit (texlive) + scheme-medium + koma-script + optional + framed + enumitem + multirow + preprint; + }) + ]; + + buildInputs = [ + bison + blas + flex + fftw + lapack + suitesparse + trilinos + ] ++ lib.optionals withMPI [ mpi ]; + + doCheck = enableTests; + + postPatch = '' + pushd ../source + find Netlists -type f -regex ".*\.sh\|.*\.pl" -exec chmod ugo+x {} \; + # some tests generate new files, some overwrite netlists + find . -type d -exec chmod u+w {} \; + find . -type f -name "*.cir" -exec chmod u+w {} \; + patchShebangs Netlists/ TestScripts/ + # patch script generating functions + sed -i -E 's|/usr/bin/env perl|${lib.escapeRegex perl.outPath}/bin/perl|' \ + TestScripts/XyceRegression/Testing/Netlists/RunOptions/runOptions.cir.sh + sed -i -E 's|/bin/sh|${lib.escapeRegex bash.outPath}/bin/sh|' \ + TestScripts/XyceRegression/Testing/Netlists/RunOptions/runOptions.cir.sh + popd + ''; + + checkInputs = [ + bc + perl + perlPackages.DigestMD5 + (python3.withPackages (ps: with ps; [ numpy scipy ])) + ] ++ lib.optionals withMPI [ mpi openssh ]; + + checkPhase = '' + XYCE_BINARY="$(pwd)/src/Xyce" + EXECSTRING="${lib.optionalString withMPI "mpirun -np 2 "}$XYCE_BINARY" + TEST_ROOT="$(pwd)/../source" + + # Honor the TMP variable + sed -i -E 's|/tmp|\$TMP|' $TEST_ROOT/TestScripts/suggestXyceTagList.sh + + EXLUDE_TESTS_FILE=$TMP/exclude_tests.$$ + # Gold standard has additional ":R" suffix in result column label + echo "Output/HB/hb-step-tecplot.cir" >> $EXLUDE_TESTS_FILE + # This test makes Xyce access /sys/class/net when run with MPI + ${lib.optionalString withMPI "echo \"CommandLine/command_line.cir\" >> $EXLUDE_TESTS_FILE"} + + $TEST_ROOT/TestScripts/run_xyce_regression \ + --output="$(pwd)/Xyce_Test" \ + --xyce_test="''${TEST_ROOT}" \ + --taglist="$($TEST_ROOT/TestScripts/suggestXyceTagList.sh "$XYCE_BINARY" | sed -E -e 's/TAGLIST=([^ ]+).*/\1/' -e '2,$d')" \ + --resultfile="$(pwd)/test_results" \ + --excludelist="$EXLUDE_TESTS_FILE" \ + "''${EXECSTRING}" + ''; + + outputs = [ "out" "doc" ]; + + postInstall = lib.optionalString enableDocs '' + local docFiles=("doc/Users_Guide/Xyce_UG" + "doc/Reference_Guide/Xyce_RG" + "doc/Release_Notes/Release_Notes_${lib.versions.majorMinor version}/Release_Notes_${lib.versions.majorMinor version}") + + # Release notes refer to an image not in the repo. + sed -i -E 's/\\includegraphics\[height=(0.5in)\]\{snllineblubrd\}/\\mbox\{\\rule\{0mm\}\{\1\}\}/' ''${docFiles[2]}.tex + + install -d $doc/share/doc/${pname}-${version}/ + for d in ''${docFiles[@]}; do + # Use a public document class + sed -i -E 's/\\documentclass\[11pt,report\]\{SANDreport\}/\\documentclass\[11pt,letterpaper\]\{scrreprt\}/' $d.tex + sed -i -E 's/\\usepackage\[sand\]\{optional\}/\\usepackage\[report\]\{optional\}/' $d.tex + pushd $(dirname $d) + make + install -t $doc/share/doc/${pname}-${version}/ $(basename $d.pdf) + popd + done + ''; + + meta = with lib; { + description = "High-performance analog circuit simulator"; + longDescription = '' + Xyce is a SPICE-compatible, high-performance analog circuit simulator, + capable of solving extremely large circuit problems by supporting + large-scale parallel computing platforms. + ''; + homepage = "https://xyce.sandia.gov"; + license = licenses.gpl3; + maintainers = with maintainers; [ fbeffa ]; + platforms = platforms.all; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index c50dacdd6cbe..14ed3fb2fb7e 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -32256,6 +32256,12 @@ with pkgs; xoscope = callPackage ../applications/science/electronics/xoscope { }; + xyce = callPackage ../applications/science/electronics/xyce { }; + + xyce-parallel = callPackage ../applications/science/electronics/xyce { + withMPI = true; + trilinos = trilinos-mpi; + }; ### SCIENCE / MATH