Skip to content

Fix compatibility with Qt 6.7.1 (#403) #738

Fix compatibility with Qt 6.7.1 (#403)

Fix compatibility with Qt 6.7.1 (#403) #738

Workflow file for this run

name: build
on:
push:
tags:
- 'v*'
branches:
- master
pull_request:
branches:
- master
concurrency:
group: ${{ github.ref }}
cancel-in-progress: true
jobs:
build-linux:
runs-on: ${{ matrix.config.os }}
name: 'Build (${{ matrix.config.os }}, ${{ matrix.config.cc }}, ${{ matrix.config.cxx }})'
strategy:
fail-fast: false
matrix:
config:
# ubuntu-latest (20.04) don't have qt 5.15 yet
- { os: ubuntu-22.04, cc: "gcc", cxx: "g++", opts: "-DENABLE_RELEASE:BOOL=ON -DENABLE_FFMPEG:BOOL=ON -DENABLE_OPENGL_CG:BOOL=ON" }
- { os: ubuntu-22.04, cc: "clang", cxx: "clang++", opts: "-DENABLE_RELEASE:BOOL=ON -DENABLE_FFMPEG:BOOL=ON -DENABLE_OPENGL_CG:BOOL=ON" }
steps:
- name: 'Checkout'
uses: actions/checkout@v4
- name: 'Install dependencies'
run: |
sudo apt-get update -qq
sudo apt-get install -y \
libasound2-dev \
libxrandr-dev \
libudev-dev \
libglvnd-dev \
ninja-build \
libavformat-dev \
libavcodec-dev \
libswresample-dev \
libswscale-dev \
libavutil-dev \
nvidia-cg-dev \
libqt5svg5-dev \
qtbase5-dev \
qtbase5-dev-tools \
qttools5-dev
- name: 'Build with ${{ matrix.config.cc }}/${{ matrix.config.cxx }}'
env:
CC: ${{ matrix.config.cc }}
CXX: ${{ matrix.config.cxx }}
run: |
cmake -B build -G Ninja ${{ matrix.config.opts }}
cmake --build build -j2
build-windows:
runs-on: windows-latest
name: 'Build (${{ matrix.msystem }}, ${{ matrix.qt5ver }}, ${{ matrix.cc }}, ${{ matrix.cxx }})'
strategy:
fail-fast: false
matrix:
include:
- { msystem: mingw64, cc: "gcc", cxx: "g++", env: x86_64, bit: 64, qt5ver: 5.15.8, url1: www.dropbox.com/s/e8ejq25mdg1cuub, url2: www.dropbox.com/s/d632cjezybz6a74, opts: '-DENABLE_WIN_STATIC_QT:BOOL=ON' }
- { msystem: mingw32, cc: "gcc", cxx: "g++", env: i686, bit: 32, qt5ver: 5.6.3, url1: www.dropbox.com/s/k25y87k94cldb62, url2: www.dropbox.com/s/ye00129nyacdl05, opts: '-DENABLE_WIN_STATIC_QT560:BOOL=ON' }
env:
CC: ${{ matrix.config.cc }}
CXX: ${{ matrix.config.cxx }}
CFLAGS: '-O3 -mmmx -msse -msse2 -msse3 -mfpmath=sse'
CXXFLAGS: '-O3 -mmmx -msse -msse2 -msse3 -mfpmath=sse'
oglopts: '-DENABLE_RELEASE:BOOL=ON -DENABLE_FFMPEG:BOOL=ON -DENABLE_OPENGL_CG:BOOL=ON'
d3dopts: '-DENABLE_RELEASE:BOOL=ON -DENABLE_FFMPEG:BOOL=ON -DENABLE_OPENGL:BOOL=OFF'
steps:
- name: 'Checkout'
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: 'Set WIP env'
if: github.ref == 'refs/heads/master'
run: |
chcp 65001 #set code page to utf-8
echo ("git_info=-DENABLE_GIT_INFO:BOOL=ON") >> $env:GITHUB_ENV
- name: 'Set release env'
if: startsWith(github.ref, 'refs/tags/v')
run: |
chcp 65001 #set code page to utf-8
echo ("git_info=-DENABLE_GIT_INFO:BOOL=OFF") >> $env:GITHUB_ENV
- name: 'Setup ${{ matrix.env }} environment'
uses: msys2/setup-msys2@v2
with:
msystem: ${{ matrix.msystem }}
release: false
update: true
install: >-
base-devel
git
wget
p7zip
unzip
libtool
mingw-w64-${{ matrix.env }}-cmake
mingw-w64-${{ matrix.env }}-toolchain
- name: 'Install FFmpeg libraries'
shell: msys2 {0}
run: |
pacman --noconfirm -U http://repo.msys2.org/mingw/${{ matrix.env }}/mingw-w64-${{ matrix.env }}-ffmpeg-4.4.3-6-any.pkg.tar.zst
- name: 'Environment configuration'
shell: msys2 {0}
run: |
mkdir -p artifacts/dll
mkdir -p artifacts/tmp
mkdir -p artifacts/d3d9
mkdir -p artifacts/opengl
mkdir -p build/d3d9
mkdir -p build/opengl
- name: 'Download qt5 and dlls'
shell: msys2 {0}
working-directory: artifacts/tmp
run: |
wget --no-check-cert -O qt5_${{ matrix.qt5ver }}_${{ matrix.env }}.7z 'https://${{ matrix.url1 }}/qt5_${{ matrix.qt5ver }}_${{ matrix.env }}.7z?dl=1' 1>/dev/null 2>&1
wget --no-check-cert -O puNES_${{ matrix.env }}_dlls.zip 'https://${{ matrix.url2 }}/puNES_${{ matrix.env }}_dlls.zip?dl=1' 1>/dev/null 2>&1
- name: 'Extract qt5 and dlls'
working-directory: artifacts/tmp
run: |
7z x qt5_${{ matrix.qt5ver }}_${{ matrix.env }}.7z -oC:\msys64\${{ matrix.msystem }} > NUL
7z x puNES_${{ matrix.env }}_dlls.zip -o${{ github.workspace }}\artifacts\dll > NUL
- name: 'Build d3d9 version'
shell: msys2 {0}
working-directory: build\d3d9
run: |
Qt5_DIR='/${{ matrix.msystem }}/lib/qt5/cmake/Qt5' cmake -S ../../ -G Ninja ${{ env.d3dopts }} ${{ env.git_info }} ${{ matrix.opts }}
cmake --build . -j3
strip src/punes.exe
- name: 'Build opengl version'
shell: msys2 {0}
working-directory: build\opengl
run: |
Qt5_DIR='/${{ matrix.msystem }}/lib/qt5/cmake/Qt5' cmake -S ../../ -G Ninja ${{ env.oglopts }} ${{ env.git_info }} ${{ matrix.opts }}
cmake --build . -j3
strip src/punes.exe
- name: 'Prepare artifacts'
shell: msys2 {0}
working-directory: artifacts
run: |
cp dll/*.* d3d9/.
rm d3d9/cgGL.dll
cp ../misc/dip.cfg d3d9/.
cp ../misc/nes20db.xml d3d9/.
cp ../build/d3d9/src/punes.exe d3d9/.
cp dll/*.* opengl/.
rm opengl/cgD3D9.dll
cp ../misc/dip.cfg opengl/.
cp ../misc/nes20db.xml opengl/.
cp ../build/opengl/src/punes.exe opengl/.
- name: 'Upload d3d9 artifact'
uses: actions/upload-artifact@v4
with:
name: punes${{ matrix.bit }}.wip.d3d9
path: artifacts\d3d9\*.*
- name: 'Upload opengl artifact'
uses: actions/upload-artifact@v4
with:
name: punes${{ matrix.bit }}.wip.opengl
path: artifacts\opengl\*.*
build-appimage:
runs-on: ${{ matrix.config.os }}
name: 'AppImage ${{ matrix.config.env }} (${{ matrix.config.os }}, ${{ matrix.config.cc }}, ${{ matrix.config.cxx }})'
strategy:
fail-fast: false
matrix:
config:
- { os: ubuntu-20.04, cc: "gcc", cxx: "g++", env: x86_64, opts: "-DENABLE_RELEASE:BOOL=ON -DENABLE_FFMPEG:BOOL=ON -DENABLE_OPENGL_CG:BOOL=ON -DDISABLE_PORTABLE_MODE:BOOL=ON" }
steps:
- name: 'Checkout'
uses: actions/checkout@v4
- name: 'Install dependencies'
run: |
sudo apt-get update -qq
sudo apt-get install -y \
libasound2-dev \
libxrandr-dev \
libudev-dev \
libglvnd-dev \
ninja-build \
libavformat-dev \
libavcodec-dev \
libswresample-dev \
libswscale-dev \
libavutil-dev \
nvidia-cg-dev \
qt5-default \
libqt5svg5-dev \
qtbase5-dev \
qtbase5-dev-tools \
qttools5-dev \
qt5-image-formats-plugins
- name: 'Set WIP env'
if: github.ref == 'refs/heads/master'
run: echo "git_info=-DENABLE_GIT_INFO:BOOL=ON" >> "$GITHUB_ENV"
- name: 'Set release env'
if: startsWith(github.ref, 'refs/tags/v')
run: echo "git_info=-DENABLE_GIT_INFO:BOOL=OFF" >> "$GITHUB_ENV"
- name: 'Build project with ${{ matrix.config.cc }}/${{ matrix.config.cxx }}'
env:
CC: ${{ matrix.config.cc }}
CXX: ${{ matrix.config.cxx }}
CFLAGS: '-O3 -mmmx -msse -msse2 -msse3 -mfpmath=sse'
CXXFLAGS: '-O3 -mmmx -msse -msse2 -msse3 -mfpmath=sse'
run: |
cmake -B build -G Ninja ${{ matrix.config.opts }} ${{ env.git_info }}
cmake --build build -j2
- name: 'Install linuxdeploy'
run: |
wget -c "https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage"
chmod a+x linuxdeploy-x86_64.AppImage
- name: 'Install linuxdeploy-plugin-qt'
run: |
wget -c "https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage"
chmod a+x linuxdeploy-plugin-qt-x86_64.AppImage
- name: 'Create AppDir'
run: |
mkdir -p AppDir
cmake --install build --prefix AppDir/usr
- name: 'Deploy AppImage'
run: |
unset QTDIR; unset QT_PLUGIN_PATH; unset LD_LIBRARY_PATH
./linuxdeploy-x86_64.AppImage --appdir AppDir -d AppDir/usr/share/applications/io.github.punesemu.puNES.desktop -i AppDir/usr/share/icons/hicolor/256x256/apps/io.github.punesemu.puNES.png --plugin qt
rm -f AppDir/usr/lib/libmpg123.so.0
./linuxdeploy-x86_64.AppImage --appdir AppDir --exclude-library "*mpg123*" --output appimage
- name: 'Setup tmate session (only for debug)'
if: ${{ failure() }}
uses: mxschmitt/action-tmate@v3
with:
limit-access-to-actor: true
- name: 'Upload artifact'
uses: actions/upload-artifact@v4
with:
name: puNES-${{ matrix.config.env }}.AppImage
path: puNES*.AppImage
release:
runs-on: ubuntu-latest
needs: [build-windows, build-appimage]
if: startsWith(github.ref, 'refs/tags/v')
name: 'Prepare Release'
steps:
- name: 'Checkout'
uses: actions/checkout@v4
- name: 'Download artifacts'
uses: actions/download-artifact@v4
with:
path: artifacts
- run: ls -R artifacts
- name: 'Set version and generate changelog'
run: |
ver=${{ github.ref_name }}
ver=${ver#v}
echo "version=$ver" >> "$GITHUB_ENV"
body=$'<h1>Changelog</h1>\n\n'
body=$body$(sed -n '/Changelog:/,/^\s*$/p' ChangeLog | sed '1,2d')
echo "$body" > ${{ github.workspace }}-ChangeLog.md
- name: 'Create assets'
shell: bash
run: |
echo "create puNES-${{ env.version }}-x86_64.AppImage"
mv artifacts/puNES-x86_64.AppImage/puNES-x86_64.AppImage artifacts/puNES-${{ env.version }}-x86_64.AppImage
for bit in 32 64 ; do
arch=$( [ "$bit" == "32" ] && echo "i686" || echo "x86_64" )
for i in d3d9 opengl ; do
folder=punes${bit}.wip.${i}
out="punes-${{ env.version }}-${arch}-win-${i}.zip"
mv artifacts/${folder}/punes.exe artifacts/${folder}/punes${bit}.exe
echo "create ${out}"
zip -9j artifacts/${out} artifacts/${folder}/*
done
done
- name: 'Prepare GitHub release'
uses: softprops/action-gh-release@v1
with:
body_path: ${{ github.workspace }}-ChangeLog.md
draft: true
fail_on_unmatched_files: true
files: |
artifacts/puNES-${{ env.version }}-x86_64.AppImage
artifacts/punes-${{ env.version }}-i686-win-d3d9.zip
artifacts/punes-${{ env.version }}-i686-win-opengl.zip
artifacts/punes-${{ env.version }}-x86_64-win-d3d9.zip
artifacts/punes-${{ env.version }}-x86_64-win-opengl.zip