代码拉取完成,页面将自动刷新
# 该Makefile应当通过build_project.sh脚本执行
VERSION = 1.0
# arm -> linux arm rk3188
# x86 -> window x86 mingw32 dll
# x64 -> linux x64
# aarch64 ->aarch64-linux-
TARGET_ARCH = arm
CROSS_COMPILE = arm-linux-gnueabihf-
RELEASE=0
AS = $(CROSS_COMPILE)as
CC = $(CROSS_COMPILE)gcc
CXX = $(CROSS_COMPILE)g++
LD = $(CROSS_COMPILE)ld
AR = $(CROSS_COMPILE)ar
STRIP = $(CROSS_COMPILE)strip
OBJCOPY = $(CROSS_COMPILE)objcopy
CP = cp
ifeq ($(RELEASE), 1)
DEBUG = -Wall -O2
else
DEBUG = -g -Wall
endif
CONFIG_COMPILER = gnu
TOP_DIR := $(shell pwd)
# 最终可执行文件名,是当前项目的目录名。
TARGET_EXEC := \
$(notdir $(patsubst %/,%,$(dir $(lastword $(abspath $(MAKEFILE_LIST))))))
# tensorflow源码的最外层目录,以及其依赖的第三方库目录
TF_DIR := ./tensorflow_src
TF_DEPENDENCY_DIR := $(TF_DIR)/tensorflow/lite/tools/make/downloads
RKNN_DIR := ./librknn_api
# 生成好的项目所在目录,项目obj和可执行文件所在目录
BUILD_DIR := $(TOP_DIR)/bin
OBJ_DIR := $(TOP_DIR)/bin
BIN_DIR := $(TOP_DIR)/bin
# 项目源文件、头文件和库文件所在目录
SRC_DIRS := $(TOP_DIR)/src \
$(TOP_DIR)/mfcc
INC_DIRS := $(TOP_DIR)/include \
$(TF_DIR) \
$(TF_DEPENDENCY_DIR)/flatbuffers/include \
$(TF_DEPENDENCY_DIR)/absl \
$(TF_DEPENDENCY_DIR)/googletest/googlemock/include \
$(TF_DEPENDENCY_DIR)/googletest/googletest/include \
$(RKNN_DIR)/include
LIB_DIRS := ./lib \
$(RKNN_DIR)/lib \
./libtensorflow/arm/lib
# 符合要求的源文件
SRCS += $(foreach src_dir,$(SRC_DIRS),$(wildcard $(src_dir)/*.cpp))
SRCS += $(foreach src_dir,$(SRC_DIRS),$(wildcard $(src_dir)/*.cc))
SRCS += $(foreach src_dir,$(SRC_DIRS),$(wildcard $(src_dir)/*.c))
# 用于处理多个源目录的情况
vpath %*.cpp %(SRC_DIRS)
vpath %*.cc %(SRC_DIRS)
vpath %*.c %(SRC_DIRS)
# 第三方路径
VPATH = ./mfcc:./src:./fft2d
# 需要的链接库
LIBS := -lpthread \
-latomic \
-lrt \
-ldl \
-lrknn_api
# obj文件的文件名及存放路径
#OBJS := $(($(notdir $SRCS):%=$(OBJ_DIR)/%.o)
OBJS := $(foreach file,$(SRCS),$(OBJ_DIR)/$(notdir $(file).o))
# 额外目录指定文件编译
OBJS_EXT := fftsg2d.c fftsg.c
OBJS += $(OBJS_EXT:%=$(OBJ_DIR)/%.o)
# =========================================================
DEFINES := #-D DLL
# 为编译器指定要包含的头文件目录
CPPFLAGS := $(addprefix -I,$(INC_DIRS))
# 为C++编译器指定预编译参数
#CXXFLAGS += \
-march=armv6 \
-mfpu=vfp \
-funsafe-math-optimizations \
-ftree-vectorize \
-fPIC \
-marm
# 为C编译器指定预编译参数
#CFLAGS += \
-march=armv6 \
-mfpu=vfp \
-funsafe-math-optimizations \
-ftree-vectorize \
-fPIC \
-marm
# 指定链接库和参数
#LDFLAGS := \
$(addprefix -L,$(LIB_DIRS)) \
$(LIBS) \
-Wl,--no-export-dynamic \
-Wl,--exclude-libs,ALL \
-Wl,--gc-sections \
-Wl,--as-needed
LDFLAGS := \
$(addprefix -L,$(LIB_DIRS)) \
$(LIBS)
# 汇编参数
AFLAGS :=
ifeq ($(TARGET_ARCH), arm)
CFLAGS +=
CXXFLAGS +=
else ifeq ($(TARGET_ARCH), x86)
CFLAGS +=
CXXFLAGS +=
else ifeq ($(TARGET_ARCH), x64)
CFLAGS +=
CXXFLAGS +=
endif
# =========================================================
# 链接所有obj文件
$(BIN_DIR)/$(TARGET_EXEC): $(OBJS)
$(CXX) $(OBJS) -o $@ $(LDFLAGS)
@echo "Version $(VERSION)"
@echo "Build $(TARGET_EXEC) program OK"
# 编译所有c源文件
$(OBJ_DIR)/%.c.o: %.c
$(CC) $(DEBUG) $(CPPFLAGS) $(CFLAGS) $(DEFINES) -c $< -o $@
# 编译所有cpp源文件
$(OBJ_DIR)/%.cpp.o: %.cpp
$(CXX) $(DEBUG) $(CPPFLAGS) $(CXXFLAGS) $(DEFINES) -c $< -o $@
# 编译所有cc源文件
$(OBJ_DIR)/%.cc.o: %.cc
$(CXX) $(DEBUG) $(CPPFLAGS) $(CXXFLAGS) $(DEFINES) -c $< -o $@
# =========================================================
# 清空项目生成目录
.PHONY: clean
clean:
rm -rf $(BUILD_DIR)/*
install:
@echo "install $(TARGET_EXEC)"
#lib:$(lib_obj)
# @echo "build only dll $(lib_obj)"
#$(lib_obj):$(main_obj) $(cpp_obj) $(c_obj)
# $(CXX) $(DEBUG) -shared -o $(out_dir)/$(lib_obj) $(main_obj) $(cpp_obj) $(CXXFLAGS) $(DLL) -Wl,--kill-at,--out-implib,$(out_dir)/$(lib_obj) $(DEFINES)
# @echo "Version $(VERSION)"
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。