Merge pull request #18430 from Kethen/writedata #8364
This file contains 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 | |
on: | |
push: | |
branches: | |
- master | |
# For testing. | |
- actions | |
tags: | |
- "v*.*" | |
paths-ignore: | |
- '*.{txt,md}' | |
- 'Tools/**' | |
- '.{editorconfig,gitattributes,gitignore}' | |
- 'appveyor.yml' | |
pull_request: | |
branches: | |
- master | |
paths-ignore: | |
- '*.{txt,md}' | |
- 'Tools/**' | |
- '.{editorconfig,gitattributes,gitignore}' | |
- 'appveyor.yml' | |
env: | |
BUILD_CONFIGURATION: Release | |
jobs: | |
build-windows: | |
strategy: | |
fail-fast: false | |
matrix: | |
platform: [x64, ARM64] | |
runs-on: windows-latest | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: recursive | |
- name: Add MSBuild to PATH | |
uses: microsoft/[email protected] | |
- name: Build Windows | |
working-directory: ${{ env.GITHUB_WORKSPACE }} | |
run: msbuild /m /p:TrackFileAccess=false /p:Configuration=${{ env.BUILD_CONFIGURATION }} /p:Platform=${{ matrix.platform }} Windows/PPSSPP.sln | |
- name: Package build | |
working-directory: ${{ env.GITHUB_WORKSPACE }} | |
run: | | |
mkdir ppsspp | |
cp PPSSPP*.exe ppsspp/ | |
cp *.pdb ppsspp/ | |
cp Windows/*.bat ppsspp/ | |
cp -r assets ppsspp/assets | |
- name: Package headless (non-Win32) | |
if: matrix.platform != 'Win32' | |
run: cp Windows/${{ matrix.platform }}/Release/*.exe ppsspp/ | |
- name: Package headless (Win32) | |
if: matrix.platform == 'Win32' | |
run: cp Windows/Release/*.exe ppsspp/ | |
- name: Upload build | |
uses: actions/upload-artifact@v3 | |
with: | |
name: Windows ${{ matrix.platform }} build | |
path: ppsspp/ | |
build-uwp: | |
runs-on: windows-2019 | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: recursive | |
- name: Add MSBuild to PATH | |
uses: microsoft/[email protected] | |
- name: Build UWP | |
working-directory: ${{ env.GITHUB_WORKSPACE }} | |
run: msbuild /m /p:TrackFileAccess=false /p:Configuration=${{ env.BUILD_CONFIGURATION }} /p:Platform=x64 /p:AppxPackageSigningEnabled=false UWP/PPSSPP_UWP.sln | |
test-windows: | |
runs-on: windows-latest | |
needs: build-windows | |
timeout-minutes: 30 | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: false | |
- name: Fetch tests | |
working-directory: ${{ env.GITHUB_WORKSPACE }} | |
# Doing this to avoid ffmpeg and other large submodules. | |
run: git submodule update --init pspautotests assets/lang | |
- name: Download build | |
uses: actions/download-artifact@v3 | |
with: | |
name: Windows x64 build | |
path: ppsspp/ | |
- name: Execute unit tests | |
working-directory: ${{ env.GITHUB_WORKSPACE }} | |
run: ppsspp\\UnitTest.exe ALL | |
- name: Execute headless tests | |
working-directory: ${{ env.GITHUB_WORKSPACE }} | |
run: python test.py -g --graphics=software | |
build: | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- os: ubuntu-latest | |
extra: test | |
cc: clang | |
cxx: clang++ | |
args: ./b.sh --headless --unittest | |
id: clang-normal | |
- os: ubuntu-latest | |
cc: gcc | |
cxx: g++ | |
args: ./b.sh --headless --unittest | |
id: gcc-normal | |
- os: ubuntu-latest | |
extra: android | |
cc: clang | |
cxx: clang++ | |
args: cd android && ./ab.sh -j2 APP_ABI=arm64-v8a UNITTEST=1 HEADLESS=1 | |
id: android-arm64 | |
- os: ubuntu-latest | |
extra: android | |
cc: clang | |
cxx: clang++ | |
args: cd android && ./ab.sh -j2 APP_ABI=armeabi-v7a UNITTEST=1 HEADLESS=1 | |
id: android-arm32 | |
- os: ubuntu-latest | |
extra: android | |
cc: clang | |
cxx: clang++ | |
args: cd android && ./ab.sh -j2 APP_ABI=x86_64 UNITTEST=1 HEADLESS=1 | |
id: android-x86_64 | |
- os: ubuntu-latest | |
extra: android | |
cc: clang | |
cxx: clang++ | |
args: cd android && ./ab.sh -j2 APP_ABI=arm64-v8a OPENXR=1 | |
id: android-vr | |
- os: ubuntu-latest | |
extra: android | |
cc: clang | |
cxx: clang++ | |
args: ./b.sh --libretro_android ppsspp_libretro | |
id: android-libretro | |
- os: ubuntu-latest | |
extra: qt | |
cc: gcc | |
cxx: g++ | |
args: ./b.sh --qt | |
id: qt | |
- os: ubuntu-latest | |
extra: libretro | |
cc: gcc | |
cxx: g++ | |
args: make -C libretro -f Makefile -j2 | |
id: gcc-libretro | |
- os: ubuntu-latest | |
extra: libretro | |
cc: clang | |
cxx: clang++ | |
args: make -C libretro -f Makefile -j2 | |
id: clang-libretro | |
- os: macos-latest | |
extra: test | |
cc: clang | |
cxx: clang++ | |
args: ./b.sh --headless --unittest --fat --no-png --no-sdl2 | |
id: macos | |
- os: macos-latest | |
extra: ios | |
cc: clang | |
cxx: clang++ | |
args: ./b.sh --ios | |
id: ios | |
runs-on: ${{ matrix.os }} | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: recursive | |
- name: Fetch tags for macOS releases | |
if: runner.os == 'macOS' | |
# This is required for git describe --always to work for git-version.cpp. | |
run: | | |
git fetch --deepen=15000 --no-recurse-submodules --tags || exit 0 | |
- name: Install Qt | |
uses: jurplel/install-qt-action@v3 | |
if: matrix.extra == 'qt' | |
with: | |
cache: true | |
- uses: nttld/setup-ndk@v1 | |
if: matrix.extra == 'android' | |
id: setup-ndk | |
with: | |
ndk-version: r21e | |
- name: Install Linux dependencies | |
if: runner.os == 'Linux' && matrix.extra != 'android' | |
run: | | |
sudo add-apt-repository -y "deb http://archive.ubuntu.com/ubuntu `lsb_release -sc` main universe restricted multiverse" | |
sudo apt-get update -y -qq | |
sudo apt-get install libsdl2-dev libgl1-mesa-dev libglu1-mesa-dev libsdl2-ttf-dev libfontconfig1-dev | |
- name: Create macOS git-version.cpp for tagged release | |
if: startsWith(github.ref, 'refs/tags/') && runner.os == 'macOS' && matrix.extra == 'test' | |
run: | | |
echo "const char *PPSSPP_GIT_VERSION = \"${GITHUB_REF##*/}\";" > git-version.cpp | |
echo "#define PPSSPP_GIT_VERSION_NO_UPDATE 1" >> git-version.cpp | |
- name: Setup ccache | |
uses: hendrikmuhs/[email protected] | |
# Disable ccache on macos for now, it's become buggy for some reason. | |
if: matrix.id != 'macos' | |
with: | |
key: ${{ matrix.id }} | |
- name: Execute build | |
env: | |
CC: ${{ matrix.cc }} | |
CXX: ${{ matrix.cxx }} | |
NDK: ${{ steps.setup-ndk.outputs.ndk-path }} | |
NDK_CCACHE: ccache | |
USE_CCACHE: 1 | |
run: | | |
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" | |
export CCACHE_SLOPPINESS=clang_index_store,ivfsoverlay,include_file_ctime,include_file_mtime,modules,system_headers,time_macros | |
if [ "${{ matrix.extra }}" == "android" ]; then | |
export CCACHE_FILECLONE=true | |
export CCACHE_DEPEND=true | |
export CCACHE_COMPILERCHECK=content | |
elif [ "$RUNNER_OS" == "macOS" ]; then | |
export CCACHE_SLOPPINESS=pch_defines,$CCACHE_SLOPPINESS | |
export CCACHE_FILECLONE=true | |
export CCACHE_DEPEND=true | |
export CCACHE_COMPILERCHECK=content | |
fi | |
${{ matrix.args }} | |
- name: Package build | |
if: matrix.extra == 'test' | |
run: | | |
mkdir ppsspp | |
if [ -e build*/$BUILD_CONFIGURATION/PPSSPPSDL ]; then | |
cp build*/$BUILD_CONFIGURATION/PPSSPPSDL ppsspp/ | |
elif [ -e build*/PPSSPPSDL.app ]; then | |
cp -a build*/PPSSPPSDL.app ppsspp/ | |
# GitHub Actions zipping kills symlinks and permissions. | |
cd ppsspp | |
zip -qry PPSSPPSDL.zip PPSSPPSDL.app | |
rm -rf PPSSPPSDL.app | |
cd - | |
elif [ -e build*/PPSSPPSDL ]; then | |
cp build*/PPSSPPSDL ppsspp/ | |
cp -r assets ppsspp/assets | |
fi | |
if [ -e build*/$BUILD_CONFIGURATION/PPSSPPHeadless ]; then | |
cp build*/$BUILD_CONFIGURATION/PPSSPPHeadless ppsspp/ | |
elif [ -e build*/PPSSPPHeadless ]; then | |
cp build*/PPSSPPHeadless ppsspp/ | |
fi | |
if [ -e build*/$BUILD_CONFIGURATION/PPSSPPUnitTest ]; then | |
cp build*/$BUILD_CONFIGURATION/PPSSPPUnitTest ppsspp/ | |
elif [ -e build*/PPSSPPUnitTest ]; then | |
cp build*/PPSSPPUnitTest ppsspp/ | |
fi | |
- name: Upload build | |
uses: actions/upload-artifact@v3 | |
if: matrix.extra == 'test' | |
with: | |
name: ${{ matrix.os }} build | |
path: ppsspp/ | |
- name: Create macOS release | |
if: startsWith(github.ref, 'refs/tags/') && runner.os == 'macOS' && matrix.extra == 'test' | |
run: | | |
cd ppsspp || exit 1 | |
mv PPSSPPSDL.zip PPSSPPSDL-macOS-${GITHUB_REF##*/}.zip || exit 1 | |
- name: Upload macOS release | |
uses: softprops/action-gh-release@v1 | |
if: startsWith(github.ref, 'refs/tags/') && runner.os == 'macOS' && matrix.extra == 'test' | |
with: | |
files: ppsspp/*.zip | |
body: > | |
PPSSPP is a cross-platform PSP emulator. | |
Visit PPSSPP [official website](https://ppsspp.org) | |
for a [full changelog](https://ppsspp.org/index.html#news) | |
as well as the [downloads section](https://ppsspp.org/downloads.html) | |
for other platforms. | |
test: | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest, macos-latest] | |
runs-on: ${{ matrix.os }} | |
needs: build | |
timeout-minutes: 30 | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: false | |
- name: Fetch tests | |
working-directory: ${{ env.GITHUB_WORKSPACE }} | |
# Doing this to avoid ffmpeg and other large submodules. | |
run: git submodule update --init pspautotests assets/lang | |
- name: Install Linux dependencies | |
if: runner.os == 'Linux' | |
run: | | |
sudo add-apt-repository -y "deb http://archive.ubuntu.com/ubuntu `lsb_release -sc` main universe restricted multiverse" | |
sudo apt-get update -y -qq | |
sudo apt-get install libsdl2-dev libgl1-mesa-dev libglu1-mesa-dev libsdl2-ttf-dev libfontconfig1-dev | |
- name: Install macOS dependencies | |
if: runner.os == 'macOS' | |
run: | | |
git submodule update --init SDL/macOS | |
- name: Download build | |
uses: actions/download-artifact@v3 | |
with: | |
name: ${{ matrix.os }} build | |
path: ppsspp/ | |
# Not sure where it's ending up, but test.py can't find it... | |
- name: Fix headless permissions | |
working-directory: ${{ env.GITHUB_WORKSPACE }} | |
run: | | |
cp `find . -name PPSSPPHeadless` . | |
chmod +x PPSSPPHeadless | |
cp `find . -name PPSSPPUnitTest` . | |
chmod +x PPSSPPUnitTest | |
- name: Execute unit tests | |
working-directory: ${{ env.GITHUB_WORKSPACE }} | |
run: ./PPSSPPUnitTest ALL | |
- name: Execute headless tests | |
working-directory: ${{ env.GITHUB_WORKSPACE }} | |
run: python test.py -g --graphics=software |