Android.mk 10.5 KB
LOCAL_PATH := $(call my-dir)

PROJECT_PATH := $(dir $(LOCAL_PATH))

$(info LOCAL_PATH: $(LOCAL_PATH))	
$(info PROJECT_PATH: $(PROJECT_PATH))	

ifneq (,$(findstring -D,$(USER_DEFINED_CFLAGS)))
$(info Running makefile from command line)
PROJECT_PATH := $(abspath $(PROJECT_PATH)/..)
else
$(info $(USER_DEFINED_CFLAGS) Running makefile from Android studio)
endif

# len_of_x := $(call strlen,$(PROJECT_PATH))
# $(info len_of_x: $(len_of_x))

COMMON_SRC_PATH := $(PROJECT_PATH)/common
COMMON_CORE_SRC_PATH := $(COMMON_SRC_PATH)/core
ANDROID_SRC_PATH := $(PROJECT_PATH)/Android


# Include mm3dl module
ML3D_INCLUDE := $(COMMON_SRC_PATH)/modules/ml3d
ML3D_SRC := $(wildcard $(ML3D_INCLUDE)/*.cpp)
MANOMOTION_INCLUDES += $(ML3D_INCLUDE)
MANOMOTION_SRC_FILES += $(ML3D_SRC)
ML3D_ROYALE_INCLUDE := $(COMMON_SRC_PATH)/modules/ml3d/pmd/include/royaleCAPI
MANOMOTION_INCLUDES += $(ML3D_ROYALE_INCLUDE)


#include curl
include $(CLEAR_VARS)
LOCAL_MODULE := curl
3RDPARTY_PATH := $(ANDROID_SRC_PATH)/3rdparty
$(info 3rdparty path $(3RDPARTY_PATH))
3RDPARTY_INCLUDES := $(3RDPARTY_PATH) $(3RDPARTY_PATH)/openssl $(3RDPARTY_PATH)/curl $(3RDPARTY_PATH)/json
LOCAL_SRC_FILES := $(ANDROID_SRC_PATH)/libs/libcurl.a
LOCAL_EXPORT_C_INCLUDES := $(3RDPARTY_INCLUDES)
include $(PREBUILT_STATIC_LIBRARY)


 
# Statically linking DLIB
include $(CLEAR_VARS)
 	
LOCAL_MODULE := dlib
DLIB_PATH := $(COMMON_SRC_PATH)/modules/dlib-19.16
LOCAL_SRC_FILES := $(ANDROID_SRC_PATH)/dlib/libdlib.a
LOCAL_EXPORT_C_INCLUDES := $(DLIB_PATH)
$(info linknig dlib. Path: $(DLIB_PATH))
#include $(PREBUILT_STATIC_LIBRARY)

 
 
 # Staticallyl linking 
 include $(CLEAR_VARS)
 LOCAL_MODULE := easyprofiler
 DL_PATH := $(COMMON_SRC_PATH)/modules/easy_profiler/easy_profiler_core
 $(info easy profiler path include  $(DL_PATH))
 DL_INCLUDES := $(DL_PATH) $(DL_PATH)/include/easy
 LOCAL_SRC_FILES := $(ANDROID_SRC_PATH)/easy_profiler/obj/local/$(TARGET_ARCH_ABI)/libeasyprofiler.a
 LOCAL_EXPORT_C_INCLUDES := $(DL_INCLUDES)
 include $(PREBUILT_STATIC_LIBRARY)


include $(CLEAR_VARS)
LOCAL_MODULE := skm
SKM_PATH := $(COMMON_SRC_PATH)/modules/skm
SKM_INCLUDES := $(SKM_PATH)
SKM_INCLUDES += $(sort $(dir $(wildcard $(SKM_PATH)/src/*)))
SKM_INCLUDES += $(sort $(dir $(wildcard $(SKM_PATH)/src/*/*)))
LOCAL_SRC_FILES := $(ANDROID_SRC_PATH)/skm/libskm.a
LOCAL_EXPORT_C_INCLUDES := $(SKM_INCLUDES)
include $(PREBUILT_STATIC_LIBRARY)

JWT_INCLUDE := $(COMMON_SRC_PATH)/modules/jwt-cpp-0.3.1/include


# Statically linking Tensorflow Lite
include $(CLEAR_VARS)
LOCAL_MODULE := tensorflow
TENSORFLOW_PATH := $(COMMON_SRC_PATH)/modules/tensorflow
LOCAL_SRC_FILES := $(ANDROID_SRC_PATH)/libs/tensorflow-lite/libtensorflow-lite.a
LOCAL_EXPORT_C_INCLUDES := $(TENSORFLOW_PATH)
include $(PREBUILT_STATIC_LIBRARY)

