From ebfb10cb75adb704418d08197681c1e742e63bd5 Mon Sep 17 00:00:00 2001 From: Igor Cota Date: Fri, 28 Aug 2020 11:09:58 +0200 Subject: [PATCH 1/5] Qt: add Android packaging support Introduce an android directory under qt and allow one to package bitcoin-qt for Android by running make apk. Add bitcoin-qt Android build instructions. --- configure.ac | 16 ++++++ doc/README.md | 1 + doc/build-android.md | 12 ++++ src/Makefile.qt.include | 14 +++++ src/qt/Makefile | 2 + src/qt/android/AndroidManifest.xml | 38 +++++++++++++ src/qt/android/build.gradle | 52 ++++++++++++++++++ src/qt/android/gradle.properties | 4 ++ src/qt/android/res/drawable-hdpi/bitcoin.png | Bin 0 -> 4536 bytes src/qt/android/res/drawable-ldpi/bitcoin.png | Bin 0 -> 1697 bytes src/qt/android/res/drawable-mdpi/bitcoin.png | Bin 0 -> 2558 bytes src/qt/android/res/drawable-xhdpi/bitcoin.png | Bin 0 -> 6832 bytes .../android/res/drawable-xxhdpi/bitcoin.png | Bin 0 -> 11479 bytes .../android/res/drawable-xxxhdpi/bitcoin.png | Bin 0 -> 17034 bytes .../org/bitcoincore/qt/BitcoinQtActivity.java | 29 ++++++++++ src/qt/bitcoin.cpp | 6 ++ 16 files changed, 174 insertions(+) create mode 100644 doc/build-android.md create mode 100644 src/qt/android/AndroidManifest.xml create mode 100644 src/qt/android/build.gradle create mode 100644 src/qt/android/gradle.properties create mode 100644 src/qt/android/res/drawable-hdpi/bitcoin.png create mode 100644 src/qt/android/res/drawable-ldpi/bitcoin.png create mode 100644 src/qt/android/res/drawable-mdpi/bitcoin.png create mode 100644 src/qt/android/res/drawable-xhdpi/bitcoin.png create mode 100644 src/qt/android/res/drawable-xxhdpi/bitcoin.png create mode 100644 src/qt/android/res/drawable-xxxhdpi/bitcoin.png create mode 100644 src/qt/android/src/org/bitcoincore/qt/BitcoinQtActivity.java diff --git a/configure.ac b/configure.ac index 0b176e6039..1b06035815 100644 --- a/configure.ac +++ b/configure.ac @@ -734,6 +734,21 @@ case $host in *android*) dnl make sure android stays above linux for hosts like *linux-android* TARGET_OS=android + case $host in + *x86_64*) + ANDROID_ARCH=x86_64 + ;; + *aarch64*) + ANDROID_ARCH=arm64-v8a + ;; + *armv7a*) + ANDROID_ARCH=armeabi-v7a + ;; + *i686*) + ANDROID_ARCH=i686 + ;; + *) AC_MSG_ERROR("Could not determine Android arch") ;; + esac ;; *linux*) TARGET_OS=linux @@ -1844,6 +1859,7 @@ AC_SUBST(HAVE_BUILTIN_PREFETCH) AC_SUBST(HAVE_MM_PREFETCH) AC_SUBST(HAVE_STRONG_GETAUXVAL) AC_SUBST(HAVE_WEAK_GETAUXVAL) +AC_SUBST(ANDROID_ARCH) AC_CONFIG_FILES([Makefile src/Makefile doc/man/Makefile share/setup.nsi share/qt/Info.plist test/config.ini]) AC_CONFIG_FILES([contrib/devtools/split-debug.sh],[chmod +x contrib/devtools/split-debug.sh]) AM_COND_IF([HAVE_DOXYGEN], [AC_CONFIG_FILES([doc/Doxyfile])]) diff --git a/doc/README.md b/doc/README.md index 19d8204d83..f32600d009 100644 --- a/doc/README.md +++ b/doc/README.md @@ -44,6 +44,7 @@ The following are developer notes on how to build Bitcoin Core on your native pl - [FreeBSD Build Notes](build-freebsd.md) - [OpenBSD Build Notes](build-openbsd.md) - [NetBSD Build Notes](build-netbsd.md) +- [Android Build Notes](build-android.md) - [Gitian Building Guide (External Link)](https://github.com/bitcoin-core/docs/blob/master/gitian-building.md) Development diff --git a/doc/build-android.md b/doc/build-android.md new file mode 100644 index 0000000000..7a8a9e6a65 --- /dev/null +++ b/doc/build-android.md @@ -0,0 +1,12 @@ +ANDROID BUILD NOTES +====================== + +This guide describes how to build and package the `bitcoin-qt` GUI for Android on Linux and macOS. + +## Preparation + +You will need to get the Android NDK and build dependencies for Android as described in [depends/README.md](../depends/README.md). + +## Building and packaging + +After the depends are built configure with one of the resulting prefixes and run `make && make apk` in `src/qt`. \ No newline at end of file diff --git a/src/Makefile.qt.include b/src/Makefile.qt.include index 59cfdb9839..399a8430ef 100644 --- a/src/Makefile.qt.include +++ b/src/Makefile.qt.include @@ -378,6 +378,20 @@ bitcoin_qt_clean: FORCE bitcoin_qt : qt/bitcoin-qt$(EXEEXT) +APK_LIB_DIR = qt/android/libs/$(ANDROID_ARCH) +QT_BASE_PATH = $(shell find ../depends/sources/ -maxdepth 1 -type f -regex ".*qtbase.*\.tar.xz") +QT_BASE_TLD = $(shell tar tf $(QT_BASE_PATH) --exclude='*/*') + +bitcoin_qt_apk: FORCE + mkdir -p $(APK_LIB_DIR) + cp $(dir $(CC))../sysroot/usr/lib/$(host_alias)/libc++_shared.so $(APK_LIB_DIR) + tar xf $(QT_BASE_PATH) -C qt/android/src/ $(QT_BASE_TLD)src/android/jar/src --strip-components=5 + tar xf $(QT_BASE_PATH) -C qt/android/src/ $(QT_BASE_TLD)src/android/java/src --strip-components=5 + tar xf $(QT_BASE_PATH) -C qt/android/res/ $(QT_BASE_TLD)src/android/java/res --strip-components=5 + cp qt/bitcoin-qt $(APK_LIB_DIR)/libbitcoin-qt.so + cd qt/android && gradle wrapper --gradle-version=6.6.1 + cd qt/android && ./gradlew build + ui_%.h: %.ui @test -f $(UIC) @$(MKDIR_P) $(@D) diff --git a/src/qt/Makefile b/src/qt/Makefile index b9dcf0c599..3bd6199059 100644 --- a/src/qt/Makefile +++ b/src/qt/Makefile @@ -7,3 +7,5 @@ check: FORCE $(MAKE) -C .. test_bitcoin_qt_check bitcoin-qt bitcoin-qt.exe: FORCE $(MAKE) -C .. bitcoin_qt +apk: FORCE + $(MAKE) -C .. bitcoin_qt_apk diff --git a/src/qt/android/AndroidManifest.xml b/src/qt/android/AndroidManifest.xml new file mode 100644 index 0000000000..abb88fe89d --- /dev/null +++ b/src/qt/android/AndroidManifest.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/qt/android/build.gradle b/src/qt/android/build.gradle new file mode 100644 index 0000000000..4c36e79db8 --- /dev/null +++ b/src/qt/android/build.gradle @@ -0,0 +1,52 @@ +buildscript { + repositories { + google() + jcenter() + } + + dependencies { + classpath 'com.android.tools.build:gradle:3.1.0' + } +} + +repositories { + google() + jcenter() +} + +apply plugin: 'com.android.application' + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) +} + +android { + compileSdkVersion androidCompileSdkVersion.toInteger() + + buildToolsVersion androidBuildToolsVersion + + sourceSets { + main { + manifest.srcFile 'AndroidManifest.xml' + java.srcDirs = [qt5AndroidDir + '/src', 'src', 'java'] + aidl.srcDirs = [qt5AndroidDir + '/src', 'src', 'aidl'] + res.srcDirs = [qt5AndroidDir + '/res', 'res'] + resources.srcDirs = ['src'] + renderscript.srcDirs = ['src'] + assets.srcDirs = ['assets'] + jniLibs.srcDirs = ['libs'] + } + } + + lintOptions { + abortOnError false + } + + dexOptions { + javaMaxHeapSize '4g' + } + + defaultConfig { + minSdkVersion 24 + } +} diff --git a/src/qt/android/gradle.properties b/src/qt/android/gradle.properties new file mode 100644 index 0000000000..838870f62d --- /dev/null +++ b/src/qt/android/gradle.properties @@ -0,0 +1,4 @@ +androidBuildToolsVersion=28.0.3 +androidCompileSdkVersion=28 +qt5AndroidDir=new File(".").absolutePath +org.gradle.jvmargs=-Xmx4608M diff --git a/src/qt/android/res/drawable-hdpi/bitcoin.png b/src/qt/android/res/drawable-hdpi/bitcoin.png new file mode 100644 index 0000000000000000000000000000000000000000..31a556a35f2a473413020c6f15b39868c0022d5d GIT binary patch literal 4536 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 WSA+d%omJ literal 0 HcmV?d00001 diff --git a/src/qt/android/res/drawable-ldpi/bitcoin.png b/src/qt/android/res/drawable-ldpi/bitcoin.png new file mode 100644 index 0000000000000000000000000000000000000000..76d80d4196cf16cdd31ecee944991a710c28d624 GIT binary patch literal 1697 zcmV;S244AzP)HgpT z>Z|&z^Mn7V<3}uh#^RSOevQE2cn$AeD2N|-edE%Lin{qeEAQ(I@_D}PN}-q23%ykc zrNGPa1HIeI`+5VBE}l>ES)6lTK;|^`-&Eeu7t#tms+ONiX`>*QbSpgUe~((;#}iuE zFz2Ro2G;b&i~n5Q*Pq80Ff)K491y+GXGekkI?gTbm7Cx6#ozwCct4Yp{Ql4+m zX@Ly7iuA$P;J2+(910=jdG^ezclnLD_G!bcY@T}`^F;L2K)eZ%A=i;U^alK0TO}uy z{M_iu#+TlAT2S+uGJrWX5I=EaUn42-CRf!oDSJj7=#8WS zK{z1#;Hxb~V#gy?QF4^@k#|vaMjeXHZ9?jZyV9zJkOt)LuKW1!{&do6D(>UW&jg|s z`YAf$eNxzhNR1qRnp9OKA+m^!(f1H{U@eJ)Kx*J&_I_L?oRx{axIJL$u2Vk%wB&h@8K z31QCq_M#ips#Dh26Lvscm2<6i$71+-;S_x>JiLMQ zsqc`qq&*4yS2$o$ja%9^-Ue)yQb9#JUHPeNqb%>68*qSdGNc}Ua~$L@X4rcz5F_*m z8DkzNKC;+a6i~vZ(PU13oyBWpPJEGs9a9}xAy!HnyGBAKj|-@z7t)rzA^(gY;MwL> z6ikQq1r#8?>?wA7Fnw;^-dJ7i9Ilgvr4khr3!1%yMECDH;9 zWK@akpS=wXwSj)A7J#?W9uT${GCk=uhk#x24@u)cl+(FeCx#Nk9n8+%PswZTl$r08{C)B>zae zXOpxxpM;{tB#WE_Y8pC;i`$VAev}o${kBTOZIx1Nyp>=`nKHLZ*PzlIm2|d%$c&os zPg^plzsEfEF6lErV_=J*n)SXSi6qVXmMQyCEtPI`sl-wi14FW@`{!(T4_Y2aC1uoo zR?G+C^NYTU;t}{j#@$ zA*t+3`{V=xl1`U7@ri$ecPC-K4XTzzvkxQsm%c_WZMViM^*C zSVM}UkT&*NQZRmudkM1;3c;DJp>Q&Y6Xx`u|^q9r;@YrIwgGVDT5&7yqqZ3IIYJZJgT^$5-K4z0EdOandvsk3XjlliE`!dSvBe158rs)IkvDvF=yo z;j!nOec1rD*kl*hSR*@C5HvmX8TjSAeGAftb@bisFZ-0Whae_Bi49knXAl^)V*RqW rV@}b zQyaeC=J6+R5AOYUa0&o!>{IKZhxap(mfX~Q@5t0M!sz6R(5OTTjZ_=n6GkUhct@n1 zvgD@Z?fWie(15xRKlHD1<|gyY$yuej>0<+);OWCz^Ej5Nlxr$v7HLrd(#RCRlNb{z(xdcUFe8@!kv#6Zu8+pxH~vxJZ{G2BdY{0k zR0{`oHNeNDGD{;C0O@_jz5WqN)*WBR_rY&nSL6>qSm}A=y6#jjDHf33Kk-- zQJ$MPvs!$myRSL&I^d0gkB$I*!e5zHlb+-KF`NY*CrmT1g^8Psa?%Hf0O}H;wZKyd zz=PwSq@vwR$W}0fJmz*JOsr1Aq?#}|V#ESp|LiaEe_TyXRNeVaN?)GyI;I7Vh^I4f zndF(-oBV!1`FuX|%zKuE$+fAZU>w;ujU?BM-o`BO-!N6|`XaX16{*vAUE^W`Ba^Mh z$|3>xO{hb`u~`7lfMqlL3pv*QMB#9lT#j-Q@|sd`T2pe`trQA{*k?a0SV)&;RX$co$iae>?T!`lR939QjH`c;-z~QlHF2B_WcXVvHDx`&gw(1V{7Qbg$v|5Q9$Cf zM&w!e3I&5f3Iqb=oA(q_O2YzMn=>J()s0GiPZ)DK&93s)*W*QSxit7+};zkKrmXD%l+wxJD9XWvN8~BTlJDo~7~()mchw+__7>zE{R&;wPoN9 zNM!jenwyfC--7JN)+6tMU&{AAe^Pi(Hww?~LE_w=PPcMyb_l`(D6;c)}7R15;KdFWcysiwq5sNy2Hz)DWRur1ikrk+wM;Oue zuKSL{^LjDs%^c}L;aQ!@yZ%QKMG-#o``k<40SgG0VRQ2iH=P1j4f>aw-v2lQj>bit z1uO#lsZToL>}O0 zb|6I7xpfSoV0r#CwFxg6K;eZ0*<*jkLLUMPuB~HL_rV#@qF1Bl2e_xs4dbr?ZDoyA8m(7^%jARhhJlN6lSpQU0;X`QL{v9A7zVdTKxui|>*!^>x( zE@#2HX}Bt{orMRa{9p7GtARljT={|AsRJqo?5B5Aa8@_AMl&S~hU4~*&!W3)dcm6a zV;eFl%CHXyWXyI^P&i067=Qy%Bn=Cmp{A3-8hMoXBOxC& z8L?2lVJKvhgH{3x`dsARluN!PuahvlJBbW9dPRtVckD9bdn&bZ9A2paUIW1S#$N)T z4hQ5~z(lG)N>tg;s#`mU^G7~nSeJcHj$`Y{<*=aIPurTF9i( zKe350T6@`SgYk8m$0M1MeTwRYQaq_^2vVhTe zQ_opY7^hOrLI@6&6%rx~kQnrw1-a5|?0=^=ge)qRMFyUs1g=h(2trc$bKJPgKEeK~ z!@bb~c9fyFD^hNH{1fYtb%&WOXAhHm{tE;xw;fsqMlif_;JiRN@Khym?FL5i+&A20 z1*R)H*xL4KR398FMLxXMjN80BLlVn2Pb6F6QL?T6Q44&G7PvOz3bt9}+V)XYpQ|}` zzxmwHu{jazK!4EVS`G_A8Z}z3J^$g48Z*(UpJH>a`nVkjtJXi_XDOq?ozNNdP}D|R zt^um!MCotwGq3rW9Y@@f6DIACs96ATJuT-s4l{PZL;zpyUhVPvRWot!r`W-$iO2=b z4|egWtL6H6uHN&W`Z4y8tBAaDO>Fz*iN1cO2tvdWBQ>&?bFjwI_YE^yHhmJ++c@X1 z{;K+E+k0Y)ev2K?o1NmMS~t%PfCpKVI`>Q5*bkdCsf6166Rw-4KJ!p^;jeMy{Ft4% z92$V-#`WEe@nEdfVQ>1E{Gq#J#_bQ|xUb~5c(Z$`=`?a!&jEafdvNbg_8oaJyAf;s z+x)A+bG2@LVlg|n+44zrPi(&Td>-}GcJ_S9>yI>grQxknihnhz^8bJK_;0xW2D-1; U@i=O6UH||907*qoM6N<$g7eM&RR910 literal 0 HcmV?d00001 diff --git a/src/qt/android/res/drawable-xhdpi/bitcoin.png b/src/qt/android/res/drawable-xhdpi/bitcoin.png new file mode 100644 index 0000000000000000000000000000000000000000..2bd5e3defc7526329523249a740fbe5e8f6c5ec5 GIT binary patch literal 6832 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 literal 0 HcmV?d00001 diff --git a/src/qt/android/res/drawable-xxxhdpi/bitcoin.png b/src/qt/android/res/drawable-xxxhdpi/bitcoin.png new file mode 100644 index 0000000000000000000000000000000000000000..bb1dbc355469143ae525d98b8f7080d2daaf5d38 GIT binary patch literal 17034 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 i000000001hk8%Ud&_}x^!=eQM0000 Date: Fri, 28 Aug 2020 11:11:39 +0200 Subject: [PATCH 2/5] CI: add Android APK build script --- ci/test/00_setup_env_android.sh | 17 +++++++++++++++++ ci/test/05_before_script.sh | 14 ++++++++++++++ ci/test/06_script_a.sh | 8 ++++++++ 3 files changed, 39 insertions(+) create mode 100644 ci/test/00_setup_env_android.sh diff --git a/ci/test/00_setup_env_android.sh b/ci/test/00_setup_env_android.sh new file mode 100644 index 0000000000..8b872faec5 --- /dev/null +++ b/ci/test/00_setup_env_android.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env bash +# +# Copyright (c) 2019-2020 The Bitcoin Core developers +# Distributed under the MIT software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. + +export LC_ALL=C.UTF-8 + +export CONTAINER_NAME=ci_android +export PACKAGES="clang llvm unzip openjdk-8-jdk gradle" + +export ANDROID_API_LEVEL=28 +export ANDROID_BUILD_TOOLS_VERSION=28.0.3 +export ANDROID_NDK_VERSION=21.1.6352462 +export ANDROID_TOOLS_URL=https://dl.google.com/android/repository/commandlinetools-linux-6609375_latest.zip + +export BITCOIN_CONFIG="--disable-ccache" \ No newline at end of file diff --git a/ci/test/05_before_script.sh b/ci/test/05_before_script.sh index f69afd8a26..3bfeb2d67f 100755 --- a/ci/test/05_before_script.sh +++ b/ci/test/05_before_script.sh @@ -22,6 +22,20 @@ if [ -n "$XCODE_VERSION" ] && [ ! -f "$OSX_SDK_PATH" ]; then DOCKER_EXEC curl --location --fail "${SDK_URL}/${OSX_SDK_BASENAME}" -o "$OSX_SDK_PATH" fi +if [ -n "$ANDROID_TOOLS_URL" ]; then + ANDROID_TOOLS_PATH=$DEPENDS_DIR/sdk-sources/android-tools.zip + ANDROID_HOME="$DEPENDS_DIR"/SDKs/android + ANDROID_NDK_HOME=${ANDROID_HOME}/ndk/${ANDROID_NDK_VERSION} + + DOCKER_EXEC curl --location --fail "${ANDROID_TOOLS_URL}" -o "$ANDROID_TOOLS_PATH" + DOCKER_EXEC mkdir -p "${ANDROID_HOME}/cmdline-tools" + DOCKER_EXEC unzip -o "$ANDROID_TOOLS_PATH" -d "${ANDROID_HOME}/cmdline-tools" + DOCKER_EXEC "yes | ${ANDROID_HOME}/cmdline-tools/tools/bin/sdkmanager --install \"build-tools;${ANDROID_BUILD_TOOLS_VERSION}\" \"platform-tools\" \"platforms;android-${ANDROID_API_LEVEL}\" \"ndk;${ANDROID_NDK_VERSION}\"" + + MAKE_COMMAND="ANDROID_SDK=${ANDROID_HOME} ANDROID_NDK=${ANDROID_NDK_HOME} make $MAKEJOBS -C depends HOST=aarch64-linux-android ANDROID_API_LEVEL=${ANDROID_API_LEVEL} ANDROID_TOOLCHAIN_BIN=${ANDROID_HOME}/ndk/${ANDROID_NDK_VERSION}/toolchains/llvm/prebuilt/linux-x86_64/bin/ $DEP_OPTS" + DOCKER_EXEC "$MAKE_COMMAND" HOST=aarch64-linux-android +fi + if [[ ${USE_MEMORY_SANITIZER} == "true" ]]; then # Use BDB compiled using install_db4.sh script to work around linking issue when using BDB # from depends. See https://github.com/bitcoin/bitcoin/pull/18288#discussion_r433189350 for diff --git a/ci/test/06_script_a.sh b/ci/test/06_script_a.sh index 7986f7665a..a42cd6cee1 100755 --- a/ci/test/06_script_a.sh +++ b/ci/test/06_script_a.sh @@ -6,6 +6,14 @@ export LC_ALL=C.UTF-8 +if [ -n "$ANDROID_TOOLS_URL" ]; then + DOCKER_EXEC make distclean || true + DOCKER_EXEC ./autogen.sh + DOCKER_EXEC ./configure $BITCOIN_CONFIG --prefix=$DEPENDS_DIR/aarch64-linux-android || ( (DOCKER_EXEC cat config.log) && false) + DOCKER_EXEC "cd src/qt && make $MAKEJOBS && ANDROID_HOME=${ANDROID_HOME} ANDROID_NDK_HOME=${ANDROID_NDK_HOME} make apk" + exit 0 +fi + BITCOIN_CONFIG_ALL="--enable-suppress-external-warnings --disable-dependency-tracking --prefix=$DEPENDS_DIR/$HOST --bindir=$BASE_OUTDIR/bin --libdir=$BASE_OUTDIR/lib" if [ -z "$NO_WERROR" ]; then BITCOIN_CONFIG_ALL="${BITCOIN_CONFIG_ALL} --enable-werror" From ba46adaa1abd51798394b5bad3799021adc237d2 Mon Sep 17 00:00:00 2001 From: Igor Cota Date: Tue, 10 Nov 2020 07:57:35 +0100 Subject: [PATCH 3/5] CI: add Android APK build to cirrus --- .cirrus.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.cirrus.yml b/.cirrus.yml index 691582239e..e881e587bf 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -180,3 +180,11 @@ task: CI_USE_APT_INSTALL: "no" PACKAGE_MANAGER_INSTALL: "echo" # Nothing to do FILE_ENV: "./ci/test/00_setup_env_mac_host.sh" + +task: + name: 'ARM64 Android APK [bionic]' + << : *GLOBAL_TASK_TEMPLATE + container: + image: ubuntu:bionic + env: + FILE_ENV: "./ci/test/00_setup_env_android.sh" From 8e7ad4146d55f472e3d1dacaabb6b7dee704a896 Mon Sep 17 00:00:00 2001 From: Igor Cota Date: Sun, 21 Mar 2021 16:48:49 +0100 Subject: [PATCH 4/5] depends: disable Qt Vulkan support on Android --- depends/packages/qt.mk | 1 + 1 file changed, 1 insertion(+) diff --git a/depends/packages/qt.mk b/depends/packages/qt.mk index 0ac6f496c4..100cf3b2e5 100644 --- a/depends/packages/qt.mk +++ b/depends/packages/qt.mk @@ -164,6 +164,7 @@ $(package)_config_opts_android += -no-fontconfig $(package)_config_opts_android += -L $(host_prefix)/lib $(package)_config_opts_android += -I $(host_prefix)/include $(package)_config_opts_android += -pch +$(package)_config_opts_android += -no-feature-vulkan $(package)_config_opts_aarch64_android += -android-arch arm64-v8a $(package)_config_opts_armv7a_android += -android-arch armeabi-v7a From 246774e26459cb3652e308880abdd140e8e9d204 Mon Sep 17 00:00:00 2001 From: Igor Cota Date: Sun, 21 Mar 2021 16:50:25 +0100 Subject: [PATCH 5/5] depends: fix Qt precompiled headers bug Fixed in 5.14, see QTBUG-85214 --- depends/packages/qt.mk | 3 ++- depends/patches/qt/fix_android_pch.patch | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 depends/patches/qt/fix_android_pch.patch diff --git a/depends/packages/qt.mk b/depends/packages/qt.mk index 100cf3b2e5..f853aa0d79 100644 --- a/depends/packages/qt.mk +++ b/depends/packages/qt.mk @@ -9,7 +9,7 @@ $(package)_qt_libs=corelib network widgets gui plugins testlib $(package)_patches=fix_qt_pkgconfig.patch mac-qmake.conf fix_no_printer.patch no-xlib.patch $(package)_patches+= fix_android_qmake_conf.patch fix_android_jni_static.patch dont_hardcode_pwd.patch $(package)_patches+= drop_lrelease_dependency.patch no_sdk_version_check.patch -$(package)_patches+= fix_qpainter_non_determinism.patch fix_lib_paths.patch +$(package)_patches+= fix_qpainter_non_determinism.patch fix_lib_paths.patch fix_android_pch.patch $(package)_qttranslations_file_name=qttranslations-$($(package)_suffix) $(package)_qttranslations_sha256_hash=e1de58ed108b7e0a138815ea60fd46a2c4e1fc31396a707e5630e92de79c53de @@ -224,6 +224,7 @@ define $(package)_preprocess_cmds patch -p1 -i $($(package)_patch_dir)/fix_no_printer.patch && \ patch -p1 -i $($(package)_patch_dir)/fix_android_qmake_conf.patch && \ patch -p1 -i $($(package)_patch_dir)/fix_android_jni_static.patch && \ + patch -p1 -i $($(package)_patch_dir)/fix_android_pch.patch && \ patch -p1 -i $($(package)_patch_dir)/no-xlib.patch && \ patch -p1 -i $($(package)_patch_dir)/fix_qpainter_non_determinism.patch &&\ patch -p1 -i $($(package)_patch_dir)/no_sdk_version_check.patch && \ diff --git a/depends/patches/qt/fix_android_pch.patch b/depends/patches/qt/fix_android_pch.patch new file mode 100644 index 0000000000..bed6e4bb63 --- /dev/null +++ b/depends/patches/qt/fix_android_pch.patch @@ -0,0 +1,10 @@ +--- old/qtbase/mkspecs/common/android-base-head.conf ++++ new/qtbase/mkspecs/common/android-base-head.conf +@@ -73,6 +73,6 @@ CROSS_COMPILE = $$NDK_TOOLCHAIN_PATH/bin/$$NDK_TOOLS_PREFIX- + QMAKE_PCH_OUTPUT_EXT = .gch + + QMAKE_CFLAGS_PRECOMPILE = -x c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT} +-QMAKE_CFLAGS_USE_PRECOMPILE = -include ${QMAKE_PCH_OUTPUT_BASE} ++QMAKE_CFLAGS_USE_PRECOMPILE = -include-pch ${QMAKE_PCH_OUTPUT} + QMAKE_CXXFLAGS_PRECOMPILE = -x c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT} + QMAKE_CXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE