Spaces:
Running
Running
| name: CI | |
| on: | |
| push: | |
| branches: | |
| - master | |
| tags: | |
| - 'v*' | |
| paths: ['.github/workflows/build.yml', | |
| '**/CMakeLists.txt', | |
| '**/Makefile', | |
| '**/*.mk', | |
| '**/*.cmake', | |
| '**/*.in', | |
| '**/*.h', | |
| '**/*.hpp', | |
| '**/*.c', | |
| '**/*.cpp', | |
| '**/*.cu', | |
| '**/*.cuh', | |
| '**/*.cl', | |
| '**/*.swift', | |
| '**/*.m', | |
| '**/*.mm', | |
| '**/*.metal', | |
| '**/*.comp', | |
| '**/*.java'] | |
| pull_request: | |
| types: [opened, synchronize, reopened] | |
| workflow_dispatch: | |
| inputs: | |
| create_release: | |
| description: 'Create new release' | |
| required: true | |
| type: boolean | |
| pre_release_tag: | |
| description: 'Pre-release tag name' | |
| required: false | |
| type: string | |
| run_type: | |
| description: 'Workflow type to run' | |
| required: true | |
| type: choice | |
| options: | |
| - full-ci | |
| - release-only | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.head_ref && github.ref || github.run_id }} | |
| cancel-in-progress: true | |
| permissions: | |
| contents: write # for creating release | |
| env: | |
| BRANCH_NAME: ${{ github.head_ref || github.ref_name }} | |
| ubuntu_image: "ubuntu:22.04" | |
| VCPKG_BINARY_SOURCES: "clear;x-gha,readwrite" | |
| 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@v4 | |
| 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 [[ "${{ github.ref_type }}" == "tag" ]]; then | |
| echo "Using pushed tag name" | |
| TAG_NAME="${{ github.ref_name }}" | |
| SHOULD_RELEASE="true" | |
| elif [[ -n "$CUSTOM_TAG" ]]; then | |
| echo "Using custom tag" | |
| TAG_NAME="${CUSTOM_TAG}" | |
| SHOULD_RELEASE="true" | |
| elif [[ "${{ github.event.inputs.create_release }}" == "true" ]]; then | |
| echo "Manual release requested" | |
| SHOULD_RELEASE="true" | |
| TAG_NAME="b${BUILD_NUMBER}" | |
| 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 | |
| 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-22: | |
| if: ${{ github.event_name == 'push' || github.event_name == 'pull_request' || | |
| github.event.inputs.run_type == 'full-ci' }} | |
| runs-on: ubuntu-22.04 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| arch: [linux/amd64, linux/ppc64le] | |
| steps: | |
| - name: Clone | |
| uses: actions/checkout@v4 | |
| - name: Set up QEMU | |
| uses: docker/setup-qemu-action@v3 | |
| - name: Build ${{ matrix.arch }} | |
| run: | | |
| docker run --platform ${{ matrix.arch }} --rm \ | |
| -v ${{ github.workspace }}:/workspace \ | |
| -w /workspace ${{ env.ubuntu_image }} /bin/sh -c ' | |
| set -e | |
| export DEBIAN_FRONTEND=noninteractive | |
| sed -i "s|archive.ubuntu.com|mirrors.kernel.org|g" /etc/apt/sources.list | |
| sed -i "s|security.ubuntu.com|mirrors.kernel.org|g" /etc/apt/sources.list | |
| apt update | |
| apt install -y build-essential libsdl2-dev cmake git | |
| cmake -B build | |
| cmake --build build --config Release -j $(nproc)' | |
| ubuntu-22-arm64: | |
| if: ${{ github.event_name == 'push' || github.event_name == 'pull_request' || | |
| github.event.inputs.run_type == 'full-ci' }} | |
| runs-on: ubuntu-22.04 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| arch: [linux/arm64] | |
| steps: | |
| - name: Clone | |
| uses: actions/checkout@v4 | |
| - name: Set up QEMU | |
| uses: docker/setup-qemu-action@v3 | |
| - name: Build ${{ matrix.arch }} | |
| run: | | |
| docker run --platform ${{ matrix.arch }} --rm \ | |
| -v ${{ github.workspace }}:/workspace \ | |
| -w /workspace ${{ env.ubuntu_image }} /bin/sh -c ' | |
| set -e | |
| export DEBIAN_FRONTEND=noninteractive | |
| sed -i "s|archive.ubuntu.com|mirrors.kernel.org|g" /etc/apt/sources.list | |
| sed -i "s|security.ubuntu.com|mirrors.kernel.org|g" /etc/apt/sources.list | |
| apt-get update | |
| apt-get install -y ca-certificates | |
| sed -i "s|http://ports.ubuntu.com|https://mirror.kumi.systems|g" /etc/apt/sources.list | |
| apt update | |
| apt install -y build-essential libsdl2-dev cmake git | |
| cmake -B build -DGGML_NATIVE=OFF -DGGML_CPU_ARM_ARCH=armv8-a | |
| cmake --build build --config Release -j $(nproc)' | |
| ubuntu-22-arm-v7: | |
| if: ${{ github.event_name == 'push' || github.event_name == 'pull_request' || | |
| github.event.inputs.run_type == 'full-ci' }} | |
| runs-on: ubuntu-22.04 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| arch: [linux/arm/v7] | |
| steps: | |
| - name: Clone | |
| uses: actions/checkout@v4 | |
| - name: Set up QEMU | |
| uses: docker/setup-qemu-action@v3 | |
| - name: Build ${{ matrix.arch }} | |
| run: | | |
| docker run --platform ${{ matrix.arch }} --rm \ | |
| -v ${{ github.workspace }}:/workspace \ | |
| -w /workspace ${{ env.ubuntu_image }} /bin/sh -c ' | |
| set -e | |
| export DEBIAN_FRONTEND=noninteractive | |
| sed -i "s|archive.ubuntu.com|mirrors.kernel.org|g" /etc/apt/sources.list | |
| sed -i "s|security.ubuntu.com|mirrors.kernel.org|g" /etc/apt/sources.list | |
| apt-get update | |
| apt-get install -y ca-certificates | |
| sed -i "s|http://ports.ubuntu.com|https://mirror.kumi.systems|g" /etc/apt/sources.list | |
| apt update | |
| apt install -y build-essential libsdl2-dev cmake git | |
| cmake -B build -DGGML_NATIVE=OFF -DGGML_CPU_ARM_ARCH=armv7-a+fp | |
| cmake --build build --config Release -j $(nproc)' | |
| macOS-latest: | |
| if: ${{ github.event_name == 'push' || github.event_name == 'pull_request' || | |
| github.event.inputs.run_type == 'full-ci' }} | |
| runs-on: macOS-latest | |
| strategy: | |
| matrix: | |
| destination: ['generic/platform=macOS', 'generic/platform=iOS', 'generic/platform=tvOS'] | |
| steps: | |
| - name: Clone | |
| id: checkout | |
| uses: actions/checkout@v4 | |
| - name: ccache | |
| uses: hendrikmuhs/[email protected] | |
| with: | |
| key: macOS-latest-swift | |
| evict-old-files: 1d | |
| - name: Dependencies | |
| run: | | |
| brew update | |
| brew install sdl2 cmake | |
| - name: Build | |
| run: | | |
| sysctl -a | |
| cmake -B build -G Xcode \ | |
| -DGGML_METAL_USE_BF16=ON \ | |
| -DGGML_METAL_EMBED_LIBRARY=ON \ | |
| -DWHISPER_BUILD_EXAMPLES=OFF \ | |
| -DWHISPER_BUILD_TESTS=OFF \ | |
| -DWHISPER_BUILD_SERVER=OFF \ | |
| -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" | |
| cmake --build build --config Release -j $(sysctl -n hw.logicalcpu) | |
| # freeBSD-latest: | |
| # runs-on: macos-13 | |
| # | |
| # steps: | |
| # - name: Clone | |
| # uses: actions/checkout@v4 | |
| # | |
| # - name: Build | |
| # uses: cross-platform-actions/[email protected] | |
| # with: | |
| # operating_system: freebsd | |
| # version: '14.2' | |
| # run: | | |
| # sudo pkg update | |
| # sudo pkg install -y gmake sdl2 cmake git | |
| # cmake -B build | |
| # cmake --build build --config Release | |
| ubuntu-22-gcc: | |
| if: ${{ github.event_name == 'push' || github.event_name == 'pull_request' || | |
| github.event.inputs.run_type == 'full-ci' }} | |
| runs-on: ubuntu-22.04 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| build: [Debug, Release] | |
| arch: [linux/amd64, linux/ppc64le] | |
| steps: | |
| - name: Clone | |
| uses: actions/checkout@v4 | |
| - name: Set up QEMU | |
| uses: docker/setup-qemu-action@v3 | |
| - name: Build ${{ matrix.arch }} | |
| run: | | |
| docker run --platform ${{ matrix.arch }} --rm \ | |
| -v ${{ github.workspace }}:/workspace \ | |
| -w /workspace ${{ env.ubuntu_image }} /bin/sh -c ' | |
| set -e | |
| export DEBIAN_FRONTEND=noninteractive | |
| sed -i "s|archive.ubuntu.com|mirrors.kernel.org|g" /etc/apt/sources.list | |
| sed -i "s|security.ubuntu.com|mirrors.kernel.org|g" /etc/apt/sources.list | |
| apt update | |
| apt install -y build-essential cmake libsdl2-dev git | |
| cmake . -DWHISPER_SDL2=ON -DCMAKE_BUILD_TYPE=${{ matrix.build }} | |
| make | |
| ctest -L gh --output-on-failure' | |
| ubuntu-22-gcc-arm64: | |
| if: ${{ github.event_name == 'push' || github.event_name == 'pull_request' || | |
| github.event.inputs.run_type == 'full-ci' }} | |
| runs-on: ubuntu-22.04 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| build: [Debug, Release] | |
| arch: [linux/arm64] | |
| steps: | |
| - name: Clone | |
| uses: actions/checkout@v4 | |
| - name: Set up QEMU | |
| uses: docker/setup-qemu-action@v3 | |
| - name: Build ${{ matrix.arch }} | |
| run: | | |
| docker run --platform ${{ matrix.arch }} --rm \ | |
| -v ${{ github.workspace }}:/workspace \ | |
| -w /workspace ${{ env.ubuntu_image }} /bin/sh -c ' | |
| set -e | |
| export DEBIAN_FRONTEND=noninteractive | |
| sed -i "s|archive.ubuntu.com|mirrors.kernel.org|g" /etc/apt/sources.list | |
| sed -i "s|security.ubuntu.com|mirrors.kernel.org|g" /etc/apt/sources.list | |
| apt-get update | |
| apt-get install -y ca-certificates | |
| sed -i "s|http://ports.ubuntu.com|https://mirror.kumi.systems|g" /etc/apt/sources.list | |
| apt update | |
| apt install -y build-essential cmake libsdl2-dev git | |
| cmake . -DWHISPER_SDL2=ON -DCMAKE_BUILD_TYPE=${{ matrix.build }} -DGGML_NATIVE=OFF -DGGML_CPU_ARM_ARCH=armv8-a | |
| make | |
| ctest -L gh --output-on-failure' | |
| ubuntu-22-gcc-arm-v7: | |
| if: ${{ github.event_name == 'push' || github.event_name == 'pull_request' || | |
| github.event.inputs.run_type == 'full-ci' }} | |
| runs-on: ubuntu-22.04 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| build: [Debug, Release] | |
| arch: [linux/arm/v7] | |
| steps: | |
| - name: Clone | |
| uses: actions/checkout@v4 | |
| - name: Set up QEMU | |
| uses: docker/setup-qemu-action@v3 | |
| - name: Build ${{ matrix.arch }} | |
| run: | | |
| docker run --platform ${{ matrix.arch }} --rm \ | |
| -v ${{ github.workspace }}:/workspace \ | |
| -w /workspace ${{ env.ubuntu_image }} /bin/sh -c ' | |
| set -e | |
| export DEBIAN_FRONTEND=noninteractive | |
| sed -i "s|archive.ubuntu.com|mirrors.kernel.org|g" /etc/apt/sources.list | |
| sed -i "s|security.ubuntu.com|mirrors.kernel.org|g" /etc/apt/sources.list | |
| apt-get update | |
| apt-get install -y ca-certificates | |
| sed -i "s|http://ports.ubuntu.com|https://mirror.kumi.systems|g" /etc/apt/sources.list | |
| apt update | |
| apt install -y build-essential cmake libsdl2-dev git | |
| cmake . -DWHISPER_SDL2=ON -DCMAKE_BUILD_TYPE=${{ matrix.build }} -DGGML_NATIVE=OFF -DGGML_CPU_ARM_ARCH=armv7-a+fp | |
| make | |
| ctest -L gh --output-on-failure' | |
| ubuntu-22-clang: | |
| if: ${{ github.event_name == 'push' || github.event_name == 'pull_request' || | |
| github.event.inputs.run_type == 'full-ci' }} | |
| runs-on: ubuntu-22.04 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| build: [Debug, Release] | |
| #arch: [linux/amd64, linux/arm64, linux/arm/v7, linux/ppc64le] | |
| # TODO: arm/v7 disabled due to clang bug | |
| # https://github.com/ggerganov/whisper.cpp/actions/runs/9657764109/job/26637633042?pr=2256#step:4:1990 | |
| arch: [linux/amd64, linux/arm64, linux/ppc64le] | |
| steps: | |
| - name: Clone | |
| uses: actions/checkout@v4 | |
| - name: Set up QEMU | |
| uses: docker/setup-qemu-action@v3 | |
| - name: Build ${{ matrix.arch }} | |
| run: | | |
| docker run --platform ${{ matrix.arch }} --rm \ | |
| -v ${{ github.workspace }}:/workspace \ | |
| -w /workspace ${{ env.ubuntu_image }} /bin/sh -c ' | |
| set -e | |
| export DEBIAN_FRONTEND=noninteractive | |
| sed -i "s|archive.ubuntu.com|mirrors.kernel.org|g" /etc/apt/sources.list | |
| sed -i "s|security.ubuntu.com|mirrors.kernel.org|g" /etc/apt/sources.list | |
| apt-get update | |
| apt-get install -y ca-certificates | |
| sed -i "s|http://ports.ubuntu.com|https://mirror.kumi.systems|g" /etc/apt/sources.list | |
| apt update | |
| apt install -y clang build-essential cmake libsdl2-dev git | |
| cmake . -DWHISPER_SDL2=ON -DCMAKE_BUILD_TYPE=${{ matrix.build }} -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang | |
| make | |
| ctest -L gh --output-on-failure' | |
| ubuntu-22-gcc-sanitized: | |
| if: ${{ github.event_name == 'push' || github.event_name == 'pull_request' || | |
| github.event.inputs.run_type == 'full-ci' }} | |
| runs-on: ubuntu-22.04 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| sanitizer: [ADDRESS, THREAD, UNDEFINED] | |
| arch: [linux/amd64] | |
| steps: | |
| - name: Clone | |
| uses: actions/checkout@v4 | |
| - name: Set up QEMU | |
| uses: docker/setup-qemu-action@v3 | |
| - name: Build ${{ matrix.arch }} | |
| run: | | |
| docker run --platform ${{ matrix.arch }} --rm \ | |
| -v ${{ github.workspace }}:/workspace \ | |
| -w /workspace ${{ env.ubuntu_image }} /bin/sh -c ' | |
| set -e | |
| export DEBIAN_FRONTEND=noninteractive | |
| sed -i "s|archive.ubuntu.com|mirrors.kernel.org|g" /etc/apt/sources.list | |
| sed -i "s|security.ubuntu.com|mirrors.kernel.org|g" /etc/apt/sources.list | |
| apt update | |
| apt install -y build-essential cmake git | |
| cmake . -DCMAKE_BUILD_TYPE=Debug \ | |
| -DWHISPER_SANITIZE_${{ matrix.sanitizer }}=ON \ | |
| -DGGML_OPENMP=OFF | |
| make | |
| ctest -L gh --output-on-failure' | |
| ubuntu-22-cmake-sycl: | |
| if: ${{ github.event_name == 'push' || github.event_name == 'pull_request' || | |
| github.event.inputs.run_type == 'full-ci' }} | |
| runs-on: ubuntu-22.04 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| dwhisper_sycl: [ON] | |
| dcmake_c_compiler: [icx] | |
| dcmake_cxx_compiler: [icpx] | |
| arch: [linux/amd64, linux/arm64, linux/arm/v7, linux/ppc64le] | |
| continue-on-error: true | |
| steps: | |
| - name: Clone | |
| uses: actions/checkout@v4 | |
| - name: add oneAPI to apt | |
| shell: bash | |
| run: | | |
| cd /tmp | |
| wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | |
| sudo apt-key add GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | |
| rm GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | |
| sudo add-apt-repository "deb https://apt.repos.intel.com/oneapi all main" | |
| - name: install oneAPI dpcpp compiler | |
| shell: bash | |
| run: | | |
| sudo apt update | |
| sudo apt install intel-oneapi-compiler-dpcpp-cpp git | |
| - name: install oneAPI MKL library | |
| shell: bash | |
| run: | | |
| sudo apt install intel-oneapi-mkl-devel git | |
| - name: Clone | |
| id: checkout | |
| uses: actions/checkout@v4 | |
| - name: Build | |
| id: cmake_build | |
| run: | | |
| source /opt/intel/oneapi/setvars.sh | |
| mkdir build | |
| cd build | |
| cmake -DGGML_SYCL=ON -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx .. | |
| cmake --build . --config Release -j $(nproc) | |
| ubuntu-22-cmake-sycl-fp16: | |
| if: ${{ github.event_name == 'push' || github.event_name == 'pull_request' || | |
| github.event.inputs.run_type == 'full-ci' }} | |
| runs-on: ubuntu-22.04 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| dwhisper_sycl: [ON] | |
| dcmake_c_compiler: [icx] | |
| dcmake_cxx_compiler: [icpx] | |
| arch: [linux/amd64, linux/arm64, linux/arm/v7, linux/ppc64le] | |
| continue-on-error: true | |
| steps: | |
| - name: Clone | |
| uses: actions/checkout@v4 | |
| - name: add oneAPI to apt | |
| shell: bash | |
| run: | | |
| cd /tmp | |
| wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | |
| sudo apt-key add GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | |
| rm GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | |
| sudo add-apt-repository "deb https://apt.repos.intel.com/oneapi all main" | |
| - name: install oneAPI dpcpp compiler | |
| shell: bash | |
| run: | | |
| sudo apt update | |
| sudo apt install intel-oneapi-compiler-dpcpp-cpp git | |
| - name: install oneAPI MKL library | |
| shell: bash | |
| run: | | |
| sudo apt install intel-oneapi-mkl-devel | |
| - name: Clone | |
| id: checkout | |
| uses: actions/checkout@v4 | |
| - name: Build | |
| id: cmake_build | |
| run: | | |
| source /opt/intel/oneapi/setvars.sh | |
| mkdir build | |
| cd build | |
| cmake -DGGML_SYCL_F16=ON -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx .. | |
| cmake --build . --config Release -j $(nproc) | |
| windows-msys2: | |
| if: ${{ github.event_name == 'push' || github.event_name == 'pull_request' || | |
| github.event.inputs.run_type == 'full-ci' }} | |
| runs-on: windows-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - { sys: UCRT64, env: ucrt-x86_64, build: Release } | |
| - { sys: CLANG64, env: clang-x86_64, build: Release } | |
| steps: | |
| - name: Clone | |
| uses: actions/checkout@v4 | |
| - name: Setup ${{ matrix.sys }} | |
| uses: msys2/setup-msys2@v2 | |
| with: | |
| update: true | |
| msystem: ${{matrix.sys}} | |
| install: >- | |
| base-devel | |
| git | |
| mingw-w64-${{matrix.env}}-toolchain | |
| mingw-w64-${{matrix.env}}-cmake | |
| mingw-w64-${{matrix.env}}-SDL2 | |
| mingw-w64-${{matrix.env}}-openblas | |
| - name: Build using CMake | |
| shell: msys2 {0} | |
| run: | | |
| cmake -B build -DWHISPER_SDL2=ON | |
| cmake --build build --config ${{ matrix.build }} -j $(nproc) | |
| - name: Clean after building using CMake | |
| shell: msys2 {0} | |
| run: | | |
| rm -rf build | |
| - name: Build using CMake w/ OpenBLAS | |
| shell: msys2 {0} | |
| run: | | |
| cmake -B build -DGGML_BLAS=ON -DGGML_BLAS_VENDOR=OpenBLAS | |
| cmake --build build --config ${{ matrix.build }} -j $(nproc) | |
| windows: | |
| if: ${{ github.event_name == 'push' || github.event_name == 'pull_request' || | |
| github.event.inputs.run_type == 'full-ci' }} | |
| 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@v4 | |
| - name: Add msbuild to PATH | |
| uses: microsoft/setup-msbuild@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 }} | |
| - 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@v4 | |
| with: | |
| name: ${{ matrix.s2arc }}_SDL2.dll | |
| path: build/bin/${{ matrix.build }}/SDL2.dll | |
| - name: Upload whisper dll | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: whisper_${{ matrix.arch }}.dll | |
| path: build/bin/${{ matrix.build }}/whisper.dll | |
| - name: Upload ggml dll | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ggml_${{ matrix.arch }}.dll | |
| path: build/bin/${{ matrix.build }}/ggml.dll | |
| - name: Upload ggml base dll | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ggml_base_${{ matrix.arch }}.dll | |
| path: build/bin/${{ matrix.build }}/ggml-base.dll | |
| - name: Upload ggml cpu dll | |
| uses: actions/upload-artifact@v4 | |
| 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 }} | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: whisper-bin-${{ matrix.arch }}.zip | |
| path: whisper-bin-${{ matrix.arch }}.zip | |
| windows-blas: | |
| if: ${{ github.event_name == 'push' || github.event_name == 'pull_request' || | |
| github.event.inputs.run_type == 'full-ci' }} | |
| runs-on: windows-latest | |
| 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@v4 | |
| - name: Export GitHub Actions cache environment variables | |
| uses: actions/github-script@v7 | |
| 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@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 }} | |
| - 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 }} | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: whisper-blas-bin-${{ matrix.arch }}.zip | |
| path: whisper-blas-bin-${{ matrix.arch }}.zip | |
| windows-cublas: | |
| if: ${{ github.event_name == 'push' || github.event_name == 'pull_request' || | |
| github.event.inputs.run_type == 'full-ci' }} | |
| 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@v4 | |
| - name: Install Ninja | |
| id: install_ninja | |
| run: | | |
| choco install ninja | |
| - name: Install ccache | |
| uses: hendrikmuhs/[email protected] | |
| with: | |
| key: ${{ github.job }}-${{ matrix.cuda-toolkit }}-${{ matrix.build }} | |
| variant: sccache | |
| 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@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%" | |
| set /A NINJA_JOBS=%NUMBER_OF_PROCESSORS%-1 | |
| cmake --build build --config ${{ matrix.build }} -j %NUMBER_OF_PROCESSORS% | |
| - name: Check sccache status after build | |
| run: | | |
| sccache --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-cublas-${{ matrix.cuda-toolkit }}-bin-${{ matrix.arch }}.zip" | |
| - name: Upload binaries | |
| if: ${{ needs.determine-tag.outputs.should_release }} | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: whisper-cublas-${{ matrix.cuda-toolkit }}-bin-${{ matrix.arch }}.zip | |
| path: whisper-cublas-${{ matrix.cuda-toolkit }}-bin-${{ matrix.arch }}.zip | |
| emscripten: | |
| if: ${{ github.event_name == 'push' || github.event_name == 'pull_request' || | |
| github.event.inputs.run_type == 'full-ci' }} | |
| runs-on: ubuntu-22.04 | |
| strategy: | |
| matrix: | |
| build: [Release] | |
| steps: | |
| - name: Clone | |
| uses: actions/checkout@v4 | |
| - name: Setup emsdk | |
| uses: mymindstorm/setup-emsdk@v14 | |
| - name: Verify | |
| run: emcc -v | |
| - name: Build | |
| run: | | |
| emcmake cmake . -DCMAKE_BUILD_TYPE=${{ matrix.build }} | |
| make | |
| ios-xcode-build: | |
| runs-on: macos-latest | |
| needs: determine-tag | |
| strategy: | |
| matrix: | |
| build: [Release] | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - 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_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 }} | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| path: whisper-${{ needs.determine-tag.outputs.tag_name }}-xcframework.zip | |
| name: whisper-${{ needs.determine-tag.outputs.tag_name }}-xcframework.zip | |
| android: | |
| if: ${{ github.event_name == 'push' || github.event_name == 'pull_request' || | |
| github.event.inputs.run_type == 'full-ci' }} | |
| runs-on: ubuntu-22.04 | |
| steps: | |
| - name: Clone | |
| uses: actions/checkout@v4 | |
| with: | |
| path: whisper | |
| - name: Install Java | |
| uses: actions/setup-java@v4 | |
| with: | |
| distribution: zulu | |
| java-version: 21 | |
| - name: Setup Android SDK | |
| uses: android-actions/setup-android@v3 | |
| - name: Build | |
| run: | | |
| cd whisper/examples/whisper.android | |
| ./gradlew assembleRelease --no-daemon | |
| - name: Build with external ggml | |
| run: | | |
| export PATH_TO_GGML=$PWD/ggml | |
| cd whisper/examples/whisper.android | |
| ./gradlew assembleRelease --no-daemon | |
| android_java: | |
| runs-on: ubuntu-22.04 | |
| steps: | |
| - name: Clone | |
| uses: actions/checkout@v4 | |
| - name: set up JDK 11 | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: '11' | |
| distribution: 'temurin' | |
| cache: gradle | |
| - name: Setup Android SDK | |
| uses: android-actions/setup-android@v3 | |
| with: | |
| cmdline-tools-version: 9.0 | |
| - name: Build | |
| run: | | |
| cd examples/whisper.android.java | |
| chmod +x ./gradlew | |
| ./gradlew assembleRelease | |
| bindings-java: | |
| if: ${{ github.event_name == 'push' || github.event_name == 'pull_request' || | |
| github.event.inputs.run_type == 'full-ci' }} | |
| needs: ['windows'] | |
| runs-on: windows-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install Java | |
| uses: actions/setup-java@v4 | |
| with: | |
| distribution: zulu | |
| java-version: 20 | |
| - name: Download Whisper Windows lib | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: whisper_x64.dll | |
| - name: Download GGML Windows lib | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: ggml_x64.dll | |
| - name: Download GGML Base Windows lib | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: ggml_base_x64.dll | |
| - name: Download GGML CPU Windows lib | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: ggml_cpu_x64.dll | |
| - name: Download SDL2.dll | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: x64_SDL2.dll | |
| - name: List downloaded files | |
| shell: pwsh | |
| run: | | |
| Get-ChildItem -Path "." -Recurse -Filter "*.dll" | |
| - name: Move DLL to correct location | |
| shell: pwsh | |
| run: | | |
| New-Item -Path "build\bin\Release" -ItemType Directory -Force | |
| Copy-Item -Path "whisper.dll" -Destination "build\bin\Release\whisper.dll" -Force | |
| Write-Host "Copied whisper.dll to build\bin\Release\whisper.dll directory" | |
| Copy-Item -Path "ggml.dll" -Destination "build\bin\Release\ggml.dll" -Force | |
| Write-Host "Copied ggml.dll to build\bin\Release\ggml.dll directory" | |
| Copy-Item -Path "ggml-base.dll" -Destination "build\bin\Release\ggml-base.dll" -Force | |
| Write-Host "Copied ggml-base.dll to build\bin\Release\ggml-base.dll directory" | |
| Copy-Item -Path "ggml-cpu.dll" -Destination "build\bin\Release\ggml-cpu.dll" -Force | |
| Write-Host "Copied ggml-cpu.dll to build\bin\Release\ggml-cpu.dll directory" | |
| Copy-Item -Path "SDL2.dll" -Destination "build\bin\Release\SDL2.dll" -Force | |
| Write-Host "Copied SDL2.dll to build\bin\Release\SDL2.dll directory" | |
| - name: List build release files | |
| shell: pwsh | |
| run: | | |
| Get-ChildItem -Path "build\Release" -Recurse -Filter "*.dll" | |
| - name: Build | |
| run: | | |
| models\download-ggml-model.cmd tiny.en models/ | |
| cd bindings/java | |
| chmod +x ./gradlew | |
| ./gradlew build --info | |
| - name: Pack jar artifacts | |
| shell: pwsh | |
| run: | | |
| Compress-Archive -Path "bindings/java/build/libs/whispercpp-*.jar" -DestinationPath "whispercpp.jar.zip" | |
| - name: Upload jar | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: whispercpp.jar.zip | |
| path: whispercpp.jar.zip | |
| # - name: Publish package | |
| # if: ${{ github.ref == 'refs/heads/master' }} | |
| # uses: gradle/[email protected] | |
| # with: | |
| # arguments: publish | |
| # build-root-directory: bindings/java | |
| # env: | |
| # MAVEN_USERNAME: ${{ secrets.JIRA_USER }} | |
| # MAVEN_PASSWORD: ${{ secrets.JIRA_PASS }} | |
| # PGP_SECRET: ${{ secrets.GPG_PRIVATE_KEY }} | |
| # PGP_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} | |
| quantize: | |
| if: ${{ github.event_name == 'push' || github.event_name == 'pull_request' || | |
| github.event.inputs.run_type == 'full-ci' }} | |
| runs-on: ubuntu-22.04 | |
| steps: | |
| - name: Clone | |
| uses: actions/checkout@v4 | |
| - name: Test quantize | |
| run: | | |
| ./models/download-ggml-model.sh tiny.en | |
| cmake -B build | |
| cmake --build build --config Release | |
| ./build/bin/quantize models/ggml-tiny.en.bin models/ggml-tiny.en-q4_0.bin q4_0 | |
| release: | |
| if: ${{ github.event.inputs.create_release == 'true' || github.event.inputs.pre_release_tag != '' || startsWith(github.ref, 'refs/tags/v') }} | |
| runs-on: ubuntu-latest | |
| needs: | |
| - determine-tag | |
| - ios-xcode-build | |
| - windows | |
| - windows-blas | |
| - windows-cublas | |
| steps: | |
| - name: Clone | |
| id: checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: ccache | |
| uses: hendrikmuhs/[email protected] | |
| with: | |
| key: release | |
| evict-old-files: 1d | |
| # Downloads all the artifacts from the previous jobs | |
| - name: Download artifacts | |
| id: download-artifact | |
| uses: actions/download-artifact@v4 | |
| with: | |
| path: ./artifact | |
| - name: Move artifacts | |
| id: move_artifacts | |
| run: mkdir -p ./artifact/release && mv ./artifact/*/*.zip ./artifact/release | |
| - 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: ${{ github.event.inputs.pre_release_tag != '' }} | |
| draft: true | |
| - name: Upload release | |
| id: upload_release | |
| uses: actions/github-script@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('./artifact/release')) { | |
| if (path.extname(file) === '.zip') { | |
| 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(`./artifact/release/${file}`) | |
| }); | |
| } | |
| } | |
| coreml-base-en: | |
| if: ${{ (github.event_name == 'push' && github.ref == 'refs/heads/master') || | |
| github.event.inputs.create_release == 'true' || | |
| github.event.inputs.pre_release_tag != '' || | |
| startsWith(github.ref, 'refs/tags/v') }} | |
| runs-on: macos-latest | |
| needs: determine-tag | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Set environment variables | |
| id: set_vars | |
| run: | | |
| echo "MODEL_NAME=base.en" >> $GITHUB_ENV | |
| echo "GEN_MODEL_NAME=whisper-${{ needs.determine-tag.outputs.tag_name }}-ggml-base.en-encoder.mlmodelc" >> $GITHUB_ENV | |
| - name: Download model | |
| run: | | |
| ./models/download-ggml-model.sh ${{ env.MODEL_NAME }} | |
| - name: Generate CoreML model | |
| run: | | |
| python3.11 -m venv venv | |
| source venv/bin/activate | |
| pip install ane_transformers openai-whisper coremltools | |
| ./models/generate-coreml-model.sh ${{ env.MODEL_NAME }} | |
| vad: | |
| if: ${{ github.event_name == 'push' || github.event_name == 'pull_request' || | |
| github.event.inputs.run_type == 'full-ci' }} | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Build | |
| shell: bash | |
| run: | | |
| cmake -B build | |
| cmake --build build --config Release | |
| - name: Test | |
| shell: bash | |
| run: | | |
| ctest -R ^test-vad$ --test-dir build --output-on-failure -VV | |