HOST_ARCH?=$(shell uname -p) TARGET_ARCH?=$(shell uname -p) BUILD_TYPE?=Debug CROSS_BUILD?=0 HOST_OS?=linux TARGET_OS?=linux PARALLEL_BUILD?=1 ## TODO: fix obs build break OBS_BUILD?=OFF COVERAGE_BUILD?=0 BENCHMARK_ACL_BUILD?=0 OPTIONS?= GENERATE_NNAPI_TESTS?=1 TFLITE_MAJOR_VER?=1 TFLITE_MINOR_VER?=13 # make TARGET and TYPE to lowercase HOST_ARCH_LC=$(shell echo $(HOST_ARCH) | tr A-Z a-z) TARGET_ARCH_LC=$(shell echo $(TARGET_ARCH) | tr A-Z a-z) BUILD_TYPE_LC=$(shell echo $(BUILD_TYPE) | tr A-Z a-z) # we need base name 'arm` for all arm arch TARGET_ARCH_BASE=$(TARGET_ARCH_LC) ifneq (,$(findstring arm64,$(TARGET_ARCH_BASE))) # arm64 as target-arch comes from Android TARGET_ARCH_BASE=arm64 # For now Android is the only option for arm64 TARGET_OS:=android else ifneq (,$(findstring arm,$(TARGET_ARCH_BASE))) TARGET_ARCH_BASE=arm else ifneq (,$(findstring aarch64,$(TARGET_ARCH_BASE))) # aarch64 as target-arch comes from all except for Android TARGET_ARCH_BASE=aarch64 endif # Set CROSS_BUILD=1 when ROOTFS_DIR is given, and TARGET_ARCH is different to HOST_ARCH. ifneq ($(ROOTFS_DIR),) ifneq ($(TARGET_ARCH_LC),$(HOST_ARCH_LC)) CROSS_BUILD=$(if $(wildcard $(ROOTFS_DIR)),1,0) endif endif # the toolchain file, only for cross build ifeq ($(CROSS_BUILD),1) TOOLCHAIN_FILE=cmake/buildtool/cross/toolchain_$(TARGET_ARCH_LC)-$(TARGET_OS).cmake OPTIONS+= -DCMAKE_TOOLCHAIN_FILE=$(TOOLCHAIN_FILE) endif ifeq ($(COVERAGE_BUILD),1) OPTIONS+= -DENABLE_COVERAGE=ON else OPTIONS+= -DENABLE_COVERAGE=OFF endif ifeq ($(BENCHMARK_ACL_BUILD),1) OPTIONS+= -DBUILD_BENCHMARK_ACL=1 endif ifneq ($(EXT_ACL_FOLDER),) OPTIONS+= -DBUILD_ARMCOMPUTE=OFF OPTIONS+= -DARMCompute_EXTDIR=$(EXT_ACL_FOLDER) endif ifneq ($(EXTERNAL_VOLUME),) OPTIONS+= -DNNFW_EXTERNALS_DIR=$(EXTERNAL_VOLUME) endif ifneq ($(OBS_BUILD),OFF) # Use pre-installed google test library OPTIONS+= -DBUILD_GTEST=FALSE OPTIONS+= -DBUILD_ARMCOMPUTE=FALSE OPTIONS+= -DDOWNLOAD_ARMCOMPUTE=FALSE OPTIONS+= -DDOWNLOAD_TENSORFLOW=FALSE # Use pre-installed tensorflow lite library OPTIONS+= -DBUILD_TENSORFLOW_LITE=FALSE # Disable logging runtime build for Tizen OPTIONS+= -DBUILD_LOGGING=FALSE OPTIONS+= -DBUILD_TOOLS=FALSE # Disable "tflite-run" and "tflite_benchmark_model" for Tizen OPTIONS+= -DBUILD_TFLITE_RUN=FALSE OPTIONS+= -DBUILD_TFLITE_BENCHMARK_MODEL=FALSE endif ifeq ($(GENERATE_NNAPI_TESTS),1) OPTIONS+= -DGENERATE_RUNTIME_NNAPI_TESTS=ON endif ifeq ($(PARALLEL_BUILD),1) # Get number of processors (linux only for now) ifeq ($(HOST_OS),linux) NPROCS?=$(shell grep -c ^processor /proc/cpuinfo) endif endif NPROCS?=1 WORKHOME=Product WORKFOLDER=$(TARGET_ARCH_LC)-$(TARGET_OS).$(BUILD_TYPE_LC) WORKDIR=$(WORKHOME)/$(WORKFOLDER) BUILD_ROOT=$(WORKDIR)/obj INSTALL_ROOT=$(WORKDIR)/out BUILD_FOLDER=$(WORKFOLDER)/obj INSTALL_FOLDER=$(WORKFOLDER)/out BUILD_ALIAS=$(WORKHOME)/obj INSTALL_ALIAS=$(WORKHOME)/out INSTALL_PATH?=$(CURDIR)/$(WORKDIR)/out TIMESTAMP_CONFIGURE=$(WORKDIR)/CONFIGURE TIMESTAMP_BUILD=$(WORKDIR)/BUILD TIMESTAMP_INSTALL=$(WORKDIR)/INSTALL all: build ### ### Command (public) ### configure: configure_internal build: build_internal install: $(TIMESTAMP_INSTALL) clean: rm -rf $(WORKDIR) distclean: rm -rf $(WORKDIR) rm -rf externals/*.stamp rm -rf tests/nnapi/src/generated/ ### ### Command (internal) ### configure_internal: NNFW_BUILD_DIR="$(CURDIR)/$(BUILD_ROOT)" NNFW_INSTALL_PREFIX=$(INSTALL_PATH) ./nnfw configure \ -DCMAKE_BUILD_TYPE=$(BUILD_TYPE_LC) -DTARGET_ARCH=$(TARGET_ARCH_LC) \ -DHOST_OS=$(HOST_OS) \ -DTARGET_OS=$(TARGET_OS) \ -DTFLITE_MAJOR_VER=$(TFLITE_MAJOR_VER) \ -DTFLITE_MINOR_VER=$(TFLITE_MINOR_VER) \ $(OPTIONS) touch $(TIMESTAMP_CONFIGURE) build_internal: $(BUILD_ROOT) cd $(BUILD_ROOT) && make -j $(NPROCS) all rm -rf $(BUILD_ALIAS) ln -s $(BUILD_FOLDER) $(BUILD_ALIAS) touch $(TIMESTAMP_BUILD) install_internal: cd $(BUILD_ROOT) && make install rm -rf $(INSTALL_ALIAS) ln -s $(INSTALL_FOLDER) $(INSTALL_ALIAS) touch $(TIMESTAMP_INSTALL) build_test_suite: install_internal @echo "packaging test suite" @rm -rf $(INSTALL_ROOT)/test-suite.tar.gz @tar -zcf test-suite.tar.gz tests/scripts tests/framework infra $(INSTALL_ALIAS) --dereference @mv test-suite.tar.gz $(INSTALL_ROOT)/. build_coverage_suite: install_internal @echo "packaging test-coverage suite" @rm -rf $(INSTALL_ROOT)/coverage-suite.tar.gz @find Product -name "*.gcno" > include_lists.txt @pwd | grep -o '/' | wc -l > tests/scripts/build_path_depth.txt @tar -zcf coverage-suite.tar.gz tests/scripts tests/framework tools/lcov-to-cobertura-xml \ nnas nnfw infra runtimes $(INSTALL_ALIAS) --dereference -T include_lists.txt @rm -rf include_lists.txt tests/scripts/build_path_depth.txt @mv coverage-suite.tar.gz $(INSTALL_ROOT)/. ### ### Timestamps ### $(WORKDIR): mkdir -p $@ $(BUILD_ROOT): $(WORKDIR) configure_internal $(TIMESTAMP_CONFIGURE): configure_internal $(TIMESTAMP_BUILD): $(TIMESTAMP_CONFIGURE) build_internal $(TIMESTAMP_INSTALL): $(TIMESTAMP_BUILD) install_internal