mirror of
https://github.com/ggml-org/whisper.cpp.git
synced 2025-09-15 13:28:35 +08:00
Some checks failed
Bindings Tests (Ruby) / ubuntu-22 (push) Has been cancelled
Publish Docker image / Push Docker image to Docker Hub (map[dockerfile:.devops/main-cuda.Dockerfile platform:linux/amd64 tag:main-cuda]) (push) Has been cancelled
Publish Docker image / Push Docker image to Docker Hub (map[dockerfile:.devops/main-intel.Dockerfile platform:linux/amd64 tag:main-intel]) (push) Has been cancelled
Publish Docker image / Push Docker image to Docker Hub (map[dockerfile:.devops/main-musa.Dockerfile platform:linux/amd64 tag:main-musa]) (push) Has been cancelled
Publish Docker image / Push Docker image to Docker Hub (map[dockerfile:.devops/main.Dockerfile platform:linux/amd64 tag:main]) (push) Has been cancelled
Examples WASM / deploy-wasm-github-pages (push) Has been cancelled
This commit remove the brew install of cmake for macos-latest as this now seems to be pre-installed on the runner. The motivation for this is that this job is failing with the following error: ```console Error: cmake was installed from the local/pinned tap but you are trying to install it from the homebrew/core tap. Formulae with the same name from different taps cannot be installed at the same time. ```
1372 lines
48 KiB
YAML
1372 lines
48 KiB
YAML
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/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)
|
|
|
|
|
|
# freeBSD-latest:
|
|
# runs-on: macos-13
|
|
#
|
|
# steps:
|
|
# - name: Clone
|
|
# uses: actions/checkout@v4
|
|
#
|
|
# - name: Build
|
|
# uses: cross-platform-actions/action@v0.27.0
|
|
# 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/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"
|
|
|
|
# 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/gradle-build-action@v2.4.2
|
|
# 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/ccache-action@v1.2.16
|
|
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
|