[Android] build shared libs
authorJaeyun <jy1210.jung@samsung.com>
Thu, 14 May 2020 08:48:25 +0000 (17:48 +0900)
committerMyungJoo Ham <myungjoo.ham@samsung.com>
Sat, 16 May 2020 12:31:36 +0000 (21:31 +0900)
1. build shared libs (nnstreamer and subplugins)
2. clean up build script

TODO : we need to update mk files in android-res repo and sub-plugins

Signed-off-by: Jaeyun <jy1210.jung@samsung.com>
api/android/api/src/main/jni/Android-nnstreamer.mk
api/android/api/src/main/jni/Android-snpe-prebuilt.mk [new file with mode: 0644]
api/android/api/src/main/jni/Android-snpe.mk
api/android/api/src/main/jni/Android-tensorflow-lite.mk
api/android/api/src/main/jni/Android.mk
api/android/build-android-lib.sh
jni/nnstreamer.mk

index a03f8fd..f4dea57 100644 (file)
@@ -30,21 +30,26 @@ NNSTREAMER_SRC_FILES += \
     $(NNSTREAMER_DECODER_IS_SRCS)
 endif
 
+# common headers (nnstreamer, gstreamer, glib)
+NNSTREAMER_INC := \
+    $(NNSTREAMER_INCLUDES) \
+    $(NNSTREAMER_CAPI_INCLUDES) \
+    $(GST_HEADERS_COMMON)
+
 include $(CLEAR_VARS)
 
 LOCAL_MODULE := nnstreamer
 
-# Remove duplicates
 LOCAL_SRC_FILES := $(sort $(NNSTREAMER_SRC_FILES))
-
-LOCAL_C_INCLUDES := \
-    $(NNSTREAMER_INCLUDES) \
-    $(NNSTREAMER_CAPI_INCLUDES)
-
-# common headers (gstreamer, glib)
-LOCAL_C_INCLUDES += $(GST_HEADERS_COMMON)
-
-LOCAL_CFLAGS += -O2 -fPIC $(NNS_API_FLAGS)
-LOCAL_CXXFLAGS += -std=c++11 -O2 -fPIC -frtti -fexceptions $(NNS_API_FLAGS)
-
-include $(BUILD_STATIC_LIBRARY)
+LOCAL_C_INCLUDES := $(NNSTREAMER_INC)
+LOCAL_CFLAGS := -O2 -fPIC $(NNS_API_FLAGS)
+LOCAL_CXXFLAGS := -std=c++11 -O2 -fPIC -frtti -fexceptions $(NNS_API_FLAGS)
+LOCAL_SHARED_LIBRARIES := gstreamer_android
+LOCAL_LDLIBS := -llog -landroid -lmediandk
+
+LOCAL_EXPORT_C_INCLUDES := $(NNSTREAMER_INC)
+LOCAL_EXPORT_CFLAGS := $(NNS_API_FLAGS)
+LOCAL_EXPORT_CXXFLAGS := $(NNS_API_FLAGS)
+LOCAL_EXPORT_LDLIBS := -llog -landroid
+
+include $(BUILD_SHARED_LIBRARY)
diff --git a/api/android/api/src/main/jni/Android-snpe-prebuilt.mk b/api/android/api/src/main/jni/Android-snpe-prebuilt.mk
new file mode 100644 (file)
index 0000000..6d450f8
--- /dev/null
@@ -0,0 +1,22 @@
+#------------------------------------------------------
+# SNPE (The Snapdragon Neural Processing Engine)
+#
+# This mk file defines prebuilt libraries for snpe module.
+# (snpe-sdk, arm64-v8a only)
+#------------------------------------------------------
+LOCAL_PATH := $(call my-dir)
+
+ifndef SNPE_LIB_PATH
+$(error SNPE_LIB_PATH is not defined!)
+endif
+
+SNPE_PREBUILT_LIBS :=
+
+#------------------------------------------------------
+# snpe-sdk (prebuilt shared library)
+#------------------------------------------------------
+include $(CLEAR_VARS)
+LOCAL_MODULE := libSNPE
+LOCAL_SRC_FILES := $(SNPE_LIB_PATH)/libSNPE.so
+include $(PREBUILT_SHARED_LIBRARY)
+SNPE_PREBUILT_LIBS += libSNPE
index 5cf5d61..abc66d7 100644 (file)
@@ -26,23 +26,17 @@ endif
 #------------------------------------------------------
 # snpe-sdk (prebuilt shared library)
 #------------------------------------------------------
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := libSNPE
-LOCAL_SRC_FILES := $(SNPE_LIB_PATH)/libSNPE.so
-
-include $(PREBUILT_SHARED_LIBRARY)
+include $(LOCAL_PATH)/Android-snap-prebuilt.mk
 
 #------------------------------------------------------
 # tensor-filter sub-plugin for snpe
 #------------------------------------------------------
 include $(CLEAR_VARS)
 
