From 51790527e9ca6d86b690503ec992c2992b300595 Mon Sep 17 00:00:00 2001 From: Sergii Pylypenko Date: Thu, 11 Oct 2018 17:28:41 +0300 Subject: [PATCH] SDL: do not build prebuilt libs if they are not used by the app --- build.sh | 2 +- changeAppSettings.sh | 13 ++++++---- project/jni/Makefile.prebuilt | 24 +++++++++++-------- .../ballfield/AndroidAppSettings.cfg | 8 +++---- project/jni/boost/Android.mk | 2 ++ project/jni/boost/src | 2 +- project/jni/curl/Android.mk | 6 ++++- project/jni/iconv/Android.mk | 3 +++ project/jni/icuuc/Android.mk | 4 ++++ project/jni/openssl/Android.mk | 6 ++--- project/jni/png/Android.mk | 2 +- project/jni/vncserver/Android.mk | 9 +++++-- 12 files changed, 54 insertions(+), 27 deletions(-) diff --git a/build.sh b/build.sh index e9c0ece9b..7f388572f 100755 --- a/build.sh +++ b/build.sh @@ -142,7 +142,7 @@ strip_libs() { return 0 } -cd project && env PATH=$NDKBUILDPATH BUILD_NUM_CPUS=$NCPU nice -n19 ndk-build -j$NCPU V=1 $QUICK_REBUILD_ARGS && \ +cd project && env PATH=$NDKBUILDPATH BUILD_NUM_CPUS=$NCPU ndk-build -j$NCPU V=1 $QUICK_REBUILD_ARGS && \ strip_libs && \ cd .. && ./copyAssets.sh && cd project && \ { if $build_release ; then \ diff --git a/changeAppSettings.sh b/changeAppSettings.sh index e95603fe6..3c5906aa9 100755 --- a/changeAppSettings.sh +++ b/changeAppSettings.sh @@ -1118,10 +1118,15 @@ fi echo Compiling prebuilt libraries -#if echo "$CompiledLibraries" | grep -E 'iconv|charset|icu|crypto|ssl|harfbuzz' > /dev/null; then - make -C project/jni -f Makefile.prebuilt -#fi -if echo "$CompiledLibraries" | grep 'boost' > /dev/null; then +if echo "$CompiledLibraries" | grep -E 'crypto|ssl' > /dev/null; then + make -C project/jni -f Makefile.prebuilt openssl +fi + +if echo "$CompiledLibraries" | grep -E 'iconv|charset|icu|harfbuzz' > /dev/null; then + make -C project/jni -f Makefile.prebuilt icu +fi + +if echo "$CompiledLibraries" | grep 'boost_' > /dev/null; then make -C project/jni -f Makefile.prebuilt boost fi diff --git a/project/jni/Makefile.prebuilt b/project/jni/Makefile.prebuilt index a65740098..6f596873a 100644 --- a/project/jni/Makefile.prebuilt +++ b/project/jni/Makefile.prebuilt @@ -13,9 +13,14 @@ OPENSSL := $(foreach ARCH, $(ARCHES32) $(ARCHES64), openssl/lib-$(ARCH)/libcrypt LIBS := $(ICONV) $(ICU) $(OPENSSL) -prebuilt-libraries: $(LIBS) +.PHONY: all boost openssl icu +all: $(LIBS) -.NOTPARALLEL: $(LIBS) +openssl: $(OPENSSL) + +icu: $(ICONV) $(ICU) + +#.NOTPARALLEL: $(LIBS) $(BOOST) $(ICONV) $(ICU): iconv/src/build.sh cd iconv/src && \ @@ -34,9 +39,6 @@ $(ICONV) $(ICU): iconv/src/build.sh $(OPENSSL): openssl/compile.sh cd openssl && ./compile.sh -iconv/src/build.sh openssl/compile.sh: - git submodule update --init --recursive - BOOST_LIBS := atomic chrono container context coroutine date_time exception filesystem \ graph iostreams log log_setup \ prg_exec_monitor program_options random regex serialization signals stacktrace_basic stacktrace_noop \ @@ -47,16 +49,18 @@ BOOST_LIBS := atomic chrono container context coroutine date_time exception file BOOST := $(foreach ARCH, $(ARCHES32) $(ARCHES64), $(foreach NAME, $(BOOST_LIBS), boost/lib/$(ARCH)/libboost_$(NAME).a)) -$(BOOST): +$(BOOST): boost/src/build-android.sh rm -rf boost/include boost/lib ; \ cd boost/src && \ - ./build-android.sh --boost=1.65.1 --arch=$(shell echo $(foreach ARCH, $(ARCHES32) $(ARCHES64),$(ARCH),) | tr -d ' ') && \ + ./build-android.sh --boost=1.68.0 --arch=$(shell echo $(foreach ARCH, $(ARCHES32) $(ARCHES64),$(ARCH),) | tr -d ' ') && \ for ARCH in $(ARCHES32) $(ARCHES64); do \ mkdir -p ../lib/$$ARCH ../include ; \ - $(foreach NAME, $(BOOST_LIBS), cp -f build/out/$$ARCH/lib/libboost_$(NAME)-clang-mt-1_65_1.a ../lib/$$ARCH/libboost_$(NAME).a || exit 1 ;) \ - cp -r -f build/out/$$ARCH/include/boost-1_65_1/* ../include/ || exit 1 ; \ + $(foreach NAME, $(BOOST_LIBS), cp -f build/out/$$ARCH/lib/libboost_$(NAME)-clang-mt-1_68_0.a ../lib/$$ARCH/libboost_$(NAME).a || exit 1 ;) \ + cp -r -f build/out/$$ARCH/include/boost-1.68.0/* ../include/ || exit 1 ; \ done || exit 1 ; \ $(foreach NAME, $(BOOST_LIBS), ln -sf boost ../../boost_$(NAME) ;) -.PHONY: boost boost: $(BOOST) + +iconv/src/build.sh boost/src/build-android.sh: + git submodule update --init --recursive diff --git a/project/jni/application/ballfield/AndroidAppSettings.cfg b/project/jni/application/ballfield/AndroidAppSettings.cfg index 4cf7471dd..7e7cdb93b 100644 --- a/project/jni/application/ballfield/AndroidAppSettings.cfg +++ b/project/jni/application/ballfield/AndroidAppSettings.cfg @@ -274,19 +274,19 @@ MultiABI='armeabi-v7a arm64-v8a x86 x86_64' # Optional shared libraries to compile - removing some of them will save space # MP3 support by libMAD is encumbered by patents and libMAD is GPL-ed # Available libraries: mad (GPL-ed!) sdl_mixer sdl_image sdl_ttf sdl_net sdl_blitpool sdl_gfx sdl_sound intl xml2 lua jpeg png ogg flac tremor vorbis freetype xerces curl theora fluidsynth lzma lzo2 mikmod openal timidity zzip bzip2 yaml-cpp python boost_date_time boost_filesystem boost_iostreams boost_program_options boost_regex boost_signals boost_system boost_thread glu avcodec avdevice avfilter avformat avresample avutil swscale swresample bzip2 -CompiledLibraries="sdl_image boost_filesystem" +CompiledLibraries="sdl_image boost_filesystem boost_system crypto ssl curl openal vorbis ogg" # Application uses custom build script AndroidBuild.sh instead of Android.mk (y) or (n) CustomBuildScript=n # Aditional CFLAGS for application -AppCflags='-Oz' +AppCflags='' # Aditional C++-specific compiler flags for application, added after AppCflags -AppCppflags='-frtti -fexceptions' +AppCppflags='' # Additional LDFLAGS for application -AppLdflags='-frtti -fexceptions' +AppLdflags='' # If application has headers with the same name as system headers, this option tries to fix compiler flags to make it compilable AppOverlapsSystemHeaders= diff --git a/project/jni/boost/Android.mk b/project/jni/boost/Android.mk index 9432e5d7d..389ef5bc1 100644 --- a/project/jni/boost/Android.mk +++ b/project/jni/boost/Android.mk @@ -5,6 +5,7 @@ include $(CLEAR_VARS) LOCAL_MODULE := $(notdir $(LOCAL_PATH)) ifneq (boost,$(LOCAL_MODULE)) +ifneq ($(filter $(LOCAL_MODULE), $(APP_MODULES)),) LOCAL_C_INCLUDES := $(LOCAL_PATH)/include LOCAL_SRC_FILES := lib/$(TARGET_ARCH_ABI)/lib$(LOCAL_MODULE).a @@ -16,3 +17,4 @@ obj/local/$(TARGET_ARCH_ABI)/lib$(LOCAL_MODULE).a: $(LOCAL_PATH)/$(LOCAL_SRC_FIL include $(PREBUILT_STATIC_LIBRARY) endif +endif diff --git a/project/jni/boost/src b/project/jni/boost/src index d0f4626c9..1bd9aa134 160000 --- a/project/jni/boost/src +++ b/project/jni/boost/src @@ -1 +1 @@ -Subproject commit d0f4626c933247b2080d79de8cdc5a6359a1e8b2 +Subproject commit 1bd9aa13463be4553b1146d6a5916566c2fba69c diff --git a/project/jni/curl/Android.mk b/project/jni/curl/Android.mk index 8346a08ac..7446b81ce 100644 --- a/project/jni/curl/Android.mk +++ b/project/jni/curl/Android.mk @@ -68,6 +68,9 @@ CURL_HEADERS := \ stdcheaders.h \ typecheck-gcc.h +# Hide libcurl from the project if openssl is not compiled +ifneq ($(filter ssl, $(APP_MODULES)),) + LOCAL_SRC_FILES := $(addprefix lib/,$(CSOURCES)) LOCAL_C_INCLUDES := $(LOCAL_PATH)/include/ $(LOCAL_PATH)/lib $(LOCAL_PATH)/../openssl/include LOCAL_CFLAGS += $(common_CFLAGS) -DBUILDING_LIBCURL @@ -76,7 +79,6 @@ LOCAL_COPY_HEADERS_TO := libcurl/curl LOCAL_COPY_HEADERS := $(addprefix include/curl/,$(CURL_HEADERS)) LOCAL_MODULE:= libcurl -LOCAL_MODULE_TAGS := optional LOCAL_MODULE_FILENAME := libcurl-sdl # It clashes with system libcurl in Android 4.3 and older @@ -85,3 +87,5 @@ LOCAL_SHARED_LIBRARIES := ssl crypto LOCAL_LDLIBS := -lz include $(BUILD_SHARED_LIBRARY) + +endif diff --git a/project/jni/iconv/Android.mk b/project/jni/iconv/Android.mk index 2d898c293..42e440618 100644 --- a/project/jni/iconv/Android.mk +++ b/project/jni/iconv/Android.mk @@ -4,9 +4,12 @@ include $(CLEAR_VARS) LOCAL_MODULE := $(notdir $(LOCAL_PATH)) +ifneq ($(filter $(LOCAL_MODULE), $(APP_MODULES)),) + LOCAL_C_INCLUDES := $(LOCAL_PATH)/include LOCAL_SRC_FILES := lib/$(TARGET_ARCH_ABI)/lib$(LOCAL_MODULE).so include $(PREBUILT_SHARED_LIBRARY) +endif diff --git a/project/jni/icuuc/Android.mk b/project/jni/icuuc/Android.mk index 89dc92c34..ed71b86fc 100644 --- a/project/jni/icuuc/Android.mk +++ b/project/jni/icuuc/Android.mk @@ -4,6 +4,8 @@ include $(CLEAR_VARS) LOCAL_MODULE := $(notdir $(LOCAL_PATH)) +ifneq ($(filter $(LOCAL_MODULE), $(APP_MODULES)),) + LOCAL_C_INCLUDES := $(LOCAL_PATH)/include LOCAL_SRC_FILES := lib/$(TARGET_ARCH_ABI)/lib$(LOCAL_MODULE).a @@ -13,3 +15,5 @@ obj/local/$(TARGET_ARCH_ABI)/lib$(LOCAL_MODULE).a: $(LOCAL_PATH)/$(LOCAL_SRC_FIL cp -f $< $@ include $(PREBUILT_STATIC_LIBRARY) + +endif diff --git a/project/jni/openssl/Android.mk b/project/jni/openssl/Android.mk index 68d03dee7..ee3347004 100644 --- a/project/jni/openssl/Android.mk +++ b/project/jni/openssl/Android.mk @@ -3,11 +3,11 @@ LOCAL_PATH:=$(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := $(notdir $(LOCAL_PATH)) -LOCAL_MODULE_FILENAME := lib$(notdir $(LOCAL_PATH)).so.sdl.1 # It clashes with system libcrypto and libssl in Android 4.3 and older - ifneq (openssl,$(LOCAL_MODULE)) -ifneq ($(filter arm mips x86 arm64 x86_64, $(TARGET_ARCH)),) +ifneq ($(filter $(LOCAL_MODULE), $(APP_MODULES)),) + +LOCAL_MODULE_FILENAME := lib$(notdir $(LOCAL_PATH)).so.sdl.1 # It clashes with system libcrypto and libssl in Android 4.3 and older LOCAL_C_INCLUDES := $(LOCAL_PATH)/include LOCAL_SRC_FILES := lib-$(TARGET_ARCH_ABI)/lib$(LOCAL_MODULE).so.sdl.1.so diff --git a/project/jni/png/Android.mk b/project/jni/png/Android.mk index 7dcacb355..711cefdfe 100644 --- a/project/jni/png/Android.mk +++ b/project/jni/png/Android.mk @@ -4,7 +4,7 @@ include $(CLEAR_VARS) LOCAL_SRC_FILES := $(notdir $(wildcard $(LOCAL_PATH)/*.c)) -LOCAL_CFLAGS := +LOCAL_CFLAGS := -DPNG_ARM_NEON_OPT=0 LOCAL_C_INCLUDES := $(LOCAL_PATH)/include # LOCAL_LDLIBS := z diff --git a/project/jni/vncserver/Android.mk b/project/jni/vncserver/Android.mk index ada6839e1..a4a4e8d17 100644 --- a/project/jni/vncserver/Android.mk +++ b/project/jni/vncserver/Android.mk @@ -1,6 +1,11 @@ LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) +LOCAL_MODULE := vncserver + +# Hide vncserver from the project if openssl is not compiled +ifneq ($(filter ssl, $(APP_MODULES)),) + LIBVNCSERVER_ROOT:=src LIBVNCSERVER_SRC_FILES:= \ @@ -59,6 +64,6 @@ LOCAL_C_INCLUDES += include LOCAL_STATIC_LIBRARIES := jpeg png ssl crypto -LOCAL_MODULE := vncserver - include $(BUILD_SHARED_LIBRARY) + +endif