104 lines
2.7 KiB
Nix
104 lines
2.7 KiB
Nix
|
{ stdenv
|
||
|
, lib
|
||
|
, fetchFromGitHub
|
||
|
, blas
|
||
|
, boost
|
||
|
, cmake
|
||
|
, gfortran
|
||
|
, lapack
|
||
|
, mpi
|
||
|
, suitesparse
|
||
|
, swig
|
||
|
, withMPI ? false
|
||
|
}:
|
||
|
|
||
|
# NOTE: Not all packages are enabled. We specifically enable the ones
|
||
|
# required to build Xyce. If the need comes, we can enable more of them.
|
||
|
|
||
|
let
|
||
|
flagsBase = ''
|
||
|
-G "Unix Makefiles"
|
||
|
-DBUILD_SHARED_LIBS=ON
|
||
|
-DCMAKE_CXX_FLAGS="-O3 -fPIC"
|
||
|
-DCMAKE_C_FLAGS="-O3 -fPIC"
|
||
|
-DCMAKE_Fortran_FLAGS="-O3 -fPIC"
|
||
|
-DTrilinos_ENABLE_NOX=ON
|
||
|
-DNOX_ENABLE_LOCA=ON
|
||
|
-DTrilinos_ENABLE_EpetraExt=ON
|
||
|
-DEpetraExt_BUILD_BTF=ON
|
||
|
-DEpetraExt_BUILD_EXPERIMENTAL=ON
|
||
|
-DEpetraExt_BUILD_GRAPH_REORDERINGS=ON
|
||
|
-DTrilinos_ENABLE_TrilinosCouplings=ON
|
||
|
-DTrilinos_ENABLE_Ifpack=ON
|
||
|
-DTrilinos_ENABLE_AztecOO=ON
|
||
|
-DTrilinos_ENABLE_Belos=ON
|
||
|
-DTrilinos_ENABLE_Teuchos=ON
|
||
|
-DTeuchos_ENABLE_COMPLEX=ON
|
||
|
-DTrilinos_ENABLE_Amesos=ON
|
||
|
-DAmesos_ENABLE_KLU=ON
|
||
|
-DTrilinos_ENABLE_Amesos2=ON
|
||
|
-DAmesos2_ENABLE_KLU2=ON
|
||
|
-DAmesos2_ENABLE_Basker=ON
|
||
|
-DTrilinos_ENABLE_Sacado=ON
|
||
|
-DTrilinos_ENABLE_Stokhos=ON
|
||
|
-DTrilinos_ENABLE_Kokkos=ON
|
||
|
-DTrilinos_ENABLE_ALL_OPTIONAL_PACKAGES=OFF
|
||
|
-DTrilinos_ENABLE_CXX11=ON
|
||
|
-DTPL_ENABLE_AMD=ON
|
||
|
-DTPL_ENABLE_BLAS=ON
|
||
|
-DTPL_ENABLE_LAPACK=ON
|
||
|
'';
|
||
|
flagsParallel = ''
|
||
|
-DCMAKE_C_COMPILER=mpicc
|
||
|
-DCMAKE_CXX_COMPILER=mpic++
|
||
|
-DCMAKE_Fortran_COMPILER=mpif77
|
||
|
-DTrilinos_ENABLE_Isorropia=ON
|
||
|
-DTrilinos_ENABLE_Zoltan=ON
|
||
|
-DTPL_ENABLE_MPI=ON
|
||
|
'';
|
||
|
in
|
||
|
stdenv.mkDerivation rec {
|
||
|
pname = "trilinos";
|
||
|
# Xyce 7.4 requires version 12.12.1
|
||
|
# nixpkgs-update: no auto update
|
||
|
version = "12.12.1";
|
||
|
|
||
|
src = fetchFromGitHub {
|
||
|
owner = "trilinos";
|
||
|
repo = "Trilinos";
|
||
|
rev = "${pname}-release-${lib.replaceStrings [ "." ] [ "-" ] version}";
|
||
|
sha256 = "sha256-Nqjr7RAlUHm6vs87a1P84Y7BIZEL0Vs/A1Z6dykfv+o=";
|
||
|
};
|
||
|
|
||
|
nativeBuildInputs = [ cmake gfortran swig ];
|
||
|
|
||
|
buildInputs = [ blas boost lapack suitesparse ] ++ lib.optionals withMPI [ mpi ];
|
||
|
|
||
|
preConfigure =
|
||
|
if withMPI then ''
|
||
|
cmakeFlagsArray+=(${flagsBase} ${flagsParallel})
|
||
|
''
|
||
|
else ''
|
||
|
cmakeFlagsArray+=(${flagsBase})
|
||
|
'';
|
||
|
|
||
|
passthru = {
|
||
|
inherit withMPI;
|
||
|
};
|
||
|
|
||
|
meta = with lib; {
|
||
|
description = "Engineering and scientific problems algorithms";
|
||
|
mainProgram = "nvcc_wrapper";
|
||
|
longDescription = ''
|
||
|
The Trilinos Project is an effort to develop algorithms and enabling
|
||
|
technologies within an object-oriented software framework for the
|
||
|
solution of large-scale, complex multi-physics engineering and scientific
|
||
|
problems.
|
||
|
'';
|
||
|
homepage = "https://trilinos.org";
|
||
|
license = licenses.bsd3;
|
||
|
maintainers = with maintainers; [ fbeffa ];
|
||
|
platforms = platforms.all;
|
||
|
};
|
||
|
}
|