diff --git a/pkgs/development/libraries/science/math/clmagma/default.nix b/pkgs/development/libraries/science/math/clmagma/default.nix new file mode 100644 index 000000000000..b5c59a83277d --- /dev/null +++ b/pkgs/development/libraries/science/math/clmagma/default.nix @@ -0,0 +1,75 @@ +{ stdenv, fetchurl, gfortran, opencl-headers, clblas, ocl-icd, mkl, intel-ocl }: + +with stdenv.lib; + +let + version = "1.3.0"; + incfile = builtins.toFile "make.inc.custom" '' + CC = g++ + FORT = gfortran + + ARCH = ar + ARCHFLAGS = cr + RANLIB = ranlib + + OPTS = -fPIC -O3 -DADD_ -Wall + FOPTS = -fPIC -O3 -DADD_ -Wall -x f95-cpp-input + F77OPTS = -fPIC -O3 -DADD_ -Wall + LDOPTS = -fPIC + + -include make.check-mkl + -include make.check-clblas + + # Gnu mkl is not available I guess? + #LIB = -lmkl_gf_lp64 -lmkl_gnu_thread -lmkl_core -lpthread -lm -fopenmp + LIB = -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -liomp5 -lm -fopenmp + LIB += -lclBLAS -lOpenCL + + LIBDIR = -L$(MKLROOT)/lib/intel64 \ + -L$(MKLROOT)/../compiler/lib/intel64 \ + -L$(clBLAS)/lib64 + + INC = -I$(clBLAS)/include + #-I$(AMDAPP)/include + ''; +in stdenv.mkDerivation { + name = "clmagma-${version}"; + src = fetchurl { + url = "http://icl.cs.utk.edu/projectsfiles/magma/cl/clmagma-${version}.tar.gz"; + sha256 = "1n27ny0xhwirw2ydn46pfcwy53gzia9zbam4irx44fd4d7f9ydv7"; + name = "clmagma-${version}.tar.gz"; + }; + + buildInputs = [ + gfortran + clblas + opencl-headers + ocl-icd + mkl + intel-ocl + ]; + + enableParallelBuilding=true; + + MKLROOT = "${mkl}"; + clBLAS = "${clblas}"; + + # Otherwise build looks for it in /run/opengl-driver/etc/OpenCL/vendors, + # which is not available. + OPENCL_VENDOR_PATH="${intel-ocl}/etc/OpenCL/vendors"; + + preBuild = '' + # By default it tries to use GPU, and thus fails for CPUs + sed -i "s/CL_DEVICE_TYPE_GPU/CL_DEVICE_TYPE_DEFAULT/" interface_opencl/clmagma_runtime.cpp + sed -i "s%/usr/local/clmagma%/$out%" Makefile.internal + cp ${incfile} make.inc + ''; + + meta = with stdenv.lib; { + description = "Matrix Algebra on GPU and Multicore Architectures, OpenCL port"; + license = licenses.bsd3; + homepage = http://icl.cs.utk.edu/magma/index.html; + platforms = platforms.linux; + maintainers = with maintainers; [ volhovm ]; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 99b1aa1a02a8..9c977dfddfa2 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -23883,6 +23883,7 @@ in lie = callPackage ../applications/science/math/LiE { }; magma = callPackage ../development/libraries/science/math/magma { }; + clmagma = callPackage ../development/libraries/science/math/clmagma { }; mathematica = callPackage ../applications/science/math/mathematica { }; mathematica9 = callPackage ../applications/science/math/mathematica/9.nix { };