# Statically linking Flatbuffers
include $(CLEAR_VARS)
LOCAL_MODULE := flatbuffers
FLATBUFFERS_PATH := $(COMMON_SRC_PATH)/modules/flatbuffers/include
LOCAL_SRC_FILES := $(ANDROID_SRC_PATH)/libs/tensorflow-lite/libflatbuffers.a
LOCAL_EXPORT_C_INCLUDES := $(FLATBUFFERS_PATH)
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := tensorflow_lite_gpu
#TENSORFLOW_PATH := $(COMMON_SRC_PATH)/modules/tensorflow
LOCAL_SRC_FILES := $(ANDROID_SRC_PATH)/libs/tensorflow-lite/libtensorflowlite_gpu_gl.so
#LOCAL_EXPORT_C_INCLUDES := $(TENSORFLOW_PATH)
include $(PREBUILT_SHARED_LIBRARY)


#OpenCV 3.4.5
#include $(CLEAR_VARS)
#OPENCV_PATH := $(ANDROID_SRC_PATH)/3rdparty/opencv-3.4.5-beta-install/sdk/native/jni
#OPENCV_MK_PATH := $(OPENCV_PATH)
#OPENCV_INCLUDES := $(OPENCV_PATH)/include
#OPENCV_CAMERA_MODULES := on
#OPENCV_INSTALL_MODULES := on
#OPENCV_LIB_TYPE := STATIC
#include $(OPENCV_MK_PATH)/OpenCV.mk
#OpenCV 4.4
include $(CLEAR_VARS)
OPENCV_PATH := $(ANDROID_SRC_PATH)/3rdparty/opencv-4.4.0-android-sdk/OpenCV-android-sdk/sdk/native/jni
OPENCV_MK_PATH := $(OPENCV_PATH)
OPENCV_INCLUDES := $(OPENCV_PATH)/include
OPENCV_CAMERA_MODULES := on
OPENCV_INSTALL_MODULES := on
OPENCV_LIB_TYPE := STATIC
include $(OPENCV_MK_PATH)/OpenCV.mk



# Retrieve all sources files from a directory 
CORE_CPP_FILE_LIST := $(wildcard $(COMMON_CORE_SRC_PATH)/*/*.cpp)
CORE_CPP_FILES := $(patsubst $(CORE_CPP_FILE_LIST)/,, $(CORE_CPP_FILE_LIST))

COMMON_CPP_FILE_LIST := $(wildcard $(COMMON_SRC_PATH)/*/*.cpp)
COMMON_CPP_FILES := $(patsubst $(COMMON_CPP_FILE_LIST)/,, $(COMMON_CPP_FILE_LIST))