-LOCAL_MODULE := snpe
+LOCAL_MODULE := snpe-subplugin
 LOCAL_SRC_FILES := $(NNSTREAMER_FILTER_SNPE_SRCS)
-LOCAL_CXXFLAGS += -std=c++11 -frtti -fexceptions -Wno-exceptions -O2 -DNDEBUG $(NNS_API_FLAGS)
-LOCAL_C_INCLUDES := $(NNSTREAMER_INCLUDES) $(SNPE_INCLUDES) $(GST_HEADERS_COMMON)
-LOCAL_SHARED_LIBRARIES := libSNPE
-LOCAL_STATIC_LIBRARIES := nnstreamer
+LOCAL_CXXFLAGS := -std=c++11 -O2 -fPIC -frtti -fexceptions -Wno-exceptions
+LOCAL_C_INCLUDES := $(SNPE_INCLUDES)
+LOCAL_SHARED_LIBRARIES := $(SNPE_PREBUILT_LIBS) $(NNS_API_LIBS)
 
-include $(BUILD_STATIC_LIBRARY)
+include $(BUILD_SHARED_LIBRARY)
index bb0997b..1dd105e 100644 (file)
@@ -47,11 +47,11 @@ include $(PREBUILT_STATIC_LIBRARY)
 #------------------------------------------------------
 include $(CLEAR_VARS)
 
-LOCAL_MODULE := tensorflow-lite
+LOCAL_MODULE := tensorflow-lite-subplugin
 LOCAL_SRC_FILES := $(NNSTREAMER_FILTER_TFLITE_SRCS)
-LOCAL_CFLAGS += -O2 -DNDEBUG $(NNS_API_FLAGS)
-LOCAL_CXXFLAGS += -std=c++11 -frtti -fexceptions -O2 -DNDEBUG $(NNS_API_FLAGS)
-LOCAL_C_INCLUDES := $(NNSTREAMER_INCLUDES) $(TF_LITE_INCLUDES) $(GST_HEADERS_COMMON)
-LOCAL_STATIC_LIBRARIES := tensorflow-lite-lib
+LOCAL_CXXFLAGS := -std=c++11 -O2 -fPIC -frtti -fexceptions
+LOCAL_C_INCLUDES := $(TF_LITE_INCLUDES)
+LOCAL_STATIC_LIBRARIES := tensorflow-lite-lib cpufeatures
+LOCAL_SHARED_LIBRARIES := $(NNS_API_LIBS)
 
-include $(BUILD_STATIC_LIBRARY)
+include $(BUILD_SHARED_LIBRARY)
index fa8fafa..8345068 100644 (file)
@@ -37,8 +37,10 @@ ENABLE_NNFW := false
 # SNPE (Snapdragon Neural Processing Engine)
 ENABLE_SNPE := false
 
+# Common libraries for sub-plugins
+NNS_API_LIBS := nnstreamer gstreamer_android
 NNS_API_FLAGS :=
-NNS_API_STATIC_LIBS :=
+NNS_SUBPLUGINS :=
 
 ifeq ($(NNSTREAMER_API_OPTION),single)
 NNS_API_FLAGS += -DNNS_SINGLE_ONLY=1
@@ -48,34 +50,34 @@ include $(NNSTREAMER_ROOT)/jni/nnstreamer.mk
 NNS_API_FLAGS += -DVERSION=\"$(NNSTREAMER_VERSION)\"
 
 #------------------------------------------------------
