Blob Blame History Raw
%global pypi_name torchaudio

%bcond_without gitcommit
%if %{with gitcommit}
# The release/2.3.0
%global commit0 17a70815259222570feb071034acd7bae2adc019
%global shortcommit0 %(c=%{commit0}; echo ${c:0:7})
%global date0 20240318
%global pypi_version 2.3.0
%else
%global pypi_version 2.3.0
%endif

%global desc %{expand: \
The aim of torchaudio is to apply PyTorch to the audio domain. By supporting
PyTorch, torchaudio follows the same philosophy of providing strong GPU
acceleration, having a focus on trainable features through the autograd
system, and having consistent style (tensor names and dimension names).
Therefore, it is primarily a machine learning library and not a general
signal processing library. The benefits of PyTorch can be seen in torchaudio
through having all the computations be through PyTorch operations which
makes it easy to use and feel like a natural extension. }

%ifarch x86_64
%if 0%{?fedora}
%bcond_without rocm
%else
%bcond_with rocm
%endif
%endif
# Which families gpu build for
%global rocm_gpu_list gfx8 gfx9 gfx10 gfx11
%global rocm_default_gpu default
%bcond_without rocm_loop

# torch toolchain
%global toolchain gcc

Name:           python-%{pypi_name}
%if %{with gitcommit}
Version:        %{pypi_version}^git%{date0}.%{shortcommit0}
%else
Version:        %{pypi_version}
%endif
Release:        %autorelease
Summary:        Audio signal processing, powered by PyTorch

License:        BSD-2-Clause AND BSD-3-Clause AND Apache-2.0 AND MIT
URL:            https://github.com/pytorch/audio
%if %{with gitcommit}
Source0:        %{url}/archive/%{commit0}/audio-%{shortcommit0}.tar.gz
%else
Source0:        %{url}/archive/refs/tags/v%{version}.tar.gz#/audio-v%{version}.tar.gz
%endif

# Limit to these because that is what torch is on
ExclusiveArch:  x86_64 aarch64

BuildRequires:  cmake
BuildRequires:  gcc-c++
BuildRequires:  ffmpeg-free
BuildRequires:  ffmpeg-free-devel
BuildRequires:  ninja-build
BuildRequires:  protobuf-devel
BuildRequires:  sox-devel

%if %{with rocm}
BuildRequires:  hipblas-devel
BuildRequires:  hipcub-devel
BuildRequires:  hipfft-devel
BuildRequires:  hiprand-devel
BuildRequires:  hipsparse-devel
BuildRequires:  hipsolver-devel
BuildRequires:  miopen-devel
BuildRequires:  rocblas-devel
BuildRequires:  rocrand-devel
BuildRequires:  rocfft-devel
BuildRequires:  rocprim-devel
BuildRequires:  rocm-cmake
BuildRequires:  rocm-comgr-devel
BuildRequires:  rocm-core-devel
BuildRequires:  rocm-hip-devel
BuildRequires:  rocm-runtime-devel
BuildRequires:  rocm-rpm-macros
BuildRequires:  rocm-rpm-macros-modules
BuildRequires:  rocthrust-devel
BuildRequires:  roctracer-devel
%endif

BuildRequires:  python3-devel
BuildRequires:  python3dist(setuptools)
BuildRequires:  python3dist(torch)

%description
%{desc}

%package -n     python3-%{pypi_name}
Summary:        Audio signal processing, powered by PyTorch

%description -n python3-%{pypi_name}
%{desc}

%if %{with rocm}
%package -n python3-%{pypi_name}-rocm-gfx8
Summary:        %{name} for ROCm gfx8

%description -n python3-%{pypi_name}-rocm-gfx8
%{summary}

%package -n python3-%{pypi_name}-rocm-gfx9
Summary:        %{name} for ROCm gfx9

%description -n python3-%{pypi_name}-rocm-gfx9
%{summary}

%package -n python3-%{pypi_name}-rocm-gfx10
Summary:        %{name} for ROCm gfx10