COMMON_C_FILE_LIST := $(wildcard $(COMMON_SRC_PATH)/*/*.c)
COMMON_C_FILES := $(patsubst $(COMMON_C_FILE_LIST)/,, $(COMMON_C_FILE_LIST))

SKM_SRC_PATH := PROJECT_PATH/../common/modules/skm
MANOMOTION_SRC_FILES += $(CORE_CPP_FILES) $(COMMON_CPP_FILES) $(COMMON_C_FILES) $(SKM_SRC_PATH)
# $(info MANOMOTION_SRC_FILES: $(MANOMOTION_SRC_FILES))	

CORE_INCLUDES := $(sort $(dir $(wildcard $(COMMON_CORE_SRC_PATH)/*/)))
COMMON_INCLUDES := $(sort $(dir $(wildcard $(COMMON_SRC_PATH)/*/)))

SKM_INCLUDES := $(sort $(dir $(wildcard $(SKM_SRC_PATH)/)))
$(info SKM_SRC_PATH: $(SKM_SRC_PATH))
# $(info COMMON_INCLUDES: $(COMMON_INCLUDES))	
MANOMOTION_INCLUDES += $(COMMON_INCLUDES) $(CORE_INCLUDES) $(COMMON_SRC_PATH) $(COMMON_CORE_SRC_PATH) $(SKM_INCLUDES) $(3RDPARTY_INCLUDES)  #$(COMMON_SRC_PATH)/modules/segmentation  $(DLIB_PATH)


# Include security module
SECURITY_INCLUDE := $(COMMON_SRC_PATH)/modules/security
# the security cpp files are being included in the libskm
MANOMOTION_INCLUDES += $(SECURITY_INCLUDE)

# Include mm3dl module
ML3D_INCLUDE := $(COMMON_SRC_PATH)/modules/ml3d
ML3D_SRC := $(wildcard $(ML3D_INCLUDE)/*.cpp)

MANOMOTION_INCLUDES += $(ML3D_INCLUDE)
MANOMOTION_SRC_FILES += $(ML3D_SRC)

ML3D_ROYALE_INCLUDE := $(COMMON_SRC_PATH)/modules/ml3d/pmd/include/royaleCAPI
MANOMOTION_INCLUDES += $(ML3D_ROYALE_INCLUDE)

# Include segmentation module

#SEGMENTATION_INCLUDE := $(COMMON_SRC_PATH)/modules/segmentation
#SEGMENTATION_SRC := $(wildcard $(SEGMENTATION_INCLUDE)/*.cpp)
#include cpp taskflow
TASKFLOW_INCLUDE := $(COMMON_SRC_PATH)/modules/cpp-taskflow

MANOMOTION_INCLUDES +=  $(TASKFLOW_INCLUDE)#$(SEGMENTATION_INCLUDE)
#MANOMOTION_SRC_FILES += $(SEGMENTATION_SRC)
MANOMOTION_INCLUDES += $(TASKFLOW_INCLUDE)


#Include easy profiler core
EASY_PROFILE_CPP_FILE_LIST := $(wildcard $(ANDROID_SRC_PATH)/easy_profiler_core/*.cpp)

# $(info MANOMOTION_INCLUDES: $(MANOMOTION_INCLUDES))	


EPLIB_FLAGS := -DEASY_OPTION_IMPLICIT_THREAD_REGISTRATION -DBUILD_WITH_EASY_PROFILER=0 \
				-DEASY_PROFILER_VERSION_MAJOR=2 -DEASY_PROFILER_VERSION_MINOR=1 \
				-DEASY_PROFILER_VERSION_PATCH=0 \
				-DEASY_PRODUCT_VERSION_STRING=2.1.0 -DEASY_PROFILER_NO_GUI -DEASY_DEFAULT_PORT=2807 -DEASY_OPTION_PREDEFINED_COLORS

#LOCAL_C_INCLUDES += $(OPENCV_MK_PATH) $(OPENCV_MK_PATH)/include $(OPENCV_MK_PATH)/include/opencv \
#					$(OPENCV_MK_PATH)/include/opencv2 $(COMMON_SRC_PATH)/modules/easy_profiler/easy_profiler_core/include $(3RDPARTY_PATH)/json
LOCAL_C_INCLUDES +=  $(COMMON_SRC_PATH)/modules/easy_profiler/easy_profiler_core/include $(3RDPARTY_PATH)/json $(OPENCV_INCLUDES)


DLIB_FLAGS := -DENABLE_ASSERTS -DDLIB_NO_GUI_SUPPORT -DUSE_DLIB_PATCH						
#LOCAL_CFLAGS += $(DLIB_FLAGS)
LOCAL_LDLIBS += -llog -ldl -lz -lm
LOCAL_CFLAGS += -DTARGET_PLATFORM_ANDROID
LOCAL_CFLAGS += -DOPENCV # Enable the deep learning alorithm to use OpenCV
LOCAL_CFLAGS += $(USER_DEFINED_CFLAGS) $(EPLIB_FLAGS)
LOCAL_LDFLAGS += -Wl,--allow-multiple-definition
LOCAL_LDFLAGS += -llog
#LOCAL_SHARED_LIBRARIES += skm curl 
LOCAL_SHARED_LIBRARIES +=   flatbuffers tensorflow  tensorflow_lite_gpu skm curl
#LOCAL_SHARED_LIBRARIES +=   flatbuffers tensorflow skm curl

LOCAL_STATIC_LIBRARIES += easyprofiler #opencv


ENTRY_POINT_PATH := $(ANDROID_SRC_PATH)/entry-point
ENTRY_POINT_FILE_LIST := $(wildcard $(ENTRY_POINT_PATH)/*.cpp $(3RDPARTY_PATH)/*.cpp)
ENTRY_POINT_SRC_FILES := $(patsubst $(ENTRY_POINT_FILE_LIST)/,, $(ENTRY_POINT_FILE_LIST))
ENTRY_POINT_INCLUDES := $(ENTRY_POINT_PATH)
MANOMOTION_SRC_FILES += $(ENTRY_POINT_SRC_FILES)
MANOMOTION_INCLUDES += $(ENTRY_POINT_INCLUDES)


LOCAL_CFLAGS += -O3 -fvisibility=hidden -fdata-sections  -ffunction-sections -fPIC
LOCAL_CPPFLAGS += -O3 -fvisibility=hidden -fdata-sections  -ffunction-sections -fPIC
LOCAL_LDFLAGS += -Wl,--exclude-libs=ALL
LOCAL_LDFLAGS +=  -Wl,-z,norelro
LOCAL_LDFLAGS += -Wl,-z,lazy,
# LOCAL_LDFLAGS += -fopenmp
# LOCAL_CFLAGS += -DOPENMP=1 -fopenmp
# LOCAL_LDLIBS += -fopenmp


#Config flags
LOCAL_CFLAGS += -D__ANDROID__
LOCAL_CFLAGS += -D_IS_ANDROID_ 
LOCAL_CFLAGS += -DGPU
# Wether to apply checksum or not
ifneq (,$(findstring RELEASE_MODE,$(LOCAL_CFLAGS)))
$(warning Compiling in release mode. Logs will not show)
$(warning Applying checksum to library)
#LOCAL_CFLAGS += -D_APPLY_CHECKSUM_N
LOCAL_CFLAGS += -D_APPLY_NEW_CHECKSUM_ON_
else
LOCAL_CFLAGS += -DDEBUG_MODE -D_DEBUG_ON_ -D_LOG_HEADERS_ON_
# Set global log (Possible configurations _INFO _DEBUG, _TRACE, _WARN or _ERR)
LOCAL_CFLAGS += -DMANOMOTION_LOG_LEVEL_TRACE
endif

# Wether to compile for unity android or not
# LOCAL_CFLAGS += -DUNITY_ANDROID
LOCAL_CFLAGS += -DUSE_SERIAL_KEY
LOCAL_CFLAGS += -DSKM_CURL_EMBED_CACERTS
#LOCAL_CFLAGS += -D_THIRDEYE_ON_



# this option will build executables instead of building library for android application. 
# (Dis/en-)able UNIT TESTING by (un-)commenting the following line
# LOCAL_CFLAGS += -DENABLE_MANOMOTION_UNIT_TEST

# Wether to compile for Android native or unity
ifneq (,$(findstring UNITY_ANDROID,$(LOCAL_CFLAGS)))
$(warning Compiling library for UNITY)
UNITY_PATH :=  $(ENTRY_POINT_PATH)/unity
UNITY_FILE_LIST := $(wildcard $(UNITY_PATH)/*.cpp)
UNITY_SRC_FILES := $(patsubst $(UNITY_FILE_LIST)/,, $(UNITY_FILE_LIST))
MANOMOTION_SRC_FILES += $(UNITY_SRC_FILES)
MANOMOTION_INCLUDES += $(UNITY_PATH)
else
# Android specific codes
NATIVE_PATH := $(ENTRY_POINT_PATH)/native
ANDROID_FILE_LIST := $(wildcard $(NATIVE_PATH)/*.cpp)
ANDROID_SRC_FILES := $(patsubst $(ANDROID_FILE_LIST)/,, $(ANDROID_FILE_LIST))
ANDROID_INCLUDES := $(NATIVE_PATH)
MANOMOTION_SRC_FILES += $(ANDROID_SRC_FILES)
MANOMOTION_INCLUDES += $(ANDROID_INCLUDES)

endif

# give module name
LOCAL_MODULE := manomotion
# list your C files to compile
LOCAL_SRC_FILES += $(MANOMOTION_SRC_FILES)
# Additional include directories
LOCAL_C_INCLUDES += $(MANOMOTION_INCLUDES) $(JWT_INCLUDE)



ifneq (,$(findstring ENABLE_MANOMOTION_UNIT_TEST,$(LOCAL_CFLAGS)))
$(info Building executables... )
LOCAL_CFLAGS += -fPIE
LOCAL_LDFLAGS += -fPIE -pie
# Unit test source codes
UNIT_TEST_PATH :=  $(COMMON_CORE_SRC_PATH)/unit-test
UNIT_TEST_FILE_LIST := $(wildcard $(UNIT_TEST_PATH)/*/*.cpp)
UNIT_TEST_SRC_FILES := $(patsubst $(UNIT_TEST_FILE_LIST)/,, $(UNIT_TEST_FILE_LIST))
LOCAL_SRC_FILES += $(UNIT_TEST_SRC_FILES)
LOCAL_C_INCLUDES += $(UNIT_TEST_PATH)/test-cases
$(info Building test module... )
include $(BUILD_EXECUTABLE)
else
$(info Building Shared library... )
include $(BUILD_SHARED_LIBRARY)
endif

LOCAL_SHORT_COMMANDS := true