1 # ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=./Android.mk NDK_APPLICATION_MK=./Application.mk -j2
2 LOCAL_PATH := $(call my-dir)
5 ENABLE_TFLITE_BACKBONE := 1
6 ENABLE_TFLITE_INTERPRETER := 1
11 ifeq ($(ENABLE_TFLITE_BACKBONE), 1)
13 else ifeq ($(ENABLE_TFLITE_INTERPRETER), 1)
18 NNTRAINER_ROOT := $(LOCAL_PATH)/..
22 NDK_LIBS_OUT := $(NDK_PROJECT_PATH)
25 ifndef NDK_INCLUDES_OUT
26 NDK_INCLUDES_OUT := $(NDK_PROJECT_PATH)
32 ifneq ($(MAKECMDGOALS),clean)
33 $(warning INIPARSER_ROOT is not defined!)
34 $(warning INIPARSER SRC is going to be downloaded!)
36 INIPARSER_ROOT :=$(NDK_LIBS_OUT)/iniparser
38 $(info $(shell ($(LOCAL_PATH)/prepare_iniparser.sh $(NDK_LIBS_OUT))))
45 NNTRAINER_JNI_ROOT := $(NNTRAINER_ROOT)/jni
47 # Build tflite if its backbone is enabled
48 ifeq ($(NEED_TF_LITE),1)
49 $(warning BUILDING TFLITE BACKBONE !)
50 TENSORFLOW_VERSION := 2.3.0
52 ifndef TENSORFLOW_ROOT
53 ifneq ($(MAKECMDGOALS),clean)
54 $(warning TENSORFLOW_ROOT is not defined!)
55 $(warning TENSORFLOW SRC is going to be downloaded!)
57 TENSORFLOW_ROOT := $(NDK_LIBS_OUT)/tensorflow-$(TENSORFLOW_VERSION)/tensorflow-lite
59 $(info $(shell ($(NNTRAINER_JNI_ROOT)/prepare_tflite.sh $(TENSORFLOW_VERSION) $(NDK_LIBS_OUT))))
61 $(info $(shell (flatc -c $(NNTRAINER_ROOT)/nntrainer/compiler/tf_schema.fbs)))
62 $(info $(shell (mv tf_schema_generated.h $(NNTRAINER_ROOT)/nntrainer/compiler)))
65 endif #TENSORFLOW_ROOT
67 LOCAL_MODULE := tensorflow-lite
70 ifeq ($(APP_ABI), armeabi-v7a)
73 LOCAL_SRC_FILES := $(TENSORFLOW_ROOT)/lib/$(LIB_)/libtensorflow-lite.a
74 LOCAL_EXPORT_C_INCLUDES := $(TENSORFLOW_ROOT)/include
75 LOCAL_EXPORT_LDLIBS := -lEGL -lGLESv2
77 include $(PREBUILT_STATIC_LIBRARY)
81 ifeq ($(ENABLE_BLAS), 1)
84 ## prepare openblas if nothing present
86 ifneq ($(MAKECMDGOALS),clean)
88 OPENBLAS_ROOT := $(NDK_LIBS_OUT)/openblas
89 $(info $(shell $(NNTRAINER_JNI_ROOT)/prepare_openblas.sh $(NDK_LIBS_OUT)))
94 LOCAL_MODULE := openblas
95 LOCAL_SRC_FILES := $(OPENBLAS_ROOT)/lib/libopenblas.a
96 LOCAL_EXPORT_C_INCLUDES := $(OPENBLAS_ROOT)/include
97 LOCAL_EXPORT_CFLAGS += -DUSE_BLAS=1
99 include $(PREBUILT_STATIC_LIBRARY)
100 include $(CLEAR_VARS)
104 ## prepare ml common api if nothing present
105 ifndef ML_API_COMMON_ROOT
106 ifneq ($(MAKECMDGOALS),clean)
108 ML_API_COMMON_ROOT := $(NDK_INCLUDES_OUT)/ml_api_common
109 $(info $(shell ($(NNTRAINER_JNI_ROOT)/prepare_ml-api.sh $(ML_API_COMMON_ROOT))))
112 endif #ML_API_COMMON_ROOT
114 ML_API_COMMON_INCLUDES := $(ML_API_COMMON_ROOT)/include
116 LOCAL_MODULE := ml-api-inference
117 LOCAL_SRC_FILES := $(ML_API_COMMON_ROOT)/lib/arm64-v8a/libnnstreamer-native.so
118 LOCAL_EXPORT_C_INCLUDES := $(ML_API_COMMON_ROOT)/include
119 LOCAL_EXPORT_CFLAGS += -DUSE_BLAS=1
121 include $(PREBUILT_SHARED_LIBRARY)
123 include $(CLEAR_VARS)
125 NNTRAINER_SRCS := $(NNTRAINER_ROOT)/nntrainer/models/neuralnet.cpp \
126 $(NNTRAINER_ROOT)/nntrainer/models/model_loader.cpp \
127 $(NNTRAINER_ROOT)/nntrainer/models/model_common_properties.cpp \
128 $(NNTRAINER_ROOT)/nntrainer/models/dynamic_training_optimization.cpp \
129 $(NNTRAINER_ROOT)/nntrainer/dataset/iteration_queue.cpp \
130 $(NNTRAINER_ROOT)/nntrainer/dataset/databuffer.cpp \
131 $(NNTRAINER_ROOT)/nntrainer/dataset/data_iteration.cpp \
132 $(NNTRAINER_ROOT)/nntrainer/dataset/databuffer_factory.cpp \
133 $(NNTRAINER_ROOT)/nntrainer/dataset/func_data_producer.cpp \
134 $(NNTRAINER_ROOT)/nntrainer/dataset/random_data_producers.cpp \
135 $(NNTRAINER_ROOT)/nntrainer/dataset/raw_file_data_producer.cpp \
136 $(NNTRAINER_ROOT)/nntrainer/tensor/tensor.cpp \
137 $(NNTRAINER_ROOT)/nntrainer/tensor/lazy_tensor.cpp \
138 $(NNTRAINER_ROOT)/nntrainer/tensor/manager.cpp \
139 $(NNTRAINER_ROOT)/nntrainer/tensor/var_grad.cpp \
140 $(NNTRAINER_ROOT)/nntrainer/tensor/weight.cpp \
141 $(NNTRAINER_ROOT)/nntrainer/tensor/tensor_dim.cpp \
142 $(NNTRAINER_ROOT)/nntrainer/tensor/memory_pool.cpp \
143 $(NNTRAINER_ROOT)/nntrainer/tensor/basic_planner.cpp \
144 $(NNTRAINER_ROOT)/nntrainer/tensor/blas_interface.cpp \
145 $(NNTRAINER_ROOT)/nntrainer/layers/layer_node.cpp \
146 $(NNTRAINER_ROOT)/nntrainer/layers/layer_context.cpp \
147 $(NNTRAINER_ROOT)/nntrainer/layers/input_layer.cpp \
148 $(NNTRAINER_ROOT)/nntrainer/layers/multiout_layer.cpp \
149 $(NNTRAINER_ROOT)/nntrainer/layers/fc_layer.cpp \
150 $(NNTRAINER_ROOT)/nntrainer/layers/bn_layer.cpp \
151 $(NNTRAINER_ROOT)/nntrainer/layers/loss/loss_layer.cpp \
152 $(NNTRAINER_ROOT)/nntrainer/layers/loss/mse_loss_layer.cpp \
153 $(NNTRAINER_ROOT)/nntrainer/layers/loss/cross_entropy_sigmoid_loss_layer.cpp \
154 $(NNTRAINER_ROOT)/nntrainer/layers/loss/cross_entropy_softmax_loss_layer.cpp \
155 $(NNTRAINER_ROOT)/nntrainer/layers/conv2d_layer.cpp \
156 $(NNTRAINER_ROOT)/nntrainer/layers/pooling2d_layer.cpp \
157 $(NNTRAINER_ROOT)/nntrainer/layers/activation_layer.cpp \
158 $(NNTRAINER_ROOT)/nntrainer/layers/flatten_layer.cpp \
159 $(NNTRAINER_ROOT)/nntrainer/layers/addition_layer.cpp \
160 $(NNTRAINER_ROOT)/nntrainer/layers/concat_layer.cpp \
161 $(NNTRAINER_ROOT)/nntrainer/layers/preprocess_flip_layer.cpp \
162 $(NNTRAINER_ROOT)/nntrainer/layers/preprocess_translate_layer.cpp \
163 $(NNTRAINER_ROOT)/nntrainer/layers/preprocess_l2norm_layer.cpp \
164 $(NNTRAINER_ROOT)/nntrainer/layers/embedding.cpp \
165 $(NNTRAINER_ROOT)/nntrainer/layers/rnn.cpp \
166 $(NNTRAINER_ROOT)/nntrainer/layers/lstm.cpp \
167 $(NNTRAINER_ROOT)/nntrainer/layers/gru.cpp \
168 $(NNTRAINER_ROOT)/nntrainer/layers/time_dist.cpp \
169 $(NNTRAINER_ROOT)/nntrainer/layers/dropout.cpp \
170 $(NNTRAINER_ROOT)/nntrainer/layers/permute_layer.cpp \
171 $(NNTRAINER_ROOT)/nntrainer/layers/centroid_knn.cpp \
172 $(NNTRAINER_ROOT)/nntrainer/layers/acti_func.cpp \
173 $(NNTRAINER_ROOT)/nntrainer/layers/split_layer.cpp \
174 $(NNTRAINER_ROOT)/nntrainer/layers/common_properties.cpp \
175 $(NNTRAINER_ROOT)/nntrainer/layers/layer_impl.cpp \
176 $(NNTRAINER_ROOT)/nntrainer/graph/network_graph.cpp \
177 $(NNTRAINER_ROOT)/nntrainer/graph/graph_core.cpp \
178 $(NNTRAINER_ROOT)/nntrainer/optimizers/optimizer_context.cpp \
179 $(NNTRAINER_ROOT)/nntrainer/optimizers/optimizer_devel.cpp \
180 $(NNTRAINER_ROOT)/nntrainer/optimizers/optimizer_impl.cpp \
181 $(NNTRAINER_ROOT)/nntrainer/optimizers/adam.cpp \
182 $(NNTRAINER_ROOT)/nntrainer/optimizers/sgd.cpp \
183 $(NNTRAINER_ROOT)/nntrainer/utils/util_func.cpp \
184 $(NNTRAINER_ROOT)/nntrainer/utils/ini_wrapper.cpp \
185 $(NNTRAINER_ROOT)/nntrainer/utils/profiler.cpp \
186 $(NNTRAINER_ROOT)/nntrainer/utils/node_exporter.cpp \
187 $(NNTRAINER_ROOT)/nntrainer/utils/base_properties.cpp \
188 $(NNTRAINER_ROOT)/nntrainer/compiler/ini_interpreter.cpp \
189 $(NNTRAINER_ROOT)/nntrainer/app_context.cpp
191 ifeq ($(ENABLE_TFLITE_INTERPRETER), 1)
192 NNTRAINER_SRCS += $(NNTRAINER_ROOT)/nntrainer/compiler/tflite_opnode.cpp \
193 $(NNTRAINER_ROOT)/nntrainer/compiler/tflite_interpreter.cpp
194 endif #ENABLE_TFLITE_INTERPRETER
196 # Add tflite backbone building
197 ifeq ($(ENABLE_TFLITE_BACKBONE),1)
198 NNTRAINER_SRCS += $(NNTRAINER_ROOT)/nntrainer/layers/tflite_layer.cpp
199 endif #ENABLE_TFLITE_BACKBONE
201 NNTRAINER_INCLUDES := $(NNTRAINER_ROOT)/nntrainer \
202 $(NNTRAINER_ROOT)/nntrainer/dataset \
203 $(NNTRAINER_ROOT)/nntrainer/layers \
204 $(NNTRAINER_ROOT)/nntrainer/layers/loss \
205 $(NNTRAINER_ROOT)/nntrainer/models \
206 $(NNTRAINER_ROOT)/nntrainer/tensor \
207 $(NNTRAINER_ROOT)/nntrainer/optimizers \
208 $(NNTRAINER_ROOT)/nntrainer/utils \
209 $(NNTRAINER_ROOT)/nntrainer/graph \
210 $(NNTRAINER_ROOT)/nntrainer/utils \
211 $(NNTRAINER_ROOT)/nntrainer/compiler \
212 $(NNTRAINER_ROOT)/api \
213 $(NNTRAINER_ROOT)/api/ccapi/include
215 INIPARSER_SRCS := $(INIPARSER_ROOT)/src/iniparser.c \
216 $(INIPARSER_ROOT)/src/dictionary.c
218 INIPARSER_INCLUDES := $(INIPARSER_ROOT)/src
220 LOCAL_ARM_NEON := true
221 LOCAL_CFLAGS += -pthread -fexceptions
222 LOCAL_CXXFLAGS += -std=c++17 -frtti -fexceptions
223 LOCAL_LDFLAGS += -fuse-ld=bfd
224 LOCAL_MODULE_TAGS := optional
226 LOCAL_LDLIBS := -llog -landroid
228 LOCAL_MODULE := nntrainer
229 LOCAL_SRC_FILES := $(NNTRAINER_SRCS) $(INIPARSER_SRCS)
230 LOCAL_C_INCLUDES := $(NNTRAINER_INCLUDES) $(INIPARSER_INCLUDES) $(ML_API_COMMON_INCLUDES)
232 # Add tflite backbone building
233 ifeq ($(ENABLE_TFLITE_BACKBONE),1)
234 LOCAL_STATIC_LIBRARIES += tensorflow-lite
235 LOCAL_CFLAGS += -DENABLE_TFLITE_BACKBONE=1
236 endif #ENABLE_TFLITE_BACKBONE
238 ifeq ($(ENABLE_TFLITE_INTERPRETER), 1)
239 LOCAL_CFLAGS += -DENABLE_TFLITE_INTERPRETER
240 endif #ENABLE_TFLITE_INTERPRETER
243 ifeq ($(ENABLE_PROFILE), 1)
244 LOCAL_CFLAGS += -DPROFILE=1
245 endif #ENABLE_PROFILE
247 ifeq ($(ENABLE_BLAS), 1)
248 LOCAL_STATIC_LIBRARIES += openblas
251 include $(BUILD_SHARED_LIBRARY)
253 include $(CLEAR_VARS)
255 CCAPI_NNTRAINER_SRCS := $(NNTRAINER_ROOT)/api/ccapi/src/factory.cpp
257 CCAPI_NNTRAINER_INCLUDES := $(NNTRAINER_ROOT)/nntrainer \
258 $(NNTRAINER_ROOT)/nntrainer/dataset \
259 $(NNTRAINER_ROOT)/nntrainer/layers \
260 $(NNTRAINER_ROOT)/nntrainer/models \
261 $(NNTRAINER_ROOT)/nntrainer/tensor \
262 $(NNTRAINER_ROOT)/nntrainer/graph \
263 $(NNTRAINER_ROOT)/nntrainer/optimizers \
264 $(NNTRAINER_ROOT)/nntrainer/utils \
265 $(NNTRAINER_ROOT)/api \
266 $(NNTRAINER_ROOT)/api/ccapi/include
268 LOCAL_SHARED_LIBRARIES := nntrainer
270 LOCAL_ARM_NEON := true
271 LOCAL_CFLAGS += -pthread -fexceptions
272 LOCAL_CXXFLAGS += -std=c++17 -frtti -fexceptions
273 LOCAL_LDFLAGS += -fuse-ld=bfd
274 LOCAL_MODULE_TAGS := optional
276 LOCAL_LDLIBS := -llog -landroid
278 LOCAL_MODULE := ccapi-nntrainer
279 LOCAL_SRC_FILES := $(CCAPI_NNTRAINER_SRCS)
280 LOCAL_C_INCLUDES := $(CCAPI_NNTRAINER_INCLUDES) $(ML_API_COMMON_INCLUDES)
282 include $(BUILD_SHARED_LIBRARY)
284 include $(CLEAR_VARS)
286 CAPI_NNTRAINER_SRCS := $(NNTRAINER_ROOT)/api/capi/src/nntrainer.cpp
288 CAPI_NNTRAINER_INCLUDES := $(NNTRAINER_ROOT)/nntrainer \
289 $(NNTRAINER_ROOT)/api \
290 $(NNTRAINER_ROOT)/api/ccapi/include \
291 $(NNTRAINER_ROOT)/api/capi/include
293 LOCAL_SHARED_LIBRARIES := ccapi-nntrainer ml-api-inference nntrainer
295 LOCAL_ARM_NEON := true
296 LOCAL_CFLAGS += -pthread -fexceptions
297 LOCAL_CXXFLAGS += -std=c++17 -frtti -fexceptions
298 LOCAL_LDFLAGS += -fuse-ld=bfd
299 LOCAL_MODULE_TAGS := optional
301 LOCAL_LDLIBS := -llog -landroid
303 LOCAL_MODULE := capi-nntrainer
304 LOCAL_SRC_FILES := $(CAPI_NNTRAINER_SRCS)
305 LOCAL_C_INCLUDES := $(CAPI_NNTRAINER_INCLUDES) $(ML_API_COMMON_INCLUDES)
307 include $(BUILD_SHARED_LIBRARY)