diff --git a/arch/git/PKGBUILD b/arch/git/PKGBUILD index 9db129b..b4f5291 100644 --- a/arch/git/PKGBUILD +++ b/arch/git/PKGBUILD @@ -113,10 +113,52 @@ build() { FULL_BUILD=true if [[ "${CARCH}" == "x86_64" ]]; then - pacman -Qi cuda &> /dev/null && HAS_CUDA=true || HAS_CUDA=false + CUDA_ROOT="${CUDAToolkit_ROOT:-${CUDA_PATH:-${CUDA_HOME:-}}}" + CUDA_NVCC= + if [[ -n "${CUDACXX:-}" ]] && [[ "${CUDACXX}" != *" "* ]]; then + if [[ "${CUDACXX}" == */* ]] && [[ -x "${CUDACXX}" ]]; then + CUDA_NVCC="${CUDACXX}" + elif [[ "${CUDACXX}" != */* ]]; then + CUDA_NVCC="$(command -v "${CUDACXX}" || true)" + fi + fi + if [[ -n "${CUDA_ROOT}" ]] && [[ -x "${CUDA_ROOT}/bin/nvcc" ]]; then + CUDA_NVCC="${CUDA_ROOT}/bin/nvcc" + fi + if [[ -z "${CUDA_NVCC}" ]]; then + CUDA_NVCC="$(command -v nvcc || true)" + fi + if [[ -z "${CUDA_ROOT}" ]] && [[ -n "${CUDA_NVCC}" ]]; then + CUDA_ROOT="$(dirname "$(dirname "${CUDA_NVCC}")")" + fi + if [[ -z "${CUDA_NVCC}" ]] && [[ -x /opt/cuda/bin/nvcc ]]; then + CUDA_ROOT=/opt/cuda + CUDA_NVCC=/opt/cuda/bin/nvcc + fi + + pacman -Qi cuda &> /dev/null && [[ -n "${CUDA_NVCC}" ]] && HAS_CUDA=true || HAS_CUDA=false if [[ $HAS_CUDA = true ]] && [[ $FULL_BUILD = true ]]; then - CMAKE+=" -DBUILD_WHISPERCPP_CUBLAS=ON -DCMAKE_CUDA_ARCHITECTURES=native" + export CUDA_PATH="${CUDA_ROOT}" + export CUDAToolkit_ROOT="${CUDA_ROOT}" + export PATH="$(dirname "${CUDA_NVCC}"):$PATH" + CUDA_CMAKE="-DBUILD_WHISPERCPP_CUBLAS=ON \ + -DCMAKE_CUDA_ARCHITECTURES=native \ + -DCUDAToolkit_ROOT=${CUDA_ROOT}" + if [[ -z "${CUDACXX:-}" ]]; then + CUDA_CMAKE+=" -DCMAKE_CUDA_COMPILER=${CUDA_NVCC}" + fi + if [[ -n "${CUDAHOSTCXX:-}" ]] && [[ -x "${CUDAHOSTCXX}" ]]; then + CUDA_CMAKE+=" -DCMAKE_CUDA_HOST_COMPILER=${CUDAHOSTCXX}" + elif [[ -n "${NVCC_CCBIN:-}" ]] && [[ -x "${NVCC_CCBIN}" ]]; then + export CUDAHOSTCXX="${NVCC_CCBIN}" + CUDA_CMAKE+=" -DCMAKE_CUDA_HOST_COMPILER=${NVCC_CCBIN}" + elif [[ -x /usr/bin/g++-15 ]]; then + export NVCC_CCBIN=/usr/bin/g++-15 + export CUDAHOSTCXX=/usr/bin/g++-15 + CUDA_CMAKE+=" -DCMAKE_CUDA_HOST_COMPILER=/usr/bin/g++-15" + fi + CMAKE+=" ${CUDA_CMAKE}" export NVCC_APPEND_FLAGS="-std=c++17 --compress-mode=size --split-compile=0 -Wno-deprecated-gpu-targets" fi fi diff --git a/arch/release/PKGBUILD b/arch/release/PKGBUILD index c87d69b..fadbc40 100644 --- a/arch/release/PKGBUILD +++ b/arch/release/PKGBUILD @@ -111,10 +111,52 @@ build() { FULL_BUILD=true if [[ "${CARCH}" == "x86_64" ]]; then - pacman -Qi cuda &> /dev/null && HAS_CUDA=true || HAS_CUDA=false + CUDA_ROOT="${CUDAToolkit_ROOT:-${CUDA_PATH:-${CUDA_HOME:-}}}" + CUDA_NVCC= + if [[ -n "${CUDACXX:-}" ]] && [[ "${CUDACXX}" != *" "* ]]; then + if [[ "${CUDACXX}" == */* ]] && [[ -x "${CUDACXX}" ]]; then + CUDA_NVCC="${CUDACXX}" + elif [[ "${CUDACXX}" != */* ]]; then + CUDA_NVCC="$(command -v "${CUDACXX}" || true)" + fi + fi + if [[ -n "${CUDA_ROOT}" ]] && [[ -x "${CUDA_ROOT}/bin/nvcc" ]]; then + CUDA_NVCC="${CUDA_ROOT}/bin/nvcc" + fi + if [[ -z "${CUDA_NVCC}" ]]; then + CUDA_NVCC="$(command -v nvcc || true)" + fi + if [[ -z "${CUDA_ROOT}" ]] && [[ -n "${CUDA_NVCC}" ]]; then + CUDA_ROOT="$(dirname "$(dirname "${CUDA_NVCC}")")" + fi + if [[ -z "${CUDA_NVCC}" ]] && [[ -x /opt/cuda/bin/nvcc ]]; then + CUDA_ROOT=/opt/cuda + CUDA_NVCC=/opt/cuda/bin/nvcc + fi + + pacman -Qi cuda &> /dev/null && [[ -n "${CUDA_NVCC}" ]] && HAS_CUDA=true || HAS_CUDA=false if [[ $HAS_CUDA = true ]] && [[ $FULL_BUILD = true ]]; then - CMAKE+=" -DBUILD_WHISPERCPP_CUBLAS=ON -DCMAKE_CUDA_ARCHITECTURES=native" + export CUDA_PATH="${CUDA_ROOT}" + export CUDAToolkit_ROOT="${CUDA_ROOT}" + export PATH="$(dirname "${CUDA_NVCC}"):$PATH" + CUDA_CMAKE="-DBUILD_WHISPERCPP_CUBLAS=ON \ + -DCMAKE_CUDA_ARCHITECTURES=native \ + -DCUDAToolkit_ROOT=${CUDA_ROOT}" + if [[ -z "${CUDACXX:-}" ]]; then + CUDA_CMAKE+=" -DCMAKE_CUDA_COMPILER=${CUDA_NVCC}" + fi + if [[ -n "${CUDAHOSTCXX:-}" ]] && [[ -x "${CUDAHOSTCXX}" ]]; then + CUDA_CMAKE+=" -DCMAKE_CUDA_HOST_COMPILER=${CUDAHOSTCXX}" + elif [[ -n "${NVCC_CCBIN:-}" ]] && [[ -x "${NVCC_CCBIN}" ]]; then + export CUDAHOSTCXX="${NVCC_CCBIN}" + CUDA_CMAKE+=" -DCMAKE_CUDA_HOST_COMPILER=${NVCC_CCBIN}" + elif [[ -x /usr/bin/g++-15 ]]; then + export NVCC_CCBIN=/usr/bin/g++-15 + export CUDAHOSTCXX=/usr/bin/g++-15 + CUDA_CMAKE+=" -DCMAKE_CUDA_HOST_COMPILER=/usr/bin/g++-15" + fi + CMAKE+=" ${CUDA_CMAKE}" export NVCC_APPEND_FLAGS="-std=c++17 --compress-mode=size --split-compile=0 -Wno-deprecated-gpu-targets" fi fi @@ -134,4 +176,3 @@ package() { cd build make DESTDIR="$pkgdir" install } - diff --git a/cmake/whispercpp.cmake b/cmake/whispercpp.cmake index ee12f71..17cca94 100644 --- a/cmake/whispercpp.cmake +++ b/cmake/whispercpp.cmake @@ -95,6 +95,12 @@ if(BUILD_WHISPERCPP_CUBLAS) if (NOT DEFINED CMAKE_CUDA_ARCHITECTURES) set(CMAKE_CUDA_ARCHITECTURES 50 52 53 60 61 62 70 72 75 80 86 87 89 90 100) endif() + set(whispercpp_cuda_cmake_args) + foreach(cuda_arg CUDAToolkit_ROOT CMAKE_CUDA_COMPILER CMAKE_CUDA_HOST_COMPILER) + if(DEFINED ${cuda_arg}) + list(APPEND whispercpp_cuda_cmake_args -D${cuda_arg}=${${cuda_arg}}) + endif() + endforeach() list(JOIN CMAKE_CUDA_ARCHITECTURES "\\\\\\\\\\;" CUDA_ARCHS_STRING) ExternalProject_Add(whispercppcublas SOURCE_DIR ${external_dir}/whispercppcublas @@ -113,6 +119,8 @@ if(BUILD_WHISPERCPP_CUBLAS) -DCMAKE_INSTALL_LIBDIR=lib -DGGML_NATIVE=OFF -DGGML_CUDA=ON -DCMAKE_CUDA_ARCHITECTURES:STRING=${CUDA_ARCHS_STRING} + ${whispercpp_cuda_cmake_args} + -DCMAKE_CUDA_STANDARD=17 -DCMAKE_CUDA_STANDARD_REQUIRED=ON -DGGML_AVX=ON -DGGML_AVX2=OFF -DGGML_FMA=OFF -DGGML_F16C=ON -DBUILD_SHARED_LIBS=ON -DWHISPER_BUILD_TESTS=OFF -DWHISPER_BUILD_EXAMPLES=OFF