Files
PyTaiko/.github/workflows/build_audio.yml
2025-09-15 12:49:46 -04:00

182 lines
6.1 KiB
YAML

name: Build Audio Library (Windows)
on:
push:
branches: [main, develop]
pull_request:
branches: [main, develop]
workflow_dispatch: # Allow manual triggering
jobs:
build-windows:
runs-on: windows-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup vcpkg
uses: microsoft/setup-msbuild@v2
- name: Cache vcpkg packages
uses: actions/cache@v4
with:
path: |
${{ env.VCPKG_INSTALLATION_ROOT }}\installed
${{ env.VCPKG_INSTALLATION_ROOT }}\packages
key: vcpkg-${{ runner.os }}-${{ hashFiles('**/vcpkg.json') }}
restore-keys: |
vcpkg-${{ runner.os }}-
- name: Install vcpkg dependencies
run: |
vcpkg install portaudio:x64-windows
vcpkg install libsndfile:x64-windows
vcpkg install libsamplerate:x64-windows
vcpkg integrate install
- name: Setup MSVC environment
uses: microsoft/setup-msbuild@v2
- name: Setup Developer Command Prompt
uses: ilammy/msvc-dev-cmd@v1
with:
arch: x64
- name: Debug Makefile and environment
run: |
echo "Current directory:"
dir
echo "Makefile exists:"
if exist Makefile (echo Yes) else (echo No)
echo "Available make targets:"
make help || echo "Help target not available"
echo "VCPKG_ROOT: %VCPKG_ROOT%"
echo "VCPKG_INSTALLATION_ROOT: %VCPKG_INSTALLATION_ROOT%"
echo "System detection:"
echo %OS%
echo "Compiler detection:"
where cl || echo "cl not found in PATH"
where gcc || echo "gcc not found in PATH"
echo "Testing Windows detection in Makefile:"
make -n all | head -5 || echo "Make dry-run failed"
shell: cmd
working-directory: libs/audio
env:
VCPKG_INSTALLATION_ROOT: ${{ env.VCPKG_ROOT }}
OS: Windows_NT
- name: Check dependencies
run: |
echo "Attempting to check dependencies..."
make check-deps || echo "check-deps target failed or not available, continuing..."
shell: cmd
working-directory: libs/audio
continue-on-error: true
env:
VCPKG_INSTALLATION_ROOT: ${{ env.VCPKG_ROOT }}
OS: Windows_NT
- name: Build audio library (Force Windows detection)
run: |
echo "Forcing Windows build with explicit variables..."
make all CC=cl CFLAGS="/O2 /W3 /MD /TC /I\"%VCPKG_INSTALLATION_ROOT%\installed\x64-windows\include\"" LDFLAGS="/DLL /LIBPATH:\"%VCPKG_INSTALLATION_ROOT%\installed\x64-windows\lib\"" LIBS="portaudio.lib libsndfile.lib libsamplerate.lib" LIBNAME="libaudio.dll" OBJ_EXT=".obj"
shell: cmd
working-directory: libs/audio
env:
VCPKG_INSTALLATION_ROOT: ${{ env.VCPKG_ROOT }}
OS: Windows_NT
- name: Upload build artifacts
uses: actions/upload-artifact@v4
with:
name: libaudio-windows-x64
path: |
libs/audio/libaudio.dll
libs/audio/*.lib
retention-days: 30
- name: Run tests (if available)
run: |
if exist tests.exe (
echo Running tests...
tests.exe
) else (
echo No tests found, skipping...
)
shell: cmd
working-directory: libs/audio
continue-on-error: true
build-matrix:
runs-on: windows-latest
strategy:
matrix:
architecture: [x64, x86]
configuration: [Release, Debug]
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup vcpkg
uses: microsoft/setup-msbuild@v2
- name: Cache vcpkg packages
uses: actions/cache@v4
with:
path: |
${{ env.VCPKG_INSTALLATION_ROOT }}\installed
${{ env.VCPKG_INSTALLATION_ROOT }}\packages
key: vcpkg-${{ matrix.architecture }}-${{ matrix.configuration }}-${{ hashFiles('**/vcpkg.json') }}
restore-keys: |
vcpkg-${{ matrix.architecture }}-${{ matrix.configuration }}-
- name: Setup MSVC environment and Developer Command Prompt
uses: ilammy/msvc-dev-cmd@v1
with:
arch: ${{ matrix.architecture }}
- name: Install vcpkg dependencies
run: |
vcpkg install portaudio:${{ matrix.architecture }}-windows
vcpkg install libsndfile:${{ matrix.architecture }}-windows
vcpkg install libsamplerate:${{ matrix.architecture }}-windows
vcpkg integrate install
- name: Build library (${{ matrix.architecture }}, ${{ matrix.configuration }})
run: |
$arch = "${{ matrix.architecture }}"
$config = "${{ matrix.configuration }}"
$vcpkg_path = $env:VCPKG_ROOT
$cflags = "/O2 /W3 /MD /TC"
if ($config -eq "Debug") {
$cflags += " /Zi"
}
$cflags += " /I`"$vcpkg_path\installed\$arch-windows\include`""
$ldflags = "/DLL /LIBPATH:`"$vcpkg_path\installed\$arch-windows\lib`""
Write-Host "Building with MSVC for $arch $config..."
if ($config -eq "Debug") {
make debug CC=cl CFLAGS="$cflags" LDFLAGS="$ldflags" LIBS="portaudio.lib libsndfile.lib libsamplerate.lib" LIBNAME="libaudio.dll" OBJ_EXT=".obj"
} else {
make all CC=cl CFLAGS="$cflags" LDFLAGS="$ldflags" LIBS="portaudio.lib libsndfile.lib libsamplerate.lib" LIBNAME="libaudio.dll" OBJ_EXT=".obj"
}
shell: powershell
working-directory: libs/audio
env:
VCPKG_INSTALLATION_ROOT: ${{ env.VCPKG_ROOT }}
OS: Windows_NT
- name: Upload artifacts (${{ matrix.architecture }}, ${{ matrix.configuration }})
uses: actions/upload-artifact@v4
with:
name: libaudio-windows-${{ matrix.architecture }}-${{ matrix.configuration }}
path: |
libs/audio/libaudio.dll
libs/audio/*.lib
libs/audio/*.pdb
retention-days: 30