9a21c910721be77981161a6a11437ef85c54a29b
[platform/core/ml/nntrainer.git] / jni / Android.mk
1 # ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=./Android.mk NDK_APPLICATION_MK=./Application.mk -j2
2 LOCAL_PATH := $(call my-dir)
3 include $(CLEAR_VARS)
4
5 ENABLE_TFLITE_BACKBONE := 1
6 ENABLE_TFLITE_INTERPRETER := 1
7 ENABLE_BLAS := 1
8
9 NEED_TF_LITE := 0
10
11 ifeq ($(ENABLE_TFLITE_BACKBONE), 1)
12 NEED_TF_LITE := 1
13 else ifeq ($(ENABLE_TFLITE_INTERPRETER), 1)
14 NEED_TF_LITE := 1
15 endif
16
17 ifndef NNTRAINER_ROOT
18 NNTRAINER_ROOT := $(LOCAL_PATH)/..
19 endif
20
21 ifndef NDK_LIBS_OUT
22 NDK_LIBS_OUT := $(NDK_PROJECT_PATH)
23 endif
24
25 ifndef NDK_INCLUDES_OUT
26 NDK_INCLUDES_OUT := $(NDK_PROJECT_PATH)
27 endif
28
29 include $(CLEAR_VARS)
30
31 ifndef INIPARSER_ROOT
32 ifneq ($(MAKECMDGOALS),clean)
33 $(warning INIPARSER_ROOT is not defined!)
34 $(warning INIPARSER SRC is going to be downloaded!)
35
36 INIPARSER_ROOT :=$(NDK_LIBS_OUT)/iniparser
37
38 $(info $(shell ($(LOCAL_PATH)/prepare_iniparser.sh $(NDK_LIBS_OUT))))
39
40 endif #MAKECMDGOALS
41 endif #INIPARSER_ROOT
42
43 include $(CLEAR_VARS)
44
45 NNTRAINER_JNI_ROOT := $(NNTRAINER_ROOT)/jni
46
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
51
52 ifndef TENSORFLOW_ROOT
53 ifneq ($(MAKECMDGOALS),clean)
54 $(warning TENSORFLOW_ROOT is not defined!)
55 $(warning TENSORFLOW SRC is going to be downloaded!)
56
57 TENSORFLOW_ROOT := $(NDK_LIBS_OUT)/tensorflow-$(TENSORFLOW_VERSION)/tensorflow-lite
58
59 $(info $(shell ($(NNTRAINER_JNI_ROOT)/prepare_tflite.sh $(TENSORFLOW_VERSION) $(NDK_LIBS_OUT))))
60
61 $(info $(shell (flatc -c $(NNTRAINER_ROOT)/nntrainer/compiler/tf_schema.fbs)))
62 $(info $(shell (mv tf_schema_generated.h $(NNTRAINER_ROOT)/nntrainer/compiler)))
63
64 endif #MAKECMDGOALS
65 endif #TENSORFLOW_ROOT
66
67 LOCAL_MODULE := tensorflow-lite
68 LIB_ := arm64
69
70 ifeq ($(APP_ABI), armeabi-v7a)
71         LIB_ := armv7
72 endif
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
76
77 include $(PREBUILT_STATIC_LIBRARY)
78
79 endif #NEED_TF_LITE
80
81 ifeq ($(ENABLE_BLAS), 1)
82 include $(CLEAR_VARS)
83
84 ## prepare openblas if nothing present
85 ifndef OPENBLAS_ROOT
86 ifneq ($(MAKECMDGOALS),clean)
87
88 OPENBLAS_ROOT := $(NDK_LIBS_OUT)/openblas
89 $(info $(shell $(NNTRAINER_JNI_ROOT)/prepare_openblas.sh $(NDK_LIBS_OUT)))
90
91 endif #MAKECMDGOALS
92 endif #OPENBLAS_ROOT
93
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
98
99 include $(PREBUILT_STATIC_LIBRARY)
100 include $(CLEAR_VARS)
101
102 endif #ENABLE_BLAS
103
104 ## prepare ml common api if nothing present
105 ifndef ML_API_COMMON_ROOT
106 ifneq ($(MAKECMDGOALS),clean)
107
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))))
110
111 endif #MAKECMDGOALS
112 endif #ML_API_COMMON_ROOT
113
114 ML_API_COMMON_INCLUDES := $(ML_API_COMMON_ROOT)/include
115
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
120
121 include $(PREBUILT_SHARED_LIBRARY)
122
123 include $(CLEAR_VARS)
124
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
190
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
195
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
200
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
214
215 INIPARSER_SRCS := $(INIPARSER_ROOT)/src/iniparser.c \
216                   $(INIPARSER_ROOT)/src/dictionary.c
217
218 INIPARSER_INCLUDES := $(INIPARSER_ROOT)/src
219
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
225
226 LOCAL_LDLIBS        := -llog -landroid
227
228 LOCAL_MODULE        := nntrainer
229 LOCAL_SRC_FILES     := $(NNTRAINER_SRCS) $(INIPARSER_SRCS)
230 LOCAL_C_INCLUDES    := $(NNTRAINER_INCLUDES) $(INIPARSER_INCLUDES) $(ML_API_COMMON_INCLUDES)
231
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
237
238 ifeq ($(ENABLE_TFLITE_INTERPRETER), 1)
239 LOCAL_CFLAGS += -DENABLE_TFLITE_INTERPRETER
240 endif #ENABLE_TFLITE_INTERPRETER
241
242 # Enable Profile
243 ifeq ($(ENABLE_PROFILE), 1)
244 LOCAL_CFLAGS += -DPROFILE=1
245 endif #ENABLE_PROFILE
246
247 ifeq ($(ENABLE_BLAS), 1)
248 LOCAL_STATIC_LIBRARIES += openblas
249 endif #ENABLE_BLAS
250
251 include $(BUILD_SHARED_LIBRARY)
252
253 include $(CLEAR_VARS)
254
255 CCAPI_NNTRAINER_SRCS := $(NNTRAINER_ROOT)/api/ccapi/src/factory.cpp
256
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
267
268 LOCAL_SHARED_LIBRARIES := nntrainer
269
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
275
276 LOCAL_LDLIBS        := -llog -landroid
277
278 LOCAL_MODULE        := ccapi-nntrainer
279 LOCAL_SRC_FILES     := $(CCAPI_NNTRAINER_SRCS)
280 LOCAL_C_INCLUDES    := $(CCAPI_NNTRAINER_INCLUDES) $(ML_API_COMMON_INCLUDES)
281
282 include $(BUILD_SHARED_LIBRARY)
283
284 include $(CLEAR_VARS)
285
286 CAPI_NNTRAINER_SRCS := $(NNTRAINER_ROOT)/api/capi/src/nntrainer.cpp
287
288 CAPI_NNTRAINER_INCLUDES := $(NNTRAINER_ROOT)/nntrainer \
289                       $(NNTRAINER_ROOT)/api \
290                       $(NNTRAINER_ROOT)/api/ccapi/include \
291                       $(NNTRAINER_ROOT)/api/capi/include
292
293 LOCAL_SHARED_LIBRARIES := ccapi-nntrainer ml-api-inference nntrainer
294
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
300
301 LOCAL_LDLIBS        := -llog -landroid
302
303 LOCAL_MODULE        := capi-nntrainer
304 LOCAL_SRC_FILES     := $(CAPI_NNTRAINER_SRCS)
305 LOCAL_C_INCLUDES    := $(CAPI_NNTRAINER_INCLUDES) $(ML_API_COMMON_INCLUDES)
306
307 include $(BUILD_SHARED_LIBRARY)