aboutsummaryrefslogtreecommitdiffstats
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile634
1 files changed, 634 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..0889af0
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,634 @@
+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 ${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