blob: 73ae8ca2918644ee3e2c682bd8a388fb6ab73f2d [file] [log] [blame]
Mike Kelly0e415132020-02-11 11:21:25 +00001#
2# Copyright © 2017 ARM Ltd. All rights reserved.
3# SPDX-License-Identifier: MIT
4#
5
6ANDROID_NN_DRIVER_LOCAL_PATH := $(call my-dir)
7LOCAL_PATH := $(ANDROID_NN_DRIVER_LOCAL_PATH)
8
9P_OR_LATER := 0
10Q_OR_LATER := 0
11
12ifeq ($(PLATFORM_VERSION),9)
13P_OR_LATER := 1
14endif # PLATFORM_VERSION == 9
15ifeq ($(PLATFORM_VERSION),P)
16P_OR_LATER := 1
17endif # PLATFORM_VERSION == P
18
19ifeq ($(PLATFORM_VERSION),10)
20P_OR_LATER := 1
21Q_OR_LATER := 1
22endif # PLATFORM_VERSION == 10
23ifeq ($(PLATFORM_VERSION),Q)
24P_OR_LATER := 1
25Q_OR_LATER := 1
26endif # PLATFORM_VERSION == Q
27
28CPP_VERSION := c++14
29
30ifeq ($(Q_OR_LATER),1)
31CPP_VERSION := c++17
32endif
33
34# Configure these paths if you move the source or Khronos headers
35ARMNN_HEADER_PATH := $(LOCAL_PATH)/armnn/include
36ARMNN_UTILS_HEADER_PATH := $(LOCAL_PATH)/armnn/src/armnnUtils
37OPENCL_HEADER_PATH := $(LOCAL_PATH)/clframework/include
38NN_HEADER_PATH := $(LOCAL_PATH)/../../../frameworks/ml/nn/runtime/include
39
40# Variables to control CL/NEON/reference backend support
41# Set them to '0' to disable support for a specific backend
42ARMNN_COMPUTE_CL_ENABLED := 1
43ARMNN_COMPUTE_NEON_ENABLED := 1
44ARMNN_REF_ENABLED := 1
45
46ifeq ($(ARMNN_COMPUTE_CL_ENABLE),0)
47ARMNN_COMPUTE_CL_ENABLED := 0
48endif
49
50ifeq ($(ARMNN_COMPUTE_NEON_ENABLE),0)
51ARMNN_COMPUTE_NEON_ENABLED := 0
52endif
53
54ifeq ($(ARMNN_REF_ENABLE),0)
55ARMNN_REF_ENABLED := 0
56endif
57
58#######################
59# libarmnn-driver@1.0 #
60#######################
61include $(CLEAR_VARS)
62
63LOCAL_MODULE := libarmnn-driver@1.0
64ifeq ($(Q_OR_LATER),1)
65# "eng" is deprecated in Android Q
66LOCAL_MODULE_TAGS := optional
67else
68LOCAL_MODULE_TAGS := eng optional
69endif
70LOCAL_ARM_MODE := arm
71LOCAL_PROPRIETARY_MODULE := true
72# Mark source files as dependent on Android.mk
73LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
74
75LOCAL_C_INCLUDES := \
76 $(ARMNN_HEADER_PATH) \
77 $(ARMNN_UTILS_HEADER_PATH) \
78 $(OPENCL_HEADER_PATH) \
79 $(NN_HEADER_PATH)
80
81LOCAL_CFLAGS := \
82 -std=$(CPP_VERSION) \
83 -fexceptions \
84 -Werror \
85 -Wno-format-security
86
87ifeq ($(P_OR_LATER),1)
88# Required to build with the changes made to the Android ML framework starting from Android P,
89# regardless of the HAL version used for the build.
90LOCAL_CFLAGS+= \
91 -DARMNN_ANDROID_P
92endif # PLATFORM_VERSION == 9
93
94ifeq ($(ARMNN_DRIVER_DEBUG),1)
95LOCAL_CFLAGS+= \
96 -UNDEBUG
97endif # ARMNN_DRIVER_DEBUG == 1
98
99ifeq ($(Q_OR_LATER),1)
100LOCAL_CFLAGS += \
101 -DBOOST_NO_AUTO_PTR
102endif # PLATFORM_VERSION == Q or later
103
104ifeq ($(ARMNN_COMPUTE_CL_ENABLED),1)
105LOCAL_CFLAGS += \
106 -DARMCOMPUTECL_ENABLED
107endif # ARMNN_COMPUTE_CL_ENABLED == 1
108
109ifeq ($(ARMNN_COMPUTE_NEON_ENABLED),1)
110LOCAL_CFLAGS += \
111 -DARMCOMPUTENEON_ENABLED
112endif # ARMNN_COMPUTE_NEON_ENABLED == 1
113
114ifeq ($(ARMNN_REF_ENABLED),1)
115LOCAL_CFLAGS += \
116 -DARMNNREF_ENABLED
117endif # ARMNN_REF_ENABLED == 1
118
119LOCAL_SRC_FILES := \
120 1.0/ArmnnDriverImpl.cpp \
121 1.0/HalPolicy.cpp \
122 ArmnnDriverImpl.cpp \
123 DriverOptions.cpp \
124 ArmnnDevice.cpp \
125 ArmnnPreparedModel.cpp \
126 ModelToINetworkConverter.cpp \
127 RequestThread.cpp \
128 Utils.cpp \
129 ConversionUtils.cpp
130
131LOCAL_STATIC_LIBRARIES := \
132 libneuralnetworks_common \
133 libboost_log \
134 libboost_program_options \
135 libboost_system \
136 libboost_thread \
137 libboost_filesystem \
138 arm_compute_library
139
140LOCAL_WHOLE_STATIC_LIBRARIES := libarmnn
141
142LOCAL_SHARED_LIBRARIES := \
143 libbase \
144 libhidlbase \
145 libhidltransport \
146 libhidlmemory \
147 liblog \
148 libutils \
149 android.hardware.neuralnetworks@1.0 \
150 android.hidl.allocator@1.0 \
151 android.hidl.memory@1.0
152
153ifeq ($(P_OR_LATER),1)
154# Required to build the 1.0 version of the NN Driver on Android P and later versions,
155# as the 1.0 version of the NN API needs the 1.1 HAL headers to be included regardless.
156LOCAL_SHARED_LIBRARIES+= \
157 android.hardware.neuralnetworks@1.1
158endif # PLATFORM_VERSION == 9
159
160ifeq ($(Q_OR_LATER),1)
161LOCAL_SHARED_LIBRARIES+= \
162 libnativewindow \
163 libui \
164 libfmq \
165 libcutils \
166 android.hardware.neuralnetworks@1.2
167endif # PLATFORM_VERSION == Q
168
169ifeq ($(ARMNN_COMPUTE_CL_ENABLED),1)
170LOCAL_SHARED_LIBRARIES+= \
171 libOpenCL
172endif
173
174include $(BUILD_STATIC_LIBRARY)
175
176ifeq ($(P_OR_LATER),1)
177# The following target is available starting from Android P
178
179#######################
180# libarmnn-driver@1.1 #
181#######################
182include $(CLEAR_VARS)
183
184LOCAL_MODULE := libarmnn-driver@1.1
185ifeq ($(Q_OR_LATER),1)
186# "eng" is deprecated in Android Q
187LOCAL_MODULE_TAGS := optional
188else
189LOCAL_MODULE_TAGS := eng optional
190endif
191#PRODUCT_PACKAGES_ENG := libarmnn-driver@1.1
192LOCAL_ARM_MODE := arm
193LOCAL_PROPRIETARY_MODULE := true
194# Mark source files as dependent on Android.mk
195LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
196
197LOCAL_C_INCLUDES := \
198 $(ARMNN_HEADER_PATH) \
199 $(ARMNN_UTILS_HEADER_PATH) \
200 $(OPENCL_HEADER_PATH) \
201 $(NN_HEADER_PATH)
202
203LOCAL_CFLAGS := \
204 -std=$(CPP_VERSION) \
205 -fexceptions \
206 -Werror \
207 -Wno-format-security \
208 -DARMNN_ANDROID_P \
209 -DARMNN_ANDROID_NN_V1_1
210
211ifeq ($(ARMNN_DRIVER_DEBUG),1)
212LOCAL_CFLAGS+= \
213 -UNDEBUG
214endif # ARMNN_DRIVER_DEBUG == 1
215
216ifeq ($(Q_OR_LATER),1)
217LOCAL_CFLAGS += \
218 -DBOOST_NO_AUTO_PTR
219endif # PLATFORM_VERSION == Q or later
220
221ifeq ($(ARMNN_COMPUTE_CL_ENABLED),1)
222LOCAL_CFLAGS += \
223 -DARMCOMPUTECL_ENABLED
224endif # ARMNN_COMPUTE_CL_ENABLED == 1
225
226ifeq ($(ARMNN_COMPUTE_NEON_ENABLED),1)
227LOCAL_CFLAGS += \
228 -DARMCOMPUTENEON_ENABLED
229endif # ARMNN_COMPUTE_NEON_ENABLED == 1
230
231ifeq ($(ARMNN_REF_ENABLED),1)
232LOCAL_CFLAGS += \
233 -DARMNNREF_ENABLED
234endif # ARMNN_REF_ENABLED == 1
235
236LOCAL_SRC_FILES := \
237 1.0/ArmnnDriverImpl.cpp \
238 1.0/HalPolicy.cpp \
239 1.1/ArmnnDriverImpl.cpp \
240 1.1/HalPolicy.cpp \
241 ArmnnDriverImpl.cpp \
242 DriverOptions.cpp \
243 ArmnnDevice.cpp \
244 ArmnnPreparedModel.cpp \
245 ModelToINetworkConverter.cpp \
246 RequestThread.cpp \
247 Utils.cpp \
248 ConversionUtils.cpp
249
250LOCAL_STATIC_LIBRARIES := \
251 libneuralnetworks_common \
252 libboost_log \
253 libboost_program_options \
254 libboost_system \
255 libboost_thread \
256 libboost_filesystem \
257 arm_compute_library
258
259LOCAL_WHOLE_STATIC_LIBRARIES := libarmnn
260
261LOCAL_SHARED_LIBRARIES := \
262 libbase \
263 libhidlbase \
264 libhidltransport \
265 libhidlmemory \
266 liblog \
267 libutils \
268 android.hardware.neuralnetworks@1.0 \
269 android.hardware.neuralnetworks@1.1 \
270 android.hidl.allocator@1.0 \
271 android.hidl.memory@1.0
272
273ifeq ($(Q_OR_LATER),1)
274LOCAL_SHARED_LIBRARIES+= \
275 libnativewindow \
276 libui \
277 libfmq \
278 libcutils \
279 android.hardware.neuralnetworks@1.2
280endif # PLATFORM_VERSION == Q
281
282ifeq ($(ARMNN_COMPUTE_CL_ENABLED),1)
283LOCAL_SHARED_LIBRARIES+= \
284 libOpenCL
285endif
286
287include $(BUILD_STATIC_LIBRARY)
288
289endif # PLATFORM_VERSION == 9
290
291ifeq ($(Q_OR_LATER),1)
292# The following target is available starting from Android Q
293
294#######################
295# libarmnn-driver@1.2 #
296#######################
297include $(CLEAR_VARS)
298
299LOCAL_MODULE := libarmnn-driver@1.2
300LOCAL_MODULE_TAGS := optional
301LOCAL_ARM_MODE := arm
302LOCAL_PROPRIETARY_MODULE := true
303# Mark source files as dependent on Android.mk
304LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
305
306LOCAL_C_INCLUDES := \
307 $(ARMNN_HEADER_PATH) \
308 $(ARMNN_UTILS_HEADER_PATH) \
309 $(OPENCL_HEADER_PATH) \
310 $(NN_HEADER_PATH)
311
312LOCAL_CFLAGS := \
313 -std=$(CPP_VERSION) \
314 -fexceptions \
315 -Werror \
316 -Wno-format-security \
317 -DARMNN_ANDROID_Q \
318 -DARMNN_ANDROID_NN_V1_2
319
320ifeq ($(ARMNN_DRIVER_DEBUG),1)
321LOCAL_CFLAGS+= \
322 -UNDEBUG
323endif # ARMNN_DRIVER_DEBUG == 1
324
325ifeq ($(Q_OR_LATER),1)
326LOCAL_CFLAGS += \
327 -DBOOST_NO_AUTO_PTR
328endif # PLATFORM_VERSION == Q or later
329
330ifeq ($(ARMNN_COMPUTE_CL_ENABLED),1)
331LOCAL_CFLAGS += \
332 -DARMCOMPUTECL_ENABLED
333endif # ARMNN_COMPUTE_CL_ENABLED == 1
334
335ifeq ($(ARMNN_COMPUTE_NEON_ENABLED),1)
336LOCAL_CFLAGS += \
337 -DARMCOMPUTENEON_ENABLED
338endif # ARMNN_COMPUTE_NEON_ENABLED == 1
339
340ifeq ($(ARMNN_REF_ENABLED),1)
341LOCAL_CFLAGS += \
342 -DARMNNREF_ENABLED
343endif # ARMNN_REF_ENABLED == 1
344
345LOCAL_SRC_FILES := \
346 1.0/ArmnnDriverImpl.cpp \
347 1.0/HalPolicy.cpp \
348 1.1/ArmnnDriverImpl.cpp \
349 1.1/HalPolicy.cpp \
350 1.2/ArmnnDriverImpl.cpp \
351 1.2/HalPolicy.cpp \
352 ArmnnDevice.cpp \
353 ArmnnDriverImpl.cpp \
354 ArmnnPreparedModel.cpp \
355 ArmnnPreparedModel_1_2.cpp \
356 ConversionUtils.cpp \
357 DriverOptions.cpp \
358 ModelToINetworkConverter.cpp \
359 RequestThread.cpp \
360 Utils.cpp
361
362LOCAL_STATIC_LIBRARIES := \
363 libneuralnetworks_common \
364 libboost_log \
365 libboost_program_options \
366 libboost_system \
367 libboost_thread \
368 libboost_filesystem \
369 arm_compute_library
370
371LOCAL_WHOLE_STATIC_LIBRARIES := libarmnn
372
373LOCAL_SHARED_LIBRARIES := \
374 libbase \
375 libhidlbase \
376 libhidltransport \
377 libhidlmemory \
378 liblog \
379 libutils \
380 libnativewindow \
381 libui \
382 libfmq \
383 libcutils \
384 android.hidl.allocator@1.0 \
385 android.hidl.memory@1.0 \
386 android.hardware.neuralnetworks@1.0 \
387 android.hardware.neuralnetworks@1.1 \
388 android.hardware.neuralnetworks@1.2
389
390ifeq ($(ARMNN_COMPUTE_CL_ENABLED),1)
391LOCAL_SHARED_LIBRARIES+= \
392 libOpenCL
393endif
394
395include $(BUILD_STATIC_LIBRARY)
396
397endif # PLATFORM_VERSION == Q
398
399#####################################################
400# android.hardware.neuralnetworks@1.0-service-armnn #
401#####################################################
402include $(CLEAR_VARS)
403
404LOCAL_MODULE := android.hardware.neuralnetworks@1.0-service-armnn
405LOCAL_INIT_RC := android.hardware.neuralnetworks@1.0-service-armnn.rc
406ifeq ($(Q_OR_LATER),1)
407# "eng" is deprecated in Android Q
408LOCAL_MODULE_TAGS := optional
409else
410LOCAL_MODULE_TAGS := eng optional
411endif
412LOCAL_ARM_MODE := arm
413LOCAL_MODULE_RELATIVE_PATH := hw
414LOCAL_PROPRIETARY_MODULE := true
415# Mark source files as dependent on Android.mk
416LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
417
418LOCAL_C_INCLUDES := \
419 $(ARMNN_HEADER_PATH) \
420 $(NN_HEADER_PATH)
421
422LOCAL_CFLAGS := \
423 -std=$(CPP_VERSION) \
424 -fexceptions
425
426ifeq ($(ARMNN_DRIVER_DEBUG),1)
427LOCAL_CFLAGS += \
428 -UNDEBUG
429endif # ARMNN_DRIVER_DEBUG == 1
430
431ifeq ($(Q_OR_LATER),1)
432LOCAL_CFLAGS += \
433 -DBOOST_NO_AUTO_PTR
434endif # PLATFORM_VERSION == Q or later
435
436LOCAL_SRC_FILES := \
437 service.cpp
438
439LOCAL_STATIC_LIBRARIES := \
440 libneuralnetworks_common \
441 libboost_log \
442 libboost_program_options \
443 libboost_system \
444 libboost_thread \
445 libboost_filesystem \
446 arm_compute_library
447
448LOCAL_WHOLE_STATIC_LIBRARIES := \
449 libarmnn-driver@1.0
450
451LOCAL_SHARED_LIBRARIES := \
452 libbase \
453 libhidlbase \
454 libhidltransport \
455 libhidlmemory \
456 libdl \
457 libhardware \
458 liblog \
459 libtextclassifier_hash \
460 libutils \
461 android.hardware.neuralnetworks@1.0 \
462 android.hidl.allocator@1.0 \
463 android.hidl.memory@1.0
464
465ifeq ($(P_OR_LATER),1)
466# Required to build the 1.0 version of the NN Driver on Android P and later versions,
467# as the 1.0 version of the NN API needs the 1.1 HAL headers to be included regardless.
468LOCAL_SHARED_LIBRARIES+= \
469 android.hardware.neuralnetworks@1.1
470endif # PLATFORM_VERSION == 9
471ifeq ($(Q_OR_LATER),1)
472LOCAL_SHARED_LIBRARIES+= \
473 libnativewindow \
474 libui \
475 libfmq \
476 libcutils \
477 android.hardware.neuralnetworks@1.2
478endif # PLATFORM_VERSION == Q
479
480ifeq ($(ARMNN_COMPUTE_CL_ENABLED),1)
481LOCAL_SHARED_LIBRARIES+= \
482 libOpenCL
483endif
484
485include $(BUILD_EXECUTABLE)
486
487ifeq ($(P_OR_LATER),1)
488# The following target is available starting from Android P
489
490#####################################################
491# android.hardware.neuralnetworks@1.1-service-armnn #
492#####################################################
493include $(CLEAR_VARS)
494
495LOCAL_MODULE := android.hardware.neuralnetworks@1.1-service-armnn
496LOCAL_INIT_RC := android.hardware.neuralnetworks@1.1-service-armnn.rc
497ifeq ($(Q_OR_LATER),1)
498# "eng" is deprecated in Android Q
499LOCAL_MODULE_TAGS := optional
500else
501LOCAL_MODULE_TAGS := eng optional
502endif
503LOCAL_ARM_MODE := arm
504LOCAL_MODULE_RELATIVE_PATH := hw
505LOCAL_PROPRIETARY_MODULE := true
506# Mark source files as dependent on Android.mk
507LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
508
509LOCAL_C_INCLUDES := \
510 $(ARMNN_HEADER_PATH) \
511 $(NN_HEADER_PATH)
512
513LOCAL_CFLAGS := \
514 -std=$(CPP_VERSION) \
515 -fexceptions \
516 -DARMNN_ANDROID_NN_V1_1
517
518ifeq ($(ARMNN_DRIVER_DEBUG),1)
519LOCAL_CFLAGS += \
520 -UNDEBUG
521endif # ARMNN_DRIVER_DEBUG == 1
522
523ifeq ($(Q_OR_LATER),1)
524LOCAL_CFLAGS += \
525 -DBOOST_NO_AUTO_PTR
526endif # PLATFORM_VERSION == Q or later
527
528LOCAL_SRC_FILES := \
529 service.cpp
530
531LOCAL_STATIC_LIBRARIES := \
532 libneuralnetworks_common \
533 libboost_log \
534 libboost_program_options \
535 libboost_system \
536 libboost_thread \
537 libboost_filesystem \
538 arm_compute_library
539
540LOCAL_WHOLE_STATIC_LIBRARIES := \
541 libarmnn-driver@1.1
542
543LOCAL_SHARED_LIBRARIES := \
544 libbase \
545 libhidlbase \
546 libhidltransport \
547 libhidlmemory \
548 libdl \
549 libhardware \
550 liblog \
551 libtextclassifier_hash \
552 libutils \
553 android.hardware.neuralnetworks@1.0 \
554 android.hardware.neuralnetworks@1.1 \
555 android.hidl.allocator@1.0 \
556 android.hidl.memory@1.0
557
558ifeq ($(Q_OR_LATER),1)
559LOCAL_SHARED_LIBRARIES+= \
560 libnativewindow \
561 libui \
562 libfmq \
563 libcutils \
564 android.hardware.neuralnetworks@1.2
565endif # PLATFORM_VERSION == Q
566
567ifeq ($(ARMNN_COMPUTE_CL_ENABLED),1)
568LOCAL_SHARED_LIBRARIES+= \
569 libOpenCL
570endif
571
572include $(BUILD_EXECUTABLE)
573
574endif # PLATFORM_VERSION == 9
575
576ifeq ($(Q_OR_LATER),1)
577# The following target is available starting from Android Q
578
579#####################################################
580# android.hardware.neuralnetworks@1.2-service-armnn #
581#####################################################
582include $(CLEAR_VARS)
583
584LOCAL_MODULE := android.hardware.neuralnetworks@1.2-service-armnn
585LOCAL_INIT_RC := android.hardware.neuralnetworks@1.2-service-armnn.rc
586LOCAL_MODULE_TAGS := optional
587LOCAL_ARM_MODE := arm
588LOCAL_MODULE_RELATIVE_PATH := hw
589LOCAL_PROPRIETARY_MODULE := true
590# Mark source files as dependent on Android.mk
591LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
592
593LOCAL_C_INCLUDES := \
594 $(ARMNN_HEADER_PATH) \
595 $(NN_HEADER_PATH)
596
597LOCAL_CFLAGS := \
598 -std=$(CPP_VERSION) \
599 -fexceptions \
600 -DARMNN_ANDROID_NN_V1_2 \
601 -DBOOST_NO_AUTO_PTR
602
603ifeq ($(ARMNN_DRIVER_DEBUG),1)
604LOCAL_CFLAGS += \
605 -UNDEBUG
606endif # ARMNN_DRIVER_DEBUG == 1
607
608LOCAL_SRC_FILES := \
609 service.cpp
610
611LOCAL_STATIC_LIBRARIES := \
612 libneuralnetworks_common \
613 libboost_log \
614 libboost_program_options \
615 libboost_system \
616 libboost_thread \
617 libboost_filesystem \
618 arm_compute_library
619
620LOCAL_WHOLE_STATIC_LIBRARIES := \
621 libarmnn-driver@1.2
622
623LOCAL_SHARED_LIBRARIES := \
624 libbase \
625 libhidlbase \
626 libhidltransport \
627 libhidlmemory \
628 libdl \
629 libhardware \
630 liblog \
631 libtextclassifier_hash \
632 libutils \
633 libnativewindow \
634 libui \
635 libfmq \
636 libcutils \
637 android.hidl.allocator@1.0 \
638 android.hidl.memory@1.0 \
639 android.hardware.neuralnetworks@1.0 \
640 android.hardware.neuralnetworks@1.1 \
641 android.hardware.neuralnetworks@1.2
642
643ifeq ($(ARMNN_COMPUTE_CL_ENABLED),1)
644LOCAL_SHARED_LIBRARIES+= \
645 libOpenCL
646endif
647
648include $(BUILD_EXECUTABLE)
649
650endif # PLATFORM_VERSION == Q
651
652##########################
653# armnn module and tests #
654##########################
655# Note we use ANDROID_NN_DRIVER_LOCAL_PATH rather than LOCAL_PATH because LOCAL_PATH will be overwritten
656# when including other .mk files that set it.
657include $(ANDROID_NN_DRIVER_LOCAL_PATH)/armnn/Android.mk
658include $(ANDROID_NN_DRIVER_LOCAL_PATH)/test/Android.mk