%description -n python3-%{pypi_name}-rocm-gfx10
%{summary}

%package -n python3-%{pypi_name}-rocm-gfx11
Summary:        %{name} for ROCm gfx11

%description -n python3-%{pypi_name}-rocm-gfx11
%{summary}

%endif

%prep
%if %{with gitcommit}
%autosetup -p1 -n audio-%{commit0}
%else
%autosetup -p1 -n audio-%{version}
%endif

rm -rf third_party/*

%build
# Building uses python3_sitearch/torch/utils/cpp_extension.py
# cpp_extension.py does a general linking with all the pytorch libs which
# leads warnings being reported by rpmlint.
#
# pyproject_wheel tries to use pypi's cmake, revert back to py3_build

export BUILD_SOX=OFF
export USE_FFMPEG=OFF
%if %{with rocm}
export USE_ROCM=ON
export HIP_PATH=`hipconfig -p`
export ROCM_PATH=`hipconfig -R`
export HIP_CLANG_PATH=`hipconfig -l`
RESOURCE_DIR=`${HIP_CLANG_PATH}/clang -print-resource-dir`
export DEVICE_LIB_PATH=${RESOURCE_DIR}/amdgcn/bitcode

gpu=%{rocm_default_gpu}
module load rocm/$gpu
export PYTORCH_ROCM_ARCH=$ROCM_GPUS
%py3_build
mv build build-${gpu}
module purge

%if %{with rocm_loop}
for gpu in %{rocm_gpu_list}
do
    module load rocm/$gpu
    export PYTORCH_ROCM_ARCH=$ROCM_GPUS
    %py3_build
    mv build build-${gpu}
    module purge
done
%endif

%else

%py3_build

%endif

%install

%if %{with rocm}

export USE_ROCM=ON
export HIP_PATH=`hipconfig -p`
export ROCM_PATH=`hipconfig -R`
export HIP_CLANG_PATH=`hipconfig -l`
RESOURCE_DIR=`${HIP_CLANG_PATH}/clang -print-resource-dir`
export DEVICE_LIB_PATH=${RESOURCE_DIR}/amdgcn/bitcode

gpu=%{rocm_default_gpu}
module load rocm/$gpu
export PYTORCH_ROCM_ARCH=$ROCM_GPUS
mv build-${gpu} build
%py3_install
mv build build-${gpu}
module purge

%if %{with rocm_loop}
for gpu in %{rocm_gpu_list}
do
    module load rocm/$gpu
    export PYTORCH_ROCM_ARCH=$ROCM_GPUS
    mv build-${gpu} build
    # need to customize the install location, so replace py3_install
    %{__python3} %{py_setup} %{?py_setup_args} install -O1 --skip-build --root %{buildroot} --prefix /usr/lib64/rocm/${gpu} %{?*}
    rm -rfv %{buildroot}/usr/lib/rocm/${gpu}/bin/__pycache__
    mv build build-${gpu}
    module purge
done
%endif

%else
%py3_install

%endif

# exec permission
for f in `find %{buildroot} -name '*.py'`; do
    if [ ! -x $f ]; then
        sed -i '1{\@^#!/usr/bin@d}' $f
    fi
done

%files -n python3-%{pypi_name}
%license LICENSE
%doc README.md 
%{python3_sitearch}/%{pypi_name}
%{python3_sitearch}/torio
%{python3_sitearch}/%{pypi_name}-*.egg-info/

%if %{with rocm}
%files -n python3-%{pypi_name}-rocm-gfx8
%{_libdir}/rocm/gfx8/lib64/*

%files -n python3-%{pypi_name}-rocm-gfx9
%{_libdir}/rocm/gfx9/lib64/*

%files -n python3-%{pypi_name}-rocm-gfx10
%{_libdir}/rocm/gfx10/lib64/*

%files -n python3-%{pypi_name}-rocm-gfx11
%{_libdir}/rocm/gfx11/lib64/*
%endif

%changelog
%autochangelog