diff --git a/pkgs/development/libraries/rocfft/default.nix b/pkgs/development/libraries/rocfft/default.nix index 535d27feff6f..ecbaa77b5aa3 100644 --- a/pkgs/development/libraries/rocfft/default.nix +++ b/pkgs/development/libraries/rocfft/default.nix @@ -2,7 +2,6 @@ , stdenv , fetchFromGitHub , rocmUpdateScript -, runCommand , cmake , rocm-cmake , rocrand @@ -18,136 +17,9 @@ , buildBenchmarks ? false }: -let - name-zero = "librocfft-device-0.so.0.1"; - name-one = "librocfft-device-1.so.0.1"; - name-two = "librocfft-device-2.so.0.1"; - name-three = "librocfft-device-3.so.0.1"; - - # This is over 3GB, to allow hydra caching we separate it - rf = stdenv.mkDerivation (finalAttrs: { - pname = "rocfft"; - version = "5.4.3"; - - outputs = [ - "out" - "libzero" - "libone" - "libtwo" - "libthree" - ] ++ lib.optionals buildTests [ - "test" - ] ++ lib.optionals buildBenchmarks [ - "benchmark" - ]; - - src = fetchFromGitHub { - owner = "ROCmSoftwarePlatform"; - repo = "rocFFT"; - rev = "rocm-${finalAttrs.version}"; - hash = "sha256-FsefE0B2hF5ZcHDB6TscwFeZ1NKFkWX7VDpEvvbDbOk="; - }; - - nativeBuildInputs = [ - cmake - rocm-cmake - hip - ]; - - buildInputs = [ - sqlite - python3 - ] ++ lib.optionals buildTests [ - gtest - ] ++ lib.optionals (buildTests || buildBenchmarks) [ - rocrand - boost - fftw - fftwFloat - openmp - ]; - - propagatedBuildInputs = lib.optionals buildTests [ - fftw - fftwFloat - ]; - - cmakeFlags = [ - "-DCMAKE_C_COMPILER=hipcc" - "-DCMAKE_CXX_COMPILER=hipcc" - "-DUSE_HIP_CLANG=ON" - "-DSQLITE_USE_SYSTEM_PACKAGE=ON" - # Manually define CMAKE_INSTALL_ - # See: https://github.com/NixOS/nixpkgs/pull/197838 - "-DCMAKE_INSTALL_BINDIR=bin" - "-DCMAKE_INSTALL_LIBDIR=lib" - "-DCMAKE_INSTALL_INCLUDEDIR=include" - ] ++ lib.optionals buildTests [ - "-DBUILD_CLIENTS_TESTS=ON" - ] ++ lib.optionals buildBenchmarks [ - "-DBUILD_CLIENTS_RIDER=ON" - "-DBUILD_CLIENTS_SAMPLES=ON" - ]; - - postInstall = '' - mv $out/lib/${name-zero} $libzero - mv $out/lib/${name-one} $libone - mv $out/lib/${name-two} $libtwo - mv $out/lib/${name-three} $libthree - ln -s $libzero $out/lib/${name-zero} - ln -s $libone $out/lib/${name-one} - ln -s $libtwo $out/lib/${name-two} - ln -s $libthree $out/lib/${name-three} - '' + lib.optionalString buildTests '' - mkdir -p $test/{bin,lib/fftw} - cp -a $out/bin/* $test/bin - ln -s ${fftw}/lib/libfftw*.so $test/lib/fftw - ln -s ${fftwFloat}/lib/libfftw*.so $test/lib/fftw - rm -r $out/lib/fftw - rm $test/bin/{rocfft_rtc_helper,*-rider} || true - '' + lib.optionalString buildBenchmarks '' - mkdir -p $benchmark/bin - cp -a $out/bin/* $benchmark/bin - rm $benchmark/bin/{rocfft_rtc_helper,*-test} || true - '' + lib.optionalString (buildTests || buildBenchmarks ) '' - mv $out/bin/rocfft_rtc_helper $out - rm -r $out/bin/* - mv $out/rocfft_rtc_helper $out/bin - ''; - - passthru.updateScript = rocmUpdateScript { - name = finalAttrs.pname; - owner = finalAttrs.src.owner; - repo = finalAttrs.src.repo; - }; - - meta = with lib; { - description = "FFT implementation for ROCm "; - homepage = "https://github.com/ROCmSoftwarePlatform/rocFFT"; - license = with licenses; [ mit ]; - maintainers = teams.rocm.members; - platforms = platforms.linux; - broken = versions.minor finalAttrs.version != versions.minor hip.version; - }; - }); - - rf-zero = runCommand name-zero { preferLocalBuild = true; } '' - cp -a ${rf.libzero} $out - ''; - - rf-one = runCommand name-one { preferLocalBuild = true; } '' - cp -a ${rf.libone} $out - ''; - - rf-two = runCommand name-two { preferLocalBuild = true; } '' - cp -a ${rf.libtwo} $out - ''; - - rf-three = runCommand name-three { preferLocalBuild = true; } '' - cp -a ${rf.libthree} $out - ''; -in stdenv.mkDerivation { - inherit (rf) pname version src passthru meta; +stdenv.mkDerivation (finalAttrs: { + pname = "rocfft"; + version = "5.4.3"; outputs = [ "out" @@ -157,43 +29,83 @@ in stdenv.mkDerivation { "benchmark" ]; - dontUnpack = true; - dontPatch = true; - dontConfigure = true; - dontBuild = true; + src = fetchFromGitHub { + owner = "ROCmSoftwarePlatform"; + repo = "rocFFT"; + rev = "rocm-${finalAttrs.version}"; + hash = "sha256-FsefE0B2hF5ZcHDB6TscwFeZ1NKFkWX7VDpEvvbDbOk="; + }; - installPhase = '' - runHook preInstall + nativeBuildInputs = [ + cmake + rocm-cmake + hip + ]; - mkdir -p $out/lib - ln -sf ${rf-zero} $out/lib/${name-zero} - ln -sf ${rf-one} $out/lib/${name-one} - ln -sf ${rf-two} $out/lib/${name-two} - ln -sf ${rf-three} $out/lib/${name-three} - cp -an ${rf}/* $out - '' + lib.optionalString buildTests '' - cp -a ${rf.test} $test + buildInputs = [ + sqlite + python3 + ] ++ lib.optionals buildTests [ + gtest + ] ++ lib.optionals (buildTests || buildBenchmarks) [ + rocrand + boost + fftw + fftwFloat + openmp + ]; + + propagatedBuildInputs = lib.optionals buildTests [ + fftw + fftwFloat + ]; + + cmakeFlags = [ + "-DCMAKE_C_COMPILER=hipcc" + "-DCMAKE_CXX_COMPILER=hipcc" + "-DUSE_HIP_CLANG=ON" + "-DSQLITE_USE_SYSTEM_PACKAGE=ON" + # Manually define CMAKE_INSTALL_ + # See: https://github.com/NixOS/nixpkgs/pull/197838 + "-DCMAKE_INSTALL_BINDIR=bin" + "-DCMAKE_INSTALL_LIBDIR=lib" + "-DCMAKE_INSTALL_INCLUDEDIR=include" + ] ++ lib.optionals buildTests [ + "-DBUILD_CLIENTS_TESTS=ON" + ] ++ lib.optionals buildBenchmarks [ + "-DBUILD_CLIENTS_RIDER=ON" + "-DBUILD_CLIENTS_SAMPLES=ON" + ]; + + postInstall = lib.optionalString buildTests '' + mkdir -p $test/{bin,lib/fftw} + cp -a $out/bin/* $test/bin + ln -s ${fftw}/lib/libfftw*.so $test/lib/fftw + ln -s ${fftwFloat}/lib/libfftw*.so $test/lib/fftw + rm -r $out/lib/fftw + rm $test/bin/{rocfft_rtc_helper,*-rider} || true '' + lib.optionalString buildBenchmarks '' - cp -a ${rf.benchmark} $benchmark - '' + '' - runHook postInstall + mkdir -p $benchmark/bin + cp -a $out/bin/* $benchmark/bin + rm $benchmark/bin/{rocfft_rtc_helper,*-test} || true + '' + lib.optionalString (buildTests || buildBenchmarks ) '' + mv $out/bin/rocfft_rtc_helper $out + rm -r $out/bin/* + mv $out/rocfft_rtc_helper $out/bin ''; - # Fix paths - preFixup = '' - substituteInPlace $out/include/*.h $out/rocfft/include/*.h \ - --replace "${rf}" "$out" + passthru.updateScript = rocmUpdateScript { + name = finalAttrs.pname; + owner = finalAttrs.src.owner; + repo = finalAttrs.src.repo; + }; - patchelf --set-rpath \ - $(patchelf --print-rpath $out/lib/librocfft.so | sed 's,${rf}/lib,'"$out/lib"',') \ - $out/lib/librocfft.so - '' + lib.optionalString buildTests '' - patchelf --set-rpath \ - $(patchelf --print-rpath $test/bin/rocfft-test | sed 's,${rf}/lib,'"$out/lib"',') \ - $test/bin/rocfft-test - '' + lib.optionalString buildBenchmarks '' - patchelf --set-rpath \ - $(patchelf --print-rpath $benchmark/bin/rocfft-rider | sed 's,${rf}/lib,'"$out/lib"',') \ - $benchmark/bin/rocfft-rider - ''; -} + meta = with lib; { + description = "FFT implementation for ROCm "; + homepage = "https://github.com/ROCmSoftwarePlatform/rocFFT"; + license = with licenses; [ mit ]; + maintainers = teams.rocm.members; + platforms = platforms.linux; + broken = versions.minor finalAttrs.version != versions.minor hip.version; + }; +})