Build and Upload SDL2 Artifacts #12
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build and Upload SDL2 Artifacts | |
on: [workflow_dispatch] | |
env: | |
lib-name: SDL2 | |
repo: libsdl-org/SDL | |
repo-tag: release-2.32.6 | |
repo-path: SDL | |
cmake-flags: "-DSDL_STATIC=OFF -DSDL_SHARED=ON" | |
ndk-version: 26.3.11579264 | |
android-api: 21 | |
build-output-dir: artifacts | |
bin-name-osx: libSDL2-2.0.dylib | |
bin-name-linux: libSDL2-2.0.so | |
bin-name-android: libSDL2.so | |
bin-name-windows: Release/SDL2.dll | |
bin-name-osx-normalized: libSDL2.dylib | |
bin-name-linux-normalized: libSDL2.so | |
bin-name-android-normalized: libSDL2.so | |
bin-name-windows-normalized: SDL2.dll | |
base: master | |
branch: sdl2-artifacts-branch | |
output-dir: Hexa.NET.SDL2/native | |
reviewers: "JunaMeinhold" | |
jobs: | |
build: | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
include: | |
- os: ubuntu-latest | |
os-name: linux | |
arch: x86_64 | |
cmake-arch: x64 | |
rtid: linux-x64 | |
- os: ubuntu-24.04-arm | |
os-name: linux | |
arch: arm64 | |
cmake-arch: aarch64 | |
rtid: linux-arm64 | |
- os: windows-latest | |
os-name: windows | |
arch: x86_64 | |
cmake-arch: x64 | |
rtid: win-x64 | |
- os: windows-latest | |
os-name: windows | |
arch: x86 | |
cmake-arch: win32 | |
rtid: win-x86 | |
- os: windows-latest | |
os-name: windows | |
arch: arm64 | |
cmake-arch: arm64 | |
rtid: win-arm64 | |
- os: macos-latest | |
os-name: macos | |
arch: x86_64 | |
cmake-arch: x86_64 | |
rtid: osx-x64 | |
- os: macos-latest | |
os-name: macos | |
arch: arm64 | |
cmake-arch: arm64 | |
rtid: osx-arm64 | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
repository: '${{ env.repo }}' | |
ref: '${{ env.repo-tag }}' | |
path: '${{ env.repo-path }}' | |
- name: Install dependencies on Ubuntu | |
if: matrix.os-name == 'linux' | |
run: | | |
sudo apt-get update && sudo apt-get install -y \ | |
build-essential \ | |
cmake \ | |
libasound2-dev \ | |
libpulse-dev \ | |
libaudio-dev \ | |
libx11-dev \ | |
libxext-dev \ | |
libxrandr-dev \ | |
libxcursor-dev \ | |
libxfixes-dev \ | |
libxi-dev \ | |
libxinerama-dev \ | |
libxss-dev \ | |
libwayland-dev \ | |
libwayland-egl-backend-dev \ | |
libdbus-1-dev \ | |
libudev-dev \ | |
libgles2-mesa-dev \ | |
libegl1-mesa-dev \ | |
libgl1-mesa-dev \ | |
libibus-1.0-dev \ | |
fcitx-libs-dev \ | |
libsamplerate0-dev \ | |
ccache \ | |
libjack-jackd2-dev \ | |
libdrm-dev \ | |
libpipewire-0.3-dev \ | |
libvulkan-dev \ | |
libdecor-0-dev \ | |
qtwayland5 \ | |
libxkbcommon-dev \ | |
libsndio-dev | |
- name: Configure with CMake for Linux | |
if: matrix.os-name == 'linux' | |
run: | | |
cd ${{ env.repo-path }} | |
cmake -S . -B ./build ${{ env.cmake-flags }} | |
- name: Configure with CMake for macOS | |
if: matrix.os-name == 'macos' | |
run: | | |
cd ${{ env.repo-path }} | |
cmake -S . -B ./build -DCMAKE_OSX_ARCHITECTURES=${{ matrix.cmake-arch }} ${{ env.cmake-flags }} | |
- name: Configure with CMake for Windows | |
if: matrix.os-name == 'windows' | |
run: | | |
cd ${{ env.repo-path }} | |
cmake -S . -B ./build -A ${{ matrix.cmake-arch }} ${{ env.cmake-flags }} | |
- name: Build | |
run: | | |
cd ${{ env.repo-path }} | |
cmake --build ./build --config Release | |
- name: Normalize binaries for macOS | |
if: matrix.os-name == 'macos' | |
run: | | |
rm -rf ${{ env.build-output-dir }} | |
mkdir ${{ env.build-output-dir }} | |
cp -L ${{ env.repo-path }}/build/${{ env.bin-name-osx }} ${{ env.build-output-dir }}/${{ env.bin-name-osx-normalized }} | |
ls -lha ${{ env.build-output-dir }} | |
- name: Normalize binaries for Linux | |
if: matrix.os-name == 'linux' | |
run: | | |
rm -rf ${{ env.build-output-dir }} | |
mkdir ${{ env.build-output-dir }} | |
cp -L ${{ env.repo-path }}/build/${{ env.bin-name-linux }} ${{ env.build-output-dir }}/${{ env.bin-name-linux-normalized }} | |
ls -lha ${{ env.build-output-dir }} | |
- name: Normalize binaries for Windows | |
if: matrix.os-name == 'windows' | |
run: | | |
rm -r ${{ env.build-output-dir }} -ErrorAction SilentlyContinue | |
mkdir ${{ env.build-output-dir }} | |
cp ${{ env.repo-path }}/build/${{ env.bin-name-windows }} ${{ env.build-output-dir }}/${{ env.bin-name-windows-normalized }} | |
ls ${{ env.build-output-dir }} | |
- name: Upload Artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ matrix.rtid }} | |
path: | | |
${{ env.build-output-dir }}/*.dll | |
${{ env.build-output-dir }}/*.so | |
${{ env.build-output-dir }}/*.dylib | |
if-no-files-found: error | |
build-android: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
repository: "${{ env.repo }}" | |
ref: "${{ env.repo-tag }}" | |
path: "${{ env.repo-path }}" | |
- name: Install dependencies on Ubuntu | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y build-essential cmake ninja-build | |
- name: Setup Java | |
uses: actions/setup-java@v3 | |
with: | |
distribution: "temurin" | |
java-version: 17 | |
- name: Install Android SDK Command-Line Tools | |
run: | | |
wget https://dl.google.com/android/repository/commandlinetools-linux-10406996_latest.zip -O android-sdk-tools.zip | |
unzip android-sdk-tools.zip -d tools | |
mkdir $HOME/android-sdk/ | |
mkdir $HOME/android-sdk/cmdline-tools/ | |
mkdir $HOME/android-sdk/cmdline-tools/latest/ | |
mv ./tools/cmdline-tools/* $HOME/android-sdk/cmdline-tools/latest/ | |
chmod +x $HOME/android-sdk/cmdline-tools/latest/bin/* | |
echo "ANDROID_HOME=$HOME/android-sdk" >> $GITHUB_ENV | |
echo "ANDROID_SDK_ROOT=$HOME/android-sdk" >> $GITHUB_ENV | |
- name: Accept Android SDK Licenses | |
run: | | |
yes | $HOME/android-sdk/cmdline-tools/latest/bin/sdkmanager --licenses | |
- name: Install Android NDK | |
run: | | |
yes | $HOME/android-sdk/cmdline-tools/latest/bin/sdkmanager --install "ndk;${{ env.ndk-version}}" | |
echo "ANDROID_NDK_HOME=$ANDROID_HOME/ndk/${{ env.ndk-version}}" >> $GITHUB_ENV | |
echo "PATH=$PATH:$ANDROID_HOME/ndk/${{ env.ndk-version}}" >> $GITHUB_ENV | |
- name: Build for arm64-v8a | |
run: | | |
cd ${{ env.repo-path }} | |
cmake -G "Ninja" -DCMAKE_BUILD_TYPE=Release \ | |
-DCMAKE_SYSTEM_NAME=Android \ | |
-DCMAKE_ANDROID_NDK=$ANDROID_NDK_HOME \ | |
-DCMAKE_ANDROID_ARCH_ABI=arm64-v8a \ | |
-DCMAKE_ANDROID_NDK_TOOLCHAIN_VERSION=clang \ | |
-DCMAKE_ANDROID_STL_TYPE=c++_shared \ | |
-DCMAKE_ANDROID_API=${{ env.android-api }} \ | |
-DANDROID_NDK=$ANDROID_NDK_HOME \ | |
${{ env.cmake-flags }} \ | |
-S . \ | |
-B ./build/arm64-v8a | |
cmake --build ./build/arm64-v8a --config Release | |
- name: Build for x86_64 | |
run: | | |
cd ${{ env.repo-path }} | |
cmake -G "Ninja" -DCMAKE_BUILD_TYPE=Release \ | |
-DCMAKE_SYSTEM_NAME=Android \ | |
-DCMAKE_ANDROID_NDK=$ANDROID_NDK_HOME \ | |
-DCMAKE_ANDROID_ARCH_ABI=x86_64 \ | |
-DCMAKE_ANDROID_NDK_TOOLCHAIN_VERSION=clang \ | |
-DCMAKE_ANDROID_STL_TYPE=c++_shared \ | |
-DCMAKE_ANDROID_API=${{ env.android-api }} \ | |
-DANDROID_NDK=$ANDROID_NDK_HOME \ | |
${{ env.cmake-flags }} \ | |
-S . \ | |
-B ./build/x86_64 | |
cmake --build ./build/x86_64 --config Release | |
- name: Normalize binaries for Android | |
run: | | |
rm -rf ${{ env.build-output-dir }} | |
mkdir -p ${{ env.build-output-dir }}/arm64-v8a | |
mkdir -p ${{ env.build-output-dir }}/x86_64 | |
cp -L ${{ env.repo-path }}/build/arm64-v8a/${{ env.bin-name-android }} ${{ env.build-output-dir }}/arm64-v8a/${{ env.bin-name-android-normalized }} | |
cp -L ${{ env.repo-path }}/build/x86_64/${{ env.bin-name-android }} ${{ env.build-output-dir }}/x86_64/${{ env.bin-name-android-normalized }} | |
ls ${{ env.build-output-dir }}/arm64-v8a | |
ls ${{ env.build-output-dir }}/x86_64 | |
- name: Upload Artifacts (android-arm64) | |
uses: actions/upload-artifact@v4 | |
with: | |
name: android-arm64 | |
path: ${{ env.build-output-dir }}/arm64-v8a/*.so | |
if-no-files-found: error | |
- name: Upload Artifacts (android-x64) | |
uses: actions/upload-artifact@v4 | |
with: | |
name: android-x64 | |
path: ${{ env.build-output-dir }}/x86_64/*.so | |
if-no-files-found: error | |
create-pr: | |
runs-on: ubuntu-latest | |
needs: [build, build-android] | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Download all dummy artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
path: ${{ env.output-dir }} | |
- name: Create a Pull Request to master | |
uses: peter-evans/create-pull-request@v7 | |
with: | |
title: "Update native libraries (DLLs, .so, .dylib) for ${{ env.lib-name }} to version ${{ env.repo-tag }}" | |
body: "This pull request updates the native libraries (DLLs, .so, .dylib) in the ${{ env.output-dir }} folder to version ${{ env.repo-tag }} to support the latest cross-platform builds." | |
commit-message: "chore: update native libraries (DLLs, .so, .dylib) to version ${{ env.repo-tag }}" | |
add-paths: "${{ env.output-dir }}/*" | |
branch: ${{ env.branch }} | |
base: ${{ env.base }} | |
reviewers: ${{ env.reviewers }} | |
sign-commits: true | |
delete-branch: true |