mirror of
https://github.com/ggml-org/whisper.cpp.git
synced 2026-09-29 01:17:49 -05:00
This commit renames the cublas jobs and release artifacts to just use cuda instead of cublas. The motivation for this is that I think that the cublas naming came for a time when the ggml-cuda backend mostly or perhaps completely delegated to cublas. But this is not the case any more and naming this cuda would make sense now. This is also consistent with how llama.cpp names their cuda binary build artifacts.
942 lines
39 KiB
YAML
942 lines
39 KiB
YAML
name: Release
|
|
|
|
# Builds dev releases (b* tags) when manually dispatched with create_release: true.
|
|
# Run this as a verification build before making a release (see make-release.yml).
|
|
# Pushing a v* tag does not trigger this workflow; releases are made via make-release.yml.
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
create_release:
|
|
description: 'Create new developer release'
|
|
required: true
|
|
type: boolean
|
|
pre_release_tag:
|
|
description: 'Pre-release tag name'
|
|
required: false
|
|
type: string
|
|
|
|
env:
|
|
BRANCH_NAME: ${{ github.head_ref || github.ref_name }}
|
|
VCPKG_BINARY_SOURCES: "clear;x-gha,readwrite"
|
|
WHISPER_BUILD_IS_DEV: OFF
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.head_ref && github.ref || github.run_id }}
|
|
cancel-in-progress: true
|
|
|
|
permissions:
|
|
contents: write # for creating release
|
|
id-token: write
|
|
attestations: write
|
|
|
|
jobs:
|
|
determine-tag:
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
tag_name: ${{ steps.tag.outputs.name }}
|
|
should_release: ${{ steps.tag.outputs.should_release }}
|
|
|
|
steps:
|
|
- name: Checkout with full history
|
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Determine tag name
|
|
id: tag
|
|
shell: bash
|
|
run: |
|
|
BUILD_NUMBER=$(git rev-list --count HEAD)
|
|
SHORT_HASH=$(git rev-parse --short=7 HEAD)
|
|
CUSTOM_TAG="${{ github.event.inputs.pre_release_tag }}"
|
|
SHOULD_RELEASE="false"
|
|
|
|
echo "Raw values:"
|
|
echo "BUILD_NUMBER: $BUILD_NUMBER"
|
|
echo "SHORT_HASH: $SHORT_HASH"
|
|
echo "BRANCH_NAME: ${{ env.BRANCH_NAME }}"
|
|
echo "CUSTOM_TAG: $CUSTOM_TAG"
|
|
|
|
if [[ -n "$CUSTOM_TAG" ]]; then
|
|
echo "Using custom tag"
|
|
TAG_NAME="${CUSTOM_TAG}"
|
|
SHOULD_RELEASE="true"
|
|
elif [[ "${{ env.BRANCH_NAME }}" == "master" ]]; then
|
|
echo "Using master branch format"
|
|
TAG_NAME="b${BUILD_NUMBER}"
|
|
SHOULD_RELEASE="false"
|
|
else
|
|
echo "Using non-master branch format"
|
|
SAFE_NAME=$(echo "${{ env.BRANCH_NAME }}" | tr '/' '-')
|
|
TAG_NAME="${SAFE_NAME}-b${BUILD_NUMBER}-${SHORT_HASH}"
|
|
SHOULD_RELEASE="false"
|
|
fi
|
|
|
|
if [[ "${{ github.event.inputs.create_release }}" == "true" ]]; then
|
|
echo "Manual release requested"
|
|
SHOULD_RELEASE="true"
|
|
fi
|
|
|
|
echo "Final tag name: $TAG_NAME"
|
|
echo "Should release: $SHOULD_RELEASE"
|
|
echo "name=$TAG_NAME" >> $GITHUB_OUTPUT
|
|
echo "should_release=$SHOULD_RELEASE" >> $GITHUB_OUTPUT
|
|
|
|
ubuntu-cpu:
|
|
runs-on: ${{ matrix.os }}
|
|
needs: determine-tag
|
|
if: ${{ needs.determine-tag.outputs.should_release == 'true' }}
|
|
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- build: x64
|
|
os: ubuntu-22.04
|
|
- build: arm64
|
|
os: ubuntu-22.04-arm
|
|
|
|
steps:
|
|
- name: Clone
|
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
|
|
|
|
- name: ccache
|
|
uses: ggml-org/ccache-action@v1.2.21
|
|
with:
|
|
key: release-${{ matrix.os }}-cpu
|
|
evict-old-files: 1d
|
|
|
|
- name: Dependencies
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y build-essential cmake
|
|
|
|
- name: Build
|
|
run: |
|
|
cmake -B build \
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
-DCMAKE_INSTALL_RPATH='$ORIGIN' \
|
|
-DCMAKE_BUILD_WITH_INSTALL_RPATH=ON \
|
|
-DGGML_BACKEND_DL=ON \
|
|
-DGGML_NATIVE=OFF \
|
|
-DWHISPER_BUILD_IS_DEV=${{ env.WHISPER_BUILD_IS_DEV }} \
|
|
${{ matrix.build == 'x64' && '-DGGML_CPU_ALL_VARIANTS=ON' || '-DGGML_CPU_ARM_ARCH=armv8-a' }}
|
|
cmake --build build --config Release -j $(nproc)
|
|
|
|
- name: Pack artifacts
|
|
run: |
|
|
cp LICENSE ./build/bin/
|
|
tar -czvf whisper-bin-ubuntu-${{ matrix.build }}.tar.gz \
|
|
--transform "s,^\.,whisper-bin-ubuntu-${{ matrix.build }}," \
|
|
-C ./build/bin .
|
|
|
|
- name: Upload artifacts
|
|
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
|
|
with:
|
|
path: whisper-bin-ubuntu-${{ matrix.build }}.tar.gz
|
|
name: whisper-bin-ubuntu-${{ matrix.build }}.tar.gz
|
|
|
|
windows:
|
|
runs-on: windows-latest
|
|
needs: determine-tag
|
|
|
|
strategy:
|
|
matrix:
|
|
build: [Release]
|
|
arch: [Win32, x64]
|
|
sdl2: [ON]
|
|
include:
|
|
- arch: Win32
|
|
s2arc: x86
|
|
jnaPath: win32-x86
|
|
- arch: x64
|
|
s2arc: x64
|
|
jnaPath: win32-x86-64
|
|
- sdl2: ON
|
|
s2ver: 2.28.5
|
|
|
|
steps:
|
|
- name: Clone
|
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
|
|
|
|
- name: Add msbuild to PATH
|
|
uses: microsoft/setup-msbuild@6fb02220983dee41ce7ae257b6f4d8f9bf5ed4ce # v2
|
|
|
|
- name: Fetch SDL2 and set SDL2_DIR
|
|
if: matrix.sdl2 == 'ON'
|
|
run: |
|
|
C:/msys64/usr/bin/wget.exe -qO sdl2.zip https://github.com/libsdl-org/SDL/releases/download/release-${{ matrix.s2ver }}/SDL2-devel-${{ matrix.s2ver }}-VC.zip
|
|
7z x sdl2.zip
|
|
echo "SDL2_DIR=$env:GITHUB_WORKSPACE/SDL2-${{ matrix.s2ver }}/cmake" >> $env:GITHUB_ENV
|
|
|
|
- name: Configure
|
|
run: >
|
|
cmake -S . -B ./build -A ${{ matrix.arch }}
|
|
-DCMAKE_BUILD_TYPE=${{ matrix.build }}
|
|
-DBUILD_SHARED_LIBS=ON
|
|
-DWHISPER_SDL2=${{ matrix.sdl2 }}
|
|
-DGGML_NATIVE=OFF
|
|
-DWHISPER_BUILD_IS_DEV=${{ env.WHISPER_BUILD_IS_DEV }}
|
|
${{ matrix.arch == 'x64' && '-DGGML_BACKEND_DL=ON -DGGML_CPU_ALL_VARIANTS=ON' || '-DGGML_BMI2=OFF' }}
|
|
|
|
- name: Build
|
|
run: |
|
|
cd ./build
|
|
msbuild ALL_BUILD.vcxproj -t:build -p:configuration=${{ matrix.build }} -p:platform=${{ matrix.arch }}
|
|
|
|
- name: Copy SDL2.dll
|
|
if: matrix.sdl2 == 'ON'
|
|
run: copy "$env:SDL2_DIR/../lib/${{ matrix.s2arc }}/SDL2.dll" build/bin/${{ matrix.build }}
|
|
|
|
- name: Upload SDL2.dll
|
|
if: matrix.sdl2 == 'ON'
|
|
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
|
|
with:
|
|
name: ${{ matrix.s2arc }}_SDL2.dll
|
|
path: build/bin/${{ matrix.build }}/SDL2.dll
|
|
|
|
- name: Upload whisper dll
|
|
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
|
|
with:
|
|
name: whisper_${{ matrix.arch }}.dll
|
|
path: build/bin/${{ matrix.build }}/whisper.dll
|
|
|
|
- name: Upload ggml dll
|
|
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
|
|
with:
|
|
name: ggml_${{ matrix.arch }}.dll
|
|
path: build/bin/${{ matrix.build }}/ggml.dll
|
|
overwrite: true
|
|
|
|
- name: Upload ggml base dll
|
|
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
|
|
with:
|
|
name: ggml_base_${{ matrix.arch }}.dll
|
|
path: build/bin/${{ matrix.build }}/ggml-base.dll
|
|
|
|
- name: Upload ggml cpu dll
|
|
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
|
|
with:
|
|
name: ggml_cpu_${{ matrix.arch }}.dll
|
|
path: build/bin/${{ matrix.build }}/ggml-cpu.dll
|
|
|
|
- name: Pack bin artifacts
|
|
shell: pwsh
|
|
run: |
|
|
Compress-Archive -Path "build/bin/${{ matrix.build }}" -DestinationPath "whisper-bin-${{ matrix.arch }}.zip"
|
|
|
|
- name: Upload binaries
|
|
if: ${{ matrix.sdl2 == 'ON' && needs.determine-tag.outputs.should_release == 'true' }}
|
|
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
|
|
with:
|
|
name: whisper-bin-${{ matrix.arch }}.zip
|
|
path: whisper-bin-${{ matrix.arch }}.zip
|
|
|
|
windows-blas:
|
|
runs-on: windows-latest
|
|
needs: determine-tag
|
|
|
|
strategy:
|
|
matrix:
|
|
build: [Release]
|
|
arch: [Win32, x64]
|
|
blas: [ON]
|
|
sdl2: [ON]
|
|
blasver: [0.3.29]
|
|
include:
|
|
- arch: Win32
|
|
s2arc: x86
|
|
blasfile: x86
|
|
- arch: x64
|
|
s2arc: x64
|
|
blasfile: x64_64
|
|
- sdl2: ON
|
|
s2ver: 2.28.5
|
|
|
|
steps:
|
|
- name: Clone
|
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
|
|
|
|
- name: Export GitHub Actions cache environment variables
|
|
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
|
|
with:
|
|
script: |
|
|
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
|
|
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
|
|
|
|
- name: Add msbuild to PATH
|
|
uses: microsoft/setup-msbuild@6fb02220983dee41ce7ae257b6f4d8f9bf5ed4ce # v2
|
|
|
|
- name: Install OpenBLAS and pkgconfiglite
|
|
if: matrix.blas == 'ON'
|
|
run: |
|
|
Invoke-WebRequest "https://github.com/OpenMathLib/OpenBLAS/releases/download/v${{matrix.blasver}}/OpenBLAS-${{matrix.blasver}}_${{matrix.blasfile}}.zip" -OutFile "OpenBLAS-${{matrix.blasver}}.zip"
|
|
Expand-Archive "OpenBLAS-${{matrix.blasver}}.zip" -DestinationPath "OpenBLAS-${{matrix.blasver}}"
|
|
choco install pkgconfiglite
|
|
|
|
- name: Fetch SDL2 and set SDL2_DIR
|
|
if: matrix.sdl2 == 'ON'
|
|
run: |
|
|
C:/msys64/usr/bin/wget.exe -qO sdl2.zip https://github.com/libsdl-org/SDL/releases/download/release-${{ matrix.s2ver }}/SDL2-devel-${{ matrix.s2ver }}-VC.zip
|
|
7z x sdl2.zip
|
|
echo "SDL2_DIR=$env:GITHUB_WORKSPACE/SDL2-${{ matrix.s2ver }}/cmake" >> $env:GITHUB_ENV
|
|
|
|
- name: Configure
|
|
run: >
|
|
cmake -S . -B ./build -A ${{ matrix.arch }}
|
|
-DCMAKE_TOOLCHAIN_FILE="$env:VCPKG_INSTALLATION_ROOT/scripts/buildsystems/vcpkg.cmake"
|
|
-DCMAKE_BUILD_TYPE=${{ matrix.build }}
|
|
-DGGML_BLAS=${{ matrix.blas }}
|
|
-DGGML_BLAS_VENDOR=OpenBLAS
|
|
-DBLAS_LIBRARIES="$env:GITHUB_WORKSPACE/OpenBLAS-${{matrix.blasver}}/lib/libopenblas.lib"
|
|
-DBLAS_INCLUDE_DIRS="$env:GITHUB_WORKSPACE/OpenBLAS-${{matrix.blasver}}/include"
|
|
-DWHISPER_SDL2=${{ matrix.sdl2 }}
|
|
-DGGML_NATIVE=OFF
|
|
-DWHISPER_BUILD_IS_DEV=${{ env.WHISPER_BUILD_IS_DEV }}
|
|
${{ matrix.arch == 'x64' && '-DGGML_BACKEND_DL=ON -DGGML_CPU_ALL_VARIANTS=ON' || '-DGGML_BMI2=OFF' }}
|
|
|
|
- name: Build
|
|
run: |
|
|
cd ./build
|
|
msbuild ALL_BUILD.vcxproj -t:build -p:configuration=${{ matrix.build }} -p:platform=${{ matrix.arch }}
|
|
|
|
- name: Copy openblas.dll
|
|
if: matrix.blas == 'ON'
|
|
run: copy "$env:GITHUB_WORKSPACE/OpenBLAS-${{matrix.blasver}}/bin/libopenblas.dll" build/bin/${{ matrix.build }}
|
|
|
|
- name: Copy SDL2.dll
|
|
if: matrix.sdl2 == 'ON'
|
|
run: copy "$env:SDL2_DIR/../lib/${{ matrix.s2arc }}/SDL2.dll" build/bin/${{ matrix.build }}
|
|
|
|
- name: Pack bin artifacts
|
|
shell: pwsh
|
|
run: |
|
|
Compress-Archive -Path "build/bin/${{ matrix.build }}" -DestinationPath "whisper-blas-bin-${{ matrix.arch }}.zip"
|
|
|
|
- name: Upload binaries
|
|
if: ${{ matrix.blas == 'ON' && matrix.sdl2 == 'ON' && needs.determine-tag.outputs.should_release == 'true' }}
|
|
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
|
|
with:
|
|
name: whisper-blas-bin-${{ matrix.arch }}.zip
|
|
path: whisper-blas-bin-${{ matrix.arch }}.zip
|
|
|
|
windows-cuda:
|
|
runs-on: windows-2022
|
|
needs: determine-tag
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
build: [Release]
|
|
arch: [x64]
|
|
cublas: [ON]
|
|
sdl2: [ON]
|
|
cuda-toolkit: [12.4.0, 11.8.0]
|
|
include:
|
|
- arch: x64
|
|
sdl2: ON
|
|
sdl2_ver: 2.28.5
|
|
steps:
|
|
- name: Clone repository
|
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
|
|
|
|
- name: Install Ninja
|
|
id: install_ninja
|
|
run: |
|
|
choco install ninja
|
|
|
|
- name: Install ccache
|
|
uses: ggml-org/ccache-action@v1.2.21
|
|
with:
|
|
key: ${{ github.job }}-${{ matrix.cuda-toolkit }}-${{ matrix.build }}
|
|
evict-old-files: 5d
|
|
|
|
- name: Install Cuda Toolkit 11.8.0
|
|
if: ${{ matrix.cuda-toolkit == '11.8.0' }}
|
|
run: |
|
|
$CUDA_VERSION = ${{ matrix.cuda-toolkit }}
|
|
$CUDA_TOOLKIT_DIR = "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v$CUDA_VERSION"
|
|
$CUDA_DOWNLOAD = "https://developer.download.nvidia.com/compute/cuda/redist"
|
|
|
|
# Components versions
|
|
$CUDART_VER = "11.8.89"
|
|
$NVCC_VER = "11.8.89"
|
|
$NVRTC_VER = "11.8.89"
|
|
$CUBLAS_VER = "11.8.1.74"
|
|
$NVTX_VER = "11.8.86"
|
|
$VS_VER = "11.8.86"
|
|
$NVPROF_VER = "11.8.87"
|
|
$CCCL_VER = "11.8.89"
|
|
|
|
# Create the directory where the CUDA Toolkit will be installed
|
|
mkdir -p $CUDA_TOOLKIT_DIR
|
|
|
|
# Install unzip to extract the downloaded files
|
|
choco install unzip -y
|
|
|
|
# Download all the required components
|
|
curl -O "$CUDA_DOWNLOAD/cuda_cudart/windows-x86_64/cuda_cudart-windows-x86_64-${CUDART_VER}-archive.zip"
|
|
curl -O "$CUDA_DOWNLOAD/cuda_nvcc/windows-x86_64/cuda_nvcc-windows-x86_64-${NVCC_VER}-archive.zip"
|
|
curl -O "$CUDA_DOWNLOAD/cuda_nvrtc/windows-x86_64/cuda_nvrtc-windows-x86_64-${NVRTC_VER}-archive.zip"
|
|
curl -O "$CUDA_DOWNLOAD/libcublas/windows-x86_64/libcublas-windows-x86_64-${CUBLAS_VER}-archive.zip"
|
|
curl -O "$CUDA_DOWNLOAD/cuda_nvtx/windows-x86_64/cuda_nvtx-windows-x86_64-${NVTX_VER}-archive.zip"
|
|
curl -O "$CUDA_DOWNLOAD/visual_studio_integration/windows-x86_64/visual_studio_integration-windows-x86_64-${VS_VER}-archive.zip"
|
|
curl -O "$CUDA_DOWNLOAD/cuda_nvprof/windows-x86_64/cuda_nvprof-windows-x86_64-${NVPROF_VER}-archive.zip"
|
|
curl -O "$CUDA_DOWNLOAD/cuda_cccl/windows-x86_64/cuda_cccl-windows-x86_64-${CCCL_VER}-archive.zip"
|
|
|
|
# Extract all the downloaded files to the CUDA Toolkit directory
|
|
unzip '*.zip' -d $CUDA_TOOLKIT_DIR
|
|
|
|
# Copy all the extracted files to the main CUDA Toolkit directory
|
|
xcopy "$CUDA_TOOLKIT_DIR\cuda_cudart-windows-x86_64-${CUDART_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y
|
|
xcopy "$CUDA_TOOLKIT_DIR\cuda_nvcc-windows-x86_64-${NVCC_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y
|
|
xcopy "$CUDA_TOOLKIT_DIR\cuda_nvrtc-windows-x86_64-${NVRTC_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y
|
|
xcopy "$CUDA_TOOLKIT_DIR\libcublas-windows-x86_64-${CUBLAS_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y
|
|
xcopy "$CUDA_TOOLKIT_DIR\cuda_nvtx-windows-x86_64-${NVTX_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y
|
|
xcopy "$CUDA_TOOLKIT_DIR\cuda_nvprof-windows-x86_64-${NVPROF_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y
|
|
xcopy "$CUDA_TOOLKIT_DIR\cuda_cccl-windows-x86_64-${CCCL_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y
|
|
xcopy "$CUDA_TOOLKIT_DIR\visual_studio_integration-windows-x86_64-${VS_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y
|
|
|
|
# Visual Studio integration
|
|
xcopy "$CUDA_TOOLKIT_DIR\visual_studio_integration-windows-x86_64-${VS_VER}-archive\visual_studio_integration\MSBuildExtensions\*" "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Microsoft\VC\v170\BuildCustomizations" /E /I /H /Y
|
|
|
|
# Set environment variables
|
|
echo "$CUDA_TOOLKIT_DIR\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
|
|
echo "$CUDA_TOOLKIT_DIR\libnvvp" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
|
|
echo "CUDA_PATH=$CUDA_TOOLKIT_DIR" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
|
|
echo "CUDA_PATH_V11_8=$CUDA_TOOLKIT_DIR" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
|
|
|
|
- name: Install Cuda Toolkit 12.4.0
|
|
if: ${{ matrix.cuda-toolkit == '12.4.0' }}
|
|
run: |
|
|
$CUDA_VERSION = ${{ matrix.cuda-toolkit }}
|
|
$CUDA_TOOLKIT_DIR = "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v$CUDA_VERSION"
|
|
$CUDA_DOWNLOAD = "https://developer.download.nvidia.com/compute/cuda/redist"
|
|
|
|
# Components versions
|
|
$CUDART_VER = "12.4.127"
|
|
$NVCC_VER = "12.4.131"
|
|
$NVRTC_VER = "12.4.127"
|
|
$CUBLAS_VER = "12.4.5.8"
|
|
$NVTX_VER = "12.4.127"
|
|
$PROFILER_VER = "12.4.127"
|
|
$VS_VER = "12.4.127"
|
|
$NVPROF_VER = "12.4.128"
|
|
$CCCL_VER = "12.4.127"
|
|
|
|
# Create the directory where the CUDA Toolkit will be installed
|
|
mkdir -p $CUDA_TOOLKIT_DIR
|
|
|
|
# Install unzip to extract the downloaded files
|
|
choco install unzip -y
|
|
|
|
# Download all the required components
|
|
curl -O "$CUDA_DOWNLOAD/cuda_cudart/windows-x86_64/cuda_cudart-windows-x86_64-${CUDART_VER}-archive.zip"
|
|
curl -O "$CUDA_DOWNLOAD/cuda_nvcc/windows-x86_64/cuda_nvcc-windows-x86_64-${NVCC_VER}-archive.zip"
|
|
curl -O "$CUDA_DOWNLOAD/cuda_nvrtc/windows-x86_64/cuda_nvrtc-windows-x86_64-${NVRTC_VER}-archive.zip"
|
|
curl -O "$CUDA_DOWNLOAD/libcublas/windows-x86_64/libcublas-windows-x86_64-${CUBLAS_VER}-archive.zip"
|
|
curl -O "$CUDA_DOWNLOAD/cuda_nvtx/windows-x86_64/cuda_nvtx-windows-x86_64-${NVTX_VER}-archive.zip"
|
|
curl -O "$CUDA_DOWNLOAD/cuda_profiler_api/windows-x86_64/cuda_profiler_api-windows-x86_64-${PROFILER_VER}-archive.zip"
|
|
curl -O "$CUDA_DOWNLOAD/visual_studio_integration/windows-x86_64/visual_studio_integration-windows-x86_64-${VS_VER}-archive.zip"
|
|
curl -O "$CUDA_DOWNLOAD/cuda_nvprof/windows-x86_64/cuda_nvprof-windows-x86_64-${NVPROF_VER}-archive.zip"
|
|
curl -O "$CUDA_DOWNLOAD/cuda_cccl/windows-x86_64/cuda_cccl-windows-x86_64-${CCCL_VER}-archive.zip"
|
|
|
|
# Extract all the downloaded files to the CUDA Toolkit directory
|
|
unzip -q '*.zip' -d $CUDA_TOOLKIT_DIR
|
|
|
|
# Copy all the extracted files to the main CUDA Toolkit directory
|
|
xcopy "$CUDA_TOOLKIT_DIR\cuda_cudart-windows-x86_64-${CUDART_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y
|
|
xcopy "$CUDA_TOOLKIT_DIR\cuda_nvcc-windows-x86_64-${NVCC_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y
|
|
xcopy "$CUDA_TOOLKIT_DIR\cuda_nvrtc-windows-x86_64-${NVRTC_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y
|
|
xcopy "$CUDA_TOOLKIT_DIR\libcublas-windows-x86_64-${CUBLAS_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y
|
|
xcopy "$CUDA_TOOLKIT_DIR\cuda_nvtx-windows-x86_64-${NVTX_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y
|
|
xcopy "$CUDA_TOOLKIT_DIR\cuda_nvprof-windows-x86_64-${NVPROF_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y
|
|
xcopy "$CUDA_TOOLKIT_DIR\cuda_cccl-windows-x86_64-${CCCL_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y
|
|
xcopy "$CUDA_TOOLKIT_DIR\cuda_profiler_api-windows-x86_64-${PROFILER_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y
|
|
xcopy "$CUDA_TOOLKIT_DIR\visual_studio_integration-windows-x86_64-${VS_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y
|
|
|
|
# Visual Studio integration
|
|
xcopy "$CUDA_TOOLKIT_DIR\visual_studio_integration-windows-x86_64-${VS_VER}-archive\visual_studio_integration\MSBuildExtensions\*" "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Microsoft\VC\v170\BuildCustomizations" /E /I /H /Y
|
|
|
|
# Set environment variables
|
|
echo "$CUDA_TOOLKIT_DIR\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
|
|
echo "$CUDA_TOOLKIT_DIR\libnvvp" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
|
|
echo "CUDA_PATH=$CUDA_TOOLKIT_DIR" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
|
|
echo "CUDA_PATH_V12_2=$CUDA_TOOLKIT_DIR" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
|
|
|
|
- name: Add msbuild to PATH
|
|
uses: microsoft/setup-msbuild@6fb02220983dee41ce7ae257b6f4d8f9bf5ed4ce # v2
|
|
|
|
- name: Install 7-Zip
|
|
run: choco install 7zip -y
|
|
|
|
- name: Fetch SDL2 and set SDL2_DIR
|
|
if: matrix.sdl2 == 'ON'
|
|
run: |
|
|
Invoke-WebRequest -Uri https://github.com/libsdl-org/SDL/releases/download/release-${{ matrix.sdl2_ver }}/SDL2-devel-${{ matrix.sdl2_ver }}-VC.zip -OutFile sdl2.zip
|
|
7z x sdl2.zip
|
|
echo "SDL2_DIR=${{ github.workspace }}\SDL2-${{ matrix.sdl2_ver }}\cmake" | Out-File -FilePath $env:GITHUB_ENV -Append
|
|
echo "${{ github.workspace }}\SDL2-${{ matrix.sdl2_ver }}\cmake" > SDL2_PATH.txt
|
|
|
|
- name: Install cmake
|
|
run: choco install cmake
|
|
|
|
- name: Build Project
|
|
shell: cmd
|
|
run: |
|
|
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
|
|
cmake --version
|
|
where cmake
|
|
if "${{ matrix.cuda-toolkit }}" == "11.8.0" (
|
|
set CUDA_FLAGS=-allow-unsupported-compiler -D_ALLOW_COMPILER_AND_STL_VERSION_MISMATCH -D_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR
|
|
) else (
|
|
set CUDA_FLAGS=
|
|
)
|
|
cmake -S . -B build -G "Ninja Multi-Config" ^
|
|
-DCMAKE_BUILD_TYPE=${{ matrix.build }} ^
|
|
-DGGML_CUDA=${{ matrix.cublas }} ^
|
|
-DWHISPER_SDL2=${{ matrix.sdl2 }} ^
|
|
-DSDL2_DIR="%SDL2_DIR%" ^
|
|
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 ^
|
|
-DCMAKE_CUDA_FLAGS="%CUDA_FLAGS%" ^
|
|
-DGGML_BACKEND_DL=ON ^
|
|
-DGGML_NATIVE=OFF ^
|
|
-DWHISPER_BUILD_IS_DEV=${{ env.WHISPER_BUILD_IS_DEV }} ^
|
|
-DGGML_CPU_ALL_VARIANTS=ON
|
|
set /A NINJA_JOBS=%NUMBER_OF_PROCESSORS%-1
|
|
cmake --build build --config ${{ matrix.build }} -j %NUMBER_OF_PROCESSORS%
|
|
|
|
- name: Check ccache status after build
|
|
run: |
|
|
ccache --show-stats
|
|
|
|
- name: Copy CUDA DLLs
|
|
run: |
|
|
Get-ChildItem "$env:CUDA_PATH\bin\" -Filter "*.dll" |
|
|
Copy-Item -Destination "build/bin/${{ matrix.build }}"
|
|
|
|
- name: Copy SDL2.dll
|
|
if: matrix.sdl2 == 'ON'
|
|
run: copy "$env:SDL2_DIR/../lib/${{ matrix.arch }}/SDL2.dll" build/bin/${{ matrix.build }}
|
|
|
|
- name: Pack bin artifacts
|
|
shell: pwsh
|
|
run: |
|
|
Compress-Archive -Path "build/bin/${{ matrix.build }}" -DestinationPath "whisper-bin-win-cuda-${{ matrix.cuda-toolkit }}-${{ matrix.arch }}.zip"
|
|
|
|
- name: Upload binaries
|
|
if: ${{ needs.determine-tag.outputs.should_release == 'true' }}
|
|
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
|
|
with:
|
|
name: whisper-bin-win-cuda-${{ matrix.cuda-toolkit }}-${{ matrix.arch }}.zip
|
|
path: whisper-bin-win-cuda-${{ matrix.cuda-toolkit }}-${{ matrix.arch }}.zip
|
|
|
|
windows-arm64-cpu:
|
|
runs-on: windows-2022
|
|
needs: determine-tag
|
|
|
|
strategy:
|
|
matrix:
|
|
build: [Release]
|
|
|
|
steps:
|
|
- name: Clone
|
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
|
|
|
|
- name: Install Ninja
|
|
run: |
|
|
choco install ninja
|
|
|
|
- name: ccache
|
|
uses: ggml-org/ccache-action@v1.2.21
|
|
with:
|
|
key: release-windows-arm64-cpu
|
|
evict-old-files: 1d
|
|
|
|
- name: Configure and Build
|
|
shell: cmd
|
|
run: |
|
|
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" amd64_arm64
|
|
cmake -S . -B build -G "Ninja Multi-Config" ^
|
|
-D CMAKE_TOOLCHAIN_FILE=cmake/arm64-windows-llvm.cmake ^
|
|
-DBUILD_SHARED_LIBS=ON ^
|
|
-DGGML_NATIVE=OFF ^
|
|
-DGGML_BACKEND_DL=ON ^
|
|
-DWHISPER_SDL2=OFF ^
|
|
-DWHISPER_BUILD_IS_DEV=${{ env.WHISPER_BUILD_IS_DEV }}
|
|
cmake --build build --config ${{ matrix.build }}
|
|
|
|
- name: Copy OpenMP runtime DLL
|
|
shell: pwsh
|
|
run: |
|
|
$vswhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe"
|
|
$vsInstallPath = & $vswhere -latest -products '*' -requires Microsoft.VisualStudio.Component.VC.Tools.ARM64 -property installationPath
|
|
if (-not $vsInstallPath) {
|
|
Write-Error "Could not find a Visual Studio install with the ARM64 MSVC toolset"
|
|
exit 1
|
|
}
|
|
$redistVersion = Get-ChildItem "$vsInstallPath\VC\Redist\MSVC" -Directory |
|
|
Where-Object { $_.Name -match '^\d+\.\d+\.\d+$' } |
|
|
Sort-Object Name -Descending | Select-Object -First 1
|
|
$ompDll = "$vsInstallPath\VC\Redist\MSVC\$($redistVersion.Name)\debug_nonredist\arm64\Microsoft.VC143.OpenMP.LLVM\libomp140.aarch64.dll"
|
|
if (-not (Test-Path $ompDll)) {
|
|
Write-Error "libomp140.aarch64.dll not found at $ompDll"
|
|
exit 1
|
|
}
|
|
Copy-Item $ompDll "build\bin\${{ matrix.build }}\" -Force
|
|
|
|
- name: Pack bin artifacts
|
|
shell: pwsh
|
|
run: |
|
|
Compress-Archive -Path "build/bin/${{ matrix.build }}" -DestinationPath "whisper-bin-win-cpu-arm64.zip"
|
|
|
|
- name: Upload binaries
|
|
if: ${{ needs.determine-tag.outputs.should_release == 'true' }}
|
|
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
|
|
with:
|
|
name: whisper-bin-win-cpu-arm64.zip
|
|
path: whisper-bin-win-cpu-arm64.zip
|
|
|
|
windows-arm64-opencl-adreno:
|
|
runs-on: windows-2022
|
|
needs: determine-tag
|
|
|
|
strategy:
|
|
matrix:
|
|
build: [Release]
|
|
|
|
steps:
|
|
- name: Clone
|
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
|
|
|
|
- name: Install Ninja
|
|
run: |
|
|
choco install ninja
|
|
|
|
- name: Install OpenCL Headers and Libs
|
|
run: |
|
|
git clone https://github.com/KhronosGroup/OpenCL-Headers
|
|
cd OpenCL-Headers
|
|
cmake -B build `
|
|
-DBUILD_TESTING=OFF `
|
|
-DOPENCL_HEADERS_BUILD_TESTING=OFF `
|
|
-DOPENCL_HEADERS_BUILD_CXX_TESTS=OFF `
|
|
-DCMAKE_INSTALL_PREFIX="$env:RUNNER_TEMP/opencl-arm64-release"
|
|
cmake --build build --target install
|
|
cd ..
|
|
git clone https://github.com/KhronosGroup/OpenCL-ICD-Loader
|
|
cd OpenCL-ICD-Loader
|
|
cmake -B build-arm64-release `
|
|
-A arm64 `
|
|
-DCMAKE_PREFIX_PATH="$env:RUNNER_TEMP/opencl-arm64-release" `
|
|
-DCMAKE_INSTALL_PREFIX="$env:RUNNER_TEMP/opencl-arm64-release"
|
|
cmake --build build-arm64-release --target install --config release
|
|
|
|
- name: ccache
|
|
uses: ggml-org/ccache-action@v1.2.21
|
|
with:
|
|
key: release-windows-arm64-opencl-adreno
|
|
evict-old-files: 1d
|
|
|
|
- name: Configure and Build
|
|
shell: cmd
|
|
run: |
|
|
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" amd64_arm64
|
|
cmake -S . -B build -G "Ninja Multi-Config" ^
|
|
-D CMAKE_TOOLCHAIN_FILE=cmake/arm64-windows-llvm.cmake ^
|
|
-DCMAKE_PREFIX_PATH="%RUNNER_TEMP%/opencl-arm64-release" ^
|
|
-DBUILD_SHARED_LIBS=ON ^
|
|
-DGGML_NATIVE=OFF ^
|
|
-DGGML_BACKEND_DL=ON ^
|
|
-DGGML_OPENCL=ON ^
|
|
-DGGML_OPENCL_USE_ADRENO_KERNELS=ON ^
|
|
-DWHISPER_SDL2=OFF ^
|
|
-DWHISPER_BUILD_IS_DEV=${{ env.WHISPER_BUILD_IS_DEV }}
|
|
cmake --build build --config ${{ matrix.build }}
|
|
|
|
- name: Copy OpenMP runtime DLL
|
|
shell: pwsh
|
|
run: |
|
|
$vswhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe"
|
|
$vsInstallPath = & $vswhere -latest -products '*' -requires Microsoft.VisualStudio.Component.VC.Tools.ARM64 -property installationPath
|
|
if (-not $vsInstallPath) {
|
|
Write-Error "Could not find a Visual Studio install with the ARM64 MSVC toolset"
|
|
exit 1
|
|
}
|
|
$redistVersion = Get-ChildItem "$vsInstallPath\VC\Redist\MSVC" -Directory |
|
|
Where-Object { $_.Name -match '^\d+\.\d+\.\d+$' } |
|
|
Sort-Object Name -Descending | Select-Object -First 1
|
|
$ompDll = "$vsInstallPath\VC\Redist\MSVC\$($redistVersion.Name)\debug_nonredist\arm64\Microsoft.VC143.OpenMP.LLVM\libomp140.aarch64.dll"
|
|
if (-not (Test-Path $ompDll)) {
|
|
Write-Error "libomp140.aarch64.dll not found at $ompDll"
|
|
exit 1
|
|
}
|
|
Copy-Item $ompDll "build\bin\${{ matrix.build }}\" -Force
|
|
|
|
- name: Pack bin artifacts
|
|
shell: pwsh
|
|
run: |
|
|
Compress-Archive -Path "build/bin/${{ matrix.build }}" -DestinationPath "whisper-bin-win-opencl-adreno-arm64.zip"
|
|
|
|
- name: Upload binaries
|
|
if: ${{ needs.determine-tag.outputs.should_release == 'true' }}
|
|
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
|
|
with:
|
|
name: whisper-bin-win-opencl-adreno-arm64.zip
|
|
path: whisper-bin-win-opencl-adreno-arm64.zip
|
|
|
|
windows-arm64-cuda:
|
|
runs-on: windows-2022
|
|
needs: determine-tag
|
|
|
|
strategy:
|
|
matrix:
|
|
build: [Release]
|
|
cuda-toolkit: ['13.4']
|
|
|
|
steps:
|
|
- name: Clone repository
|
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
|
|
|
|
- name: Install Ninja
|
|
run: |
|
|
choco install ninja
|
|
|
|
- name: Install ccache
|
|
uses: ggml-org/ccache-action@v1.2.21
|
|
with:
|
|
key: ${{ github.job }}-${{ matrix.cuda-toolkit }}-${{ matrix.build }}
|
|
evict-old-files: 5d
|
|
|
|
# nvcc cross-compiles for ARM64 from this x64 runner using the ARM64-targeting
|
|
# host cl.exe; the CUDA runtime/cublas libs still need their own ARM64 archives
|
|
# since the standard x64 CUDA packages don't ship ARM64 binaries.
|
|
- name: Install Cuda Toolkit 13.4 (ARM64 target)
|
|
run: |
|
|
$CUDA_TOOLKIT_DIR = "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v13.4"
|
|
$CUDA_DOWNLOAD = "https://developer.download.nvidia.com/compute/cuda/redist"
|
|
|
|
# Components versions
|
|
$CCCL_VER = "13.3.4.2.1"
|
|
$CRT_VER = "13.4.59"
|
|
$NVCC_VER = "13.4.59"
|
|
$NVVM_VER = "13.4.59"
|
|
$CUDART_VER = "13.4.49"
|
|
$CUBLAS_VER = "13.7.0.27"
|
|
|
|
mkdir -p $CUDA_TOOLKIT_DIR
|
|
choco install unzip -y
|
|
|
|
curl -O "$CUDA_DOWNLOAD/cccl/windows-x86_64/cccl-windows-x86_64-${CCCL_VER}-archive.zip"
|
|
curl -O "$CUDA_DOWNLOAD/cuda_crt/windows-x86_64/cuda_crt-windows-x86_64-${CRT_VER}-archive.zip"
|
|
curl -O "$CUDA_DOWNLOAD/cuda_nvcc/windows-x86_64/cuda_nvcc-windows-x86_64-${NVCC_VER}-archive.zip"
|
|
curl -O "$CUDA_DOWNLOAD/libnvvm/windows-x86_64/libnvvm-windows-x86_64-${NVVM_VER}-archive.zip"
|
|
curl -O "$CUDA_DOWNLOAD/cuda_cudart/windows-arm64/cuda_cudart-windows-arm64-${CUDART_VER}-archive.zip"
|
|
curl -O "$CUDA_DOWNLOAD/libcublas/windows-arm64/libcublas-windows-arm64-${CUBLAS_VER}-archive.zip"
|
|
|
|
unzip '*.zip' -d $CUDA_TOOLKIT_DIR
|
|
|
|
xcopy "$CUDA_TOOLKIT_DIR\cccl-windows-x86_64-${CCCL_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y
|
|
xcopy "$CUDA_TOOLKIT_DIR\cuda_crt-windows-x86_64-${CRT_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y
|
|
xcopy "$CUDA_TOOLKIT_DIR\cuda_nvcc-windows-x86_64-${NVCC_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y
|
|
xcopy "$CUDA_TOOLKIT_DIR\libnvvm-windows-x86_64-${NVVM_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y
|
|
xcopy "$CUDA_TOOLKIT_DIR\cuda_cudart-windows-arm64-${CUDART_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y
|
|
xcopy "$CUDA_TOOLKIT_DIR\libcublas-windows-arm64-${CUBLAS_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y
|
|
|
|
echo "$CUDA_TOOLKIT_DIR\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
|
|
echo "CUDA_PATH=$CUDA_TOOLKIT_DIR" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
|
|
|
|
- name: Configure and Build
|
|
shell: cmd
|
|
run: |
|
|
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" amd64_arm64
|
|
cmake -S . -B build -G "Ninja Multi-Config" ^
|
|
-D CMAKE_TOOLCHAIN_FILE=cmake/arm64-windows-llvm-cuda.cmake ^
|
|
-DCMAKE_BUILD_TYPE=${{ matrix.build }} ^
|
|
-DGGML_CUDA=ON ^
|
|
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 ^
|
|
-DGGML_BACKEND_DL=ON ^
|
|
-DGGML_NATIVE=OFF ^
|
|
-DWHISPER_SDL2=OFF ^
|
|
-DWHISPER_BUILD_IS_DEV=${{ env.WHISPER_BUILD_IS_DEV }}
|
|
cmake --build build --config ${{ matrix.build }}
|
|
|
|
- name: Copy CUDA runtime DLLs
|
|
run: |
|
|
Get-ChildItem "$env:CUDA_PATH\bin\arm64" -Filter "cudart64_*.dll" | Copy-Item -Destination "build/bin/${{ matrix.build }}"
|
|
Get-ChildItem "$env:CUDA_PATH\bin\arm64" -Filter "cublas64_*.dll" | Copy-Item -Destination "build/bin/${{ matrix.build }}"
|
|
Get-ChildItem "$env:CUDA_PATH\bin\arm64" -Filter "cublasLt64_*.dll" | Copy-Item -Destination "build/bin/${{ matrix.build }}"
|
|
|
|
- name: Copy OpenMP runtime DLL
|
|
shell: pwsh
|
|
run: |
|
|
$vswhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe"
|
|
$vsInstallPath = & $vswhere -latest -products '*' -requires Microsoft.VisualStudio.Component.VC.Tools.ARM64 -property installationPath
|
|
if (-not $vsInstallPath) {
|
|
Write-Error "Could not find a Visual Studio install with the ARM64 MSVC toolset"
|
|
exit 1
|
|
}
|
|
$redistVersion = Get-ChildItem "$vsInstallPath\VC\Redist\MSVC" -Directory |
|
|
Where-Object { $_.Name -match '^\d+\.\d+\.\d+$' } |
|
|
Sort-Object Name -Descending | Select-Object -First 1
|
|
$ompDll = "$vsInstallPath\VC\Redist\MSVC\$($redistVersion.Name)\debug_nonredist\arm64\Microsoft.VC143.OpenMP.LLVM\libomp140.aarch64.dll"
|
|
if (-not (Test-Path $ompDll)) {
|
|
Write-Error "libomp140.aarch64.dll not found at $ompDll"
|
|
exit 1
|
|
}
|
|
Copy-Item $ompDll "build\bin\${{ matrix.build }}\" -Force
|
|
|
|
- name: Pack bin artifacts
|
|
shell: pwsh
|
|
run: |
|
|
Compress-Archive -Path "build/bin/${{ matrix.build }}" -DestinationPath "whisper-bin-win-cuda-${{ matrix.cuda-toolkit }}-arm64.zip"
|
|
|
|
- name: Upload binaries
|
|
if: ${{ needs.determine-tag.outputs.should_release == 'true' }}
|
|
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
|
|
with:
|
|
name: whisper-bin-win-cuda-${{ matrix.cuda-toolkit }}-arm64.zip
|
|
path: whisper-bin-win-cuda-${{ matrix.cuda-toolkit }}-arm64.zip
|
|
|
|
ios-xcode-build:
|
|
runs-on: macos-latest
|
|
needs: determine-tag
|
|
|
|
strategy:
|
|
matrix:
|
|
build: [Release]
|
|
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
|
|
|
|
- name: Configure
|
|
run: |
|
|
cp models/for-tests-ggml-base.en.bin models/ggml-base.en.bin
|
|
mkdir models/ggml-base.en-encoder.mlmodelc
|
|
|
|
- name: Build
|
|
id: cmake_build
|
|
run: |
|
|
sysctl -a
|
|
mkdir build
|
|
cd build
|
|
cmake -G Xcode .. \
|
|
-DGGML_METAL_USE_BF16=ON \
|
|
-DGGML_METAL_EMBED_LIBRARY=ON \
|
|
-DWHISPER_BUILD_IS_DEV=${{ env.WHISPER_BUILD_IS_DEV }} \
|
|
-DWHISPER_BUILD_EXAMPLES=OFF \
|
|
-DWHISPER_BUILD_TESTS=OFF \
|
|
-DWHISPER_BUILD_SERVER=OFF \
|
|
-DCMAKE_SYSTEM_NAME=iOS \
|
|
-DCMAKE_OSX_DEPLOYMENT_TARGET=14.0 \
|
|
-DCMAKE_XCODE_ATTRIBUTE_DEVELOPMENT_TEAM=ggml
|
|
cmake --build . --config Release -j $(sysctl -n hw.logicalcpu) -- CODE_SIGNING_ALLOWED=NO
|
|
|
|
- name: xcodebuild for swift package
|
|
id: xcodebuild
|
|
run: |
|
|
./build-xcframework.sh
|
|
|
|
- name: Build objc example
|
|
run: xcodebuild -project examples/whisper.objc/whisper.objc.xcodeproj -scheme whisper.objc -configuration ${{ matrix.build }} -sdk iphoneos CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO FRAMEWORK_FOLDER_PATH=./build-ios build
|
|
|
|
- name: Build swiftui example
|
|
run: xcodebuild -project examples/whisper.swiftui/whisper.swiftui.xcodeproj -scheme WhisperCppDemo -configuration ${{ matrix.build }} -sdk iphoneos CODE_SIGNING_REQUIRED=NO CODE_SIGN_IDENTITY= -destination 'generic/platform=iOS' FRAMEWORK_FOLDER_PATH=./build-ios build
|
|
|
|
- name: Pack artifacts
|
|
id: pack_artifacts
|
|
run: |
|
|
zip --symlinks -r whisper-${{ needs.determine-tag.outputs.tag_name }}-xcframework.zip build-apple/whisper.xcframework
|
|
|
|
- name: Upload artifacts
|
|
if: ${{ needs.determine-tag.outputs.should_release == 'true' }}
|
|
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
|
|
with:
|
|
path: whisper-${{ needs.determine-tag.outputs.tag_name }}-xcframework.zip
|
|
name: whisper-${{ needs.determine-tag.outputs.tag_name }}-xcframework.zip
|
|
|
|
release:
|
|
if: ${{ github.event.inputs.create_release == 'true' || github.event.inputs.pre_release_tag != '' }}
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
needs:
|
|
- determine-tag
|
|
- ubuntu-cpu
|
|
- ios-xcode-build
|
|
- windows
|
|
- windows-blas
|
|
- windows-cuda
|
|
- windows-arm64-cpu
|
|
- windows-arm64-opencl-adreno
|
|
- windows-arm64-cuda
|
|
|
|
steps:
|
|
- name: Clone
|
|
id: checkout
|
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
|
|
with:
|
|
fetch-depth: 0
|
|
ssh-key: ${{ secrets.DEPLOY_KEY_RELEASE }}
|
|
|
|
# Downloads all the artifacts from the previous jobs
|
|
- name: Download artifacts
|
|
id: download-artifact
|
|
uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7
|
|
with:
|
|
path: ./artifact
|
|
merge-multiple: true
|
|
|
|
- name: Move artifacts
|
|
id: move_artifacts
|
|
run: |
|
|
mkdir -p ./release
|
|
mv -v ./artifact/*.zip ./release 2>/dev/null || true
|
|
mv -v ./artifact/*.tar.gz ./release 2>/dev/null || true
|
|
|
|
- name: Attest release artifacts
|
|
uses: actions/attest@1e69f48acb82d1966a394da916b4c1698aa569d6 # v4
|
|
with:
|
|
subject-path: 'release/*'
|
|
|
|
- name: Create and push git tag
|
|
run: |
|
|
TAG="${{ needs.determine-tag.outputs.tag_name }}"
|
|
if git rev-parse -q --verify "refs/tags/${TAG}" >/dev/null 2>&1; then
|
|
echo "Tag ${TAG} already exists, skipping creation"
|
|
else
|
|
git tag "${TAG}"
|
|
git push origin "${TAG}"
|
|
fi
|
|
|
|
- name: Create release
|
|
id: create_release
|
|
uses: ggml-org/action-create-release@v1
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
tag_name: ${{ needs.determine-tag.outputs.tag_name }}
|
|
prerelease: true
|
|
|
|
- name: Upload release
|
|
id: upload_release
|
|
uses: actions/github-script@ffc2c79a5b2490bd33e0a41c1de74b877714d736 # v3
|
|
with:
|
|
github-token: ${{secrets.GITHUB_TOKEN}}
|
|
script: |
|
|
const path = require('path');
|
|
const fs = require('fs');
|
|
const release_id = '${{ steps.create_release.outputs.id }}';
|
|
for (let file of await fs.readdirSync('./release')) {
|
|
if (path.extname(file) === '.zip' || file.endsWith('.tar.gz')) {
|
|
console.log('uploadReleaseAsset', file);
|
|
await github.repos.uploadReleaseAsset({
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
release_id: release_id,
|
|
name: file,
|
|
data: await fs.readFileSync(`./release/${file}`)
|
|
});
|
|
}
|
|
}
|