| | 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 |
| |
|
| | 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/ccache-action@v1.2.16 |
| | with: |
| | key: macOS-latest-swift |
| | evict-old-files: 1d |
| |
|
| | - name: Dependencies |
| | run: | |
| | brew update |
| | cmake --version |
| | brew install sdl2 |
| | |
| | - 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) |
| | |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | 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/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/ccache-action@v1.2.16 |
| | 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" |
| | |
| | |
| | $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" |
| |
|
| | |
| | mkdir -p $CUDA_TOOLKIT_DIR |
| |
|
| | |
| | choco install unzip -y |
| |
|
| | |
| | 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" |
| |
|
| | |
| | unzip '*.zip' -d $CUDA_TOOLKIT_DIR |
| |
|
| | |
| | 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 |
| |
|
| | |
| | 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 |
| |
|
| | |
| | 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" |
| | |
| | |
| | $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" |
| |
|
| | |
| | mkdir -p $CUDA_TOOLKIT_DIR |
| |
|
| | |
| | choco install unzip -y |
| |
|
| | |
| | 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" |
| |
|
| | |
| | unzip -q '*.zip' -d $CUDA_TOOLKIT_DIR |
| |
|
| | |
| | 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 |
| |
|
| | |
| | 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 |
| |
|
| | |
| | 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 |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | 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/ccache-action@v1.2.16 |
| | with: |
| | key: release |
| | evict-old-files: 1d |
| |
|
| | |
| | - 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 |
| | |
| | |
| | ggml-ci-x64-cpu-low-perf: |
| | runs-on: ubuntu-22.04 |
| |
|
| | steps: |
| | - name: Clone |
| | id: checkout |
| | uses: actions/checkout@v4 |
| |
|
| | - name: ccache |
| | uses: ggml-org/ccache-action@v1.2.16 |
| | with: |
| | key: ggml-ci-x64-cpu-low-perf |
| | evict-old-files: 1d |
| |
|
| | - name: Dependencies |
| | id: depends |
| | run: | |
| | sudo apt-get update |
| | sudo apt-get install build-essential libcurl4-openssl-dev |
| | |
| | - name: Test |
| | id: ggml-ci |
| | run: | |
| | LLAMA_ARG_THREADS=$(nproc) GG_BUILD_LOW_PERF=1 bash ./ci/run.sh ./tmp/results ./tmp/mnt |
| | |
| | ggml-ci-arm64-cpu-low-perf: |
| | runs-on: ubuntu-22.04-arm |
| |
|
| | steps: |
| | - name: Clone |
| | id: checkout |
| | uses: actions/checkout@v4 |
| |
|
| | - name: ccache |
| | uses: ggml-org/ccache-action@v1.2.16 |
| | with: |
| | key: ggml-ci-arm64-cpu-low-perf |
| | evict-old-files: 1d |
| |
|
| | - name: Dependencies |
| | id: depends |
| | run: | |
| | sudo apt-get update |
| | sudo apt-get install build-essential libcurl4-openssl-dev |
| | |
| | - name: Test |
| | id: ggml-ci |
| | run: | |
| | LLAMA_ARG_THREADS=$(nproc) GG_BUILD_LOW_PERF=1 bash ./ci/run.sh ./tmp/results ./tmp/mnt |
| | |
| | ggml-ci-x64-cpu-high-perf: |
| | runs-on: ubuntu-22.04 |
| |
|
| | steps: |
| | - name: Clone |
| | id: checkout |
| | uses: actions/checkout@v4 |
| |
|
| | - name: ccache |
| | uses: ggml-org/ccache-action@v1.2.16 |
| | with: |
| | key: ggml-ci-x64-cpu-high-perf |
| | evict-old-files: 1d |
| |
|
| | - name: Dependencies |
| | id: depends |
| | run: | |
| | sudo apt-get update |
| | sudo apt-get install build-essential libcurl4-openssl-dev |
| | |
| | - name: Test |
| | id: ggml-ci |
| | run: | |
| | LLAMA_ARG_THREADS=$(nproc) bash ./ci/run.sh ./tmp/results ./tmp/mnt |
| | |
| | ggml-ci-arm64-cpu-high-perf: |
| | runs-on: ubuntu-22.04-arm |
| |
|
| | steps: |
| | - name: Clone |
| | id: checkout |
| | uses: actions/checkout@v4 |
| |
|
| | - name: ccache |
| | uses: ggml-org/ccache-action@v1.2.16 |
| | with: |
| | key: ggml-ci-arm64-cpu-high-perf |
| | evict-old-files: 1d |
| |
|
| | - name: Dependencies |
| | id: depends |
| | run: | |
| | sudo apt-get update |
| | sudo apt-get install build-essential libcurl4-openssl-dev |
| | |
| | - name: Test |
| | id: ggml-ci |
| | run: | |
| | LLAMA_ARG_THREADS=$(nproc) GG_BUILD_NO_SVE=1 GG_BUILD_NO_BF16=1 GG_BUILD_EXTRA_TESTS_0=1 bash ./ci/run.sh ./tmp/results ./tmp/mnt |
| | |
| | ggml-ci-arm64-cpu-high-perf-sve: |
| | runs-on: ubuntu-22.04-arm |
| |
|
| | steps: |
| | - name: Clone |
| | id: checkout |
| | uses: actions/checkout@v4 |
| |
|
| | - name: ccache |
| | uses: ggml-org/ccache-action@v1.2.16 |
| | with: |
| | key: ggml-ci-arm64-cpu-high-perf-sve |
| | evict-old-files: 1d |
| |
|
| | - name: Dependencies |
| | id: depends |
| | run: | |
| | sudo apt-get update |
| | sudo apt-get install build-essential libcurl4-openssl-dev |
| | |
| | - name: Test |
| | id: ggml-ci |
| | run: | |
| | LLAMA_ARG_THREADS=$(nproc) GG_BUILD_NO_BF16=1 GG_BUILD_EXTRA_TESTS_0=1 bash ./ci/run.sh ./tmp/results ./tmp/mnt |
| | |
| | ggml-ci-x64-nvidia-cuda: |
| | runs-on: [self-hosted, Linux, X64, NVIDIA] |
| |
|
| | steps: |
| | - name: Clone |
| | id: checkout |
| | uses: actions/checkout@v4 |
| |
|
| | - name: Test |
| | id: ggml-ci |
| | run: | |
| | nvidia-smi |
| | GG_BUILD_CUDA=1 bash ./ci/run.sh ~/results/whisper.cpp /mnt/whisper.cpp |
| | |
| | ggml-ci-x64-nvidia-vulkan-cm: |
| | runs-on: [self-hosted, Linux, X64, NVIDIA] |
| |
|
| | steps: |
| | - name: Clone |
| | id: checkout |
| | uses: actions/checkout@v4 |
| |
|
| | - name: Test |
| | id: ggml-ci |
| | run: | |
| | vulkaninfo --summary |
| | GG_BUILD_VULKAN=1 GGML_VK_DISABLE_COOPMAT2=1 bash ./ci/run.sh ~/results/whisper.cpp /mnt/whisper.cpp |
| | |
| | ggml-ci-x64-nvidia-vulkan-cm2: |
| | runs-on: [self-hosted, Linux, X64, NVIDIA, COOPMAT2] |
| |
|
| | steps: |
| | - name: Clone |
| | id: checkout |
| | uses: actions/checkout@v4 |
| |
|
| | - name: Test |
| | id: ggml-ci |
| | run: | |
| | vulkaninfo --summary |
| | GG_BUILD_VULKAN=1 bash ./ci/run.sh ~/results/whisper.cpp /mnt/whisper.cpp |
| | |
| | ggml-ci-x64-cpu-amx: |
| | runs-on: [self-hosted, Linux, X64, CPU, AMX] |
| |
|
| | steps: |
| | - name: Clone |
| | id: checkout |
| | uses: actions/checkout@v4 |
| |
|
| | - name: Test |
| | id: ggml-ci |
| | run: | |
| | bash ./ci/run.sh ~/results/whisper.cpp /mnt/whisper.cpp |
| | |
| | ggml-ci-mac-metal: |
| | runs-on: [self-hosted, macOS, ARM64] |
| |
|
| | steps: |
| | - name: Clone |
| | id: checkout |
| | uses: actions/checkout@v4 |
| |
|
| | - name: Test |
| | id: ggml-ci |
| | run: | |
| | GG_BUILD_METAL=1 bash ./ci/run.sh ~/results/whisper.cpp ~/mnt/whisper.cpp |
| | |
| | ggml-ci-mac-vulkan: |
| | runs-on: [self-hosted, macOS, ARM64] |
| |
|
| | steps: |
| | - name: Clone |
| | id: checkout |
| | uses: actions/checkout@v4 |
| |
|
| | - name: Test |
| | id: ggml-ci |
| | run: | |
| | vulkaninfo --summary |
| | GG_BUILD_VULKAN=1 bash ./ci/run.sh ~/results/whisper.cpp ~/mnt/whisper.cpp |
| | |