diff --git a/overlay.nix b/overlay.nix index 6d2af14b..6def534b 100644 --- a/overlay.nix +++ b/overlay.nix @@ -16,6 +16,7 @@ let clangOmpss2NodesOmpv = callPackage ./pkgs/llvm-ompss2/default.nix { ompss2rt = final.nodes; openmp = final.openmpv; }; clangOmpss2Unwrapped = callPackage ./pkgs/llvm-ompss2/clang.nix { }; cudainfo = prev.callPackage ./pkgs/cudainfo/default.nix { }; + clsparse = callPackage ./pkgs/clsparse/package.nix { }; #extrae = callPackage ./pkgs/extrae/default.nix { }; # Broken and outdated gpi-2 = callPackage ./pkgs/gpi-2/default.nix { }; intelPackages_2023 = callPackage ./pkgs/intel-oneapi/2023.nix { }; diff --git a/pkgs/clsparse/install_target.patch b/pkgs/clsparse/install_target.patch new file mode 100644 index 00000000..6cc13208 --- /dev/null +++ b/pkgs/clsparse/install_target.patch @@ -0,0 +1,53 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 3d139ed..15ffc14 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -176,32 +179,22 @@ if( BUILD_clSPARSE OR BUILD_SAMPLES ) + if( BUILD_clSPARSE ) + message( STATUS "Setting up clSPARSE external..." ) + +- if ( BUILD_SAMPLES ) +- # If the user elects to build samples, then we must build and install clSPARSE +- # The install location is set as a subdirectory of the SuperBuild +- ExternalProject_Add( +- clSPARSE +- DEPENDS ${clSPARSE.Dependencies} +- SOURCE_DIR ${PROJECT_SOURCE_DIR}/src +- BINARY_DIR clSPARSE-build +- INSTALL_DIR clSPARSE-package +- CMAKE_ARGS ${clSPARSE.Cmake.Args} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} +- -DBUILD_CLVERSION=${BUILD_CLVERSION} -DCMAKE_INSTALL_PREFIX= +- -DUSE_SYSTEM_CL2HPP:BOOL=${USE_SYSTEM_CL2HPP} +- ) +- else( ) +- # If the user does not want to build samples, then build clSPARSE but don't automatically +- # install it +- ExternalProject_Add( +- clSPARSE +- DEPENDS ${clSPARSE.Dependencies} +- SOURCE_DIR ${PROJECT_SOURCE_DIR}/src +- BINARY_DIR clSPARSE-build +- CMAKE_ARGS ${clSPARSE.Cmake.Args} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} +- -DBUILD_CLVERSION=${BUILD_CLVERSION} -DUSE_SYSTEM_CL2HPP:BOOL=${USE_SYSTEM_CL2HPP} +- INSTALL_COMMAND "" +- ) +- endif( ) ++ ExternalProject_Add( ++ clSPARSE ++ DEPENDS ${clSPARSE.Dependencies} ++ SOURCE_DIR ${PROJECT_SOURCE_DIR}/src ++ BINARY_DIR clSPARSE-build ++ INSTALL_DIR clSPARSE-package ++ CMAKE_ARGS ${clSPARSE.Cmake.Args} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} ++ -DBUILD_CLVERSION=${BUILD_CLVERSION} -DCMAKE_INSTALL_PREFIX= ++ -DUSE_SYSTEM_CL2HPP:BOOL=${USE_SYSTEM_CL2HPP} ++ ) ++ ++ install( ++ DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/clSPARSE-package/ ++ DESTINATION ${CMAKE_INSTALL_PREFIX} ++ USE_SOURCE_PERMISSIONS ++ ) + + endif( ) + diff --git a/pkgs/clsparse/package.nix b/pkgs/clsparse/package.nix new file mode 100644 index 00000000..1bde7cbd --- /dev/null +++ b/pkgs/clsparse/package.nix @@ -0,0 +1,70 @@ +{ + lib, + stdenv, + fetchFromGitHub, + fetchpatch, + boost, + gtest, + ocl-icd, + opencl-headers, + opencl-clhpp, + cmake, +}: + +stdenv.mkDerivation rec { + pname = "clsparse"; + version = "0.10.2.0"; + + src = fetchFromGitHub { + owner = "clMathLibraries"; + repo = "clSPARSE"; + rev = "v${version}"; + hash = "sha256-jIauCtUyPEIx7pFI3qH0WagV+t/fvro0OsGgONBJm0s="; + }; + + patches = [ + ./pass_include_dir.patch + ./install_target.patch + (fetchpatch { + name = "remove-gettypecode.patch"; + url = "https://patch-diff.githubusercontent.com/raw/clMathLibraries/clSPARSE/pull/210.patch"; + hash = "sha256-9Q+tk7RMdWE4MCnbvWlsI0MIgBYKIWR2jIC1bICtIjU="; + }) + ]; + + postInstallPhase = '' + mv $installDir/lib64 lib + ln -s lib/ lib64 + ''; + + env.NIX_CFLAGS_COMPILE = "-std=c++17"; + + nativeBuildInputs = [ + cmake + ]; + + buildInputs = [ + boost + ocl-icd + opencl-headers + opencl-clhpp + ]; + + cmakeFlags = [ + "-DBUILD_Boost=OFF" + "-DBUILD_gMock=OFF" + "-DBUILD_MTX=OFF" + "-DBUILD_SAMPLES=OFF" + "-DUSE_SYSTEM_CL2HPP=ON" + "-DGMOCK_ROOT=${gtest}" + "-DGTEST_INCLUDE_DIR=${gtest.src}/googletest/include" + ]; + + meta = { + description = "A software library containing Sparse functions written in OpenCL"; + homepage = "https://github.com/clMathLibraries/clSPARSE"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ leixb ]; + platforms = lib.platforms.all; + }; +} diff --git a/pkgs/clsparse/pass_include_dir.patch b/pkgs/clsparse/pass_include_dir.patch new file mode 100644 index 00000000..904a4a65 --- /dev/null +++ b/pkgs/clsparse/pass_include_dir.patch @@ -0,0 +1,14 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 3d139ed..b7ea2d3 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -132,6 +132,9 @@ else( ) + set( GMOCK_ROOT "$ENV{GMOCK_ROOT}" ) + endif( ) + list( APPEND clSPARSE.Cmake.Args -DGTEST_ROOT=${GMOCK_ROOT} ) ++ if( DEFINED GTEST_INCLUDE_DIR ) ++ list( APPEND clSPARSE.Cmake.Args -DGTEST_INCLUDE_DIR=${GTEST_INCLUDE_DIR} ) ++ endif( ) + endif( ) + endif( ) +