Skip to content

Commit

Permalink
WIP: target platform
Browse files Browse the repository at this point in the history
  • Loading branch information
askmeaboutlo0m committed Sep 1, 2024
1 parent b623143 commit 881adea
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 230 deletions.
3 changes: 3 additions & 0 deletions .github/scripts/cmake/BuildDependency.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ foreach(path IN LISTS CMAKE_PREFIX_PATH)
list(APPEND NEW_CMAKE_PREFIX_PATH "${CMAKE_BINARY_DIR}/${path}")
endif()
endforeach()
if(NOT NEW_CMAKE_PREFIX_PATH)
set(NEW_CMAKE_PREFIX_PATH "${CMAKE_INSTALL_PREFIX}")
endif()
set(CMAKE_PREFIX_PATH ${NEW_CMAKE_PREFIX_PATH})
unset(NEW_CMAKE_PREFIX_PATH)

Expand Down
248 changes: 20 additions & 228 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ env:

jobs:
test:
name: ${{ matrix.cross_os || matrix.os }} ${{ matrix.arch }}${{ matrix.component && format(' {0}', matrix.component) }} Qt ${{ matrix.qt }}${{ matrix.cross_os && format(' on {0}', matrix.os) }}
name: ${{ matrix.cross_os || matrix.os }} ${{ matrix.cross_arch || matrix.arch }}${{ matrix.component && format(' {0}', matrix.component) }} Qt ${{ matrix.qt }}${{ matrix.cross_os && format(' on {0}', matrix.os) }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
Expand All @@ -44,59 +44,11 @@ jobs:
# utterly confounding errors, so just explicitly specify each target.
include:
- os: ubuntu-20.04
cross_os: ''
cross_os: Android34
component: ''
qt: 5.15.14
qt: 6.7.2
arch: x86_64
sccache_triplet: x86_64-unknown-linux-musl
build_flags: -DINITSYS=systemd -DBUILD_PACKAGE_SUFFIX=x86_64 -G Ninja
build_type: Release
collect_symbols: false
# This causes the AppImage to be generated, instead of just creating
# the portable tree, because there seems to be no way to separate
# these steps with linuxdeploy
# Even though the svg component is linked explicitly,
# linuxdeploy-plugin-qt does not seem to notice and so does not
# export the iconengine if it is not told that we really, really
# want svg plugins please
packager: >-
EXTRA_QT_PLUGINS="svg;"
VERSION="${{ startsWith(github.ref, 'refs/tags/') && github.ref_name || '$(git describe)' }}"
cmake --install build --config Release
# The runner has multiple clang versions installed and CMake/Qt gets
# confused about which one to pick for some reason, so this also
# sets Clang_ROOT during the Qt build
qt_pre_build: >
sudo apt-get update &&
sudo apt-get install --no-install-recommends
libatspi2.0-dev libmtdev-dev libts-dev libgtk-3-dev
libgl1-mesa-dev libglu1-mesa-dev libxi-dev libdrm-dev
libgbm-dev libgl-dev libgles-dev libegl-dev libegl1-mesa-dev
libxext-dev libxfixes-dev libxrender-dev libx11-dev
libxcb1-dev libx11-xcb-dev libxcb-glx0-dev libxcb-util0-dev
libxkbcommon-dev libxkbcommon-x11-dev libxcb-keysyms1-dev
libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev
libxcb-sync-dev libxcb-xfixes0-dev libxcb-shape0-dev
libxcb-randr0-dev libxcb-render0-dev libxcb-render-util0-dev
libxcb-util-dev libinput-dev libvulkan-dev
libxcb-xinerama0-dev libxcb-xkb-dev libxcb-xinput-dev libclang-12-dev
libasound2-dev libpulse-dev libcups2-dev libssl-dev
libfontconfig1-dev &&
echo "Clang_ROOT=/usr/lib/llvm-12" >> $GITHUB_ENV
ffmpeg_pre_build: >
sudo apt-get update &&
sudo apt-get install --no-install-recommends
nasm yasm
other_pre_build: >
sudo apt-get update &&
sudo apt-get install --no-install-recommends
libsecret-1-dev
- os: ubuntu-20.04
cross_os: Android
component: ''
qt: 5.15.14
arch: arm64
cross_arch: arm64
sccache_triplet: x86_64-unknown-linux-musl
build_type: Release
collect_symbols: false
Expand All @@ -106,31 +58,29 @@ jobs:
"-DANDROID_NDK_ROOT=$ANDROID_NDK_ROOT"
"-DANDROID_HOST_PATH=$GITHUB_WORKSPACE/.github/deps/qt"
-DANDROID_ABI=arm64-v8a
-DANDROID_PLATFORM=android-34
cross_ffmpeg_args: >-
"-DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_ROOT/build/cmake/android.toolchain.cmake"
"-DANDROID_SDK_ROOT=$ANDROID_SDK_ROOT"
"-DANDROID_NDK_ROOT=$ANDROID_NDK_ROOT"
-DANDROID_PLATFORM=android-23
-DANDROID_PLATFORM=android-34
-DANDROID_ABI=arm64-v8a
cross_other_args: >-
"-DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_ROOT/build/cmake/android.toolchain.cmake"
"-DANDROID_SDK_ROOT=$ANDROID_SDK_ROOT"
"-DANDROID_NDK_ROOT=$ANDROID_NDK_ROOT"
-DANDROID_PLATFORM=android-23
-DANDROID_PLATFORM=android-34
-DANDROID_ABI=arm64-v8a
build_flags: >-
"-DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_ROOT/build/cmake/android.toolchain.cmake"
-DANDROID_PLATFORM=android-23
-DANDROID_PLATFORM=android-34
-DANDROID_ABI=arm64-v8a
-DANDROID_SDK_PLATFORM=android-31
-DANDROID_SDK_PLATFORM=android-34
-DANDROID_SDK_BUILD_TOOLS_REVISION=34.0.0
-DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=on
-DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=BOTH
-DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=BOTH
-DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=BOTH
# The runner has multiple clang versions installed and CMake/Qt gets
# confused about which one to pick for some reason, so this also
# sets Clang_ROOT during the Qt build
qt_pre_build: >
sudo apt-get update &&
sudo apt-get install --no-install-recommends
Expand All @@ -151,170 +101,12 @@ jobs:
ffmpeg_pre_build: >
sudo apt-get update &&
sudo apt-get install --no-install-recommends
yasm
other_pre_build: >
sudo apt-get update &&
sudo apt-get install --no-install-recommends
libsecret-1-dev
- os: ubuntu-20.04
cross_os: Android
component: ''
qt: 5.15.14
arch: arm32
sccache_triplet: x86_64-unknown-linux-musl
build_type: Release
collect_symbols: false
packager: cmake --install build --config Release --prefix .
cross_qt_args: >-
"-DANDROID_SDK_ROOT=$ANDROID_SDK_ROOT"
"-DANDROID_NDK_ROOT=$ANDROID_NDK_ROOT"
"-DANDROID_HOST_PATH=$GITHUB_WORKSPACE/.github/deps/qt"
-DANDROID_ABI=armeabi-v7a
cross_ffmpeg_args: >-
"-DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_ROOT/build/cmake/android.toolchain.cmake"
"-DANDROID_SDK_ROOT=$ANDROID_SDK_ROOT"
"-DANDROID_NDK_ROOT=$ANDROID_NDK_ROOT"
-DANDROID_PLATFORM=android-23
-DANDROID_ABI=armeabi-v7a
cross_other_args: >-
"-DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_ROOT/build/cmake/android.toolchain.cmake"
"-DANDROID_SDK_ROOT=$ANDROID_SDK_ROOT"
"-DANDROID_NDK_ROOT=$ANDROID_NDK_ROOT"
-DANDROID_PLATFORM=android-23
-DANDROID_ABI=armeabi-v7a
build_flags: >-
"-DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_ROOT/build/cmake/android.toolchain.cmake"
-DANDROID_PLATFORM=android-23
-DANDROID_ABI=armeabi-v7a
-DANDROID_SDK_PLATFORM=android-31
-DANDROID_SDK_BUILD_TOOLS_REVISION=34.0.0
-DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=on
-DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=BOTH
-DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=BOTH
-DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=BOTH
# The runner has multiple clang versions installed and CMake/Qt gets
# confused about which one to pick for some reason, so this also
# sets Clang_ROOT during the Qt build
qt_pre_build: >
sudo apt-get update &&
sudo apt-get install --no-install-recommends
libatspi2.0-dev libmtdev-dev libts-dev libgtk-3-dev
libgl1-mesa-dev libglu1-mesa-dev libxi-dev libdrm-dev
libgbm-dev libgl-dev libgles-dev libegl-dev libegl1-mesa-dev
libxext-dev libxfixes-dev libxrender-dev libx11-dev
libxcb1-dev libx11-xcb-dev libxcb-glx0-dev libxcb-util0-dev
libxkbcommon-dev libxkbcommon-x11-dev libxcb-keysyms1-dev
libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev
libxcb-sync-dev libxcb-xfixes0-dev libxcb-shape0-dev
libxcb-randr0-dev libxcb-render0-dev libxcb-render-util0-dev
libxcb-util-dev libinput-dev libvulkan-dev
libxcb-xinerama0-dev libxcb-xkb-dev libxcb-xinput-dev libclang-12-dev
libasound2-dev libpulse-dev libcups2-dev libssl-dev
libfontconfig1-dev &&
echo "Clang_ROOT=/usr/lib/llvm-12" >> $GITHUB_ENV
ffmpeg_pre_build: >
sudo apt-get update &&
sudo apt-get install --no-install-recommends
yasm
nasm yasm
other_pre_build: >
sudo apt-get update &&
sudo apt-get install --no-install-recommends
libsecret-1-dev
- os: macos-13
cross_os: ''
component: ''
qt: 6.7.2
arch: x86_64
build_flags: -DBUILD_PACKAGE_SUFFIX=x86_64 -G Ninja
build_type: Release
collect_symbols: false
sccache_triplet: x86_64-apple-darwin
packager: cpack --verbose --config build/CPackConfig.cmake -C Release

- os: macos-14
cross_os: ''
component: ''
qt: 6.7.2
arch: arm64
build_flags: -DBUILD_PACKAGE_SUFFIX=arm64 -G Ninja
build_type: Release
collect_symbols: false
sccache_triplet: aarch64-apple-darwin
packager: cpack --verbose --config build/CPackConfig.cmake -C Release

- os: windows-latest
cross_os: ''
component: ''
qt: 5.15.14
arch: x86_64
sccache_triplet: x86_64-pc-windows-msvc
build_flags: -DBUILD_PACKAGE_SUFFIX=x86_64 -G Ninja
build_type: RelWithDebInfo
collect_symbols: true
qt_pre_build: >
choco install gperf jom winflexbison3 &&
New-Item -Path C:\ProgramData\Chocolatey\bin\flex.exe -ItemType SymbolicLink -Value C:\ProgramData\Chocolatey\bin\win_flex.exe &&
New-Item -Path C:\ProgramData\Chocolatey\bin\bison.exe -ItemType SymbolicLink -Value C:\ProgramData\Chocolatey\bin\win_bison.exe
ffmpeg_pre_build: >
choco install yasm
# Copying files is a disgusting hack because windeployqt does not
# search PATH to find DLLs and it gets confused by QtKeychain having
# a Qt prefix and thinks it is part of Qt and tries to process it
# and fails if it is not in the Qt bin directory with the rest of
# them
packager: >
cp .github/deps/other/bin/qt*.dll .github/deps/qt/bin &&
cpack --verbose --config build/CPackConfig.cmake -C RelWithDebInfo
- os: windows-latest
cross_os: ''
component: 'Tools'
qt: 5.15.14
arch: x86_64
sccache_triplet: x86_64-pc-windows-msvc
build_flags: -DBUILD_PACKAGE_SUFFIX=x86_64 -G Ninja
build_type: RelWithDebInfo
collect_symbols: false
qt_pre_build: >
choco install gperf jom winflexbison3 &&
New-Item -Path C:\ProgramData\Chocolatey\bin\flex.exe -ItemType SymbolicLink -Value C:\ProgramData\Chocolatey\bin\win_flex.exe &&
New-Item -Path C:\ProgramData\Chocolatey\bin\bison.exe -ItemType SymbolicLink -Value C:\ProgramData\Chocolatey\bin\win_bison.exe
ffmpeg_pre_build: >
choco install yasm
# Copying files is a disgusting hack because windeployqt does not
# search PATH to find DLLs and it gets confused by QtKeychain having
# a Qt prefix and thinks it is part of Qt and tries to process it
# and fails if it is not in the Qt bin directory with the rest of
# them
packager: >
cp .github/deps/other/bin/qt*.dll .github/deps/qt/bin &&
cpack --verbose --config build/CPackConfig.cmake -C RelWithDebInfo
- os: windows-latest
qt: 5.15.14
arch: x86
sccache_triplet: x86_64-pc-windows-msvc
build_flags: -DCARGO_TRIPLE=i686-pc-windows-msvc -DBUILD_PACKAGE_SUFFIX=x86 -G Ninja
build_type: RelWithDebInfo
collect_symbols: false
qt_pre_build: >
choco install gperf jom winflexbison3 &&
New-Item -Path C:\ProgramData\Chocolatey\bin\flex.exe -ItemType SymbolicLink -Value C:\ProgramData\Chocolatey\bin\win_flex.exe &&
New-Item -Path C:\ProgramData\Chocolatey\bin\bison.exe -ItemType SymbolicLink -Value C:\ProgramData\Chocolatey\bin\win_bison.exe
ffmpeg_pre_build: >
choco install yasm
# Copying files is a disgusting hack because windeployqt does not
# search PATH to find DLLs and it gets confused by QtKeychain having
# a Qt prefix and thinks it is part of Qt and tries to process it
# and fails if it is not in the Qt bin directory with the rest of
# them
packager: >
cp .github/deps/other/bin/qt*.dll .github/deps/qt/bin &&
cpack --verbose --config build/CPackConfig.cmake -C RelWithDebInfo
steps:
- name: Check out code
uses: actions/checkout@v4
Expand Down Expand Up @@ -366,7 +158,7 @@ jobs:
mv ${ANDROID_SDK_ROOT}/platforms/{android-*-*,..}
ls "${ANDROID_SDK_ROOT}/platforms"
shell: bash
if: matrix.cross_os == 'Android'
if: matrix.cross_os == 'Android34'

- name: Configure Linux system dependencies
uses: ./.github/actions/restore-linux
Expand All @@ -387,16 +179,16 @@ jobs:
ffmpeg_args: ${{ matrix.ffmpeg_args }}
other_pre_build: ${{ matrix.other_pre_build }}
other_args: ${{ matrix.other_args }}
if: '!matrix.cross_os'
if: "!matrix.cross_os || startsWith(matrix.qt, '6')"

- name: Build cross-compiler dependencies
uses: ./.github/actions/build-deps
id: cross-deps
with:
build_type: ${{ matrix.build_type }}
cache_key: ${{ matrix.build_type != 'Release' && format('{0}-', matrix.build_type) || '' }}${{ runner.os }}+${{ matrix.cross_os }}-${{ matrix.arch }}
cache_key: ${{ matrix.build_type != 'Release' && format('{0}-', matrix.build_type) || '' }}${{ runner.os }}+${{ matrix.cross_os }}-${{ matrix.cross_arch }}
path: .github/cross-deps
target_arch: "${{ matrix.arch }}"
target_arch: "${{ matrix.cross_arch }}"
qt: ${{ matrix.qt }}
qt_pre_build: ${{ matrix.cross_qt_pre_build }}
qt_args: ${{ matrix.cross_qt_args }}
Expand All @@ -411,7 +203,7 @@ jobs:
id: sccache
with:
triplet: ${{ matrix.sccache_triplet }}
cache_key: ${{ matrix.build_type != 'Release' && format('{0}-', matrix.build_type) || '' }}${{ runner.os }}${{ matrix.component }}-${{ matrix.arch }}${{ matrix.cross_os && format('+{0}', matrix.cross_os) }}-${{ matrix.qt }}
cache_key: ${{ matrix.build_type != 'Release' && format('{0}-', matrix.build_type) || '' }}${{ runner.os }}${{ matrix.component }}-${{ matrix.cross_arch || matrix.arch }}${{ matrix.cross_os && format('+{0}', matrix.cross_os) }}-${{ matrix.qt }}

- name: Cache gradle
uses: actions/cache@v4
Expand All @@ -421,8 +213,8 @@ jobs:
path: |-
~/.gradle/wrapper/dists/gradle-*/*/gradle-*
!~/.gradle/wrapper/dists/gradle-*/*/gradle-*.zip
key: gradle-${{ runner.os }}-${{ matrix.arch }}+${{ matrix.cross_os }}-${{ matrix.qt }}
if: matrix.cross_os == 'Android'
key: gradle-${{ runner.os }}-${{ matrix.cross_arch || matrix.arch }}+${{ matrix.cross_os }}-${{ matrix.qt }}
if: matrix.cross_os == 'Android34'

- name: Prepare Windows signing
run: |
Expand Down Expand Up @@ -479,7 +271,7 @@ jobs:
env:
ANDROID_KEYSTORE: ${{ secrets.ANDROID_KEYSTORE }}
ANDROID_KEYSTORE_PASS: ${{ secrets.ANDROID_KEYSTORE_PASS }}
if: matrix.cross_os == 'Android' && matrix.packager
if: matrix.cross_os == 'Android34' && matrix.packager

- name: Build project
run: cmake --build build --parallel $(nproc || sysctl -n hw.ncpu || echo 2) --config ${{ matrix.build_type }}
Expand Down Expand Up @@ -515,7 +307,7 @@ jobs:
uses: actions/upload-artifact@v4
if: matrix.packager
with:
name: Drawpile${{ matrix.component && format('-{0}', matrix.component) }}-${{ matrix.cross_os || runner.os }}-${{ matrix.arch }}-Qt${{ matrix.qt }}
name: Drawpile${{ matrix.component && format('-{0}', matrix.component) }}-${{ matrix.cross_os || runner.os }}-${{ matrix.cross_arch || matrix.arch }}-Qt${{ matrix.qt }}
path: |
Drawpile-*.AppImage
Drawpile-*.apk
Expand All @@ -528,7 +320,7 @@ jobs:
uses: actions/upload-artifact@v4
if: failure()
with:
name: Logs${{ matrix.component && format('-{0}', matrix.component) }}-${{ matrix.cross_os || runner.os }}-${{ matrix.arch }}-Qt${{ matrix.qt }}
name: Logs${{ matrix.component && format('-{0}', matrix.component) }}-${{ matrix.cross_os || runner.os }}-${{ matrix.cross_arch || matrix.arch }}-Qt${{ matrix.qt }}
path: |
**/*.log
**/*.wxs
Expand Down
4 changes: 2 additions & 2 deletions cmake/Qt5AndroidDeploymentTarget.cmake
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
#[[ This module sets the variables required to generate a Qt5 Android build. #]]

# The defaults in Qt5 are outdated, so make them match the current NDK
set(ANDROID_MIN_SDK_VERSION ${NDK_MIN_PLATFORM_LEVEL})
set(ANDROID_TARGET_SDK_VERSION ${NDK_MAX_PLATFORM_LEVEL})
set(ANDROID_MIN_SDK_VERSION ${NDK_MIN_PLATFORM_LEVEL} CACHE STRING "Android minimum SDK version" FORCE)
set(ANDROID_TARGET_SDK_VERSION ${NDK_MAX_PLATFORM_LEVEL} CACHE STRING "Android target SDK version" FORCE)

# If ANDROID_SDK is not defined Qt will default it to being one level up from
# NDK, but actually it is two levels up by default due to versioning and this
Expand Down

0 comments on commit 881adea

Please sign in to comment.