mirror of
https://github.com/dashpay/dash.git
synced 2024-12-24 03:22:47 +01:00
merge bitcoin#16110: Add Android NDK support
This commit is contained in:
parent
649273e703
commit
56d04ade06
@ -124,8 +124,10 @@ AC_DEFUN([BITCOIN_QT_CONFIGURE],[
|
||||
if test "x$bitcoin_cv_static_qt" = xyes; then
|
||||
_BITCOIN_QT_FIND_STATIC_PLUGINS
|
||||
AC_DEFINE(QT_STATICPLUGIN, 1, [Define this symbol if qt plugins are static])
|
||||
_BITCOIN_QT_CHECK_STATIC_PLUGINS([Q_IMPORT_PLUGIN(QMinimalIntegrationPlugin)],[-lqminimal])
|
||||
AC_DEFINE(QT_QPA_PLATFORM_MINIMAL, 1, [Define this symbol if the minimal qt platform exists])
|
||||
if test "x$TARGET_OS" != xandroid; then
|
||||
_BITCOIN_QT_CHECK_STATIC_PLUGINS([Q_IMPORT_PLUGIN(QMinimalIntegrationPlugin)],[-lqminimal])
|
||||
AC_DEFINE(QT_QPA_PLATFORM_MINIMAL, 1, [Define this symbol if the minimal qt platform exists])
|
||||
fi
|
||||
if test "x$TARGET_OS" = xwindows; then
|
||||
_BITCOIN_QT_CHECK_STATIC_PLUGINS([Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin)],[-lqwindows])
|
||||
AC_DEFINE(QT_QPA_PLATFORM_WINDOWS, 1, [Define this symbol if the qt platform is windows])
|
||||
@ -135,6 +137,9 @@ AC_DEFUN([BITCOIN_QT_CONFIGURE],[
|
||||
elif test "x$TARGET_OS" = xdarwin; then
|
||||
_BITCOIN_QT_CHECK_STATIC_PLUGINS([Q_IMPORT_PLUGIN(QCocoaIntegrationPlugin)],[-lqcocoa])
|
||||
AC_DEFINE(QT_QPA_PLATFORM_COCOA, 1, [Define this symbol if the qt platform is cocoa])
|
||||
elif test "x$TARGET_OS" = xandroid; then
|
||||
QT_LIBS="-Wl,--export-dynamic,--undefined=JNI_OnLoad -lqtforandroid -ljnigraphics -landroid -lqtfreetype -lQt5EglSupport $QT_LIBS"
|
||||
AC_DEFINE(QT_QPA_PLATFORM_ANDROID, 1, [Define this symbol if the qt platform is android])
|
||||
fi
|
||||
fi
|
||||
CPPFLAGS=$TEMP_CPPFLAGS
|
||||
@ -322,6 +327,9 @@ AC_DEFUN([_BITCOIN_QT_FIND_STATIC_PLUGINS],[
|
||||
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
|
||||
PKG_CHECK_MODULES([QTFONTDATABASE], [Qt5FontDatabaseSupport${qt_lib_suffix}], [QT_LIBS="-lQt5FontDatabaseSupport${qt_lib_suffix} $QT_LIBS"])
|
||||
PKG_CHECK_MODULES([QTEVENTDISPATCHER], [Qt5EventDispatcherSupport${qt_lib_suffix}], [QT_LIBS="-lQt5EventDispatcherSupport${qt_lib_suffix} $QT_LIBS"])
|
||||
PKG_CHECK_MODULES([QTTHEME], [Qt5ThemeSupport${qt_lib_suffix}], [QT_LIBS="-lQt5ThemeSupport${qt_lib_suffix} $QT_LIBS"])
|
||||
|
@ -695,6 +695,7 @@ case $host in
|
||||
;;
|
||||
*android*)
|
||||
dnl make sure android stays above linux for hosts like *linux-android*
|
||||
TARGET_OS=android
|
||||
;;
|
||||
*linux*)
|
||||
TARGET_OS=linux
|
||||
|
@ -80,6 +80,11 @@ full_host_os:=$(subst $(host_arch)-$(host_vendor)-,,$(canonical_host))
|
||||
host_os:=$(findstring linux,$(full_host_os))
|
||||
host_os+=$(findstring darwin,$(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)
|
||||
|
@ -26,8 +26,17 @@ Common `host-platform-triplets` for cross compilation are:
|
||||
- `aarch64-linux-gnu` for Linux ARM 64 bit
|
||||
- `riscv32-linux-gnu` for Linux RISC-V 32 bit
|
||||
- `riscv64-linux-gnu` for Linux RISC-V 64 bit
|
||||
- `aarch64-linux-android` for Android ARM 64 bit
|
||||
|
||||
The paths are automatically configured and no other options are needed unless targeting Android.
|
||||
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).
|
||||
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.
|
||||
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
|
||||
|
||||
|
||||
No other options are needed, the paths are automatically configured.
|
||||
|
||||
### Install the required dependencies: Ubuntu & Debian
|
||||
|
||||
|
11
depends/hosts/android.mk
Normal file
11
depends/hosts/android.mk
Normal file
@ -0,0 +1,11 @@
|
||||
ifeq ($(HOST),armv7a-linux-android)
|
||||
android_AR=$(ANDROID_TOOLCHAIN_BIN)/arm-linux-androideabi-ar
|
||||
android_CXX=$(ANDROID_TOOLCHAIN_BIN)/$(HOST)eabi$(ANDROID_API_LEVEL)-clang++
|
||||
android_CC=$(ANDROID_TOOLCHAIN_BIN)/$(HOST)eabi$(ANDROID_API_LEVEL)-clang
|
||||
android_RANLIB=$(ANDROID_TOOLCHAIN_BIN)/arm-linux-androideabi-ranlib
|
||||
else
|
||||
android_AR=$(ANDROID_TOOLCHAIN_BIN)/$(HOST)-ar
|
||||
android_CXX=$(ANDROID_TOOLCHAIN_BIN)/$(HOST)$(ANDROID_API_LEVEL)-clang++
|
||||
android_CC=$(ANDROID_TOOLCHAIN_BIN)/$(HOST)$(ANDROID_API_LEVEL)-clang
|
||||
android_RANLIB=$(ANDROID_TOOLCHAIN_BIN)/$(HOST)-ranlib
|
||||
endif
|
@ -17,6 +17,10 @@ $(package)_config_opts_x86_64=architecture=x86 address-model=64
|
||||
$(package)_config_opts_i686=architecture=x86 address-model=32
|
||||
$(package)_config_opts_aarch64=address-model=64
|
||||
$(package)_config_opts_armv7a=address-model=32
|
||||
$(package)_config_opts_i686_android=address-model=32
|
||||
$(package)_config_opts_aarch64_android=address-model=64
|
||||
$(package)_config_opts_x86_64_android=address-model=64
|
||||
$(package)_config_opts_armv7a_android=address-model=32
|
||||
ifneq (,$(findstring clang,$($(package)_cxx)))
|
||||
$(package)_toolset_$(host_os)=clang
|
||||
else
|
||||
@ -25,6 +29,7 @@ endif
|
||||
$(package)_config_libraries=chrono,filesystem,system,thread,test
|
||||
$(package)_cxxflags=-std=c++17 -fvisibility=hidden
|
||||
$(package)_cxxflags_linux=-fPIC
|
||||
$(package)_cxxflags_android=-fPIC
|
||||
endef
|
||||
|
||||
# Fix unused variable in boost_process, can be removed after upgrading to 1.72
|
||||
|
@ -3,15 +3,23 @@ $(package)_version=2.1.8
|
||||
$(package)_download_path=https://github.com/libevent/libevent/releases/download/release-$($(package)_version)-stable
|
||||
$(package)_file_name=$(package)-$($(package)_version)-stable.tar.gz
|
||||
$(package)_sha256_hash=965cc5a8bb46ce4199a47e9b2c9e1cae3b137e8356ffdad6d94d3b9069b71dc2
|
||||
$(package)_patches=fix_android_arc4random_addrandom.patch
|
||||
|
||||
define $(package)_preprocess_cmds
|
||||
./autogen.sh
|
||||
endef
|
||||
ifneq (,$(findstring android,$(host)))
|
||||
define $(package)_preprocess_cmds
|
||||
./autogen.sh && patch -p1 < $($(package)_patch_dir)/fix_android_arc4random_addrandom.patch
|
||||
endef
|
||||
else
|
||||
define $(package)_preprocess_cmds
|
||||
./autogen.sh
|
||||
endef
|
||||
endif
|
||||
|
||||
define $(package)_set_vars
|
||||
$(package)_config_opts=--disable-shared --disable-openssl --disable-libevent-regress --disable-samples
|
||||
$(package)_config_opts_release=--disable-debug-mode
|
||||
$(package)_config_opts_linux=--with-pic
|
||||
$(package)_config_opts_android=--with-pic
|
||||
endef
|
||||
|
||||
define $(package)_config_cmds
|
||||
|
@ -58,6 +58,11 @@ $(package)_config_opts_riscv64_linux=linux-generic64
|
||||
$(package)_config_opts_x86_64_darwin=darwin64-x86_64-cc
|
||||
$(package)_config_opts_x86_64_mingw32=mingw64
|
||||
$(package)_config_opts_i686_mingw32=mingw
|
||||
$(package)_config_opts_android=-fPIC
|
||||
$(package)_config_opts_aarch64_android=linux-generic64
|
||||
$(package)_config_opts_x86_64_android=linux-generic64
|
||||
$(package)_config_opts_armv7a_android=linux-generic32
|
||||
$(package)_config_opts_i686_android=linux-generic32
|
||||
endef
|
||||
|
||||
define $(package)_preprocess_cmds
|
||||
|
@ -5,6 +5,7 @@ qt_packages = qrencode protobuf zlib
|
||||
|
||||
qt_linux_packages:=qt expat dbus libxcb xcb_proto libXau xproto freetype fontconfig
|
||||
|
||||
qt_android_packages=qt
|
||||
qt_darwin_packages=qt
|
||||
qt_mingw32_packages=qt
|
||||
|
||||
|
@ -8,6 +8,7 @@ define $(package)_set_vars
|
||||
$(package)_config_opts=--disable-shared --without-tools --without-tests --disable-sdltest
|
||||
$(package)_config_opts += --disable-gprof --disable-gcov --disable-mudflap
|
||||
$(package)_config_opts_linux=--with-pic
|
||||
$(package)_config_opts_android=--with-pic
|
||||
endef
|
||||
|
||||
define $(package)_preprocess_cmds
|
||||
|
@ -9,7 +9,7 @@ $(package)_linux_dependencies=freetype fontconfig libxcb
|
||||
$(package)_qt_libs=corelib network widgets gui plugins testlib
|
||||
$(package)_patches=fix_qt_pkgconfig.patch mac-qmake.conf fix_configure_mac.patch fix_no_printer.patch fix_riscv64_arch.patch
|
||||
$(package)_patches+= fix_rcc_determinism.patch xkb-default.patch no-xlib.patch
|
||||
$(package)_patches+= dont_hardcode_pwd.patch
|
||||
$(package)_patches+= fix_android_qmake_conf.patch fix_android_jni_static.patch dont_hardcode_pwd.patch
|
||||
$(package)_patches+= freetype_back_compat.patch drop_lrelease_dependency.patch
|
||||
$(package)_patches+= fix_limits_header.patch
|
||||
|
||||
@ -116,6 +116,26 @@ $(package)_config_opts_x86_64_linux = -xplatform linux-g++-64
|
||||
$(package)_config_opts_aarch64_linux = -xplatform linux-aarch64-gnu-g++
|
||||
$(package)_config_opts_riscv64_linux = -platform linux-g++ -xplatform bitcoin-linux-g++
|
||||
$(package)_config_opts_mingw32 = -no-opengl -xplatform win32-g++ -device-option CROSS_COMPILE="$(host)-"
|
||||
|
||||
$(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 += -device-option CROSS_COMPILE="$(host)-"
|
||||
$(package)_config_opts_android += -egl
|
||||
$(package)_config_opts_android += -qpa xcb
|
||||
$(package)_config_opts_android += -no-eglfs
|
||||
$(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_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
|
||||
$(package)_config_opts_i686_android += -android-arch i686
|
||||
|
||||
$(package)_build_env = QT_RCC_TEST=1
|
||||
$(package)_build_env += QT_RCC_SOURCE_DATE_OVERRIDE=1
|
||||
endef
|
||||
@ -158,6 +178,8 @@ define $(package)_preprocess_cmds
|
||||
patch -p1 -i $($(package)_patch_dir)/fix_rcc_determinism.patch &&\
|
||||
patch -p1 -i $($(package)_patch_dir)/xkb-default.patch &&\
|
||||
patch -p1 -i $($(package)_patch_dir)/fix_limits_header.patch && \
|
||||
patch -p1 -i $($(package)_patch_dir)/fix_android_qmake_conf.patch &&\
|
||||
patch -p1 -i $($(package)_patch_dir)/fix_android_jni_static.patch &&\
|
||||
echo "!host_build: QMAKE_CFLAGS += $($(package)_cflags) $($(package)_cppflags)" >> qtbase/mkspecs/common/gcc-base.conf && \
|
||||
echo "!host_build: QMAKE_CXXFLAGS += $($(package)_cxxflags) $($(package)_cppflags)" >> qtbase/mkspecs/common/gcc-base.conf && \
|
||||
echo "!host_build: QMAKE_LFLAGS += $($(package)_ldflags)" >> qtbase/mkspecs/common/gcc-base.conf && \
|
||||
|
@ -9,6 +9,7 @@ define $(package)_set_vars
|
||||
$(package)_config_opts += --without-libsodium --without-libgssapi_krb5 --without-pgm --without-norm --without-vmci
|
||||
$(package)_config_opts += --disable-libunwind --disable-radix-tree --without-gcov
|
||||
$(package)_config_opts_linux=--with-pic
|
||||
$(package)_config_opts_android=--with-pic
|
||||
$(package)_cxxflags=-std=c++17
|
||||
endef
|
||||
|
||||
|
@ -11,6 +11,7 @@ $(package)_config_opts+=RANLIB="$($(package)_ranlib)"
|
||||
$(package)_config_opts+=AR="$($(package)_ar)"
|
||||
$(package)_config_opts_darwin+=AR="$($(package)_libtool)"
|
||||
$(package)_config_opts_darwin+=ARFLAGS="-o"
|
||||
$(package)_config_opts_android+=CHOST=$(host)
|
||||
endef
|
||||
|
||||
# zlib has its own custom configure script that takes in options like CC,
|
||||
|
@ -0,0 +1,68 @@
|
||||
From cadae3ab7abf45e61ecae8aac39d97d1f3cbd336 Mon Sep 17 00:00:00 2001
|
||||
From: Lawrence Nahum <lawrence@greenaddress.it>
|
||||
Date: Sun, 3 Dec 2017 22:56:09 +0100
|
||||
Subject: [PATCH] fixup
|
||||
|
||||
---
|
||||
configure.ac | 1 +
|
||||
evutil_rand.c | 3 +++
|
||||
include/event2/util.h | 4 ++--
|
||||
3 files changed, 6 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 7528d37..3bb2121 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -341,6 +341,7 @@ dnl Checks for library functions.
|
||||
AC_CHECK_FUNCS([ \
|
||||
accept4 \
|
||||
arc4random \
|
||||
+ arc4random_addrandom \
|
||||
arc4random_buf \
|
||||
eventfd \
|
||||
epoll_create1 \
|
||||
diff --git a/evutil_rand.c b/evutil_rand.c
|
||||
index 046a14b..3f0bf2c 100644
|
||||
--- a/evutil_rand.c
|
||||
+++ b/evutil_rand.c
|
||||
@@ -191,6 +191,7 @@ evutil_secure_rng_get_bytes(void *buf, size_t n)
|
||||
{
|
||||
ev_arc4random_buf(buf, n);
|
||||
}
|
||||
+#ifdef HAVE_ARC4RANDOM_ADDRANDOM
|
||||
|
||||
void
|
||||
evutil_secure_rng_add_bytes(const char *buf, size_t n)
|
||||
@@ -199,6 +200,8 @@ evutil_secure_rng_add_bytes(const char *buf, size_t n)
|
||||
n>(size_t)INT_MAX ? INT_MAX : (int)n);
|
||||
}
|
||||
|
||||
+#endif
|
||||
+
|
||||
void
|
||||
evutil_free_secure_rng_globals_(void)
|
||||
{
|
||||
diff --git a/include/event2/util.h b/include/event2/util.h
|
||||
index dd4bbb6..a9a169d 100644
|
||||
--- a/include/event2/util.h
|
||||
+++ b/include/event2/util.h
|
||||
@@ -841,7 +841,7 @@ int evutil_secure_rng_init(void);
|
||||
*/
|
||||
EVENT2_EXPORT_SYMBOL
|
||||
int evutil_secure_rng_set_urandom_device_file(char *fname);
|
||||
-
|
||||
+#ifdef HAVE_ARC4RANDOM_ADDRANDOM
|
||||
/** Seed the random number generator with extra random bytes.
|
||||
|
||||
You should almost never need to call this function; it should be
|
||||
@@ -858,7 +858,7 @@ int evutil_secure_rng_set_urandom_device_file(char *fname);
|
||||
*/
|
||||
EVENT2_EXPORT_SYMBOL
|
||||
void evutil_secure_rng_add_bytes(const char *dat, size_t datlen);
|
||||
-
|
||||
+#endif
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
--
|
||||
2.14.3
|
18
depends/patches/qt/fix_android_jni_static.patch
Normal file
18
depends/patches/qt/fix_android_jni_static.patch
Normal file
@ -0,0 +1,18 @@
|
||||
--- old/qtbase/src/plugins/platforms/android/androidjnimain.cpp
|
||||
+++ new/qtbase/src/plugins/platforms/android/androidjnimain.cpp
|
||||
@@ -890,6 +890,14 @@
|
||||
__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;
|
||||
|
20
depends/patches/qt/fix_android_qmake_conf.patch
Normal file
20
depends/patches/qt/fix_android_qmake_conf.patch
Normal file
@ -0,0 +1,20 @@
|
||||
--- old/qtbase/mkspecs/android-clang/qmake.conf
|
||||
+++ new/qtbase/mkspecs/android-clang/qmake.conf
|
||||
@@ -30,7 +30,7 @@
|
||||
QMAKE_CFLAGS += -target mips64el-none-linux-android
|
||||
|
||||
QMAKE_CFLAGS += -gcc-toolchain $$NDK_TOOLCHAIN_PATH
|
||||
-QMAKE_LINK = $$QMAKE_CXX $$QMAKE_CFLAGS -Wl,--exclude-libs,libgcc.a
|
||||
+QMAKE_LINK = $$QMAKE_CXX $$QMAKE_CFLAGS -Wl,--exclude-libs,libgcc.a -nostdlib++
|
||||
QMAKE_CFLAGS += -DANDROID_HAS_WSTRING --sysroot=$$NDK_ROOT/sysroot \
|
||||
-isystem $$NDK_ROOT/sysroot/usr/include/$$NDK_TOOLS_PREFIX \
|
||||
-isystem $$NDK_ROOT/sources/cxx-stl/llvm-libc++/include \
|
||||
@@ -40,7 +40,7 @@
|
||||
ANDROID_SOURCES_CXX_STL_LIBDIR = $$NDK_ROOT/sources/cxx-stl/llvm-libc++/libs/$$ANDROID_TARGET_ARCH
|
||||
|
||||
ANDROID_STDCPP_PATH = $$ANDROID_SOURCES_CXX_STL_LIBDIR/libc++_shared.so
|
||||
-ANDROID_CXX_STL_LIBS = -lc++
|
||||
+ANDROID_CXX_STL_LIBS = -lc++_shared
|
||||
|
||||
QMAKE_ARM_CFLAGS_RELEASE = -Oz
|
||||
QMAKE_ARM_CFLAGS_RELEASE_WITH_DEBUGINFO = -g -Oz
|
Loading…
Reference in New Issue
Block a user