85 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| { lib
 | |
| , fetchFromGitHub
 | |
| , cmake
 | |
| , withCFlags
 | |
| , intelPackages
 | |
| 
 | |
| , mklSupport ? true
 | |
| 
 | |
| , config
 | |
| 
 | |
| , cudaSupport ? config.cudaSupport
 | |
| , cudaPackages ? { }
 | |
| 
 | |
| , rocmSupport ? config.rocmSupport
 | |
| , hipTargets ? null # only one target at a time supported
 | |
| , rocmPackages ? { }
 | |
| }:
 | |
| 
 | |
| let
 | |
|   # rocmSupport is not enough, we need a specific target
 | |
|   enableHip = rocmSupport && hipTargets != null;
 | |
| 
 | |
|   stdenv = withCFlags (lib.optionals cudaSupport [ "--cuda-path=${cudaPackages.cudatoolkit}" ]) intelPackages.stdenv;
 | |
| in
 | |
| 
 | |
|   # at least one backend has to be enabled
 | |
|   assert mklSupport || cudaSupport || enableHip;
 | |
| 
 | |
| stdenv.mkDerivation rec {
 | |
|   pname = "oneMath";
 | |
|   version = "0.8";
 | |
| 
 | |
|   src = fetchFromGitHub {
 | |
|     owner = "uxlfoundation";
 | |
|     repo = "oneMath";
 | |
|     rev = "v${version}";
 | |
|     sha256 = "sha256-xK8lKI3oqKlx3xtvdScpMq+HXAuoYCP0BZdkEqnJP5o=";
 | |
|   };
 | |
| 
 | |
|   cmakeFlags = [
 | |
|     (lib.cmakeBool "ENABLE_MKLCPU_BACKEND"    mklSupport)
 | |
|     (lib.cmakeBool "ENABLE_MKLGPU_BACKEND"    mklSupport)
 | |
| 
 | |
|     (lib.cmakeBool "ENABLE_CUBLAS_BACKEND"    cudaSupport)
 | |
|     (lib.cmakeBool "ENABLE_CUFFT_BACKEND"     cudaSupport)
 | |
|     (lib.cmakeBool "ENABLE_CURAND_BACKEND"    cudaSupport)
 | |
|     (lib.cmakeBool "ENABLE_CUSOLVER_BACKEND"  cudaSupport)
 | |
|     (lib.cmakeBool "ENABLE_CUSPARSE_BACKEND"  cudaSupport)
 | |
| 
 | |
|     (lib.cmakeBool "ENABLE_ROCBLAS_BACKEND"   enableHip)
 | |
|     (lib.cmakeBool "ENABLE_ROCFFT_BACKEND"    enableHip)
 | |
|     (lib.cmakeBool "ENABLE_ROCSOLVER_BACKEND" enableHip)
 | |
|     (lib.cmakeBool "ENABLE_ROCRAND_BACKEND"   enableHip)
 | |
|     (lib.cmakeBool "ENABLE_ROCSPARSE_BACKEND" enableHip)
 | |
| 
 | |
|     (lib.cmakeBool "BUILD_FUNCTIONAL_TESTS" false)
 | |
|     (lib.cmakeBool "BUILD_EXAMPLES" false)
 | |
|   ] ++ lib.optionals enableHip [
 | |
|     (lib.cmakeFeature "HIP_TARGETS" hipTargets)
 | |
|   ];
 | |
| 
 | |
|   nativeBuildInputs = [ cmake ];
 | |
|   buildInputs = lib.optionals (mklSupport) [
 | |
|     intelPackages.mkl
 | |
|     intelPackages.tbb
 | |
|   ] ++ lib.optionals (enableHip) [
 | |
|     rocmPackages.rocmPath
 | |
|     rocmPackages.rocblas
 | |
|     rocmPackages.rocfft
 | |
|     rocmPackages.rocsolver
 | |
|     rocmPackages.rocrand
 | |
|     rocmPackages.rocsparse
 | |
|   ] ++ lib.optionals (cudaSupport) [
 | |
|     (lib.getDev cudaPackages.cuda_cudart)
 | |
|     cudaPackages.cudatoolkit
 | |
| 
 | |
|     cudaPackages.libcublas
 | |
|     cudaPackages.libcurand
 | |
|     cudaPackages.libcufft
 | |
|     cudaPackages.libcusparse
 | |
|     cudaPackages.libcusolver
 | |
|   ];
 | |
| 
 | |
| }
 |