-# external libs
+# external libs and sub-plugins
 #------------------------------------------------------
 ifeq ($(ENABLE_TF_LITE),true)
 NNS_API_FLAGS += -DENABLE_TENSORFLOW_LITE=1
 # define types in tensorflow-lite sub-plugin. This assumes tensorflow-lite >= 1.13 (older versions don't have INT8/INT16)
 NNS_API_FLAGS += -DTFLITE_INT8=1 -DTFLITE_INT16=1
-NNS_API_STATIC_LIBS += tensorflow-lite cpufeatures
+NNS_SUBPLUGINS += tensorflow-lite-subplugin
 
 include $(LOCAL_PATH)/Android-tensorflow-lite.mk
 endif
 
 ifeq ($(ENABLE_SNAP),true)
 NNS_API_FLAGS += -DENABLE_SNAP=1
-NNS_API_STATIC_LIBS += snap
+NNS_SUBPLUGINS += snap-subplugin
 
 include $(LOCAL_PATH)/Android-snap.mk
 endif
 
 ifeq ($(ENABLE_NNFW),true)
 NNS_API_FLAGS += -DENABLE_NNFW=1
-NNS_API_STATIC_LIBS += nnfw
+NNS_SUBPLUGINS += nnfw-subplugin
 
 include $(LOCAL_PATH)/Android-nnfw.mk
 endif
 
 ifeq ($(ENABLE_SNPE),true)
 NNS_API_FLAGS += -DENABLE_SNPE=1
-NNS_API_STATIC_LIBS += snpe
+NNS_SUBPLUGINS += snpe-subplugin
 
 include $(LOCAL_PATH)/Android-snpe.mk
 endif
@@ -86,7 +88,7 @@ endif
 include $(LOCAL_PATH)/Android-nnstreamer.mk
 
 # Remove any duplicates.
-NNS_API_STATIC_LIBS := $(sort $(NNS_API_STATIC_LIBS))
+NNS_SUBPLUGINS := $(sort $(NNS_SUBPLUGINS))
 
 #------------------------------------------------------
 # native code for api
@@ -94,21 +96,20 @@ NNS_API_STATIC_LIBS := $(sort $(NNS_API_STATIC_LIBS))
 include $(CLEAR_VARS)
 
 LOCAL_MODULE := nnstreamer-native
-LOCAL_SRC_FILES := nnstreamer-native-api.c \
+
+LOCAL_SRC_FILES := \
+    nnstreamer-native-api.c \
     nnstreamer-native-singleshot.c
-LOCAL_CFLAGS += -O2 $(NNS_API_FLAGS)
-LOCAL_C_INCLUDES := $(NNSTREAMER_INCLUDES) $(NNSTREAMER_CAPI_INCLUDES)
-LOCAL_STATIC_LIBRARIES := nnstreamer $(NNS_API_STATIC_LIBS)
-LOCAL_SHARED_LIBRARIES := gstreamer_android
-LOCAL_LDLIBS := -llog -landroid
 
 ifneq ($(NNSTREAMER_API_OPTION),single)
 LOCAL_SRC_FILES += \
     nnstreamer-native-customfilter.c \
     nnstreamer-native-pipeline.c
-LOCAL_LDLIBS += -lmediandk
 endif
 
+LOCAL_CFLAGS := -O2 -fPIC
+LOCAL_SHARED_LIBRARIES := $(NNS_API_LIBS) $(NNS_SUBPLUGINS)
+
 include $(BUILD_SHARED_LIBRARY)
 
 #------------------------------------------------------
@@ -118,21 +119,15 @@ GSTREAMER_NDK_BUILD_PATH := $(GSTREAMER_ROOT)/share/gst-android/ndk-build/
 include $(LOCAL_PATH)/Android-gst-plugins.mk
 
 GSTREAMER_PLUGINS        := $(GST_REQUIRED_PLUGINS)
-GSTREAMER_EXTRA_DEPS     := $(GST_REQUIRED_DEPS) gio-2.0 gmodule-2.0
+GSTREAMER_EXTRA_DEPS     := $(GST_REQUIRED_DEPS) gio-2.0 gmodule-2.0 json-glib-1.0
 GSTREAMER_EXTRA_LIBS     := $(GST_REQUIRED_LIBS) -liconv
 
 GSTREAMER_INCLUDE_FONTS := no
 GSTREAMER_INCLUDE_CA_CERTIFICATES := no
 
