328 lines
8.0 KiB
Makefile
328 lines
8.0 KiB
Makefile
|
|
# make 编译并下载
|
|
# make VERBOSE=1 显示编译详细过程
|
|
# make clean 清除编译临时文件
|
|
#
|
|
# 注意: Linux 下编译方式:
|
|
# 1. 从 http://pkgman.jieliapp.com/doc/all 处找到下载链接
|
|
# 2. 下载后,解压到 /opt/jieli 目录下,保证
|
|
# /opt/jieli/common/bin/clang 存在(注意目录层次)
|
|
# 3. 确认 ulimit -n 的结果足够大(建议大于8096),否则链接可能会因为打开文件太多而失败
|
|
# 可以通过 ulimit -n 8096 来设置一个较大的值
|
|
#
|
|
|
|
# 工具路径设置
|
|
ifeq ($(OS), Windows_NT)
|
|
# Windows 下工具链位置
|
|
TOOL_DIR := C:/JL/pi32/bin
|
|
CC := clang.exe
|
|
CXX := clang.exe
|
|
LD := pi32v2-lto-wrapper.exe
|
|
AR := llvm-ar.exe
|
|
MKDIR := mkdir_win -p
|
|
RM := rm -rf
|
|
|
|
SYS_LIB_DIR := C:/JL/pi32/pi32v2-lib/r3
|
|
SYS_INC_DIR := C:/JL/pi32/pi32v2-include
|
|
EXT_CFLAGS := # Windows 下不需要 -D__SHELL__
|
|
export PATH:=$(TOOL_DIR);$(PATH)
|
|
|
|
## 后处理脚本
|
|
POST_SCRIPT := cpu/br35/output/download.bat
|
|
RUN_POST_SCRIPT := cpu\br35\output\download.bat
|
|
else
|
|
# Linux 下工具链位置
|
|
TOOL_DIR := /opt/jieli/pi32v2/bin
|
|
CC := clang
|
|
CXX := clang
|
|
LD := lto-wrapper
|
|
AR := lto-ar
|
|
MKDIR := mkdir -p
|
|
RM := rm -rf
|
|
export OBJDUMP := $(TOOL_DIR)/objdump
|
|
export OBJCOPY := $(TOOL_DIR)/objcopy
|
|
export OBJSIZEDUMP := $(TOOL_DIR)/objsizedump
|
|
|
|
SYS_LIB_DIR := $(TOOL_DIR)/../lib/r3
|
|
SYS_INC_DIR := $(TOOL_DIR)/../include
|
|
EXT_CFLAGS := -D__SHELL__ # Linux 下需要这个保证正确处理 download.c
|
|
export PATH:=$(TOOL_DIR):$(PATH)
|
|
|
|
## 后处理脚本
|
|
POST_SCRIPT := cpu/br35/output/download.sh
|
|
RUN_POST_SCRIPT := bash $(POST_SCRIPT)
|
|
endif
|
|
|
|
CC := $(TOOL_DIR)/$(CC)
|
|
CXX := $(TOOL_DIR)/$(CXX)
|
|
LD := $(TOOL_DIR)/$(LD)
|
|
AR := $(TOOL_DIR)/$(AR)
|
|
# 输出文件设置
|
|
OUT_ELF := cpu/br35/output/ota_loader.elf
|
|
OBJ_FILE := $(OUT_ELF).objs.txt
|
|
# 编译路径设置
|
|
BUILD_DIR := objs
|
|
|
|
# 编译参数设置
|
|
CFLAGS := \
|
|
-target pi32v2 \
|
|
-mcpu=r3 \
|
|
-integrated-as \
|
|
-flto \
|
|
-integrated-as \
|
|
-fallow-pointer-null \
|
|
-fno-common \
|
|
-flto \
|
|
-g \
|
|
-Oz \
|
|
-mllvm -pi32v2-large-program=true \
|
|
-Wno-format \
|
|
-Wno-unused-value \
|
|
-Wno-unused-function \
|
|
-Wno-unused-comparison \
|
|
-Wno-parentheses \
|
|
-Wno-tautological-compare \
|
|
-Wno-incompatible-library-redeclaration \
|
|
-Wno-invalid-noreturn \
|
|
-Wno-visibility \
|
|
-Wno-integer-overflow \
|
|
-fms-extensions \
|
|
-Wno-shift-negative-value \
|
|
|
|
|
|
# C++额外的编译参数
|
|
CXXFLAGS :=
|
|
|
|
|
|
# 宏定义
|
|
DEFINES := \
|
|
-D__GCC_PI32V2__ \
|
|
-DCONFIG_CPU_BR35 \
|
|
-DOTA_LOADER_TYPE=lcflash_ota \
|
|
-D__APP_IS_OTA \
|
|
-D__DEBUG \
|
|
-D__ST_DEBUG \
|
|
-D__NOR_DEBUG \
|
|
-D__JLFS_DEBUG \
|
|
-D__UP_DEBUG \
|
|
-DCONFIG_BTCTRLE_V2_ENABLE \
|
|
-DUSER_LC_FLASH_UPDATA_MODULE_CONTROL=1 \
|
|
-D__USE_MASK_API__ \
|
|
-D__MASK_LZ4 \
|
|
-DCONFIG_NEW_BREDR_ENABLE \
|
|
-DCONFIG_NEW_MODEM_ENABLE \
|
|
-D__USE_MASK_INI_DEC \
|
|
-D__FLASH_SUPPORT_4BIT_MODE \
|
|
-D__FLASH_SUPPORT_CONTINUE_READ_MODE \
|
|
-D__UPDATE_RUN_RAM \
|
|
|
|
|
|
DEFINES += $(EXT_CFLAGS) # 额外的一些定义
|
|
|
|
# 头文件搜索路径
|
|
INCLUDES := \
|
|
-Iapp \
|
|
-Iapp/inc \
|
|
-Iapp/inc/cpu/br35 \
|
|
-Icpu \
|
|
-Icpu/br35 \
|
|
-Iinclude_lib \
|
|
-Iinclude_lib/common \
|
|
-Iinclude_lib/driver \
|
|
-Iinclude_lib/driver/common \
|
|
-Iinclude_lib/driver/cpu \
|
|
-Iinclude_lib/driver/cpu/br35 \
|
|
-Iinclude_lib/driver/cpu/br35/power \
|
|
-Iinclude_lib/driver/device \
|
|
-Iinclude_lib/driver/device/dev_mg \
|
|
-Iinclude_lib/driver/device/eeprom \
|
|
-Iinclude_lib/driver/device/norflash \
|
|
-Iinclude_lib/driver/device/sdmmc \
|
|
-Iinclude_lib/driver/device/usb \
|
|
-Iinclude_lib/driver/jlfs \
|
|
-Iinclude_lib/driver/jlup \
|
|
-Iinclude_lib/system \
|
|
-Iinclude_lib/system/common \
|
|
-Iinclude_lib/system/cpu \
|
|
-Iinclude_lib/system/cpu/br35 \
|
|
-Iinclude_lib/system/cpu/br35/asm \
|
|
-Iinclude_lib/system/cpu/br35/asm/power \
|
|
-Iinclude_lib/system/fs \
|
|
-Iinclude_lib/system/os \
|
|
-Iinclude_lib/system/generic \
|
|
-Iinclude_lib/system/fs/lite_file_sys \
|
|
-Iinclude_lib/update \
|
|
-Iinclude_lib/jl_rcsp \
|
|
-Iinclude_lib/lib_mutual_loader \
|
|
-Iinterface/btctrler \
|
|
-Iinterface/btctrler/port/br35 \
|
|
-I$(SYS_INC_DIR) \
|
|
|
|
|
|
# 需要编译的 .c 文件
|
|
c_SRC_FILES := \
|
|
app/src/common/cbuf.c \
|
|
app/src/common/lbuf.c \
|
|
app/src/common/msg.c \
|
|
app/src/common/sys_timer.c \
|
|
app/src/common/version.c \
|
|
app/src/lib_btctrler_config.c \
|
|
app/src/loader_main.c \
|
|
app/src/log_config.c \
|
|
app/src/update/update_main.c \
|
|
app/src/update/user_lc_flash_update.c \
|
|
|
|
|
|
# 需要编译的 .S 文件
|
|
S_SRC_FILES :=
|
|
|
|
|
|
# 需要编译的 .s 文件
|
|
s_SRC_FILES :=
|
|
|
|
|
|
# 需要编译的 .cpp 文件
|
|
cpp_SRC_FILES :=
|
|
|
|
|
|
# 需要编译的 .cc 文件
|
|
cc_SRC_FILES :=
|
|
|
|
|
|
# 需要编译的 .cxx 文件
|
|
cxx_SRC_FILES :=
|
|
|
|
|
|
# 链接参数
|
|
LFLAGS := \
|
|
--gc-sections \
|
|
--plugin-opt=-dont-used-symbol-list=malloc,free,sprintf,printf,puts,putchar,perror,vprintf,printi,fopen,fread,fwrite,fseek,strlen,memset,memcpy,strcpy,memmove,strcmp \
|
|
-M=cpu/br35/output/map.txt \
|
|
-Tcpu/br35/output/ram.ld \
|
|
--plugin-opt=-inline-threshold=5 \
|
|
--plugin-opt=-enable-ipra=true \
|
|
--plugin-opt=-pi32v2-always-use-itblock \
|
|
--plugin-opt=-pi32v2-merge-max-offset=64 \
|
|
--plugin-opt=-global-merge-on-const \
|
|
--plugin-opt=-pi32v2-enable-simd=true \
|
|
--plugin-opt=-pi32v2-enable-rep-memop=true \
|
|
--plugin-opt=mcpu=r3 \
|
|
--plugin-opt=save-temps \
|
|
--plugin-opt=-pi32v2-large-program=true \
|
|
--start-group \
|
|
--whole-archive \
|
|
include_lib/liba/br35/ota_loader_driver.a \
|
|
include_lib/liba/br35/system.a \
|
|
include_lib/liba/br35/update.a \
|
|
--no-whole-archive \
|
|
--end-group \
|
|
--plugin-opt=mcpu=r3 \
|
|
--plugin-opt=-mattr=+fprev1 \
|
|
|
|
|
|
LIBPATHS := \
|
|
-L$(SYS_LIB_DIR) \
|
|
|
|
|
|
LIBS := \
|
|
$(SYS_LIB_DIR)/libm.a \
|
|
$(SYS_LIB_DIR)/libc.a \
|
|
$(SYS_LIB_DIR)/libm.a \
|
|
$(SYS_LIB_DIR)/libcompiler-rt.a \
|
|
|
|
|
|
|
|
c_OBJS := $(c_SRC_FILES:%.c=%.c.o)
|
|
S_OBJS := $(S_SRC_FILES:%.S=%.S.o)
|
|
s_OBJS := $(s_SRC_FILES:%.s=%.s.o)
|
|
cpp_OBJS := $(cpp_SRC_FILES:%.cpp=%.cpp.o)
|
|
cxx_OBJS := $(cxx_SRC_FILES:%.cxx=%.cxx.o)
|
|
cc_OBJS := $(cc_SRC_FILES:%.cc=%.cc.o)
|
|
|
|
OBJS := $(c_OBJS) $(S_OBJS) $(s_OBJS) $(cpp_OBJS) $(cxx_OBJS) $(cc_OBJS)
|
|
DEP_FILES := $(OBJS:%.o=%.d)
|
|
|
|
|
|
OBJS := $(addprefix $(BUILD_DIR)/, $(OBJS))
|
|
DEP_FILES := $(addprefix $(BUILD_DIR)/, $(DEP_FILES))
|
|
|
|
|
|
VERBOSE ?= 0
|
|
ifeq ($(VERBOSE), 1)
|
|
QUITE :=
|
|
else
|
|
QUITE := @
|
|
endif
|
|
|
|
# 一些旧的 make 不支持 file 函数,需要 make 的时候指定 LINK_AT=0 make
|
|
LINK_AT ?= 1
|
|
|
|
# 表示下面的不是一个文件的名字,无论是否存在 all, clean, pre_build 这样的文件
|
|
# 还是要执行命令
|
|
# see: https://www.gnu.org/software/make/manual/html_node/Phony-Targets.html
|
|
.PHONY: all clean pre_build
|
|
|
|
# 不要使用 make 预设置的规则
|
|
# see: https://www.gnu.org/software/make/manual/html_node/Suffix-Rules.html
|
|
.SUFFIXES:
|
|
|
|
all: pre_build $(OUT_ELF)
|
|
$(info +POST-BUILD)
|
|
$(QUITE) $(RUN_POST_SCRIPT) ota_loader
|
|
|
|
pre_build:
|
|
$(info +PRE-BUILD)
|
|
$(QUITE) $(CC) $(CFLAGS) $(DEFINES) $(INCLUDES) -D__LD__ -E -P cpu/br35/output/ram_ld.c -o cpu/br35/output/ram.ld
|
|
|
|
clean:
|
|
$(QUITE) $(RM) $(OUT_ELF)
|
|
$(QUITE) $(RM) $(BUILD_DIR)
|
|
|
|
|
|
|
|
ifeq ($(LINK_AT), 1)
|
|
$(OUT_ELF): $(OBJS)
|
|
$(info +LINK $@)
|
|
$(shell $(MKDIR) $(@D))
|
|
$(file >$(OBJ_FILE), $(OBJS))
|
|
$(QUITE) $(LD) -o $(OUT_ELF) @$(OBJ_FILE) $(LFLAGS) $(LIBPATHS) $(LIBS)
|
|
else
|
|
$(OUT_ELF): $(OBJS)
|
|
$(info +LINK $@)
|
|
$(shell $(MKDIR) $(@D))
|
|
$(QUITE) $(LD) -o $(OUT_ELF) $(OBJS) $(LFLAGS) $(LIBPATHS) $(LIBS)
|
|
endif
|
|
|
|
|
|
$(BUILD_DIR)/%.c.o : %.c
|
|
$(info +CC $<)
|
|
$(QUITE) $(MKDIR) $(@D)
|
|
$(QUITE) $(CC) $(CFLAGS) $(DEFINES) $(INCLUDES) -MMD -MF $(@:.o=.d) -c $< -o $@
|
|
|
|
$(BUILD_DIR)/%.S.o : %.S
|
|
$(info +AS $<)
|
|
$(QUITE) $(MKDIR) $(@D)
|
|
$(QUITE) $(CC) $(CFLAGS) $(DEFINES) $(INCLUDES) -MMD -MF $(@:.o=.d) -c $< -o $@
|
|
|
|
$(BUILD_DIR)/%.s.o : %.s
|
|
$(info +AS $<)
|
|
$(QUITE) $(MKDIR) $(@D)
|
|
$(QUITE) $(CC) $(CFLAGS) $(DEFINES) $(INCLUDES) -MMD -MF $(@:.o=.d) -c $< -o $@
|
|
|
|
$(BUILD_DIR)/%.cpp.o : %.cpp
|
|
$(info +CXX $<)
|
|
$(QUITE) $(MKDIR) $(@D)
|
|
$(QUITE) $(CXX) $(CXXFLAGS) $(CFLAGS) $(DEFINES) $(INCLUDES) -MMD -MF $(@:.o=.d) -c $< -o $@
|
|
|
|
$(BUILD_DIR)/%.cxx.o : %.cxx
|
|
$(info +CXX $<)
|
|
$(QUITE) $(MKDIR) $(@D)
|
|
$(QUITE) $(CXX) $(CXXFLAGS) $(CFLAGS) $(DEFINES) $(INCLUDES) -MMD -MF $(@:.o=.d) -c $< -o $@
|
|
|
|
$(BUILD_DIR)/%.cc.o : %.cc
|
|
$(info +CXX $<)
|
|
$(QUITE) $(MKDIR) $(@D)
|
|
$(QUITE) $(CXX) $(CXXFLAGS) $(CFLAGS) $(DEFINES) $(INCLUDES) -MMD -MF $(@:.o=.d) -c $< -o $@
|
|
|
|
-include $(DEP_FILES)
|