Skip to content
Snippets Groups Projects

QDS-10800 Separate Android and WebAssemly repos

Closed Burak Hançerli requested to merge QDS-10800/separate-android-and-wasm-repo into master
44 files
+ 205
1335
Compare changes
  • Side-by-side
  • Inline
Files
44
+ 0
268
name: Build Android Packages
on:
push:
branches:
- dev
env:
QT_VERSION: 6.2.1
APP_PRO: qtdesignviewer.pro
APP_DIR: qtdesignviewer
APP_NAME: qtdesignviewer
jobs:
build:
name: Ubuntu Latest
runs-on: ubuntu-latest
strategy:
matrix:
abi:
- { arch: "x86_64", suffix: "X86_64", name: "x86_64" }
- { arch: "x86", suffix: "X86", name: "x86" }
- { arch: "armv7", suffix: "ARMv7", name: "armeabi-v7a" }
- { arch: "arm64_v8a", suffix: "ARM64", name: "arm64-v8a" }
steps:
- uses: actions/checkout@v2
with:
ref: dev
path: ${{ env.APP_DIR }}
- name: Download Qt
id: qt
shell: cmake -P {0}
run: |
set(qt_version "$ENV{QT_VERSION}")
string(REPLACE "." "" qt_version_dotless "${qt_version}")
set(qt_package_arch_suffix "gcc_64")
set(qt_package_suffix_desktop "-Linux-RHEL_8_2-GCC-Linux-RHEL_8_2-X86_64")
set(abi ${{ matrix.abi.arch }})
set(qt_package_suffix_android "-Linux-RHEL_8_2-Clang-Android-Android_ANY-${{ matrix.abi.suffix }}")
set(qt_base_url "https://download.qt.io/online/qtsdkrepository/linux_x64")
# Prepare directories
set(working_dir $ENV{GITHUB_WORKSPACE}/Qt)
file(MAKE_DIRECTORY ${working_dir})
function(downloadAndExtract url download_dir archive)
message("Downloading ${url}")
file(DOWNLOAD "${url}" ./${download_dir}/${archive} SHOW_PROGRESS)
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf ../${download_dir}/${archive} WORKING_DIRECTORY ${working_dir})
endfunction()
# Download Desktop Qt
set(qt_base_url_desktop "${qt_base_url}/desktop/qt6_${qt_version_dotless}")
message("Downloading ${qt_base_url_desktop}/Updates.xml")
file(DOWNLOAD "${qt_base_url_desktop}/Updates.xml" ./Updates.xml SHOW_PROGRESS)
file(READ ./Updates.xml updates_xml)
string(REGEX MATCH "<Name>qt.qt6.*<Version>([0-9+-.]+)</Version>" updates_xml_output "${updates_xml}")
set(qt_package_version ${CMAKE_MATCH_1})
set(download_dir $ENV{GITHUB_WORKSPACE}/qt6-download-desktop-${qt_package_version})
file(MAKE_DIRECTORY ${download_dir})
file(RENAME ./Updates.xml ${download_dir}/Updates.xml)
# Needs qtdeclarative for qmlimportscanner
foreach(package qtbase qtdeclarative)
downloadAndExtract(
"${qt_base_url_desktop}/qt.qt6.${qt_version_dotless}.${qt_package_arch_suffix}/${qt_package_version}${package}${qt_package_suffix_desktop}.7z"
${download_dir}
${package}.7z
)
endforeach()
# uic depends on libicu56.so
if (NOT WIN32 AND NOT APPLE)
downloadAndExtract(
"${qt_base_url_desktop}/qt.qt6.${qt_version_dotless}.${qt_package_arch_suffix}/${qt_package_version}icu-linux-Rhel7.2-x64.7z"
${download_dir}
icu.7z
)
endif()
set(qt_dir_desktop ${working_dir}/${qt_version}/gcc_64)
file(READ "${qt_dir_desktop}/mkspecs/qconfig.pri" qtconfig)
string(REPLACE "Enterprise" "OpenSource" qtconfig "${qtconfig}")
string(REPLACE "licheck.exe" "" qtconfig "${qtconfig}")
string(REPLACE "licheck64" "" qtconfig "${qtconfig}")
string(REPLACE "licheck_mac" "" qtconfig "${qtconfig}")
file(WRITE "${qt_dir_desktop}/mkspecs/qconfig.pri" "${qtconfig}")
# Save the path for other steps
message("::set-output name=qt_dir_desktop::${qt_dir_desktop}")
# Download Android Qt
set(qt_base_url_android "${qt_base_url}/android/qt6_${qt_version_dotless}_${abi}")
message("Downloading ${qt_base_url_android}/Updates.xml")
file(DOWNLOAD "${qt_base_url_android}/Updates.xml" ./Updates.xml SHOW_PROGRESS)
file(READ ./Updates.xml updates_xml)
string(REGEX MATCH "<Name>qt.qt6.*<Version>([0-9+-.]+)</Version>" updates_xml_output "${updates_xml}")
set(qt_package_version ${CMAKE_MATCH_1})
set(download_dir $ENV{GITHUB_WORKSPACE}/qt6-download-android-${qt_package_version})
file(MAKE_DIRECTORY ${download_dir})
file(RENAME ./Updates.xml ${download_dir}/Updates.xml)
foreach(package qttranslations qttools qtsvg qtdeclarative qtbase)
downloadAndExtract(
"${qt_base_url_android}/qt.qt6.${qt_version_dotless}.android_${abi}/${qt_package_version}${package}${qt_package_suffix_android}.7z"
${download_dir}
${package}.7z
)
endforeach()
foreach(package qtwebview qtwebsockets qtwebchannel qtvirtualkeyboard qtsensors qtscxml qtmultimedia qtimageformats qtdatavis3d qtconnectivity qtcharts qt3d)
downloadAndExtract(
"${qt_base_url_android}/qt.qt6.${qt_version_dotless}.addons.${package}.android_${abi}/${qt_package_version}${package}${qt_package_suffix_android}.7z"
${download_dir}
${package}.7z
)
endforeach()
# Special case for qtpositioning as the package is called qtlocation
set(url "${qt_base_url_android}/qt.qt6.${qt_version_dotless}.addons.qtpositioning.android_${abi}/${qt_package_version}qtlocation${qt_package_suffix_android}.7z")
message("Downloading ${url}")
file(DOWNLOAD "${url}" ./${download_dir}/qtpositioning.7z SHOW_PROGRESS)
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf ../${download_dir}/qtpositioning.7z WORKING_DIRECTORY ${working_dir})
foreach(package qtshadertools qtquicktimeline qtquick3d qt5compat)
downloadAndExtract(
"${qt_base_url_android}/qt.qt6.${qt_version_dotless}.${package}.android_${abi}/${qt_package_version}${package}${qt_package_suffix_android}.7z"
${download_dir}
${package}.7z
)
endforeach()
set(qt_dir_android ${working_dir}/${qt_version}/android_${abi})
# Save the path for other steps
message("::set-output name=qt_dir_android::${qt_dir_android}")
# Modify target_qt.conf
set(conf_content "\
[Paths]
Prefix=../
HostPrefix=../../${qt_package_arch_suffix}
HostData=../android_${abi}
Sysroot=
SysrootifyPrefix=false
TargetSpec=android-clang
HostSpec=linux-g++
")
file(WRITE ${qt_dir_android}/bin/target_qt.conf ${conf_content})
- name: Checkout qtquickdesigner-components
uses: actions/checkout@v2
with:
repository: qt-labs/qtquickdesigner-components
ref: dev
path: qtquickdesigner-components
- name: Configure, build and install qtquickdesigner-components
run: |
cd qtquickdesigner-components
${{ steps.qt.outputs.qt_dir_desktop }}/bin/qmake -qtconf ${{ steps.qt.outputs.qt_dir_android }}/bin/target_qt.conf && make && make install
- name: Configure
shell: cmake -P {0}
run: |
execute_process(
COMMAND ${{ steps.qt.outputs.qt_dir_desktop }}/bin/qmake
-qtconf ${{ steps.qt.outputs.qt_dir_android }}/bin/target_qt.conf
$ENV{APP_PRO}
-spec android-clang
CONFIG+=debug
CONFIG+=qml_debug
WORKING_DIRECTORY $ENV{APP_DIR}
RESULT_VARIABLE result
)
if (NOT result EQUAL 0)
message(FATAL_ERROR "Bad exit status")
endif()
# https://github.com/actions/virtual-environments/issues/3757
- name: Fix Android Build Tools
run: |
ln -s ${ANDROID_HOME}/build-tools/31.0.0/d8 ${ANDROID_HOME}/build-tools/31.0.0/dx
ln -s ${ANDROID_HOME}/build-tools/31.0.0/lib/d8.jar ${ANDROID_HOME}/build-tools/31.0.0/lib/dx.jar
- name: Build
id: build
shell: cmake -P {0}
run: |
include(ProcessorCount)
ProcessorCount(N)
execute_process(
COMMAND $ENV{ANDROID_NDK_HOME}/prebuilt/linux-x86_64/bin/make
-f Makefile
qmake_all
WORKING_DIRECTORY $ENV{APP_DIR}
RESULT_VARIABLE result
)
if (NOT result EQUAL 0)
message(FATAL_ERROR "Bad exit status")
endif()
execute_process(
COMMAND $ENV{ANDROID_NDK_HOME}/prebuilt/linux-x86_64/bin/make
-j ${N}
WORKING_DIRECTORY $ENV{APP_DIR}
RESULT_VARIABLE result
)
if (NOT result EQUAL 0)
message(FATAL_ERROR "Bad exit status")
endif()
execute_process(
COMMAND $ENV{ANDROID_NDK_HOME}/prebuilt/linux-x86_64/bin/make
INSTALL_ROOT=android-build install
WORKING_DIRECTORY $ENV{APP_DIR}
RESULT_VARIABLE result
)
if (NOT result EQUAL 0)
message(FATAL_ERROR "Bad exit status")
endif()
execute_process(
COMMAND ${{ steps.qt.outputs.qt_dir_desktop }}/bin/androiddeployqt
--input android-qtdesignviewer-deployment-settings.json
--output android-build
--android-platform android-31
--jdk $ENV{JAVA_HOME_11_X64}
--gradle
WORKING_DIRECTORY $ENV{APP_DIR}
RESULT_VARIABLE result
)
if (NOT result EQUAL 0)
message(FATAL_ERROR "Bad exit status")
endif()
# Rename APK
set(apk_dir $ENV{APP_DIR}/android-build/build/outputs/apk/debug)
set(apk_path ${apk_dir}/$ENV{APP_NAME}_${{ matrix.abi.name }}.apk)
file(
RENAME ${apk_dir}/android-build-debug.apk ${apk_path}
RESULT result
)
if (NOT result EQUAL 0)
message(FATAL_ERROR "Bad exit status")
endif()
message("::set-output name=apk_path::${apk_path}")
- uses: actions/upload-artifact@v2
with:
name: ${{ env.APP_NAME }}_${{ matrix.abi.name }}
path: ${{ steps.build.outputs.apk_path }}
Loading