include makefile.inc TOOLS_ROOT = ${DIST_ROOT}tools/generate/ SRC_ROOT = ${DIST_ROOT}sdk OUTPUT=${DIST_ROOT}build BUILD_DIR = ${OUTPUT}/images/$(APP_NAME)/$(APP_VERSION) OBJ_DIR=${OUTPUT} BIN_DIR=${OUTPUT} ARM_GCC_TOOLCHAIN = ${DIST_ROOT}toolchain/gcc-arm-none-eabi-4_9-2015q1/bin CROSS_COMPILE = $(ARM_GCC_TOOLCHAIN)/arm-none-eabi- ENCRYPT_KEY = 510fb093 a3cbeadc 5993a17e c7adeb03 10000 APP_NAME = ble_tst APP_VERSION = $(shell cat VERSION) BIN_NAME = ${APP_NAME}_${APP_VERSION} # Compilation tools AR = $(CROSS_COMPILE)ar CC = $(CROSS_COMPILE)gcc AS = $(CROSS_COMPILE)as NM = $(CROSS_COMPILE)nm LD = $(CROSS_COMPILE)gcc OBJCOPY = $(CROSS_COMPILE)objcopy OBJDUMP = $(CROSS_COMPILE)objdump CLEAN_OTHER = # sugar GREEN := \033[0;32m RED := \033[0;31m NC := \033[0m # No Color ifeq ($(findstring bash, $(shell readlink $(SHELL))), bash) ECHO = echo -e else ECHO = echo endif VIEW_COMMAND = evince doc/notes.pdf & # verbose setting (so what, -v for make was not enough?) Q := @ ifeq ($(V),1) Q := endif OS := $(shell uname) WPA_VERSION := hostapd-2.5 ifeq ($(CFG_USE_WPA_29),1) WPA_VERSION := wpa_supplicant-2.9 endif # include directories INC_DIRS = INC_DIRS += common INC_DIRS += app INC_DIRS += app/config INC_DIRS += app/standalone-station INC_DIRS += app/standalone-ap INC_DIRS += ip/common INC_DIRS += ip/ke/ #ifeq ($(FAKE),33) INC_DIRS += ip/mac/ INC_DIRS += ip/lmac/src/hal INC_DIRS += ip/lmac/src/mm INC_DIRS += ip/lmac/src/ps INC_DIRS += ip/lmac/src/rd INC_DIRS += ip/lmac/src/rwnx INC_DIRS += ip/lmac/src/rx INC_DIRS += ip/lmac/src/scan INC_DIRS += ip/lmac/src/sta INC_DIRS += ip/lmac/src/tx INC_DIRS += ip/lmac/src/vif INC_DIRS += ip/lmac/src/rx/rxl INC_DIRS += ip/lmac/src/tx/txl INC_DIRS += ip/lmac/src/p2p INC_DIRS += ip/lmac/src/chan INC_DIRS += ip/lmac/src/td INC_DIRS += ip/lmac/src/tpc INC_DIRS += ip/lmac/src/tdls INC_DIRS += ip/umac/src/mesh INC_DIRS += ip/umac/src/mfp INC_DIRS += ip/umac/src/rc INC_DIRS += ip/umac/src/apm INC_DIRS += ip/umac/src/bam INC_DIRS += ip/umac/src/llc INC_DIRS += ip/umac/src/me INC_DIRS += ip/umac/src/rxu INC_DIRS += ip/umac/src/scanu INC_DIRS += ip/umac/src/sm INC_DIRS += ip/umac/src/txu #endif INC_DIRS += driver/include INC_DIRS += driver/common/reg INC_DIRS += driver/entry INC_DIRS += driver/dma INC_DIRS += driver/intc INC_DIRS += driver/phy INC_DIRS += driver/rc_beken INC_DIRS += driver/flash INC_DIRS += driver/rw_pub INC_DIRS += driver/common/reg INC_DIRS += driver/common INC_DIRS += driver/uart INC_DIRS += driver/sys_ctrl INC_DIRS += driver/gpio INC_DIRS += driver/general_dma INC_DIRS += driver/spidma INC_DIRS += driver/icu INC_DIRS += driver/ble INC_DIRS += driver/ble/ble_pub/ip/ble/hl/inc INC_DIRS += driver/ble/ble_pub/ip/ble/profiles/sdp/api INC_DIRS += driver/ble/ble_pub/ip/ble/profiles/comm/api INC_DIRS += driver/ble/ble_pub/modules/rwip/api INC_DIRS += driver/ble/ble_pub/modules/app/api INC_DIRS += driver/ble/ble_pub/modules/common/api INC_DIRS += driver/ble/ble_pub/modules/dbg/api INC_DIRS += driver/ble/ble_pub/modules/rwip/api INC_DIRS += driver/ble/ble_pub/modules/rf/api INC_DIRS += driver/ble/ble_pub/modules/ecc_p256/api INC_DIRS += driver/ble/ble_pub/plf/refip/src/arch INC_DIRS += driver/ble/ble_pub/plf/refip/src/arch/boot INC_DIRS += driver/ble/ble_pub/plf/refip/src/arch/compiler INC_DIRS += driver/ble/ble_pub/plf/refip/src/arch/ll INC_DIRS += driver/ble/ble_pub/plf/refip/src/arch INC_DIRS += driver/ble/ble_pub/plf/refip/src/build/ble_full/reg/fw INC_DIRS += driver/ble/ble_pub/plf/refip/src/driver/reg INC_DIRS += driver/ble/ble_pub/plf/refip/src/driver/ble_icu INC_DIRS += driver/ble/ble_lib/ip/ble/hl/inc INC_DIRS += driver/ble/ble_lib/ip/ble/hl/api INC_DIRS += driver/ble/ble_lib/ip/ble/hl/src/gap/gapc INC_DIRS += driver/ble/ble_lib/ip/ble/hl/src/gap/gapm INC_DIRS += driver/ble/ble_lib/ip/ble/hl/src/gap/smpc INC_DIRS += driver/ble/ble_lib/ip/ble/hl/src/gap/smpm INC_DIRS += driver/ble/ble_lib/ip/ble/hl/src/gap INC_DIRS += driver/ble/ble_lib/ip/ble/hl/src/gatt/attc INC_DIRS += driver/ble/ble_lib/ip/ble/hl/src/gatt/attm INC_DIRS += driver/ble/ble_lib/ip/ble/hl/src/gatt/atts INC_DIRS += driver/ble/ble_lib/ip/ble/hl/src/gatt INC_DIRS += driver/ble/ble_lib/ip/ble/hl/src/gatt/gattc INC_DIRS += driver/ble/ble_lib/ip/ble/hl/src/gatt/gattm INC_DIRS += driver/ble/ble_lib/ip/ble/hl/src/l2c/l2cc INC_DIRS += driver/ble/ble_lib/ip/ble/hl/src/l2c/l2cm INC_DIRS += driver/ble/ble_lib/ip/ble/ll/src/rwble INC_DIRS += driver/ble/ble_lib/ip/ble/ll/src/lld INC_DIRS += driver/ble/ble_lib/ip/ble/ll/src/em INC_DIRS += driver/ble/ble_lib/ip/ble/ll/src/llm INC_DIRS += driver/ble/ble_lib/ip/ble/ll/src/llc INC_DIRS += driver/ble/ble_lib/ip/em/api INC_DIRS += driver/ble/ble_lib/ip/ea/api INC_DIRS += driver/ble/ble_lib/ip/hci/api INC_DIRS += driver/ble/ble_lib/ip/hci/src INC_DIRS += driver/ble/ble_lib/ip/ahi/api INC_DIRS += driver/ble/ble_lib/modules/ke/api INC_DIRS += driver/ble/ble_lib/modules/ke/src INC_DIRS += driver/ble/ble_lib/modules/h4tl/api INC_DIRS += func/include INC_DIRS += func/rf_test INC_DIRS += func/user_driver INC_DIRS += func/power_save INC_DIRS += func/uart_debug # these should be eventually removed #ifeq ($(FAKE),33) INC_DIRS += func/ethernet_intf INC_DIRS += func/$(WPA_VERSION)/hostapd INC_DIRS += func/$(WPA_VERSION)/bk_patch INC_DIRS += func/$(WPA_VERSION)/src/utils INC_DIRS += func/$(WPA_VERSION)/src/ap INC_DIRS += func/$(WPA_VERSION)/src/common INC_DIRS += func/$(WPA_VERSION)/src/drivers INC_DIRS += func/$(WPA_VERSION)/src INC_DIRS += func/$(WPA_VERSION)/wpa_supplicant INC_DIRS += func/$(WPA_VERSION)/bk_patch INC_DIRS += func/lwip_intf/lwip-2.0.2 INC_DIRS += func/lwip_intf/lwip-2.0.2/src INC_DIRS += func/lwip_intf/lwip-2.0.2/port INC_DIRS += func/lwip_intf/lwip-2.0.2/src/include INC_DIRS += func/lwip_intf/lwip-2.0.2/src/include/netif INC_DIRS += func/lwip_intf/lwip-2.0.2/src/include/lwip #endif INC_DIRS += func/temp_detect INC_DIRS += func/spidma_intf INC_DIRS += func/rwnx_intf INC_DIRS += func/joint_up INC_DIRS += func/bk_tuya_pwm INC_DIRS += os/include INC_DIRS += os/FreeRTOSv9.0.0/FreeRTOS/Source/portable/Keil/ARM968es INC_DIRS += os/FreeRTOSv9.0.0/FreeRTOS/Source/include INC_DIRS += os/FreeRTOSv9.0.0 ifeq ($(CFG_WRAP_LIBC),1) INC_DIRS += func/libc endif # For WPA3 ifeq ($(CFG_WPA3),1) INC_DIRS += func/wolfssl endif INCLUDES = $(foreach inc_dir, ${INC_DIRS}, $(addprefix -I${SRC_ROOT}/, ${inc_dir})) INCLUDES += $(foreach base_dir, $(shell find ${DIST_ROOT}/usr/$(APP_NAME)/include -type d), $(addprefix -I , $(base_dir))) # source directories SRC_C = SRC_OS = #driver layer SRC_C += driver/common/dd.c SRC_C += driver/common/drv_model.c SRC_C += driver/dma/dma.c SRC_C += driver/driver.c SRC_C += driver/fft/fft.c SRC_C += driver/flash/flash.c SRC_C += driver/general_dma/general_dma.c SRC_C += driver/gpio/gpio.c SRC_C += driver/i2s/i2s.c SRC_C += driver/icu/icu.c SRC_C += driver/intc/intc.c SRC_C += driver/irda/irda.c SRC_C += driver/phy/phy_trident.c SRC_C += driver/pwm/pwm.c SRC_C += driver/pwm/mcu_ps_timer.c SRC_C += driver/pwm/bk_timer.c SRC_C += driver/rw_pub/rw_platf_pub.c SRC_C += driver/saradc/saradc.c SRC_C += driver/spi/spi.c SRC_C += driver/spidma/spidma.c SRC_C += driver/sys_ctrl/sys_ctrl.c SRC_C += driver/uart/Retarget.c SRC_C += driver/uart/uart_bk.c SRC_C += driver/uart/printf.c SRC_C += driver/wdt/wdt.c SRC_C += driver/ble/ble.c SRC_C += driver/ble/ble_pub/ip/ble/hl/src/prf/prf.c SRC_C += driver/ble/ble_pub/ip/ble/profiles/sdp/src/sdp_service.c SRC_C += driver/ble/ble_pub/ip/ble/profiles/sdp/src/sdp_service_task.c SRC_C += driver/ble/ble_pub/ip/ble/profiles/comm/src/comm.c SRC_C += driver/ble/ble_pub/ip/ble/profiles/comm/src/comm_task.c SRC_C += driver/ble/ble_pub/modules/app/src/app_ble.c SRC_C += driver/ble/ble_pub/modules/app/src/app_task.c SRC_C += driver/ble/ble_pub/modules/app/src/app_sdp.c SRC_C += driver/ble/ble_pub/modules/app/src/app_sec.c SRC_C += driver/ble/ble_pub/modules/app/src/app_comm.c SRC_C += driver/ble/ble_pub/modules/common/src/common_list.c SRC_C += driver/ble/ble_pub/modules/common/src/common_utils.c SRC_C += driver/ble/ble_pub/modules/common/src/RomCallFlash.c SRC_C += driver/ble/ble_pub/modules/dbg/src/dbg.c SRC_C += driver/ble/ble_pub/modules/dbg/src/dbg_mwsgen.c SRC_C += driver/ble/ble_pub/modules/dbg/src/dbg_swdiag.c SRC_C += driver/ble/ble_pub/modules/dbg/src/dbg_task.c SRC_C += driver/ble/ble_pub/modules/rwip/src/rwip.c SRC_C += driver/ble/ble_pub/modules/rf/src/ble_rf_xvr.c SRC_C += driver/ble/ble_pub/modules/ecc_p256/src/ecc_p256.c SRC_C += driver/ble/ble_pub/plf/refip/src/driver/uart/uart.c #function layer SRC_C += func/func.c SRC_C += func/bk7011_cal/bk7231U_cal.c SRC_C += func/bk7011_cal/manual_cal_bk7231U.c ifeq ($(CFG_WRAP_LIBC),1) SRC_C += func/libc/stdio/lib_libvscanf.c SRC_C += func/libc/stdio/lib_memsistream.c SRC_C += func/libc/stdio/lib_meminstream.c SRC_C += func/libc/stdio/lib_sscanf.c SRC_C += func/libc/stdio/lib_vsscanf.c SRC_C += func/libc/stdlib/lib_strtod.c SRC_C += func/libc/stdlib/lib_qsort.c endif SRC_C += func/misc/fake_clock.c SRC_C += func/misc/target_util.c SRC_C += func/misc/start_type.c SRC_C += func/power_save/power_save.c SRC_C += func/power_save/manual_ps.c SRC_C += func/power_save/mcu_ps.c SRC_C += func/rf_test/rx_sensitivity.c SRC_C += func/rf_test/tx_evm.c SRC_C += func/sim_uart/gpio_uart.c SRC_C += func/sim_uart/pwm_uart.c SRC_C += func/spidma_intf/spidma_intf.c SRC_C += func/temp_detect/temp_detect.c SRC_C += func/uart_debug/cmd_evm.c SRC_C += func/uart_debug/cmd_help.c SRC_C += func/uart_debug/cmd_reg.c SRC_C += func/uart_debug/cmd_rx_sensitivity.c SRC_C += func/uart_debug/command_line.c SRC_C += func/uart_debug/command_table.c SRC_C += func/uart_debug/udebug.c SRC_C += func/user_driver/BkDriverFlash.c SRC_C += func/user_driver/BkDriverRng.c SRC_C += func/user_driver/BkDriverGpio.c SRC_C += func/user_driver/BkDriverPwm.c SRC_C += func/user_driver/BkDriverUart.c SRC_C += func/user_driver/BkDriverWdg.c SRC_C += func/user_driver/BkDriverTimer.c # operation system module SRC_OS += os/FreeRTOSv9.0.0/FreeRTOS/Source/croutine.c SRC_OS += os/FreeRTOSv9.0.0/FreeRTOS/Source/event_groups.c SRC_OS += os/FreeRTOSv9.0.0/FreeRTOS/Source/list.c SRC_OS += os/FreeRTOSv9.0.0/FreeRTOS/Source/portable/Keil/ARM968es/port.c SRC_OS += os/FreeRTOSv9.0.0/FreeRTOS/Source/portable/MemMang/heap_4.c SRC_OS += os/FreeRTOSv9.0.0/FreeRTOS/Source/queue.c SRC_OS += os/FreeRTOSv9.0.0/FreeRTOS/Source/tasks.c SRC_OS += os/FreeRTOSv9.0.0/FreeRTOS/Source/timers.c SRC_OS += os/FreeRTOSv9.0.0/rtos_pub.c SRC_C += os/mem_arch.c SRC_C += os/platform_stub.c SRC_C += os/str_arch.c # application layer SRC_C += app/ate_app.c SRC_C += app/config/param_config.c # main program sources SRC_DIRS += $(shell find ${DIST_ROOT}usr/$(APP_NAME)/src -type d) SRC_C_MAIN_ORIG = $(foreach dir, $(SRC_DIRS), $(wildcard $(dir)/*.c)) SRC_C_MAIN = $(patsubst ${DIST_ROOT}usr/$(APP_NAME)/%,usr/$(APP_NAME)/%,${SRC_C_MAIN_ORIG}) SRC_C += ${SRC_C_MAIN} # assembly files, the OS SRC_S = SRC_S += driver/entry/boot_handlers.S SRC_S += driver/entry/boot_vectors.S # assembly files, the main program SRC_S_MAIN_ORIG = $(foreach dir, $(SRC_DIRS), $(wildcard $(dir)/*.S)) SRC_S_MAIN = $(patsubst ${DIST_ROOT}usr/$(APP_NAME)/%,usr/$(APP_NAME)/%,${SRC_S_MAIN_ORIG}) SRC_S += ${SRC_S_MAIN} # object files: one per each source file OBJ_LIST = $(patsubst %.c,$(OBJ_DIR)/%.o,${SRC_C}) DEPENDENCY_LIST = $(patsubst %.o,%.d,$(OBJ_LIST)) OBJ_S_LIST = $(SRC_S:%.S=$(OBJ_DIR)/%.O) DEPENDENCY_S_LIST = $(SRC_S:%.S=$(OBJ_DIR)/%.d) OBJ_OS_LIST = $(SRC_OS:%.c=$(OBJ_DIR)/%.marm.o) DEPENDENCY_OS_LIST = $(SRC_OS:%.c=$(OBJ_DIR)/%.d) # compiler flags CFLAGS = CFLAGS += -g -mthumb -mcpu=arm968e-s -march=armv5te -mthumb-interwork -mlittle-endian -Os -std=c99 -ffunction-sections -Wall -fsigned-char -fdata-sections -Wunknown-pragmas -nostdlib -Wno-unused-function -Wno-unused-but-set-variable OSFLAGS = OSFLAGS += -g -marm -mcpu=arm968e-s -march=armv5te -mthumb-interwork -mlittle-endian -Os -std=c99 -ffunction-sections -Wall -fsigned-char -fdata-sections -Wunknown-pragmas # assembler flags ASMFLAGS = ASMFLAGS += -g -marm -mthumb-interwork -mcpu=arm968e-s -march=armv5te -x assembler-with-cpp LFLAGS = LFLAGS += -g -Wl,--gc-sections -marm -mcpu=arm968e-s -mthumb-interwork -nostdlib -Xlinker -Map=${OUTPUT}/${APP_NAME}.map LFLAGS += -Wl,-wrap,malloc -Wl,-wrap,_malloc_r -Wl,-wrap,free -Wl,-wrap,_free_r -Wl,-wrap,zalloc -Wl,-wrap,calloc -Wl,-wrap,realloc -Wl,-wrap,_realloc_r LFLAGS += -Wl,-wrap,printf -Wl,-wrap,vsnprintf -Wl,-wrap,snprintf -Wl,-wrap,sprintf -Wl,-wrap,puts # stdlib wrapper ifeq ($(CFG_WRAP_LIBC),1) LFLAGS += -Wl,-wrap,strtod -Wl,-wrap,qsort LFLAGS += -Wl,-wrap,sscanf endif # WPA3 flags ifeq ($(CFG_WPA3),1) WOLFSSL_CFLAGS += -DWOLFSSL_BEKEN CFLAGS += ${WOLFSSL_CFLAGS} endif CFLAGS += -DUSER_SW_VER=\"$(USER_SW_VER)\" -DAPP_NAME=\"$(APP_NAME)\" # modified libraries RWNX_CUT = ${DIST_ROOT}libs/rwnx/librwnx_cut.a LIBBLE_MOD = ${DIST_ROOT}libs/ble/libble_mod.a LIBFLAGS = LIBFLAGS += -L ${DIST_ROOT}libs/rwnx -lrwnx_cut #LIBFLAGS += -L ${DIST_ROOT}libs/ble -Xlinker --whole-archive -lble_mod -Xlinker --no-whole-archive LIBFLAGS += -L ${DIST_ROOT}libs/ble -lble_mod # a full list of modules in the librwnx library RWNX_LIBS_FULL = apm.o apm_task.o bam.o bam_task.o chan.o \ hal_desc.o hal_dma.o hal_machw.o hal_mib.o \ co_dlist.o co_list.o co_math.o co_pool.o co_ring.o \ ke_env.o ke_event.o ke_msg.o ke_queue.o ke_task.o ke_timer.o \ mac_ie.o mac.o me_mgmtframe.o me_mic.o me.o me_task.o me_utils.o \ mm_bcn.o mm.o mm_task.o mm_timer.o p2p.o ps.o rc_basic.o rc.o rd.o \ rwnx.o rxl_cntrl.o rxl_hwdesc.o rx_swdesc.o rxu_cntrl.o \ sta_mgmt.o tdls.o tdls_task.o td.o tpc.o \ txl_buffer.o txl_buffer_shared.o txl_cfm.o txl_cntrl.o txl_frame.o txl_frame_shared.o txl_hwdesc.o \ tx_swdesc.o txu_cntrl.o vif_mgmt.o \ scan.o scan_shared.o scan_task.o scanu.o scanu_shared.o scanu_task.o sm.o sm_task.o \ mfp_bip.o mfp.o # the subset of the above we actually use (modulo a few stubs) RWNX_LIBS = co_dlist.o co_list.o co_math.o co_pool.o co_ring.o \ ke_env.o ke_event.o ke_msg.o ke_queue.o ke_task.o ke_timer.o \ ps.o # this is redundant for now since there are no immediate plans to change the libraries RWNX_LIBS_EXT = $(patsubst %,${DIST_ROOT}libs/rwnx/%,$(RWNX_LIBS)) BLE_LIBS_EXT = $(wildcard ${DIST_ROOT}libs/ble/*.o) BLE_LIBS = $(patsubst ${DIST_ROOT}libs/ble/%.o,%.o,${BLE_LIBS_EXT}) all: downloadable images -include makefile.loc ${RWNX_LIBS_EXT}: if [ ! -d $(dir $@) ]; then mkdir -p $(dir $@); fi @cd ${DIST_ROOT}libs/rwnx/ && cp ../../sdk/lib/librwnx.a . && \ ${AR} -x librwnx.a ${RWNX_CUT}: ${RWNX_LIBS_EXT} @echo "building the reduced rwnx library ..." @cd ${DIST_ROOT}libs/rwnx/ && \ ${AR} -rcs librwnx_cut.a ${RWNX_LIBS} ${LIBBLE_MOD}: weaken_symbols @echo "building the modified ble library ..." @cd ${DIST_ROOT}libs/ble/ && \ ${AR} -rcs libble_mod.a ${BLE_LIBS} weaken_symbols: ${DIST_ROOT}sdk/lib/libble.a if [ ! -d $(dir ${LIBBLE_MOD}) ]; then mkdir -p $(dir ${LIBBLE_MOD}); fi @cd ${DIST_ROOT}libs/ble/ && \ rm -f *.o *.O && cp ../../sdk/lib/libble.a . && ${AR} -x libble.a && \ ${OBJCOPY} \ --weaken-symbol=rwble_hl_init \ --weaken-symbol=rwble_hl_reset \ rwble_hl.o @cd ${DIST_ROOT}/libs/ble/ && \ ${OBJCOPY} \ --weaken-symbol=rwble_reset \ rwble.o && \ ${OBJCOPY} \ --weaken-symbol=lld_init \ --weaken-symbol=lld_adv_start \ --weaken-symbol=lld_con_start \ --globalize-symbol=lld_abort_scan_evt \ --globalize-symbol=TASK_DESC_LLD \ lld.o .PHONY: images $(BUILD_DIR)/${BIN_NAME}.axf: $(OBJ_LIST) $(OBJ_S_LIST) $(OBJ_OS_LIST) ${RWNX_CUT} ${LIBBLE_MOD} @echo 'Building the main application' $(Q)if [ ! -d $(dir $@) ]; then mkdir -p $(dir $@); fi @$(ECHO) " $(GREEN)LD ${BIN_NAME}.axf$(NC)" $(Q)$(LD) $(LFLAGS) -o $@ $(OBJ_LIST) $(OBJ_S_LIST) $(OBJ_OS_LIST) $(LIBFLAGS) \ -T${SRC_ROOT}/build/bk7231_ota.ld @cd ${DIST_ROOT}/libs/rwnx/ && rm -f librwnx_cut.a @cd ${DIST_ROOT}/libs/ble/ && rm -f libble_mod.a images $(BUILD_DIR)/${BIN_NAME}.bin: $(BUILD_DIR)/${BIN_NAME}.axf @echo "Generating binaries, name maps, asm, etc." @$(ECHO) " $(GREEN)NM > ${BIN_NAME}.map$(NC)" @$(NM) $(BUILD_DIR)/${BIN_NAME}.axf | sort > $(BUILD_DIR)/${BIN_NAME}.map @$(ECHO) " $(GREEN)OBJDUMP > ${BIN_NAME}.asm$(NC)" @$(OBJDUMP) -d $(BUILD_DIR)/${BIN_NAME}.axf > $(BUILD_DIR)/${BIN_NAME}.asm ${TOOLS_ROOT}/${BIN_NAME}.bin: $(BUILD_DIR)/${BIN_NAME}.axf @$(ECHO) " $(GREEN)OBJCOPY > ${BIN_NAME}.bin$(NC)" @$(OBJCOPY) -O binary $(BUILD_DIR)/${BIN_NAME}.axf $(BUILD_DIR)/${BIN_NAME}.bin @mv $(BUILD_DIR)/${BIN_NAME}.bin ${TOOLS_ROOT} downloadable: ${TOOLS_ROOT}/${BIN_NAME}.bin ${BUILD_DIR}${APP_NAME}_UA_${APP_VERSION}.bin \ ${BUILD_DIR}${APP_NAME}_UG_${APP_VERSION}.bin @if [ $(shell ls -l ${BUILD_DIR}/${APP_NAME}_UG_${APP_VERSION}.bin|awk '{print $$5}') -gt 679936 ]; \ then \ ${ECHO} "generated image $(RED)(${APP_NAME}_UG_${APP_VERSION}.bin) is too large$(NC), cleaning up..." ;\ else \ ${ECHO} "successfully generated $(GREEN)${APP_NAME}_UG_${APP_VERSION}.bin$(NC), size: \ $(shell ls -lh ${BUILD_DIR}/${APP_NAME}_UG_${APP_VERSION}.bin|awk '{print $$5}')" ;\ fi; @rm -f ${TOOLS_ROOT}/${APP_NAME}_* @rm -f ${TOOLS_ROOT}/all_* ${BUILD_DIR}${APP_NAME}_UA_${APP_VERSION}.bin: ${TOOLS_ROOT}/${BIN_NAME}.bin @echo "create a downloadable image ..." @cd ${TOOLS_ROOT} && \ echo "apply otafix..." &&\ ./otafix_32 ${BIN_NAME}.bin &&\ echo "encrypt..." &&\ ./encrypt ${BIN_NAME}.bin ${ENCRYPT_KEY} &&\ echo "package..." &&\ python mpytools.py ${BIN_NAME}_enc.bin &&\ ./beken_packager config.json &&\ mv ${BIN_NAME}_enc_uart_1.00.bin ${BUILD_DIR}/${APP_NAME}_UA_${APP_VERSION}.bin ${BUILD_DIR}${APP_NAME}_UG_${APP_VERSION}.bin: ${TOOLS_ROOT}/${BIN_NAME}.bin @cd ${TOOLS_ROOT} && \ echo "generate ota file" &&\ ./rt_ota_packaging_tool_cli -f ${BIN_NAME}.bin -v "$$"CURRENT_TIME -o ${BIN_NAME}.rbl \ -p app -c gzip -s aes -k 0123456789ABCDEF0123456789ABCDEF -i 0123456789ABCDEF &&\ ./package.bin ${BIN_NAME}.rbl ${APP_NAME}_UG_${APP_VERSION}.bin $APP_VERSION &&\ mv ${APP_NAME}_UG_${APP_VERSION}.bin ${BUILD_DIR} .config: ${SRC_ROOT}/app/config/sys_config.h @echo 'generating .config from $<' @-rm -f $@ @echo '#include "$<"' > config.c @sed -n '/^#define/p' $< | awk '{print $$2}' | sort -d | uniq | awk '{print "valueOf_"$$1"="$$1}' >> config.c @echo "# Autogenerated by Makefile, DON'T EDIT" > .config @$(ARM_GCC_TOOLCHAIN)/arm-none-eabi-gcc -E config.c | grep '^valueOf_' | sed 's/valueOf_//' >> .config @sed -i '/_SYS_CONFIG_H_/d' .config @-rm -f config.c echo_path: # @echo ${MAKE_ROOT} # @echo ${OBJ_LIST} # @echo ${OBJ_DIR} # @echo ${SRC_ROOT} # @echo ${INCLUDES} # @echo ${OBJ_S_LIST} # @echo ${OBJ_OS_LIST} # @echo ${BLE_LIBS_EXT} # implicit rules; first remove the default ones %.o:%.c %.O:%.S constant_list: ${DIST_ROOT}usr/$(APP_NAME)/src/diagnostic1.c # just to see what the compiler came up with @$(CC) $(CFLAGS) $(INCLUDES) -DGENERATE_CT_CONSTS -S $< -o \ ${OBJ_DIR}/usr/$(APP_NAME)/src/diagnostic1.S 1>/dev/null 2>/dev/null ${OBJ_DIR}/usr/$(APP_NAME)/src/%.o: ${DIST_ROOT}usr/$(APP_NAME)/src/%.c $(Q)if [ ! -d $(dir $@) ]; then mkdir -p $(dir $@); fi $(Q)$(ECHO) " $(GREEN)CC $< --> $@$(NC)" # just to see what the compiler came up with @-$(CC) $(CFLAGS) $(INCLUDES) -DGENERATE_CT_CONSTS -S $< -o ${OBJ_DIR}/usr/$(APP_NAME)/src/$*.S 2>/dev/null $(Q)$(CC) $(CFLAGS) $(INCLUDES) -E $< -o ${OBJ_DIR}/usr/$(APP_NAME)/src/$*.i $(Q)$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@ $(Q)$(CC) $(CFLAGS) $(INCLUDES) -c $< -MM -MT $@ -MF $(patsubst %.o,%.d,$@) ${OBJ_DIR}/usr/$(APP_NAME)/src/%.O: ${DIST_ROOT}usr/$(APP_NAME)/src/%.S $(Q)if [ ! -d $(dir $@) ]; then mkdir -p $(dir $@); fi $(Q)$(ECHO) " $(GREEN)AS $<$(NC)" $(Q)$(CC) $(ASMFLAGS) $(INCLUDES) -c $< -o $@ $(Q)$(CC) $(ASMFLAGS) $(INCLUDES) -c $< -MM -MT $@ -MF $(patsubst %.O,%.d,$@) ${OBJ_DIR}/%.o: ${SRC_ROOT}/%.c $(Q)if [ ! -d $(dir $@) ]; then mkdir -p $(dir $@); fi $(Q)$(ECHO) " $(GREEN)CC $< --> $@$(NC)" $(Q)$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@ $(Q)$(CC) $(CFLAGS) $(INCLUDES) -c $< -MM -MT $@ -MF $(patsubst %.o,%.d,$@) ${OBJ_DIR}/%.O: ${SRC_ROOT}/%.S $(Q)if [ ! -d $(dir $@) ]; then mkdir -p $(dir $@); fi $(Q)$(ECHO) " $(GREEN)AS $<$(NC)" $(Q)$(CC) $(ASMFLAGS) $(INCLUDES) -c $< -o $@ $(Q)$(CC) $(ASMFLAGS) $(INCLUDES) -c $< -MM -MT $@ -MF $(patsubst %.O,%.d,$@) ${OBJ_DIR}/%.marm.o: ${SRC_ROOT}/%.c $(Q)if [ ! -d $(dir $@) ]; then mkdir -p $(dir $@); fi $(Q)$(ECHO) " $(GREEN)CC $<$(NC)" $(Q)$(CC) $(OSFLAGS) $(INCLUDES) -c $< -o $@ $(Q)$(CC) $(OSFLAGS) $(INCLUDES) -c $< -MM -MT $@ -MF $(patsubst %.marm.o,%.d,$@) ORIG_SDK_DIR = beken ORIG_SDK_URL = https://airtake-public-data-1254153901.cos.ap-shanghai.myqcloud.com/smart/embed/pruduct/bk7231t_1.1.2.zip ${ORIG_SDK_DIR}/bk7231t_1.1.2.zip: @if [ ! -d $(dir $@) ]; then mkdir -p $(dir $@); fi @echo "Downloading $(notdir $@), size = \ $(shell curl -sI '${ORIG_SDK_URL}' | awk '/Content-Length/ { print $$2 }') bytes; this may take some time ..." @cd ${ORIG_SDK_DIR} && wget -q --show-progress ${ORIG_SDK_URL} RAW_SDK = sdk toolchain tools RAW_SDK_EXT = $(foreach d, ${RAW_SDK}, $(addprefix ${ORIG_SDK_DIR}/, ${d})) ${RAW_SDK_EXT}: ${ORIG_SDK_DIR}/bk7231t_1.1.2.zip cd ${ORIG_SDK_DIR} && unzip $(notdir $<) && mv bk7231t_1.1.2_temp/toolchain/ . && \ mv bk7231t_1.1.2_temp/bk7231t_os/beken378 sdk && mv bk7231t_1.1.2_temp/bk7231t_os/tools/ . && \ cd toolchain && tar xvf gcc-arm-none-eabi-4_9-2015q1.tar && cd ../ && rm -rf bk7231t_1.1.2_temp/ diffs: ${RAW_SDK_EXT} -cd ${ORIG_SDK_DIR} && diff -ruN sdk/ ../sdk > sdk.patch -cd ${ORIG_SDK_DIR} && mkdir patches -cd ${ORIG_SDK_DIR} && diff -rq sdk/ ../sdk | awk '{printf("%s %s ",$$2,$$4);sub(".*/","",$$2);print $$2}' \ | xargs -n 3 bash -c 'diff -u $$0 $$1 > patches/$$2.patch' PATCH_LIST = app_ble.c.patch bk7231_ota.ld.patch ble.c.patch rwapp_config.h.patch sys_config.h.patch PATCH_LIST_EXT = $(foreach patch_file, ${PATCH_LIST}, $(addprefix patch/, ${patch_file})) sdk_install: ${PATCH_LIST_EXT} ${RAW_SDK_EXT} @cd ${ORIG_SDK_DIR} && \ for patch in ${PATCH_LIST_EXT}; do \ patch -ruN -p1 -d sdk < ../$${patch}; \ done; @mv ${ORIG_SDK_DIR}/sdk . @mv ${ORIG_SDK_DIR}/toolchain . @mv ${ORIG_SDK_DIR}/tools . .PHONY: clean view: ${VIEW_COMMAND} clean: @-rm -rf ${DIST_ROOT}libs ${CLEAN_OTHER} mostlyclean: clean @-rm -f ${DIST_ROOT}.config @-rm -rf ${BUILD_DIR} distclean: mostlyclean @-rm -f bk_ble.tar.bz2 @-rm -f bk_ble.tar.zip @-rm -f ${DIST_ROOT}.config @-rm -rf ${OUTPUT} @-rm -rf sdk toolchain tools