# 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 export MKDIR := mkdir_win -p RM := rm -rf export SYS_LIB_DIR := C:/JL/pi32/pi32v2-lib/r3-large export SYS_INC_DIR := C:/JL/pi32/pi32v2-include export EXT_CFLAGS := # Windows 下不需要 -D__SHELL__ export PATH:=$(TOOL_DIR);$(PATH) ## 后处理脚本 export FIXBAT := tools/utils/fixbat.exe # 用于处理 utf8->gbk 编码问题 export POST_SCRIPT := cpu/br35/tools/download.bat export RUN_POST_SCRIPT := cpu\br35\tools\download.bat else # Linux 下工具链位置 TOOL_DIR := /opt/jieli/pi32v2/bin CC := clang CXX := clang LD := lto-wrapper AR := lto-ar export MKDIR := mkdir -p RM := rm -rf export OBJDUMP := $(TOOL_DIR)/objdump export OBJCOPY := $(TOOL_DIR)/objcopy export OBJSIZEDUMP := $(TOOL_DIR)/objsizedump export SYS_LIB_DIR := $(TOOL_DIR)/../lib/r3-large export SYS_INC_DIR := $(TOOL_DIR)/../include export EXT_CFLAGS := -D__SHELL__ # Linux 下需要这个保证正确处理 download.c export PATH:=$(TOOL_DIR):$(PATH) ## 后处理脚本 export FIXBAT := touch # Linux下不需要处理 bat 编码问题 export POST_SCRIPT := cpu/br35/tools/download.sh export RUN_POST_SCRIPT := bash $(POST_SCRIPT) endif export CC := $(TOOL_DIR)/$(CC) export CXX := $(TOOL_DIR)/$(CXX) export LD := $(TOOL_DIR)/$(LD) export AR := $(TOOL_DIR)/$(AR) # 输出文件设置 export OUT_ELF := cpu/br35/tools/sdk.elf export OBJ_FILE := $(OUT_ELF).objs.txt # 编译路径设置 export BUILD_DIR := objs # 编译参数设置 export CFLAGS := \ -target pi32v2 \ -mcpu=r3 \ -integrated-as \ -flto \ -Wuninitialized \ -Wno-invalid-noreturn \ -fno-common \ -integrated-as \ -Oz \ -g \ -flto \ -fallow-pointer-null \ -fprefer-gnu-section \ -Wno-shift-negative-value \ -Wframe-larger-than=256 \ -Wincompatible-pointer-types \ -Wreturn-type \ -Wimplicit-function-declaration \ -mllvm -pi32v2-large-program=true \ -fms-extensions \ -fdiscrete-bitfield-abi \ -fno-unwind-tables \ -ffunction-sections \ -fdata-sections \ -fmessage-length=0 \ # C++额外的编译参数 export CXXFLAGS := \ -std=gnu++14 \ -fno-exceptions \ -fno-rtti \ # 宏定义 export DEFINES := \ -DSUPPORT_MS_EXTENSIONS \ -DCONFIG_RELEASE_ENABLE \ -DLWIP_USE_BT \ -DCONFIG_CPU_BR35 \ -DCONFIG_USB_SUPPORT_MRX_TX \ -DCONFIG_IIC_VERSION2 \ -DCONFIG_PRINT_FLOAT_ENABLE \ -DCONFIG_NEW_BREDR_ENABLE \ -DCONFIG_NEW_MODEM_ENABLE \ -DCONFIG_NEW_TWS_FORWARD_ENABLE \ -DCONFIG_UCOS_ENABLE \ -DCONFIG_EQ_SUPPORT_ASYNC \ -DEQ_CORE_V1 \ -DWTS_DEC_IN_MASK \ -DCONFIG_SIN_TONE_V2 \ -DCONFIG_DNS_ENABLE \ -DCONFIG_DMS_MALLOC \ -DCONFIG_MMU_ENABLE \ -DCONFIG_AEC_M=256 \ -DCONFIG_AUDIO_ONCHIP \ -DCONFIG_MEDIA_NEW_ENABLE \ -DCONFIG_SUPPORT_EX_TWS_ADJUST \ -D__GCC_PI32V2__ \ -DCONFIG_NEW_ECC_ENABLE \ -DCONFIG_CODE_MOVABLE_ENABLE \ -DTCFG_USER_TWS_ENABLE=0 \ -DCONFIG_EFFECT_CORE_V2_ENABLE \ -DCONFIG_OS_AFFINITY_ENABLE=0 \ -DEXPORT_CONFIG_USB_ENABLE=1 \ -DEXPORT_CONFIG_SD_ENABLE=1 \ -DEXPORT_FMNA_ENABLE=1 \ -DCONFIG_APP_UI_ENABLE=1 \ -DEVENT_HANDLER_NUM_CONFIG=2 \ -DEVENT_TOUCH_ENABLE_CONFIG=0 \ -DEVENT_POOL_SIZE_CONFIG=256 \ -DCONFIG_EVENT_KEY_MAP_ENABLE=0 \ -DTIMER_POOL_NUM_CONFIG=15 \ -DAPP_ASYNC_POOL_NUM_CONFIG=0 \ -DVFS_FILE_POOL_NUM_CONFIG=1 \ -DFS_VERSION=0x020001 \ -DFATFS_VERSION=0x020101 \ -DSDFILE_VERSION=0x020000 \ -DVFS_ENABLE=1 \ -DVM_MAX_SIZE_CONFIG=64*1024 \ -DVM_ITEM_MAX_NUM=256 \ -DCONFIG_NEW_CFG_TOOL_ENABLE \ -DCONFIG_WATCH_CASE_ENABLE=1 \ -DCONFIG_LITE_AEC_ENABLE=0 \ -DAUDIO_REC_LITE \ -DAUDIO_DEC_LITE \ -DAUDIO_REC_POOL_NUM=1 \ -DAUDIO_DEC_POOL_NUM=3 \ -DCONFIG_BTCTRLER_TASK_DEL_ENABLE \ -DCONFIG_LINK_DISTURB_SCAN_ENABLE=0 \ -DCONFIG_UPDATA_ENABLE \ -DCONFIG_OTA_UPDATA_ENABLE \ -DEXPORT_PLATFORM_AUDIO_SMART_VOICE_ENABLE=1 \ -DEXPORT_PLATFORM_AUDIO_PDM_ENABLE=0 \ -DEXPORT_PLATFORM_AUDIO_ALINK_ENABLE=0 \ -DEXPORT_PLATFORM_AUDIO_TDM_ENABLE=0 \ -DEXPORT_PLATFORM_AUDIO_SPDIF_ENABLE=0 \ -DEXPORT_PLATFORM_AUDIO_FM_ENABLE=0 \ -DEXPORT_PLATFORM_AUDIO_WM8978_ENABLE=0 \ -DEXPORT_PLATFORM_AUDIO_UART_SENDER_ENABLE=1 \ -DEXPORT_PLATFORM_AUDIO_EFFECT_DEMO_ENABLE=0 \ -DEXPORT_PLATFORM_HW_MATH_VERSION=0 \ -DLVGL_COMMIT_HASH=\"release/v8.4_2409c8dfc6b8d9ae3f7970e1c333e743e0fd2911\" \ -D_XOPEN_SOURCE=700 \ -D_GNU_SOURCE \ -D__ELF__ \ export DEFINES += $(EXT_CFLAGS) # 额外的一些定义 # 头文件搜索路径 export INCLUDES := \ @build/include_dir.txt \ -I$(SYS_INC_DIR) VERBOSE ?= 0 ifeq ($(VERBOSE), 1) export QUITE := else export QUITE := @ endif # 一些旧的 make 不支持 file 函数,需要 make 的时候指定 LINK_AT=0 make export 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 make -f build/Makefile.mk pre_build: $(info +CC build/genFileList.c) $(QUITE) $(CC) $(CFLAGS) $(DEFINES) $(INCLUDES) -D__LD__ -E -P build/genFileList.c -o build/fileList.mk clean: $(QUITE) $(RM) $(OUT_ELF) $(QUITE) $(RM) $(BUILD_DIR)