Skip to content

use sdl2-compat

use sdl2-compat #13

Workflow file for this run

name: Build chiaki-ng pull request
on:
pull_request:
types: [opened, synchronize, reopened]
jobs:
build-win_x64:
name: Build chiaki-ng win_x64 (VC)
runs-on: windows-latest
env:
CC: clang-cl.exe
CXX: clang-cl.exe
VULKAN_SDK: C:\VulkanSDK\
triplet: x64-windows
vcpkg_baseline: 42bb0d9e8d4cf33485afb9ee2229150f79f61a1f
dep_folder: deps
libplacebo_tag: v7.349.0
sdl2_compat_tag: 2.32.56
defaults:
run:
shell: powershell
steps:
- uses: actions/checkout@v4
with:
submodules: 'recursive'
- name: Set vcpkg installed dir
run: |
echo "VCPKG_INSTALLED_DIR=${{ github.workspace }}\build\vcpkg_installed" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
- name: Setup Vulkan
run: |
$ProgressPreference = 'SilentlyContinue'
$ver = (Invoke-WebRequest -Uri "https://vulkan.lunarg.com/sdk/latest.json" | ConvertFrom-Json).windows
echo Version $ver
Invoke-WebRequest -Uri "https://sdk.lunarg.com/sdk/download/$ver/windows/vulkansdk-windows-X64-$ver.exe" -OutFile VulkanSDK.exe
echo Downloaded
.\VulkanSDK.exe --root ${{ env.VULKAN_SDK }} --accept-licenses --default-answer --confirm-command install
- name: Set up Ninja
run: choco install ninja
- name: Set up Clang
uses: egor-tensin/setup-clang@v1
with:
version: 18
- name: Setup MSVC
uses: ilammy/msvc-dev-cmd@v1
- name: Setup Qt
uses: jurplel/install-qt-action@v4
with:
version: "6.8.*"
host: 'windows'
target: 'desktop'
modules: 'qtwebengine qtpositioning qtwebchannel qtwebsockets qtserialport'
- name: Install pip dependencies
run: |
${{ env.pythonLocation }}\python.exe -m pip install --upgrade pip
${{ env.pythonLocation }}\python.exe -m pip install --upgrade setuptools wheel
${{ env.pythonLocation }}\python.exe -m pip install --user --upgrade scons protobuf grpcio-tools pyinstaller
${{ env.pythonLocation }}\python.exe -m pip install --user --upgrade meson
${{ env.pythonLocation }}\python.exe -c 'import google.protobuf; print(google.protobuf.__file__)'
- name: Setup ffmpeg
run: |
$ProgressPreference = 'SilentlyContinue'
Invoke-WebRequest -UseBasicParsing -Uri "https://github.com/streetpea/FFmpeg-Builds/releases/download/latest/ffmpeg-n7.1-latest-win64-gpl-shared-7.1.zip" -OutFile ".\ffmpeg-n7.1-latest-win64-gpl-shared-7.1.zip"
Expand-Archive -LiteralPath "ffmpeg-n7.1-latest-win64-gpl-shared-7.1.zip" -DestinationPath "."
Rename-Item "ffmpeg-n7.1-latest-win64-gpl-shared-7.1" "${{ env.dep_folder }}"
- name: Setup sdl2-compat
run: |
$ProgressPreference = 'SilentlyContinue'
Invoke-WebRequest -UseBasicParsing -Uri https://github.com/libsdl-org/sdl2-compat/releases/download/release-${{ env.sdl2_compat_tag }}/sdl2-compat-${{ env.sdl2_compat_tag }}-win32-x64.zip -OutFile sdl2-compat-${{ env.sdl2_compat_tag }}-win32-x64.zip
Expand-Archive -LiteralPath "sdl2-compat-${{ env.sdl2_compat_tag }}-win32-x64.zip" -DestinationPath ".\sdl2-compat-${{ env.sdl2_compat_tag }}-win32-x64"
Get-ChildItem -Path ".\sdl2-compat-${{ env.sdl2_compat_tag }}-win32-x64\*" -Include "*.dll" | Copy-Item -Destination "${{ env.dep_folder }}\bin"
- name: Build SPIRV-Cross
run: |
git clone https://github.com/KhronosGroup/SPIRV-Cross.git
cd SPIRV-Cross
cmake `
-DCMAKE_BUILD_TYPE=Release `
-DCMAKE_INSTALL_PREFIX="${{ github.workspace }}\${{ env.dep_folder }}" `
-DSPIRV_CROSS_SHARED=ON `
-S . `
-B build `
-G Ninja
cmake --build build --config Release
cmake --install build
- name: Setup shaderc
run: |
$ProgressPreference = 'SilentlyContinue'
$url = ((Invoke-WebRequest -UseBasicParsing -Uri "https://storage.googleapis.com/shaderc/badges/build_link_windows_vs2019_release.html").Content | Select-String -Pattern 'url=(.*)"').Matches.Groups[1].Value
Invoke-WebRequest -UseBasicParsing -Uri $url -OutFile .\shaderc.zip
Expand-Archive -LiteralPath "shaderc.zip" -DestinationPath "."
cp "./install/*" "./${{ env.dep_folder }}" -Force -Recurse
rm "./install" -r -force
- name: Make build directory
run: |
mkdir build
- name: Setup vcpkg
uses: lukka/run-vcpkg@v11
with:
vcpkgGitCommitId: ${{ env.vcpkg_baseline }}
runVcpkgInstall: true
vcpkgJsonGlob: "vcpkg.json"
- name: Build libplacebo
run: |
git clone --recursive https://github.com/haasn/libplacebo.git
cd libplacebo
git checkout --recurse-submodules ${{ env.libplacebo_tag }}
meson setup `
--prefix "${{ github.workspace }}\${{ env.dep_folder }}" `
--native-file ../meson.ini `
"--pkg-config-path=['${env:VCPKG_INSTALLED_DIR}\${{ env.triplet }}\lib\pkgconfig','${env:VCPKG_INSTALLED_DIR}\${{ env.triplet }}\share\pkgconfig','${{ github.workspace }}\${{ env.dep_folder }}\lib\pkgconfig']" `
"--cmake-prefix-path=['${env:VCPKG_INSTALLED_DIR}\${{ env.triplet }}', '${{ env.VULKAN_SDK }}', '${{ github.workspace }}\${{ env.dep_folder }}']" `
-Dc_args="/I ${{ env.VULKAN_SDK }}Include" `
-Dcpp_args="/I ${{ env.VULKAN_SDK }}Include" `
-Dc_link_args="/LIBPATH:${{ env.VULKAN_SDK }}Lib" `
-Dcpp_link_args="/LIBPATH:${{ env.VULKAN_SDK }}Lib" `
-Ddemos=false `
./build
ninja -C./build
ninja -C./build install
- name: Apply Patches
run: |
git apply --ignore-whitespace --verbose --directory=third-party/gf-complete/ scripts/windows-vc/gf-complete.patch
- name: Configure chiaki-ng
run: |
cmake `
-S . `
-B build `
-G Ninja `
-DCMAKE_TOOLCHAIN_FILE:STRING="vcpkg/scripts/buildsystems/vcpkg.cmake" `
-DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE `
-DCMAKE_BUILD_TYPE=Release `
-DCHIAKI_ENABLE_CLI=OFF `
-DCHIAKI_GUI_ENABLE_SDL_GAMECONTROLLER=ON `
-DCHIAKI_ENABLE_STEAMDECK_NATIVE=OFF `
-DPYTHON_EXECUTABLE="${{ env.pythonLocation }}\python.exe" `
-DCMAKE_PREFIX_PATH="${{ github.workspace }}\${{ env.dep_folder }};${{ env.VULKAN_SDK }}"
- name: Build chiaki-ng
run: |
cmake --build build --config Release --clean-first --target chiaki
- name: Prepare Qt deployment package
run: |
mkdir chiaki-ng-Win
cp build\gui\chiaki.exe chiaki-ng-Win
cp build\third-party\cpp-steam-tools\cpp-steam-tools.dll chiaki-ng-Win
cp scripts\qtwebengine_import.qml gui\src\qml\
cp "${env:VCPKG_INSTALLED_DIR}\${{ env.triplet }}\bin\libcrypto-*-x64.dll" chiaki-ng-Win
cp "${env:VCPKG_INSTALLED_DIR}\${{ env.triplet }}\bin\libssl-*-x64.dll" chiaki-ng-Win
cp "${env:VCPKG_INSTALLED_DIR}\${{ env.triplet }}\bin\hidapi.dll" chiaki-ng-Win
cp "${env:VCPKG_INSTALLED_DIR}\${{ env.triplet }}\bin\fftw3.dll" chiaki-ng-Win
cp "${env:VCPKG_INSTALLED_DIR}\${{ env.triplet }}\bin\opus.dll" chiaki-ng-Win
cp "${env:VCPKG_INSTALLED_DIR}\${{ env.triplet }}\bin\libspeexdsp.dll" chiaki-ng-Win
cp "${env:VCPKG_INSTALLED_DIR}\${{ env.triplet }}\bin\lcms2.dll" chiaki-ng-Win
cp "${env:VCPKG_INSTALLED_DIR}\${{ env.triplet }}\bin\miniupnpc.dll" chiaki-ng-Win
cp "${env:VCPKG_INSTALLED_DIR}\${{ env.triplet }}\bin\json-c.dll" chiaki-ng-Win
cp "${{ github.workspace }}\${{ env.dep_folder }}\bin\swresample-*.dll" chiaki-ng-Win
cp "${{ github.workspace }}\${{ env.dep_folder }}\bin\avcodec-*.dll" chiaki-ng-Win
cp "${{ github.workspace }}\${{ env.dep_folder }}\bin\avutil-*.dll" chiaki-ng-Win
cp "${{ github.workspace }}\${{ env.dep_folder }}\bin\avformat-*.dll" chiaki-ng-Win
cp "${{ github.workspace }}\${{ env.dep_folder }}\bin\libplacebo-*.dll" chiaki-ng-Win
cp "${{ github.workspace }}\${{ env.dep_folder }}\bin\shaderc_shared.dll" chiaki-ng-Win
cp "${{ github.workspace }}\${{ env.dep_folder }}\bin\spirv-cross-c-shared.dll" chiaki-ng-Win
cp "${{ github.workspace }}\${{ env.dep_folder }}\bin\SDL2.dll" chiaki-ng-Win
cp "${{ github.workspace }}\${{ env.dep_folder }}\bin\SDL3.dll" chiaki-ng-Win
windeployqt.exe --no-translations --qmldir=gui\src\qml --release chiaki-ng-Win\chiaki.exe
- name: Package chiaki-ng
run: |
$CHIAKI_VERSION_MAJOR = (Select-String -Path .\CMakeLists.txt -Pattern 'set\(CHIAKI_VERSION_MAJOR ([0-9]+)\)') | %{$_.Matches.Groups[1].value}
$CHIAKI_VERSION_MINOR = (Select-String -Path .\CMakeLists.txt -Pattern 'set\(CHIAKI_VERSION_MINOR ([0-9]+)\)') | %{$_.Matches.Groups[1].value}
$CHIAKI_VERSION_PATCH = (Select-String -Path .\CMakeLists.txt -Pattern 'set\(CHIAKI_VERSION_PATCH ([0-9]+)\)') | %{$_.Matches.Groups[1].value}
$RELEASE_PACKAGE_FILE = "chiaki-ng-win_x64-VC-portable-$CHIAKI_VERSION_MAJOR.$CHIAKI_VERSION_MINOR.$CHIAKI_VERSION_PATCH-test-build-${{ github.sha }}.zip"
Compress-Archive chiaki-ng-Win $RELEASE_PACKAGE_FILE
$release_filepath = Get-ChildItem $RELEASE_PACKAGE_FILE | %{$_[0].FullName}
echo "RELEASE_PACKAGE_PATH=$release_filepath" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
- name: Upload chiaki-ng Artifact
uses: actions/upload-artifact@v4
with:
name: chiaki-ng-win_x64-VC-Release
path: ${{ env.RELEASE_PACKAGE_PATH }}
if-no-files-found: error
retention-days: 7
- name: Compile .ISS to .EXE Installer
uses: Minionguyjpro/Inno-Setup-Action@v1.2.2
with:
path: "scripts/chiaki-ng.iss"
options: /O+
- name: Upload chiaki-ng Artifact
uses: actions/upload-artifact@v4
with:
name: chiaki-ng-win_x64-VC-installer.zip
path: chiaki-ng-windows-installer.exe
if-no-files-found: error
retention-days: 7
build-windows_x64-msys2:
name: Build windows msys2 version
runs-on: windows-latest
permissions:
contents: write
defaults:
run:
shell: msys2 {0}
steps:
- name: Disable autocrlf
shell: pwsh
run: |
git config --global core.autocrlf false
git config --global core.eol lf
- uses: actions/checkout@v4
with:
submodules: recursive
- uses: msys2/setup-msys2@v2
with:
msystem: mingw64
update: true
install: git
pacboy: >-
ca-certificates:p
cc:p
cmake:p
curl:p
diffutils:p
fast_float:p
fftw:p
hidapi:p
json-c:p
lcms2:p
libdovi:p
meson:p
miniupnpc:p
gcc:p
nasm:p
ninja:p
openssl:p
opus:p
pkgconf:p
protobuf:p
python:p
python-psutil:p
python-glad:p
python-jinja:p
python-pip:p
qt6-base:p
qt6-declarative:p
qt6-svg:p
SDL2:p
shaderc:p
speexdsp:p
spirv-cross:p
vulkan:p
vulkan-headers:p
- name: Install python protobuf and zip
run: |
pip install protobuf
pacman -S git make unzip zip --noconfirm
- name: Build libbplacebo
run: |
scripts/build-libplacebo-windows.sh
- name: Setup ffmpeg
run: |
curl -LO https://github.com/streetpea/FFmpeg-Builds/releases/download/latest/ffmpeg-n7.1-latest-win64-gpl-shared-7.1.zip
unzip ffmpeg-n7.1-latest-win64-gpl-shared-7.1.zip
cp -a "ffmpeg-n7.1-latest-win64-gpl-shared-7.1/bin/." /mingw64/bin
cp -a "ffmpeg-n7.1-latest-win64-gpl-shared-7.1/include/." /mingw64/include
cp -a "ffmpeg-n7.1-latest-win64-gpl-shared-7.1/lib/." /mingw64/lib
- name: Configure chiaki-ng
run: |
cmake -S . -B build -G "Ninja" -DCMAKE_BUILD_TYPE=Release -DCHIAKI_ENABLE_CLI=OFF
- name: Build chiaki-ng
run: |
cmake --build build --config Release --clean-first --target chiaki
- name: Deploy chiaki-ng
run: |
mkdir chiaki-ng-Win
cp build/gui/chiaki.exe chiaki-ng-Win/
export PATH="${{ github.workspace }}/build/third-party/cpp-steam-tools:/mingw64/share/qt6/bin/:${PATH}"
export QT_PLUGIN_PATH="/mingw64/share/qt6/plugins"
export QML2_IMPORT_PATH="/mingw64/share/qt6/qml"
echo chiaki-ng-Win/chiaki.exe > tmp0.txt
while [ -e tmp0.txt ]
do
cp tmp0.txt tmp.txt
rm tmp0.txt
sort -u tmp.txt -o tmp.txt
ldd $(<tmp.txt) | grep -v ":" | cut -d " " -f3 | grep -iv "system32" | grep -iv "not" | xargs -d $'\n' sh -c 'for arg do if [ -n "$arg" ] && [ ! -e "chiaki-ng-Win/${arg##*/}" ]; then echo "Copied $arg"; cp "$arg" chiaki-ng-Win/ ; echo "$arg" >> tmp0.txt; fi; done'
done
windeployqt6.exe --no-translations --qmldir=gui/src/qml chiaki-ng-Win/chiaki.exe
- name: Package chiaki-ng
run: |
CHIAKI_VERSION_MAJOR="$(grep 'CHIAKI_VERSION_MAJOR' CMakeLists.txt | grep -Eo '[0-9]')"
CHIAKI_VERSION_MINOR="$(grep 'CHIAKI_VERSION_MINOR' CMakeLists.txt | grep -Eo '[0-9]')"
CHIAKI_VERSION_PATCH="$(grep 'CHIAKI_VERSION_PATCH' CMakeLists.txt | grep -Eo '[0-9]')"
RELEASE_PACKAGE_FILE="chiaki-ng-win_x64-MSYS2-portable-$CHIAKI_VERSION_MAJOR.$CHIAKI_VERSION_MINOR.$CHIAKI_VERSION_PATCH-test-build-${{ github.sha }}.zip"
zip -r $RELEASE_PACKAGE_FILE chiaki-ng-Win
echo "RELEASE_PACKAGE_PATH=${RELEASE_PACKAGE_FILE}" >> $GITHUB_ENV
- name: Upload chiaki-ng Artifact
uses: actions/upload-artifact@v4
with:
name: chiaki-ng-win_x64-MSYS2-Release-portable.zip
path: ${{ env.RELEASE_PACKAGE_PATH }}
if-no-files-found: error
retention-days: 7
- name: Compile .ISS to .EXE Installer
uses: Minionguyjpro/Inno-Setup-Action@v1.2.2
with:
path: "scripts/chiaki-ng.iss"
options: /O+
- name: Upload chiaki-ng Artifact
uses: actions/upload-artifact@v4
with:
name: chiaki-ng-win_x64-MSYS2-Release-installer.exe
path: chiaki-ng-windows-installer.exe
if-no-files-found: error
retention-days: 7
build-mac_arm64_github:
name: Build macOSX arm64 version Github
runs-on: macos-14
permissions:
contents: write
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Install protobuf
run: |
pip3 install --user 'protobuf>=5,<6' --break-system-packages
- name: Install brew dependencies
run: |
brew update
brew uninstall pkgconfig || true
brew install streetpea/streetpea/chiaki-ng-qt@6 ffmpeg pkgconfig opus openssl cmake ninja nasm sdl2 protobuf@29 speexdsp libplacebo wget python-setuptools json-c miniupnpc
- name: Install sdl2-compat
run: |
sudo INSTALL_PREFIX=/usr/local scripts/build-sdl2-compat.sh
sudo cp /usr/local/lib/pkgconfig/sdl2-compat.pc /usr/local/lib/pkgconfig/sdl2.pc
- name: Configure chiaki-ng
run: |
cmake -S . -B build -G "Ninja" -DCMAKE_BUILD_TYPE=Release -DCHIAKI_ENABLE_CLI=OFF -DCHIAKI_ENABLE_STEAMDECK_NATIVE=OFF -DCMAKE_PREFIX_PATH="/usr/local;$(brew --prefix)/opt/@openssl@3;$(brew --prefix)/opt/chiaki-ng-qt@6;$(brew --prefix)/opt/protobuf@29"
- name: Build chiaki-ng
run: |
export CPATH=$(brew --prefix)/opt/ffmpeg/include
cmake --build build --config Release --clean-first --target chiaki
- name: Deploy chiaki-ng
run: |
cp -a build/gui/chiaki.app chiaki-ng.app
cp scripts/qtwebengine_import.qml gui/src/qml/
$(brew --prefix)/opt/chiaki-ng-qt@6/bin/macdeployqt chiaki-ng.app -qmldir="$PWD/gui/src/qml" -libpath=/usr/local/lib -libpath=$(brew --prefix)/lib
mkdir -p chiaki-ng.app/Contents/Resources/vulkan/icd.d
wget https://github.com/KhronosGroup/MoltenVK/releases/download/v1.2.11-artifacts/MoltenVK-macos.tar && tar xf MoltenVK-macos.tar
cp MoltenVK/MoltenVK/dylib/macOS/* chiaki-ng.app/Contents/Resources/vulkan/icd.d
$(brew --prefix)/opt/chiaki-ng-qt@6/bin/macdeployqt chiaki-ng.app -qmldir="$PWD/gui/src/qml" -libpath=/usr/local/lib -libpath=$(brew --prefix)/lib
if [[ -d chiaki-ng.app/Contents/Frameworks/QtWebEngineCore.framework/Helpers/QtWebEngineProcess.app ]]
then
ln -s ../../../../../../../Frameworks chiaki-ng.app/Contents/Frameworks/QtWebEngineCore.framework/Helpers/QtWebEngineProcess.app/Contents
fi
cp /usr/local/lib/libSDL3.dylib chiaki-ng.app/Contents/MacOS/libSDL3.dylib
ln -s libvulkan.1.dylib chiaki-ng.app/Contents/Frameworks/vulkan
codesign --force --entitlements gui/entitlements.xml --deep --sign - chiaki-ng.app
hdiutil create -srcfolder chiaki-ng.app chiaki-ng.dmg
codesign --force --entitlements gui/entitlements.xml --deep --sign - chiaki-ng.dmg
cp chiaki-ng.dmg chiaki-ng-macos_arm64-Release.dmg
- name: Upload chiaki-ng Artifact
uses: actions/upload-artifact@v4
with:
name: chiaki-ng-macos_arm64-Release.dmg
path: chiaki-ng-macos_arm64-Release.dmg
if-no-files-found: error
retention-days: 7
build-appimage_x64:
name: Build chiaki-ng appimage_x64
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Setup Podman
run: |
sudo apt update
sudo apt-get -y install podman
- name: Checkout code
uses: actions/checkout@v4
with:
submodules: 'recursive'
path: 'chiaki-ng'
- name: Add QmlWebEngine Import
working-directory: chiaki-ng
run: |
cp scripts/qtwebengine_import.qml gui/src/qml/
- name: Run build script
working-directory: chiaki-ng
run: |
set -xe
podman run --rm \
-v "`pwd`:/build/chiaki" \
-w "/build/chiaki" \
--device /dev/fuse \
--cap-add SYS_ADMIN \
-t docker.io/streetpea/chiaki-ng-builder:qt6.9 \
/bin/bash -c "sudo -E scripts/build-appimage.sh /build/appdir"
cp appimage/chiaki-ng.AppImage appimage/chiaki-ng.AppImage_x86_64
- name: Upload chiaki-ng Artifact
uses: actions/upload-artifact@v4
with:
name: chiaki-ng.AppImage_x86_64
path: chiaki-ng/appimage/chiaki-ng.AppImage_x86_64
if-no-files-found: error
retention-days: 7
build-appimage_arm64:
name: Build chiaki-ng appimage_arm64
runs-on: ubuntu-24.04-arm
permissions:
contents: write
steps:
- name: Setup Podman
run: |
sudo apt update
sudo apt-get -y install podman
- name: Checkout code
uses: actions/checkout@v4
with:
submodules: 'recursive'
path: 'chiaki-ng'
- name: Add QmlWebEngine Import
working-directory: chiaki-ng
run: |
cp scripts/qtwebengine_import.qml gui/src/qml/
- name: Run build script
working-directory: chiaki-ng
run: |
set -xe
podman run --rm \
-v "`pwd`:/build/chiaki" \
-w "/build/chiaki" \
--device /dev/fuse \
--cap-add SYS_ADMIN \
-t docker.io/streetpea/chiaki-ng-builder:qt6.7 \
/bin/bash -c "sudo -E scripts/build-appimage.sh /build/appdir"
cp appimage/chiaki-ng.AppImage appimage/chiaki-ng.AppImage_arm64
- name: Upload chiaki-ng Artifact
uses: actions/upload-artifact@v4
with:
name: chiaki-ng.AppImage_arm64
path: chiaki-ng/appimage/chiaki-ng.AppImage_arm64
if-no-files-found: error
retention-days: 7
build-switch_x64:
name: Build chiaki-ng switch_x64
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Setup Docker
run: |
sudo apt update
sudo apt-get -y install docker-ce-cli
- name: Checkout code
uses: actions/checkout@v4
with:
submodules: 'recursive'
path: 'chiaki-ng'
- name: Run build script
working-directory: chiaki-ng
run: |
chmod +x scripts/switch/run-docker-build-chiaki.sh
scripts/switch/run-docker-build-chiaki.sh
- name: Upload chiaki-ng Artifact
uses: actions/upload-artifact@v4
with:
name: chiaki-ng.nro
path: chiaki-ng/build_switch/switch/chiaki-ng.nro
if-no-files-found: error
retention-days: 7