-ifeq ($(ENABLE_NNFW),true)
-GSTREAMER_EXTRA_DEPS += json-glib-1.0
-endif
-
 include $(GSTREAMER_NDK_BUILD_PATH)/gstreamer-1.0.mk
 
 #------------------------------------------------------
 # NDK cpu-features
 #------------------------------------------------------
-ifeq ($(filter cpufeatures,$(NNS_API_STATIC_LIBS)),cpufeatures)
 $(call import-module, android/cpufeatures)
-endif
index 58c7d4f..1ea2e8a 100644 (file)
@@ -217,19 +217,20 @@ echo "Start to build NNStreamer library for Android (build $build_type)"
 pushd $nnstreamer_dir
 
 # Make directory to build NNStreamer library
-mkdir -p build_android_lib
+build_dir=build_android_$build_type
+mkdir -p $build_dir
 
 # Copy the files (native and java to build Android library) to build directory
-cp -r ./api/android/* ./build_android_lib
+cp -r ./api/android/* ./$build_dir
 
 # Get the prebuilt libraries and build-script
-mkdir -p build_android_lib/external
+mkdir -p $build_dir/external
 
-svn --force export https://github.com/nnstreamer/nnstreamer-android-resource/trunk/android_api ./build_android_lib
-svn --force export https://github.com/nnstreamer/nnstreamer-android-resource/trunk/external/tensorflow-lite-$nnstreamer_tf_lite_ver.tar.xz ./build_android_lib/external
-svn --force export https://github.com/nnstreamer/nnstreamer-android-resource/trunk/external/jni/Android-nnstreamer-prebuilt.mk ./build_android_lib/external
+svn --force export https://github.com/nnstreamer/nnstreamer-android-resource/trunk/android_api ./$build_dir
+svn --force export https://github.com/nnstreamer/nnstreamer-android-resource/trunk/external/tensorflow-lite-$nnstreamer_tf_lite_ver.tar.xz ./$build_dir/external
+svn --force export https://github.com/nnstreamer/nnstreamer-android-resource/trunk/external/jni/Android-nnstreamer-prebuilt.mk ./$build_dir/external
 
-pushd ./build_android_lib
+pushd ./$build_dir
 
 # Update target ABI
 sed -i "s|abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'|abiFilters '$target_abi'|" api/build.gradle
@@ -273,6 +274,7 @@ fi
 
 # Update tf-lite option
 if [[ $enable_tflite == "yes" ]]; then
+    sed -i "s|ENABLE_TF_LITE := false|ENABLE_TF_LITE := true|" external/Android-nnstreamer-prebuilt.mk
     sed -i "s|ENABLE_TF_LITE := false|ENABLE_TF_LITE := true|" api/src/main/jni/Android.mk
     tar xJf ./external/tensorflow-lite-$nnstreamer_tf_lite_ver.tar.xz -C ./api/src/main/jni
 fi
@@ -332,9 +334,12 @@ if [[ -e "$nnstreamer_android_api_lib" ]]; then
         cp -r aar_extracted/assets/* main/assets
     fi
 
+    # java, libraries and mk files
     cp -r api/src/main/java/org/freedesktop/* main/java/org/freedesktop
     cp -r aar_extracted/jni/* main/jni/nnstreamer/lib
+    cp api/src/main/jni/*-prebuilt.mk main/jni
     cp external/Android-nnstreamer-prebuilt.mk main/jni
+
     # header for C-API
     cp $nnstreamer_dir/api/capi/include/nnstreamer.h main/jni/nnstreamer/include
     cp $nnstreamer_dir/api/capi/include/nnstreamer-single.h main/jni/nnstreamer/include
@@ -400,7 +405,7 @@ fi
 popd
 
 # Remove build directory
-rm -rf build_android_lib
+rm -rf $build_dir
 
 popd
 
index 09c180e..9f26112 100644 (file)
@@ -133,6 +133,7 @@ ENABLE_NNAPI :=false
 GST_HEADERS_COMMON := \
     $(GSTREAMER_ROOT)/include/gstreamer-1.0 \
     $(GSTREAMER_ROOT)/include/glib-2.0 \
+    $(GSTREAMER_ROOT)/include/json-glib-1.0 \
     $(GSTREAMER_ROOT)/lib/glib-2.0/include \
     $(GSTREAMER_ROOT)/include