1 HOST_ARCH?=$(shell uname -m)
2 TARGET_ARCH?=$(shell uname -m)
11 # make TARGET and TYPE to lowercase
12 HOST_ARCH_LC=$(shell echo $(HOST_ARCH) | tr A-Z a-z)
13 TARGET_ARCH_LC=$(shell echo $(TARGET_ARCH) | tr A-Z a-z)
14 BUILD_TYPE_LC=$(shell echo $(BUILD_TYPE) | tr A-Z a-z)
15 # we need base name 'arm` for all arm arch
16 TARGET_ARCH_BASE=$(TARGET_ARCH_LC)
17 ifneq (,$(findstring arm64,$(TARGET_ARCH_BASE)))
18 TARGET_ARCH_LC=aarch64
19 else ifneq (,$(findstring arm,$(TARGET_ARCH_BASE)))
21 else ifneq (,$(findstring aarch64,$(TARGET_ARCH_BASE)))
22 TARGET_ARCH_LC=aarch64
24 ifneq (,$(findstring android,$(TARGET_OS)))
25 # Anndroid only allow aarch64 target-arch
26 TARGET_ARCH_LC=aarch64
29 # Set CROSS_BUILD=1 when ROOTFS_DIR is given, and TARGET_ARCH is different to HOST_ARCH.
30 ifneq ($(ROOTFS_DIR),)
31 ifneq ($(TARGET_ARCH_LC),$(HOST_ARCH_LC))
32 CROSS_BUILD=$(if $(wildcard $(ROOTFS_DIR)),1,0)
35 # the toolchain file, only for cross build
36 ifeq ($(CROSS_BUILD),1)
37 TOOLCHAIN_FILE=cmake/buildtool/cross/toolchain_$(TARGET_ARCH_LC)-$(TARGET_OS).cmake
38 OPTIONS+= -DCMAKE_TOOLCHAIN_FILE=$(TOOLCHAIN_FILE)
41 ifeq ($(COVERAGE_BUILD),1)
42 OPTIONS+= -DENABLE_COVERAGE=ON
44 OPTIONS+= -DENABLE_COVERAGE=OFF
47 ifeq ($(BENCHMARK_ACL_BUILD),1)
48 OPTIONS+= -DBUILD_BENCHMARK_ACL=1
51 ifneq ($(EXT_HDF5_DIR),)
52 $(info Hello $(EXT_HDF5_DIR))
53 OPTIONS+= -DEXT_HDF5_DIR=$(EXT_HDF5_DIR)
56 ifneq ($(EXTERNAL_VOLUME),)
57 OPTIONS+= -DNNAS_EXTERNALS_DIR=$(EXTERNAL_VOLUME)
60 ifeq ($(TARGET_OS),android)
61 OPTIONS+= -DNDK_DIR=$(NDK_DIR)
64 ifneq ($(ANDROID_BUILD_TOOLS_DIR),)
65 OPTIONS+= -DANDROID_BUILD_TOOLS_DIR=$(ANDROID_BUILD_TOOLS_DIR)
68 ifneq ($(ANDROID_SDK_DIR),)
69 OPTIONS+= -DANDROID_SDK_DIR=$(ANDROID_SDK_DIR)
72 ifneq ($(TFLITE_MODEL_PATH),)
73 OPTIONS+= -DTFLITE_MODEL_PATH=$(TFLITE_MODEL_PATH)
76 ifneq ($(ANDROID_BOOST_ROOT),)
77 OPTIONS+= -DANDROID_BOOST_ROOT=$(ANDROID_BOOST_ROOT)
80 ifeq ($(HOST_OS),linux)
81 NPROCS?=$(shell grep -c ^processor /proc/cpuinfo)
86 WORKHOME=$(CURDIR)/Product
87 WORKFOLDER=$(TARGET_ARCH_LC)-$(TARGET_OS).$(BUILD_TYPE_LC)
88 WORKSPACE=$(WORKHOME)/$(WORKFOLDER)
90 BUILD_FOLDER=$(WORKSPACE)/obj
91 INSTALL_PATH?=$(WORKSPACE)/out
92 OVERLAY_FOLDER?=$(WORKSPACE)/overlay
93 BUILD_ALIAS=$(WORKHOME)/obj
94 INSTALL_ALIAS=$(WORKHOME)/out
96 TIMESTAMP_CONFIGURE=$(WORKSPACE)/CONFIGURE
97 TIMESTAMP_BUILD=$(WORKSPACE)/BUILD
98 TIMESTAMP_INSTALL=$(WORKSPACE)/INSTALL
105 configure: configure_internal
107 build: build_internal
109 install: $(TIMESTAMP_INSTALL)
111 create_package: runtime_tar_internal
113 create_acl_tar: acl_tar_internal
120 rm -rf externals/*.stamp
121 rm -rf tests/nnapi/src/generated/
124 ### Command (internal)
127 # TODO Remove setting EXT_ACL_FOLDER
128 # Construct overlay folder directly outside (with headers?)
129 ifneq ($(EXT_ACL_FOLDER),)
130 mkdir -p $(OVERLAY_FOLDER)/lib
131 cp $(EXT_ACL_FOLDER)/* $(OVERLAY_FOLDER)/lib
134 NNFW_WORKSPACE="$(WORKSPACE)" NNFW_INSTALL_PREFIX=$(INSTALL_PATH) ./nnfw configure \
135 -DCMAKE_BUILD_TYPE=$(BUILD_TYPE_LC) \
136 -DNNFW_OVERLAY_DIR=$(OVERLAY_FOLDER) \
137 -DACL_BUILD_THREADS=$(NPROCS) \
139 touch $(TIMESTAMP_CONFIGURE)
141 build_internal: $(BUILD_FOLDER)
142 NNFW_WORKSPACE="$(WORKSPACE)" ./nnfw build -j $(NPROCS)
143 rm -rf $(BUILD_ALIAS)
144 ln -s $(BUILD_FOLDER) $(BUILD_ALIAS)
145 touch $(TIMESTAMP_BUILD)
148 NNFW_WORKSPACE="$(WORKSPACE)" ./nnfw install
149 rm -rf $(INSTALL_ALIAS)
150 ln -s $(INSTALL_PATH) $(INSTALL_ALIAS)
151 touch $(TIMESTAMP_INSTALL)
153 runtime_tar_internal: $(TIMESTAMP_BUILD) install_internal
154 tar -zcf $(WORKSPACE)/nnfw-package.tar.gz -C $(INSTALL_PATH) lib
155 tar -zcf $(WORKSPACE)/nnfw-devel-package.tar.gz -C $(INSTALL_PATH) include/nnfw
156 tar -zcf $(WORKSPACE)/nnfw-plugin-devel-package.tar.gz -C $(INSTALL_PATH) include/onert
157 tar -zcf $(WORKSPACE)/nnfw-test-package.tar.gz -C $(INSTALL_PATH) $(shell ls $(INSTALL_PATH) -I lib -I include)
159 acl_tar_internal: $(BUILD_FOLDER)
160 tar -zcf $(WORKSPACE)/nnfw-acl.tar.gz -C ${OVERLAY_FOLDER} lib/libarm_compute.so lib/libarm_compute_core.so lib/libarm_compute_graph.so
162 install_internal_acl:
163 # Workaround to install acl for test (ignore error when there is no file to copy)
164 cp $(OVERLAY_FOLDER)/lib/libarm_compute* $(INSTALL_ALIAS)/lib || true
166 build_test_suite: install_internal install_internal_acl
167 @echo "packaging test suite"
168 @rm -rf $(INSTALL_PATH)/test-suite.tar.gz
169 # TODO Divide runtime package, external library package, and test suite
170 @tar -zcf test-suite.tar.gz tests/scripts infra Product/out --dereference
171 @mv test-suite.tar.gz $(INSTALL_PATH)/.
173 build_coverage_suite: install_internal install_internal_acl
174 @echo "packaging test-coverage suite"
175 @rm -rf $(INSTALL_PATH)/coverage-suite.tar.gz
176 @find Product -name "*.gcno" > include_lists.txt
177 @pwd | grep -o '/' | wc -l > tests/scripts/build_path_depth.txt
178 @tar -zcf coverage-suite.tar.gz tests/scripts infra Product/out --dereference -T include_lists.txt
179 @rm -rf include_lists.txt tests/scripts/build_path_depth.txt
180 @mv coverage-suite.tar.gz $(INSTALL_PATH)/.
188 $(BUILD_FOLDER): $(WORKSPACE) configure_internal
190 $(TIMESTAMP_CONFIGURE): configure_internal
192 $(TIMESTAMP_BUILD): $(TIMESTAMP_CONFIGURE) build_internal
194 $(TIMESTAMP_INSTALL): $(TIMESTAMP_BUILD) install_internal install_internal_acl