From 5deb0b024e14c7c63d405c651d1ca323560a1c21 Mon Sep 17 00:00:00 2001
From: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com>
Date: Fri, 3 May 2024 10:28:01 +0100
Subject: [PATCH 1/6] build, test, doc: Temporarily remove Android-related
stuff
Previously, our Android builds were geared towards generating APKs,
which relied on Qt. However, after migrating to C++20, compiling for
Android became unfeasible due to Qt 5.15's compatibility limitations
with NDK only up to r25, which includes an outdated embedded libc++.
All removed stuff will be reinstated after migrating the build system to
CMake and upgrading Qt to version 6.x."
---
build-aux/m4/bitcoin_qt.m4 | 28 +---------
ci/test/00_setup_env_android.sh | 25 ---------
ci/test/01_base_install.sh | 10 ----
ci/test/02_run_container.sh | 2 -
ci/test/03_test_script.sh | 9 ---
configure.ac | 17 ------
depends/Makefile | 4 --
depends/README.md | 5 +-
depends/hosts/android.mk | 15 -----
depends/packages/packages.mk | 2 -
depends/packages/qt.mk | 20 -------
.../patches/qt/fix_android_jni_static.patch | 17 ------
doc/README.md | 1 -
doc/build-android.md | 25 ---------
src/Makefile.qt.include | 14 -----
src/qt/android/.gitignore | 7 ---
src/qt/android/AndroidManifest.xml | 39 -------------
src/qt/android/build.gradle | 52 ------------------
src/qt/android/gradle.properties | 4 --
src/qt/android/res/drawable-hdpi/bitcoin.png | Bin 4536 -> 0 bytes
src/qt/android/res/drawable-ldpi/bitcoin.png | Bin 1697 -> 0 bytes
src/qt/android/res/drawable-mdpi/bitcoin.png | Bin 2558 -> 0 bytes
src/qt/android/res/drawable-xhdpi/bitcoin.png | Bin 6832 -> 0 bytes
.../android/res/drawable-xxhdpi/bitcoin.png | Bin 11479 -> 0 bytes
.../android/res/drawable-xxxhdpi/bitcoin.png | Bin 17034 -> 0 bytes
src/qt/android/res/values/libs.xml | 14 -----
.../org/bitcoincore/qt/BitcoinQtActivity.java | 23 --------
27 files changed, 4 insertions(+), 329 deletions(-)
delete mode 100755 ci/test/00_setup_env_android.sh
delete mode 100644 depends/hosts/android.mk
delete mode 100644 depends/patches/qt/fix_android_jni_static.patch
delete mode 100644 doc/build-android.md
delete mode 100644 src/qt/android/.gitignore
delete mode 100644 src/qt/android/AndroidManifest.xml
delete mode 100644 src/qt/android/build.gradle
delete mode 100644 src/qt/android/gradle.properties
delete mode 100644 src/qt/android/res/drawable-hdpi/bitcoin.png
delete mode 100644 src/qt/android/res/drawable-ldpi/bitcoin.png
delete mode 100644 src/qt/android/res/drawable-mdpi/bitcoin.png
delete mode 100644 src/qt/android/res/drawable-xhdpi/bitcoin.png
delete mode 100644 src/qt/android/res/drawable-xxhdpi/bitcoin.png
delete mode 100644 src/qt/android/res/drawable-xxxhdpi/bitcoin.png
delete mode 100644 src/qt/android/res/values/libs.xml
delete mode 100644 src/qt/android/src/org/bitcoincore/qt/BitcoinQtActivity.java
diff --git a/build-aux/m4/bitcoin_qt.m4 b/build-aux/m4/bitcoin_qt.m4
index a716cd9a27795..c6276e56b51ee 100644
--- a/build-aux/m4/bitcoin_qt.m4
+++ b/build-aux/m4/bitcoin_qt.m4
@@ -70,8 +70,6 @@ AC_DEFUN([BITCOIN_QT_INIT],[
[qt_lib_suffix= ]); bitcoin_qt_want_version=qt5],
[qt_lib_suffix= ])
- AS_CASE([$host], [*android*], [qt_lib_suffix=_$ANDROID_ARCH])
-
AC_ARG_WITH([qt-incdir],[AS_HELP_STRING([--with-qt-incdir=INC_DIR],[specify qt include path (overridden by pkgconfig)])], [qt_include_path=$withval], [])
AC_ARG_WITH([qt-libdir],[AS_HELP_STRING([--with-qt-libdir=LIB_DIR],[specify qt lib path (overridden by pkgconfig)])], [qt_lib_path=$withval], [])
AC_ARG_WITH([qt-plugindir],[AS_HELP_STRING([--with-qt-plugindir=PLUGIN_DIR],[specify qt plugin path (overridden by pkgconfig)])], [qt_plugin_path=$withval], [])
@@ -80,19 +78,10 @@ AC_DEFUN([BITCOIN_QT_INIT],[
AC_ARG_WITH([qtdbus],
[AS_HELP_STRING([--with-qtdbus],
- [enable DBus support (default is yes if qt is enabled and QtDBus is found, except on Android)])],
+ [enable DBus support (default is yes if qt is enabled and QtDBus is found)])],
[use_dbus=$withval],
[use_dbus=auto])
- dnl Android doesn't support D-Bus and certainly doesn't use it for notifications
- case $host in
- *android*)
- if test "$use_dbus" != "yes"; then
- use_dbus=no
- fi
- ;;
- esac
-
AC_SUBST(QT_TRANSLATION_DIR,$qt_translation_path)
])
@@ -132,16 +121,11 @@ AC_DEFUN([BITCOIN_QT_CONFIGURE],[
if test -d "$qt_plugin_path/accessible"; then
QT_LIBS="$QT_LIBS -L$qt_plugin_path/accessible"
fi
- if test -d "$qt_plugin_path/platforms/android"; then
- QT_LIBS="$QT_LIBS -L$qt_plugin_path/platforms/android -lqtfreetype -lEGL"
- fi
fi
AC_DEFINE([QT_STATICPLUGIN], [1], [Define this symbol if qt plugins are static])
- if test "$TARGET_OS" != "android"; then
- _BITCOIN_QT_CHECK_STATIC_PLUGIN([QMinimalIntegrationPlugin], [-lqminimal])
- AC_DEFINE([QT_QPA_PLATFORM_MINIMAL], [1], [Define this symbol if the minimal qt platform exists])
- fi
+ _BITCOIN_QT_CHECK_STATIC_PLUGIN([QMinimalIntegrationPlugin], [-lqminimal])
+ AC_DEFINE([QT_QPA_PLATFORM_MINIMAL], [1], [Define this symbol if the minimal qt platform exists])
if test "$TARGET_OS" = "windows"; then
dnl Linking against wtsapi32 is required. See #17749 and
dnl https://bugreports.qt.io/browse/QTBUG-27097.
@@ -160,9 +144,6 @@ AC_DEFUN([BITCOIN_QT_CONFIGURE],[
_BITCOIN_QT_CHECK_STATIC_PLUGIN([QCocoaIntegrationPlugin], [-lqcocoa])
_BITCOIN_QT_CHECK_STATIC_PLUGIN([QMacStylePlugin], [-lqmacstyle])
AC_DEFINE([QT_QPA_PLATFORM_COCOA], [1], [Define this symbol if the qt platform is cocoa])
- elif test "$TARGET_OS" = "android"; then
- QT_LIBS="-Wl,--export-dynamic,--undefined=JNI_OnLoad -lplugins_platforms_qtforandroid${qt_lib_suffix} -ljnigraphics -landroid -lqtfreetype${qt_lib_suffix} $QT_LIBS"
- AC_DEFINE([QT_QPA_PLATFORM_ANDROID], [1], [Define this symbol if the qt platform is android])
fi
fi
CPPFLAGS=$TEMP_CPPFLAGS
@@ -357,9 +338,6 @@ AC_DEFUN([_BITCOIN_QT_CHECK_STATIC_LIBS], [
PKG_CHECK_MODULES([QT_SERVICE], [${qt_lib_prefix}ServiceSupport${qt_lib_suffix}], [QT_LIBS="$QT_SERVICE_LIBS $QT_LIBS"])
elif test "$TARGET_OS" = "windows"; then
PKG_CHECK_MODULES([QT_WINDOWSUIAUTOMATION], [${qt_lib_prefix}WindowsUIAutomationSupport${qt_lib_suffix}], [QT_LIBS="$QT_WINDOWSUIAUTOMATION_LIBS $QT_LIBS"])
- elif test "$TARGET_OS" = "android"; then
- PKG_CHECK_MODULES([QT_EGL], [${qt_lib_prefix}EglSupport${qt_lib_suffix}], [QT_LIBS="$QT_EGL_LIBS $QT_LIBS"])
- PKG_CHECK_MODULES([QT_SERVICE], [${qt_lib_prefix}ServiceSupport${qt_lib_suffix}], [QT_LIBS="$QT_SERVICE_LIBS $QT_LIBS"])
fi
])
diff --git a/ci/test/00_setup_env_android.sh b/ci/test/00_setup_env_android.sh
deleted file mode 100755
index 97a6bd73181a4..0000000000000
--- a/ci/test/00_setup_env_android.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/usr/bin/env bash
-#
-# Copyright (c) 2019-present 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 HOST=aarch64-linux-android
-export PACKAGES="unzip openjdk-8-jdk gradle"
-export CONTAINER_NAME=ci_android
-export CI_IMAGE_NAME_TAG="docker.io/amd64/ubuntu:22.04"
-
-export RUN_UNIT_TESTS=false
-export RUN_FUNCTIONAL_TESTS=false
-
-export ANDROID_API_LEVEL=28
-export ANDROID_BUILD_TOOLS_VERSION=28.0.3
-export ANDROID_NDK_VERSION=23.2.8568313
-export ANDROID_TOOLS_URL=https://dl.google.com/android/repository/commandlinetools-linux-8512546_latest.zip
-export ANDROID_HOME="${DEPENDS_DIR}/SDKs/android"
-export ANDROID_NDK_HOME="${ANDROID_HOME}/ndk/${ANDROID_NDK_VERSION}"
-export DEP_OPTS="ANDROID_SDK=${ANDROID_HOME} ANDROID_NDK=${ANDROID_NDK_HOME} ANDROID_API_LEVEL=${ANDROID_API_LEVEL} ANDROID_TOOLCHAIN_BIN=${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/"
-
-export BITCOIN_CONFIG="--disable-tests --enable-gui-tests --disable-bench --disable-fuzz-binary --without-utils --without-libs --without-daemon"
diff --git a/ci/test/01_base_install.sh b/ci/test/01_base_install.sh
index 25962a53e5c19..f16321ba55fb5 100755
--- a/ci/test/01_base_install.sh
+++ b/ci/test/01_base_install.sh
@@ -86,14 +86,4 @@ if [ -n "$XCODE_VERSION" ] && [ ! -d "${DEPENDS_DIR}/SDKs/${OSX_SDK_BASENAME}" ]
tar -C "${DEPENDS_DIR}/SDKs" -xf "$OSX_SDK_PATH"
fi
-if [ -n "$ANDROID_HOME" ] && [ ! -d "$ANDROID_HOME" ]; then
- ANDROID_TOOLS_PATH=${DEPENDS_DIR}/sdk-sources/android-tools.zip
- if [ ! -f "$ANDROID_TOOLS_PATH" ]; then
- ${CI_RETRY_EXE} curl --location --fail "${ANDROID_TOOLS_URL}" -o "$ANDROID_TOOLS_PATH"
- fi
- mkdir -p "$ANDROID_HOME"
- unzip -o "$ANDROID_TOOLS_PATH" -d "$ANDROID_HOME"
- yes | "${ANDROID_HOME}"/cmdline-tools/bin/sdkmanager --sdk_root="${ANDROID_HOME}" --install "build-tools;${ANDROID_BUILD_TOOLS_VERSION}" "platform-tools" "platforms;android-31" "platforms;android-${ANDROID_API_LEVEL}" "ndk;${ANDROID_NDK_VERSION}"
-fi
-
git config --global ${CFG_DONE} "true"
diff --git a/ci/test/02_run_container.sh b/ci/test/02_run_container.sh
index e6c4a613417f2..86bb856d17ba0 100755
--- a/ci/test/02_run_container.sh
+++ b/ci/test/02_run_container.sh
@@ -26,7 +26,6 @@ if [ -z "$DANGER_RUN_CI_ON_HOST" ]; then
docker volume create "${CONTAINER_NAME}_ccache" || true
docker volume create "${CONTAINER_NAME}_depends" || true
docker volume create "${CONTAINER_NAME}_depends_sources" || true
- docker volume create "${CONTAINER_NAME}_depends_SDKs_android" || true
docker volume create "${CONTAINER_NAME}_previous_releases" || true
if [ -n "${RESTART_CI_DOCKER_BEFORE_RUN}" ] ; then
@@ -52,7 +51,6 @@ if [ -z "$DANGER_RUN_CI_ON_HOST" ]; then
--mount "type=volume,src=${CONTAINER_NAME}_ccache,dst=$CCACHE_DIR" \
--mount "type=volume,src=${CONTAINER_NAME}_depends,dst=$DEPENDS_DIR/built" \
--mount "type=volume,src=${CONTAINER_NAME}_depends_sources,dst=$DEPENDS_DIR/sources" \
- --mount "type=volume,src=${CONTAINER_NAME}_depends_SDKs_android,dst=$DEPENDS_DIR/SDKs/android" \
--mount "type=volume,src=${CONTAINER_NAME}_previous_releases,dst=$PREVIOUS_RELEASES_DIR" \
--env-file /tmp/env-$USER-$CONTAINER_NAME \
--name "$CONTAINER_NAME" \
diff --git a/ci/test/03_test_script.sh b/ci/test/03_test_script.sh
index f5da7bc55d3a7..71d9ad7f72f5e 100755
--- a/ci/test/03_test_script.sh
+++ b/ci/test/03_test_script.sh
@@ -110,15 +110,6 @@ fi
ccache --zero-stats
PRINT_CCACHE_STATISTICS="ccache --version | head -n 1 && ccache --show-stats"
-if [ -n "$ANDROID_TOOLS_URL" ]; then
- make distclean || true
- ./autogen.sh
- bash -c "./configure $BITCOIN_CONFIG_ALL $BITCOIN_CONFIG" || ( (cat config.log) && false)
- make "${MAKEJOBS}" && cd src/qt && ANDROID_HOME=${ANDROID_HOME} ANDROID_NDK_HOME=${ANDROID_NDK_HOME} make apk
- bash -c "${PRINT_CCACHE_STATISTICS}"
- exit 0
-fi
-
BITCOIN_CONFIG_ALL="${BITCOIN_CONFIG_ALL} --enable-external-signer --prefix=$BASE_OUTDIR"
if [ -n "$CONFIG_SHELL" ]; then
diff --git a/configure.ac b/configure.ac
index ee4400f21aa70..c0ab6a2fd4370 100644
--- a/configure.ac
+++ b/configure.ac
@@ -778,22 +778,6 @@ case $host in
dnl "'NSUserNotificationCenter' is deprecated: first deprecated in macOS 11.0".
OBJCXXFLAGS="$CXXFLAGS -Wno-deprecated-declarations"
;;
- *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
- ;;
- *) AC_MSG_ERROR([Could not determine Android arch, or it is unsupported]) ;;
- esac
- ;;
*linux*)
TARGET_OS=linux
;;
@@ -1789,7 +1773,6 @@ AC_SUBST(HAVE_O_CLOEXEC)
AC_SUBST(HAVE_BUILTIN_PREFETCH)
AC_SUBST(HAVE_MM_PREFETCH)
AC_SUBST(HAVE_STRONG_GETAUXVAL)
-AC_SUBST(ANDROID_ARCH)
AC_SUBST(HAVE_EVHTTP_CONNECTION_GET_PEER_CONST_CHAR)
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])
diff --git a/depends/Makefile b/depends/Makefile
index 005d9696fb565..b24aa91181ab6 100644
--- a/depends/Makefile
+++ b/depends/Makefile
@@ -101,10 +101,6 @@ host_os+=$(findstring netbsd,$(full_host_os))
host_os+=$(findstring openbsd,$(full_host_os))
host_os+=$(findstring mingw32,$(full_host_os))
-ifeq (android,$(findstring android,$(full_host_os)))
-host_os:=android
-endif
-
host_os:=$(strip $(host_os))
ifeq ($(host_os),)
host_os=$(full_host_os)
diff --git a/depends/README.md b/depends/README.md
index 10e0985cf48f2..17def65d3e632 100644
--- a/depends/README.md
+++ b/depends/README.md
@@ -38,11 +38,8 @@ Common `host-platform-triplet`s for cross compilation are:
- `riscv32-linux-gnu` for Linux RISC-V 32 bit
- `riscv64-linux-gnu` for Linux RISC-V 64 bit
- `s390x-linux-gnu` for Linux S390X
-- `armv7a-linux-android` for Android ARM 32 bit
-- `aarch64-linux-android` for Android ARM 64 bit
-- `x86_64-linux-android` for Android x86 64 bit
-The paths are automatically configured and no other options are needed unless targeting [Android](../doc/build-android.md).
+The paths are automatically configured and no other options are needed.
### Install the required dependencies: Ubuntu & Debian
diff --git a/depends/hosts/android.mk b/depends/hosts/android.mk
deleted file mode 100644
index a1c8c56dbafa1..0000000000000
--- a/depends/hosts/android.mk
+++ /dev/null
@@ -1,15 +0,0 @@
-ifeq ($(HOST),armv7a-linux-android)
-android_CXX=$(ANDROID_TOOLCHAIN_BIN)/$(HOST)eabi$(ANDROID_API_LEVEL)-clang++
-android_CC=$(ANDROID_TOOLCHAIN_BIN)/$(HOST)eabi$(ANDROID_API_LEVEL)-clang
-else
-android_CXX=$(ANDROID_TOOLCHAIN_BIN)/$(HOST)$(ANDROID_API_LEVEL)-clang++
-android_CC=$(ANDROID_TOOLCHAIN_BIN)/$(HOST)$(ANDROID_API_LEVEL)-clang
-endif
-
-android_CFLAGS=-std=$(C_STANDARD)
-android_CXXFLAGS=-std=$(CXX_STANDARD)
-
-android_AR=$(ANDROID_TOOLCHAIN_BIN)/llvm-ar
-android_RANLIB=$(ANDROID_TOOLCHAIN_BIN)/llvm-ranlib
-
-android_cmake_system=Android
diff --git a/depends/packages/packages.mk b/depends/packages/packages.mk
index fb52fd4499725..5cf0852ffef42 100644
--- a/depends/packages/packages.mk
+++ b/depends/packages/packages.mk
@@ -5,12 +5,10 @@ boost_packages = boost
libevent_packages = libevent
qrencode_linux_packages = qrencode
-qrencode_android_packages = qrencode
qrencode_darwin_packages = qrencode
qrencode_mingw32_packages = qrencode
qt_linux_packages:=qt expat libxcb xcb_proto libXau xproto freetype fontconfig libxkbcommon libxcb_util libxcb_util_render libxcb_util_keysyms libxcb_util_image libxcb_util_wm
-qt_android_packages=qt
qt_darwin_packages=qt
qt_mingw32_packages=qt
diff --git a/depends/packages/qt.mk b/depends/packages/qt.mk
index d057b2d410a18..d8e6aba8a6337 100644
--- a/depends/packages/qt.mk
+++ b/depends/packages/qt.mk
@@ -12,7 +12,6 @@ $(package)_patches += qttools_src.pro
$(package)_patches += mac-qmake.conf
$(package)_patches += fix_qt_pkgconfig.patch
$(package)_patches += no-xlib.patch
-$(package)_patches += fix_android_jni_static.patch
$(package)_patches += dont_hardcode_pwd.patch
$(package)_patches += qtbase-moc-ignore-gcc-macro.patch
$(package)_patches += rcc_hardcode_timestamp.patch
@@ -185,24 +184,6 @@ $(package)_config_opts_mingw32 += -pch
ifneq ($(LTO),)
$(package)_config_opts_mingw32 += -ltcg
endif
-
-$(package)_config_opts_android = -xplatform android-clang
-$(package)_config_opts_android += -android-sdk $(ANDROID_SDK)
-$(package)_config_opts_android += -android-ndk $(ANDROID_NDK)
-$(package)_config_opts_android += -android-ndk-platform android-$(ANDROID_API_LEVEL)
-$(package)_config_opts_android += -egl
-$(package)_config_opts_android += -no-dbus
-$(package)_config_opts_android += -opengl es2
-$(package)_config_opts_android += -qt-freetype
-$(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
-$(package)_config_opts_x86_64_android += -android-arch x86_64
endef
define $(package)_fetch_cmds
@@ -243,7 +224,6 @@ define $(package)_preprocess_cmds
patch -p1 -i $($(package)_patch_dir)/fix-macos-linker.patch && \
patch -p1 -i $($(package)_patch_dir)/dont_hardcode_pwd.patch && \
patch -p1 -i $($(package)_patch_dir)/fix_qt_pkgconfig.patch && \
- patch -p1 -i $($(package)_patch_dir)/fix_android_jni_static.patch && \
patch -p1 -i $($(package)_patch_dir)/no-xlib.patch && \
patch -p1 -i $($(package)_patch_dir)/qtbase-moc-ignore-gcc-macro.patch && \
patch -p1 -i $($(package)_patch_dir)/memory_resource.patch && \
diff --git a/depends/patches/qt/fix_android_jni_static.patch b/depends/patches/qt/fix_android_jni_static.patch
deleted file mode 100644
index 79824f244aa5f..0000000000000
--- a/depends/patches/qt/fix_android_jni_static.patch
+++ /dev/null
@@ -1,17 +0,0 @@
---- old/qtbase/src/plugins/platforms/android/androidjnimain.cpp
-+++ new/qtbase/src/plugins/platforms/android/androidjnimain.cpp
-@@ -979,6 +979,14 @@ Q_DECL_EXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void */*reserved*/)
- __android_log_print(ANDROID_LOG_FATAL, "Qt", "registerNatives failed");
- return -1;
- }
-+
-+ const jint ret = QT_PREPEND_NAMESPACE(QtAndroidPrivate::initJNI(vm, env));
-+ if (ret != 0)
-+ {
-+ __android_log_print(ANDROID_LOG_FATAL, "Qt", "initJNI failed");
-+ return ret;
-+ }
-+
- QWindowSystemInterfacePrivate::TabletEvent::setPlatformSynthesizesMouse(false);
-
- m_javaVM = vm;
diff --git a/doc/README.md b/doc/README.md
index 7b6dacaf4f704..74a85b04e62dc 100644
--- a/doc/README.md
+++ b/doc/README.md
@@ -45,7 +45,6 @@ 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)
Development
---------------------
diff --git a/doc/build-android.md b/doc/build-android.md
deleted file mode 100644
index 2f2e01c441dc9..0000000000000
--- a/doc/build-android.md
+++ /dev/null
@@ -1,25 +0,0 @@
-ANDROID BUILD NOTES
-======================
-
-This guide describes how to build and package the `bitcoin-qt` GUI for Android on Linux and macOS.
-
-
-## Dependencies
-
-Before proceeding with an Android build one needs to get the [Android SDK](https://developer.android.com/studio) and use the "SDK Manager" tool to download the NDK and one or more "Platform packages" (these are Android versions and have a corresponding API level).
-
-The minimum supported Android NDK version is [r23](https://github.com/android/ndk/wiki/Changelog-r23).
-
-In order to build `ANDROID_API_LEVEL` (API level corresponding to the Android version targeted, e.g. Android 9.0 Pie is 28 and its "Platform package" needs to be available) and `ANDROID_TOOLCHAIN_BIN` (path to toolchain binaries depending on the platform the build is being performed on) need to be set.
-
-API levels from 24 to 29 have been tested to work.
-
-If the build includes Qt, environment variables `ANDROID_SDK` and `ANDROID_NDK` need to be set as well but can otherwise be omitted.
-This is an example command for a default build with no disabled dependencies:
-
- ANDROID_SDK=/home/user/Android/Sdk ANDROID_NDK=/home/user/Android/Sdk/ndk-bundle make HOST=aarch64-linux-android ANDROID_API_LEVEL=28 ANDROID_TOOLCHAIN_BIN=/home/user/Android/Sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin
-
-
-## 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 c235c3c4da732..1ac6b74688907 100644
--- a/src/Makefile.qt.include
+++ b/src/Makefile.qt.include
@@ -392,20 +392,6 @@ bitcoin_qt_clean: FORCE
bitcoin_qt : qt/bitcoin-qt$(EXEEXT)
-APK_LIB_DIR = qt/android/libs/$(ANDROID_ARCH)
-QT_BASE_VERSION = $(lastword $(shell $(MOC) --version))
-QT_BASE_PATH = $(shell find ../depends/sources/ -maxdepth 1 -type f -regex ".*qtbase.*$(QT_BASE_VERSION)\.tar.xz")
-QT_BASE_TLD = $(shell tar tf $(QT_BASE_PATH) --exclude='*/*')
-
-bitcoin_qt_apk: FORCE
- mkdir -p $(APK_LIB_DIR)
- cp $(dir $(lastword $(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
- cp qt/bitcoin-qt $(APK_LIB_DIR)/libbitcoin-qt_$(ANDROID_ARCH).so
- cd qt/android && gradle wrapper --gradle-version=6.6.1
- cd qt/android && ./gradlew build
-
ui_%.h: %.ui
@test -f $(UIC) || (echo "uic $(UIC) not found, but is required for generating ui headers"; exit 1)
@$(MKDIR_P) $(@D)
diff --git a/src/qt/android/.gitignore b/src/qt/android/.gitignore
deleted file mode 100644
index c090a2e98ea8d..0000000000000
--- a/src/qt/android/.gitignore
+++ /dev/null
@@ -1,7 +0,0 @@
-/.gradle
-/build
-/gradle
-/gradlew*
-/libs
-/src/org/kde
-/src/org/qtproject
diff --git a/src/qt/android/AndroidManifest.xml b/src/qt/android/AndroidManifest.xml
deleted file mode 100644
index 41615294e0917..0000000000000
--- a/src/qt/android/AndroidManifest.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/qt/android/build.gradle b/src/qt/android/build.gradle
deleted file mode 100644
index 4c36e79db8fb4..0000000000000
--- a/src/qt/android/build.gradle
+++ /dev/null
@@ -1,52 +0,0 @@
-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
deleted file mode 100644
index 468f4757c0006..0000000000000
--- a/src/qt/android/gradle.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-androidBuildToolsVersion=30.0.3
-androidCompileSdkVersion=30
-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
deleted file mode 100644
index 31a556a35f2a473413020c6f15b39868c0022d5d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 4536
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
WSA+d%omJ
diff --git a/src/qt/android/res/drawable-ldpi/bitcoin.png b/src/qt/android/res/drawable-ldpi/bitcoin.png
deleted file mode 100644
index 76d80d4196cf16cdd31ecee944991a710c28d624..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
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
diff --git a/src/qt/android/res/drawable-xhdpi/bitcoin.png b/src/qt/android/res/drawable-xhdpi/bitcoin.png
deleted file mode 100644
index 2bd5e3defc7526329523249a740fbe5e8f6c5ec5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 6832
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
diff --git a/src/qt/android/res/drawable-xxxhdpi/bitcoin.png b/src/qt/android/res/drawable-xxxhdpi/bitcoin.png
deleted file mode 100644
index bb1dbc355469143ae525d98b8f7080d2daaf5d38..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 17034
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
i000000001hk8%Ud&_}x^!=eQM0000
-
-
- -
- arm64-v8a;libbitcoin-qt_arm64-v8a.so
-
- -
- armeabi-v7a;libbitcoin-qt_armeabi-v7a.so
-
- -
- x86_64;libbitcoin-qt_x86_64.so
-
-
-
diff --git a/src/qt/android/src/org/bitcoincore/qt/BitcoinQtActivity.java b/src/qt/android/src/org/bitcoincore/qt/BitcoinQtActivity.java
deleted file mode 100644
index 2cba489242518..0000000000000
--- a/src/qt/android/src/org/bitcoincore/qt/BitcoinQtActivity.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.bitcoincore.qt;
-
-import android.os.Bundle;
-import android.system.ErrnoException;
-import android.system.Os;
-
-import org.qtproject.qt5.android.bindings.QtActivity;
-
-import java.io.File;
-
-public class BitcoinQtActivity extends QtActivity
-{
- @Override
- public void onCreate(Bundle savedInstanceState)
- {
- final File bitcoinDir = new File(getFilesDir().getAbsolutePath() + "/.bitcoin");
- if (!bitcoinDir.exists()) {
- bitcoinDir.mkdir();
- }
-
- super.onCreate(savedInstanceState);
- }
-}
From 4b7d9842691046b01f0c08d69f924ddb62ccc4c6 Mon Sep 17 00:00:00 2001
From: willcl-ark
Date: Tue, 7 May 2024 15:37:31 +0100
Subject: [PATCH 2/6] lint: add markdown hyperlink checker
This adds a markdown hyperlink check task to the lint test_runner. It
relies on having the [`mlc`](https://crates.io/crates/mlc) binary found
on $PATH, but will fail with `success` if the binary is not found.
`mlc` is also added to the ci/04_install.sh script run by the
containerfile.
Note that broken markdown hyperlinks will be detected in untracked
markdown files found in a dirty working directory (including e.g.
.venv).
---
ci/lint/04_install.sh | 5 ++++
test/lint/README.md | 1 +
test/lint/test_runner/src/main.rs | 50 +++++++++++++++++++++++++++++--
3 files changed, 54 insertions(+), 2 deletions(-)
diff --git a/ci/lint/04_install.sh b/ci/lint/04_install.sh
index 6b12c53f2ad84..87e3a8fa9b110 100755
--- a/ci/lint/04_install.sh
+++ b/ci/lint/04_install.sh
@@ -57,3 +57,8 @@ SHELLCHECK_VERSION=v0.8.0
curl -sL "https://github.com/koalaman/shellcheck/releases/download/${SHELLCHECK_VERSION}/shellcheck-${SHELLCHECK_VERSION}.linux.x86_64.tar.xz" | \
tar --xz -xf - --directory /tmp/
mv "/tmp/shellcheck-${SHELLCHECK_VERSION}/shellcheck" /usr/bin/
+
+MLC_VERSION=v0.16.3
+MLC_BIN=mlc-x86_64-linux
+curl -sL "https://github.com/becheran/mlc/releases/download/${MLC_VERSION}/${MLC_BIN}" -o "/usr/bin/mlc"
+chmod +x /usr/bin/mlc
diff --git a/test/lint/README.md b/test/lint/README.md
index 13c2099808b90..49ed8356c30ca 100644
--- a/test/lint/README.md
+++ b/test/lint/README.md
@@ -37,6 +37,7 @@ Then you can use:
| [`lint-python-dead-code.py`](/test/lint/lint-python-dead-code.py) | [vulture](https://github.com/jendrikseipp/vulture)
| [`lint-shell.py`](/test/lint/lint-shell.py) | [ShellCheck](https://github.com/koalaman/shellcheck)
| [`lint-spelling.py`](/test/lint/lint-spelling.py) | [codespell](https://github.com/codespell-project/codespell)
+| markdown link check | [mlc](https://github.com/becheran/mlc)
In use versions and install instructions are available in the [CI setup](../../ci/lint/04_install.sh).
diff --git a/test/lint/test_runner/src/main.rs b/test/lint/test_runner/src/main.rs
index d5dd98effe2b7..5f980eb3989a0 100644
--- a/test/lint/test_runner/src/main.rs
+++ b/test/lint/test_runner/src/main.rs
@@ -4,9 +4,9 @@
use std::env;
use std::fs;
+use std::io::ErrorKind;
use std::path::{Path, PathBuf};
-use std::process::Command;
-use std::process::ExitCode;
+use std::process::{Command, ExitCode, Stdio};
type LintError = String;
type LintResult = Result<(), LintError>;
@@ -292,6 +292,51 @@ fn lint_doc() -> LintResult {
}
}
+fn lint_markdown() -> LintResult {
+ let bin_name = "mlc";
+ let mut md_ignore_paths = get_subtrees();
+ md_ignore_paths.push("./doc/README_doxygen.md");
+ let md_ignore_path_str = md_ignore_paths.join(",");
+
+ let mut cmd = Command::new(bin_name);
+ cmd.args([
+ "--offline",
+ "--ignore-path",
+ md_ignore_path_str.as_str(),
+ "--root-dir",
+ ".",
+ ])
+ .stdout(Stdio::null()); // Suppress overly-verbose output
+
+ match cmd.output() {
+ Ok(output) if output.status.success() => Ok(()),
+ Ok(output) => {
+ let stderr = String::from_utf8_lossy(&output.stderr);
+ let filtered_stderr: String = stderr // Filter out this annoying trailing line
+ .lines()
+ .filter(|&line| line != "The following links could not be resolved:")
+ .collect::>()
+ .join("\n");
+ Err(format!(
+ r#"
+One or more markdown links are broken.
+
+Relative links are preferred (but not required) as jumping to file works natively within Emacs.
+
+Markdown link errors found:
+{}
+ "#,
+ filtered_stderr
+ ))
+ }
+ Err(e) if e.kind() == ErrorKind::NotFound => {
+ println!("`mlc` was not found in $PATH, skipping markdown lint check.");
+ Ok(())
+ }
+ Err(e) => Err(format!("Error running mlc: {}", e)), // Misc errors
+ }
+}
+
fn lint_all() -> LintResult {
let mut good = true;
let lint_dir = get_git_root().join("test/lint");
@@ -325,6 +370,7 @@ fn main() -> ExitCode {
("no-tabs check", lint_tabs_whitespace),
("build config includes check", lint_includes_build_config),
("-help=1 documentation check", lint_doc),
+ ("markdown hyperlink check", lint_markdown),
("lint-*.py scripts", lint_all),
];
From b018bd779dd9b2d46c10254a1cf5b819ae8e027c Mon Sep 17 00:00:00 2001
From: fanquake
Date: Thu, 30 May 2024 09:29:11 +0100
Subject: [PATCH 3/6] depends: qt 5.15.14
---
depends/packages/qt.mk | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/depends/packages/qt.mk b/depends/packages/qt.mk
index 146e895c5a943..2dba1b41ae2bf 100644
--- a/depends/packages/qt.mk
+++ b/depends/packages/qt.mk
@@ -1,9 +1,9 @@
package=qt
-$(package)_version=5.15.13
+$(package)_version=5.15.14
$(package)_download_path=https://download.qt.io/official_releases/qt/5.15/$($(package)_version)/submodules
$(package)_suffix=everywhere-opensource-src-$($(package)_version).tar.xz
$(package)_file_name=qtbase-$($(package)_suffix)
-$(package)_sha256_hash=4cca51dcc1f22ceeee6b3e33cd1c3a60b14e85e24644dca3af89a2c2989ab809
+$(package)_sha256_hash=500d3b390048e9538c28b5f523dfea6936f9c2e10d24ab46580ff57d430b98be
$(package)_linux_dependencies=freetype fontconfig libxcb libxkbcommon libxcb_util libxcb_util_render libxcb_util_keysyms libxcb_util_image libxcb_util_wm
$(package)_qt_libs=corelib network widgets gui plugins testlib
$(package)_linguist_tools = lrelease lupdate lconvert
@@ -25,10 +25,10 @@ $(package)_patches += windows_lto.patch
$(package)_patches += zlib-timebits64.patch
$(package)_qttranslations_file_name=qttranslations-$($(package)_suffix)
-$(package)_qttranslations_sha256_hash=24d4c58bc2a40c0f44f59ee64af4192c7d0038c1e45af61646cfc5b65058f271
+$(package)_qttranslations_sha256_hash=5b94d1a11b566908622fcca2f8b799744d2f8a68da20be4caa5953ed63b10489
$(package)_qttools_file_name=qttools-$($(package)_suffix)
-$(package)_qttools_sha256_hash=57c9794c572c4e02871f2e7581525752b0cf85ea16cfab23a4ac9ba7b39a5d34
+$(package)_qttools_sha256_hash=12061a85baf5f4de8fbc795e1d3872b706f340211b9e70962caeffc6f5e89563
$(package)_extra_sources = $($(package)_qttranslations_file_name)
$(package)_extra_sources += $($(package)_qttools_file_name)
From 88cdb5967f093cf96e9184a48c0d9e34cea9d341 Mon Sep 17 00:00:00 2001
From: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com>
Date: Thu, 30 May 2024 11:33:59 +0100
Subject: [PATCH 4/6] clang-tidy: Add `bugprone-move-forwarding-reference`
check
---
src/.clang-tidy | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/.clang-tidy b/src/.clang-tidy
index a00400f0834e8..61adce1d5066d 100644
--- a/src/.clang-tidy
+++ b/src/.clang-tidy
@@ -2,6 +2,7 @@ Checks: '
-*,
bitcoin-*,
bugprone-argument-comment,
+bugprone-move-forwarding-reference,
bugprone-string-constructor,
bugprone-use-after-move,
bugprone-lambda-function-name,
From 0a3631fc352eda849290db940844e5ef723436df Mon Sep 17 00:00:00 2001
From: fanquake
Date: Thu, 2 May 2024 16:45:03 +0800
Subject: [PATCH 5/6] depends: fix Qt macOS build with Clang 18
Patch Qts internal libpng to resolve the failure.
I would like to have this patched, so we can continue working on the
removal of `FORCE_USE_SYSTEM_CLANG`. Otherwise builds will be broken using
the default clang (18) on the current Ubuntu LTS (24.04).
---
depends/packages/qt.mk | 2 ++
depends/patches/qt/clang_18_libpng.patch | 40 ++++++++++++++++++++++++
2 files changed, 42 insertions(+)
create mode 100644 depends/patches/qt/clang_18_libpng.patch
diff --git a/depends/packages/qt.mk b/depends/packages/qt.mk
index 2dba1b41ae2bf..d35139dd2de3e 100644
--- a/depends/packages/qt.mk
+++ b/depends/packages/qt.mk
@@ -20,6 +20,7 @@ $(package)_patches += duplicate_lcqpafonts.patch
$(package)_patches += guix_cross_lib_path.patch
$(package)_patches += fix-macos-linker.patch
$(package)_patches += memory_resource.patch
+$(package)_patches += clang_18_libpng.patch
$(package)_patches += utc_from_string_no_optimize.patch
$(package)_patches += windows_lto.patch
$(package)_patches += zlib-timebits64.patch
@@ -229,6 +230,7 @@ define $(package)_preprocess_cmds
patch -p1 -i $($(package)_patch_dir)/qtbase-moc-ignore-gcc-macro.patch && \
patch -p1 -i $($(package)_patch_dir)/memory_resource.patch && \
patch -p1 -i $($(package)_patch_dir)/no_warnings_for_symbols.patch && \
+ patch -p1 -i $($(package)_patch_dir)/clang_18_libpng.patch && \
patch -p1 -i $($(package)_patch_dir)/rcc_hardcode_timestamp.patch && \
patch -p1 -i $($(package)_patch_dir)/duplicate_lcqpafonts.patch && \
patch -p1 -i $($(package)_patch_dir)/utc_from_string_no_optimize.patch && \
diff --git a/depends/patches/qt/clang_18_libpng.patch b/depends/patches/qt/clang_18_libpng.patch
new file mode 100644
index 0000000000000..e807905b321a5
--- /dev/null
+++ b/depends/patches/qt/clang_18_libpng.patch
@@ -0,0 +1,40 @@
+fix Qt macOS build with Clang 18
+
+ See:
+ https://github.com/pnggroup/libpng/commit/893b8113f04d408cc6177c6de19c9889a48faa24.
+
+ In a similar manner as zlib (madler/zlib#895),
+ libpng contains a header configuration that's no longer valid and
+ hasn't been exercised for the macOS target.
+
+ - The target OS conditional macros are misused. Specifically
+ `TARGET_OS_MAC` covers all Apple targets, including iOS, and it
+ should not be checked with `#if defined` as they would always be
+ defined (to either 1 or 0) on Apple platforms.
+ - `#include ` no longer works for the macOS target and results
+ in a compilation failure. macOS ships all required functions in
+ `math.h`, and clients should use `math.h` instead.
+
+--- a/qtbase/src/3rdparty/libpng/pngpriv.h
++++ b/qtbase/src/3rdparty/libpng/pngpriv.h
+@@ -514,18 +514,8 @@
+ */
+ # include
+
+-# if (defined(__MWERKS__) && defined(macintosh)) || defined(applec) || \
+- defined(THINK_C) || defined(__SC__) || defined(TARGET_OS_MAC)
+- /* We need to check that hasn't already been included earlier
+- * as it seems it doesn't agree with , yet we should really use
+- * if possible.
+- */
+-# if !defined(__MATH_H__) && !defined(__MATH_H) && !defined(__cmath__)
+-# include
+-# endif
+-# else
+-# include
+-# endif
++# include
++
+ # if defined(_AMIGA) && defined(__SASC) && defined(_M68881)
+ /* Amiga SAS/C: We must include builtin FPU functions when compiling using
+ * MATH=68881
From a27e1ceb9f9c9239af9b0a151c84a57573ea646a Mon Sep 17 00:00:00 2001
From: fanquake
Date: Thu, 30 May 2024 14:47:40 +0100
Subject: [PATCH 6/6] depends: consolidate dependency docs
Adds missing `g++` for macOS. This is needed by Qt:
```bash
Configuring qt...
Creating qmake...
gmake[1]: Entering directory '/bitcoin/depends/work/build/arm64-apple-darwin/qt/5.15.14-4bca24c8f89/qtbase/qmake'
gmake[1]: g++: No such file or directory
gmake[1]: *** [Makefile:250: main.o] Error 127
```
`xz-utils` was also missing (but generally already installed), and is
needed for the `.tar.xz` tarballs.
Remove bsdmainutils, as this is only needed by the main build system
(for tests), and isn't needed to complete a depends build.
---
depends/README.md | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/depends/README.md b/depends/README.md
index 17def65d3e632..7ac075f4ba28a 100644
--- a/depends/README.md
+++ b/depends/README.md
@@ -43,9 +43,13 @@ The paths are automatically configured and no other options are needed.
### Install the required dependencies: Ubuntu & Debian
+#### Common
+
+ apt install automake bison cmake curl libtool make patch pkg-config python3 xz-utils
+
#### For macOS cross compilation
- sudo apt-get install curl bsdmainutils cmake zip
+ sudo apt-get install g++ zip
Note: You must obtain the macOS SDK before proceeding with a cross-compile.
Under the depends directory, create a subdirectory named `SDKs`.
@@ -60,7 +64,7 @@ For more information, see [SDK Extraction](../contrib/macdeploy/README.md#sdk-ex
Common linux dependencies:
- sudo apt-get install make automake cmake curl g++-multilib libtool binutils bsdmainutils pkg-config python3 patch bison
+ sudo apt-get install g++-multilib binutils
For linux ARM cross compilation: