blob: 45fc0a5c884a1eb53526068dc3b9ad2e7f8c602c [file] [log] [blame]
################################################################################
#
# @file app.mk
#
# @brief Application make helper
#
# Copyright (C) Atmosic 2018-2022
#
################################################################################
ifndef __APP_MK__
__APP_MK__ = 1
APP ?= $(notdir $(CURDIR))
# Watchdog default 5 sec
WDOG ?= 5
LIBRARIES += atm_utils_c atm_utils_math
DRIVERS += \
heap \
hw_cfg \
pinmux \
rf \
watchdog \
ifdef UART_FLASH
# default 32K NVDS
UART_FLASH_NVDS_SIZE ?= 0x8000
CFLAGS += -DUART_FLASH_NVDS_SIZE=$(UART_FLASH_NVDS_SIZE)
# UART_FLASH=0 for using UART0
# UART_FLASH=1 for using UART1
ifeq ($(UART_FLASH),0)
CFLAGS += -DCFG_UART_FLASH_UART0
else ifneq ($(UART_FLASH),1)
$(error "usage: make $(MAKECMDGOALS) UART_FLASH=<0|1>")
endif
DRIVERS += uart_flash
else ifndef RUN_IN_RAM
CFLAGS += -DCFG_EXT_FLASH
DRIVERS += ext_flash
endif # UART_FLASH
ifndef NO_PMU
DRIVERS += pmu reset
INCLUDES += $(DRIVER_DIR)/wurx
endif
# Enable Brownout by default
ifndef NO_BROWNOUT
DRIVERS += brwnout
endif
ifdef FORCE_LPC_RCOS
CFLAGS += -DFORCE_LPC_RCOS
endif
ifdef FPGA
DRIVERS += dtop_bypass
endif
# Include board specific pin mapping
CFLAGS += -DPINMAP_BOARD=$(BOARD)
INCLUDES += pinmap
# Code coverage for units under test
ifeq ($(TOOLSET),)
ifneq ($(and $(UU_TEST),$(filter -DAUTO_TEST,$(CFLAGS))),)
ifeq ($(filter -DIS_FOR_SIM,$(CFLAGS)),)
ifndef RUN_IN_RAM
COVERAGE ?= $(UU_TEST)
endif
endif # IS_FOR_SIM
endif # UU_TEST && AUTO_TEST
endif # TOOLSET
.PHONY: all
all: $(APP).bin $(APP).asm
include $(COMMON_USER_DIR)/tools.mk
include $(COMMON_USER_DIR)/nvds.mk
include $(if $(FLASHROM),$(LIB_DIR)/$(FLASHROM).mk,$(ROM_DIR)/rom_app.mk)
ifdef FLASHROM
override undefine USE_LIB
FLASHOFF ?= 0x10000000
endif
ifndef NO_USER_INIT
C_SRCS += $(USER_DIR)/user_init.c
endif
C_SRCS += $(wildcard $(APP).c) $(USER_DIR)/user_debug.c
CXX_SRCS += $(foreach e,$(CXX_EXT),$(wildcard $(APP).$e))
ifeq ($(TOOLSET),ARM)
C_SRCS += $(USER_DIR)/armcc/retarget.c
endif
ifdef DEBUG
C_SRCS += $(USER_DIR)/hardfault_handler_armv6m.c
DRIVERS += swd_dbg
ifndef SKIP_TB
DRIVERS += arm_traceback
endif # SKIP_TB
ifdef RTT_DBG
DRIVERS += SEGGER_RTT
CFLAGS += -DRTT_DBG
C_SRCS += $(DRIVER_DIR)/SEGGER_RTT/SEGGER_RTT_printf.c
C_SRCS += $(DRIVER_DIR)/SEGGER_RTT/rtt_debug.c
ifdef RTT_DBG_ONLY
CFLAGS += -DRTT_DBG_ONLY
endif
endif
else # DEBUG
ifneq (,$(filter -DAUTO_TEST,$(CFLAGS)))
C_SRCS += $(USER_DIR)/hardfault_handler_armv6m.c
ifndef SKIP_TB
DRIVERS += arm_traceback
endif
endif # AUTO_TEST
override undefine RTT_DBG
endif # DEBUG
ifdef COVERAGE
C_SRCS += $(USER_DIR)/user_gcov.c
endif
ifdef LPC_RCOS
DRIVERS += lpc_rcos
CFLAGS += -DLPC_RCOS
endif
LIBRARIES := $(sort $(LIBRARIES))
C_SRCS += $(addprefix $(ROM_DIR)/,$(ROM_ERRATA_SRC))
define include_driver
$(eval N := $(notdir $1))
$(eval D := $(DRIVER_DIR)/$1)
INCLUDES += $D
-include $D/$N.mk
ifeq ($$(lastword $$(MAKEFILE_LIST)),$D/$N.mk)
C_SRCS += $$(addprefix $D/,$$($N.C_SRCS))
INCLUDES += $$(addprefix $D/,$$($N.INCLUDES))
LIBS += $$(addprefix $D/,$$($N.LIBS))
CFLAGS += $$($N.CFLAGS)
else
C_SRCS += $D/$N.c
endif
endef
$(foreach d,$(DRIVERS),$(eval $(call include_driver,$d)))
define include_library
$(eval N := $(notdir $1))
$(eval L := $(LIB_DIR)/$1)
INCLUDES += $L
-include $L/$N.mk
ifeq ($$(lastword $$(MAKEFILE_LIST)),$L/$N.mk)
C_SRCS += $$(addprefix $L/,$$($N.C_SRCS))
INCLUDES += $$(addprefix $L/,$$($N.INCLUDES))
LIBS += $$(addprefix $L/,$$($N.LIBS))
CFLAGS += $$($N.CFLAGS)
else
C_SRCS += $(wildcard $L/$N*.c)
endif
endef
$(foreach l,$(LIBRARIES),$(eval $(call include_library,$l)))
EXCL_APP_LIB_ALL := $(EXCLUDE_APP_LIB_C_SRCS) $(APP).c
ifdef USE_LIB
C_SRCS := $(EXCL_APP_LIB_ALL)
else
S_SRCS += $(APP_USER_STARTUP)
endif
OBJS += $(notdir $(S_SRCS:%.s=%.o) $(C_SRCS:%.c=%.o) \
$(foreach f,$(CXX_SRCS),$(basename $f).o))
# Non-conforming compilation units. Needs to be cleaned up and removed.
FIXME_USES_BLE := \
app_bass.c \
app_diss.c \
app_fio.c \
app_gap.c \
app_hrps.c \
app_htpt.c \
app_otaps.c \
at_cmd_init.c \
at_cmd_utils.c \
atm_adv.c \
atm_adv_param.c \
atm_debug.c \
atm_gap.c \
atm_gap_param.c \
atm_init.c \
atm_init_param.c \
atm_persync.c \
atm_prfs.c \
atm_prfs_task.c \
atm_scan.c \
atm_scan_param.c \
bleadvdata.c \
bleadvenable.c \
bleadvlegacyparm.c \
bleadvtxpwr.c \
bleconntxpwr.c \
blegapdevname.c \
blegapdisconnect.c \
blegapgetconnstat.c \
blegapinit.c \
blegapgetrssi.c \
blegapgetpeerinfo.c \
blegapcreateconn.c \
blegapcancelcreateconn.c \
blegapparnego.c \
blescanenable.c \
blescanfil.c \
blescanfilrm.c \
blegattaddchar.c \
blegattadddesc.c \
blegattadddescuserdfd.c \
blegattaddservice.c \
blegattdftchar1.c \
blegattdftchar2.c \
blegattdftserver.c \
blegattdftservice.c \
blegattmtuexchgreq.c \
blegattmtuset.c \
blegattdiscchar.c \
blegattdiscchars.c \
blegattdiscdescs.c \
blegattdiscsvc.c \
blegattdiscsvcs.c \
blegattsvcactive.c \
blegatttoble.c \
blescanrspdata.c \
blegapevtconn.c \
blegapevtdisconn.c \
blegapevtlinkinfo.c \
blegapevtadvrpt.c \
blegapevtpar.c \
blegattmtuexchange.c \
blegattread.c \
blegattwrite.c \
blegattnotify.c \
blesmppairreq.c \
blesmppairendind.c \
sysbdaddr.c \
sysfuncpin.c \
syspm.c \
sysnvds.c \
blegattfromble.c \
sysuart0raw.c \
sysdfu.c \
at_cmd_dfu_proc.c \
FIXME_EXAMPLE_USES_BLE := \
atcmd_gap.c \
ATM_ancsc.c \
ATM_shub.c \
attc_gatt.c \
atts_gatt.c \
atvrc_custom.c \
BLE_adv.c \
BLE_adv_scan.c \
BLE_atcmd.c \
BLE_att_client.c \
BLE_att_server.c \
BLE_bridge.c \
BLE_harv_adv.c \
BLE_scan_adv.c \
BLE_scan.c \
bridge_att.c \
bridge_audio.c \
bridge_gap.c \
bridge_ir.c \
bridge_mmi_client.c \
bridge_mmi_server.c \
button_demo.c \
common.c \
CT_adv.c \
CT_button.c \
CT_gatt.c \
CT_nvds.c \
CT_ota.c \
CT_scan.c \
CT_tracing.c \
DTM.c \
ESL_client.c \
ESL_server.c \
GPIO.c \
HCI.c \
HCI_vendor.c \
HIB_restore.c \
HID_keyboard.c \
HID_mouse.c \
HRP_sensor.c \
HT_thermometer.c \
ICM_sensor.c \
kbd_gap.c \
kbd_hogp.c \
kbd_mmi.c \
kbd_mmi_vkey.c \
kbd_otaps.c \
key_button.c \
LECB_client.c \
LECB_server.c \
mbedtls_bist.c \
mouse_hogp.c \
mouse_gap.c \
mouse_mmi.c \
mouse_mmi_led.c \
mouse_mmi_sensor.c \
mouse_mmi_timer.c \
mouse_otaps.c \
per_sync.c \
pm_demo.c \
pvbcn_adv.c \
pvbcn_gap.c \
pvbcn_gatt.c \
pvbcn_mmi.c \
pvbcn_ota.c \
PV_beacon.c \
RAM_hibernate.c \
rc_atvv.c \
rc_gap.c \
rc_hidau.c \
rc_hogp.c \
rc_ir.c \
rc_mmi.c \
rc_mmi_vkey.c \
rc_ota.c \
rc_pdm.c \
rc_test_mode.c \
RFsource_adv.c \
RFsource_scan.c \
swd_nego.c \
tmp1075_sensor_adv.c \
top_mmi.c \
TPUTP_client.c \
TPUTP_server.c \
transceiver.c \
uart0_raw_demo.c \
vendor_specific.c \
vkey_test.c \
WURX_adv.c \
WURX_scan_adv.c \
FIXME_DRIVER_USES_BLE := \
atm_ble.c \
atm_button.c \
atm_pm.c \
atm_vkey.c \
bme680.c \
dtop_bypass.c \
ext_flash.c \
gadc.c \
hw_cfg.c \
lpc_rcos.c \
mouse.c \
pmu.c \
profiles.c \
pseq.c \
rf.c \
shub.c \
sw_event.c \
sw_timer.c \
trng.c \
uart0.c \
uart0_raw.c \
uart_flash.c \
uni_ir.c \
wurx.c \
FRAMEWORK_UPPER_DIRS := $(wildcard $(LIB_DIR)/app_* $(LIB_DIR)/at_cmd* $(LIB_DIR)/atm_*)
ABSTRACT_FILES := \
$(notdir $(shell find $(FRAMEWORK_UPPER_DIRS) -name '*.c')) \
$(notdir $(shell find $(EXAMPLE_DIR) -name '*.c')) \
$(notdir $(shell find $(DRIVER_DIR) -name '*.c')) \
FILTERED_ABSTRACT_FILES := $(filter-out $(FIXME_USES_BLE) \
$(FIXME_EXAMPLE_USES_BLE) $(FIXME_DRIVER_USES_BLE),$(ABSTRACT_FILES))
INCLUDES := \
$(TOP_DIR) \
$(INCLUDE_DIR) \
$(INCLUDE_DIR)/reg \
$(INCLUDE_DIR)/reg_ble \
$(INCLUDE_DIR)/arm \
$(INCLUDE_DIR)/ble \
$(DRIVER_DIR)/spi \
$(DRIVER_DIR)/timer \
$(INCLUDES)
BLE_ONLY_INCLUDES := \
$(INCLUDE_DIR)/reg_ble \
$(INCLUDE_DIR)/ble \
$(LIB_DIR)/porting_ble \
EXT_INCLUDES := $(filter-out $(BLE_ONLY_INCLUDES),$(INCLUDES))
CFLAGS := \
-D__MODULE__=\"$${<F}\" \
-DFLASH_SIZE=$(if $(FLASH_SIZE),$(FLASH_SIZE),0x80000) \
-DCORTEX_M0 \
$(if $(FLASHROM),'-Dmain(...)=user_main(__VA_ARGS__)',-DCFG_USER) \
$(if $(DEBUG),-DCFG_DBG) \
$$(if $$(filter $(FILTERED_ABSTRACT_FILES),$$(<F)),\
$(EXT_INCLUDES:%=-I%),\
$($(if $(FLASHROM),FLASH)ROM_CFLAGS) $(INCLUDES:%=-I%)) \
$(CFLAGS)
ifeq ($(TOOLSET),IAR)
ASFLAGS := \
--cpu cortex-m0 --thumb -r \
$(ASFLAGS)
CFLAGS := \
--cpu cortex-m0 --thumb -Ohz \
--vla \
--debug \
-e --warnings_are_errors \
--diag_suppress Go029,Pa039,Pa082,Pa084,Pa089,Pa093,Pe111,Pe186,Pe188 \
-I$(INCLUDE_DIR)/iccarm \
$(CFLAGS)
DEP_FLAGS := --dependencies=n +
LDFLAGS := \
--cpu cortex-m0 \
-L$(USER_DIR) \
$(if $(FLASH_SIZE),--config_def FLASH_SIZE=$(FLASH_SIZE)) \
$(if $(USER_SIZE),--config_def USER_SIZE=$(USER_SIZE)) \
$(if $(NVDS_SIZE),--config_def NVDS_SIZE=$(NVDS_SIZE)) \
$(if $(URAM_START),--config_def URAM_START=$(URAM_START)) \
$(if $(URAM_SIZE),--config_def URAM_SIZE=$(URAM_SIZE)) \
$(if $(MPR_SIZE),--config_def MPR_SIZE=$(MPR_SIZE)) \
--map=$(APP).map \
$(LDFLAGS)
else
C_ONLY_FLAGS := \
-Wstrict-prototypes \
-Wold-style-definition \
-Wmissing-prototypes \
comma := ,
ifeq ($(TOOLSET),ARM)
ASFLAGS := \
--cpu=cortex-m0 --thumb -g \
$(ASFLAGS)
C_ONLY_FLAGS += -std=gnu17
CFLAGS := \
-Oz \
-fshort-enums \
$(CFLAGS)
LDFLAGS := -v \
--cpu=cortex-m0 \
$(if $(DEBUG),,--lto --lto_level=Oz) \
--entry __main \
--predefine="$(if $(FLASH_SIZE),-DFLASH_SIZE=$(FLASH_SIZE)) \
$(if $(USER_SIZE),-DUSER_SIZE=$(USER_SIZE)) \
$(if $(NVDS_SIZE),-DNVDS_SIZE=$(NVDS_SIZE)) \
$(if $(URAM_START),-DURAM_START=$(URAM_START)) \
$(if $(URAM_SIZE),-DURAM_SIZE=$(URAM_SIZE)) \
$(if $(MPR_SIZE),-DMPR_SIZE=$(MPR_SIZE))" \
--map --list=$(APP).map \
--info unused \
$(LDFLAGS)
else
ASFLAGS := \
-mcpu=cortex-m0 -mthumb -g \
$(ASFLAGS)
C_ONLY_FLAGS += -std=c17 \
-Wold-style-declaration \
-Wmissing-parameter-type \
CFLAGS := \
-Os \
-Wformat-signedness -Wsuggest-attribute=noreturn \
$(CFLAGS)
LDFLAGS := \
-Wl,--fatal-warnings,--warn-common -mthumb -mcpu=cortex-m0 \
$(if $(FLASHROM),,-nostartfiles) -Wl,--gc-sections \
$(if $(COVERAGE),-fprofile-arcs) \
$(if $(DEBUG),,-flto) \
-L$(USER_DIR) \
$(if $(FLASH_SIZE),-Wl$(comma)--defsym=FLASH_SIZE=$(FLASH_SIZE)) \
$(if $(USER_SIZE),-Wl$(comma)--defsym=USER_SIZE=$(USER_SIZE)) \
$(if $(NVDS_SIZE),-Wl$(comma)--defsym=NVDS_SIZE=$(NVDS_SIZE)) \
$(if $(URAM_START),-Wl$(comma)--defsym=URAM_START=$(URAM_START)) \
$(if $(URAM_SIZE),-Wl$(comma)--defsym=URAM_SIZE=$(URAM_SIZE)) \
$(if $(MPR_SIZE),-Wl$(comma)--defsym=MPR_SIZE=$(MPR_SIZE)) \
-Xlinker -Map=$(APP).map \
$(LDFLAGS)
endif
CFLAGS := \
-mcpu=cortex-m0 -mthumb -mlong-calls \
-fms-extensions -ffunction-sections -fdata-sections \
-fno-strict-aliasing -g3 $(if $(DEBUG),,-flto) \
-Wall -Wchar-subscripts -Wformat \
-Wuninitialized -Winit-self \
-Wignored-qualifiers -Wswitch-default -Wswitch-enum -Wunused -Wundef \
-Wnull-dereference -Wdouble-promotion \
-Wwrite-strings -Wshadow -Wmissing-declarations -Wcast-qual \
-Wpointer-arith \
$(C_ONLY_FLAGS) -Werror \
-I$(INCLUDE_DIR)/armgcc \
$(CFLAGS)
CXXFLAGS := $(filter-out $(C_ONLY_FLAGS),$(CFLAGS)) -std=c++17
DEP_FLAGS := -MD
endif
ifdef USER_SIZE
CFLAGS += -DUSER_SIZE=$(USER_SIZE)
endif
ifdef MPR_SIZE
CFLAGS += -DMPR_SIZE=$(MPR_SIZE)
endif
ifdef PMU_CFG
CFLAGS += -D$(PMU_CFG)
ifeq ($(filter-out VBAT_GT_1p8V_VDDIO_EXT VBAT_GT_1p8V_VDDIO_INT VBAT_LE_1p8V NO_VBAT,$(PMU_CFG)),)
else
$(warning Unknown PMU_CFG $(PMU_CFG))
endif
endif # PMU_CFG
define o_from_s_RULE
$(notdir $(1:%.s=%.o)): $(1) $(ASSEMBLE)
$(ASSEMBLE) $(ASFLAGS) $$< -o $$@
endef
$(foreach src,$(S_SRCS),$(eval $(call o_from_s_RULE,$(src))))
define o_from_c_RULE
$(notdir $(1:%.c=%.o)): $(1) $(firstword $(COMPILE)) \
| c_bindings
$(COMPILE) $(CFLAGS) $$(if $$(filter $(COVERAGE),\
$$(basename $$@)),-fprofile-arcs -ftest-coverage) \
$(DEP_FLAGS) -c $$< -o $$@
ifneq (,$(filter -DAUTO_TEST,$(CFLAGS)))
-$$(if $$(filter $(ABSTRACT_FILES),$$(<F)),\
! grep $$(addprefix -e ,$(BLE_ONLY_INCLUDES)) $$(@:%.o=%.d))
endif
endef
$(foreach src,$(C_SRCS),$(eval $(call o_from_c_RULE,$(src))))
define o_from_cxx_RULE
$(notdir $(basename $1).o): $(1) $(firstword $(CXX)) \
| cpp_bindings
$(CXX) $(CXXFLAGS) $$(if $$(filter $(COVERAGE),\
$$(basename $$@)),-fprofile-arcs -ftest-coverage) \
$(DEP_FLAGS) -c $$< -o $$@
endef
$(foreach src,$(CXX_SRCS),$(eval $(call o_from_cxx_RULE,$(src))))
-include *.d
.PHONY: c_bindings cpp_bindings
c_bindings cpp_bindings::
ifdef RUST_LIBS
RUST_TARGET := thumbv6m-none-eabi
define lib_from_rust_TEMPLATE
$(eval A := $1/target/$(RUST_TARGET)/$(if $(DEBUG),debug,release)/lib$1.rlib)
OBJS += $A
.PHONY: $A
$A:
$(if $(wildcard $1_wrapper.h),bindgen --use-core --ctypes-prefix cty \
-o $1_bindings.rs $1_wrapper.h -- \
--sysroot=$(BINUTILS_DIR)/../arm-none-eabi \
-target $(RUST_TARGET) $(filter-out -W%,$(CFLAGS)))
cd $1 && cargo build --target $(RUST_TARGET) $(if $(DEBUG),,--release)
c_bindings::
cbindgen -l c -o $1_bindings.h $1
cpp_bindings::
cbindgen -l c++ -o $1_bindings.hpp $1
clean::
cd $1 && cargo clean
rm -f $1/Cargo.lock
rm -f $1_bindings.rs $1_bindings.h $1_bindings.hpp
$(eval $(if $(filter undefine,$(.FEATURES)),undefine A,A :=))
endef # lib_from_rust_TEMPLATE
$(foreach l,$(RUST_LIBS),$(eval $(call lib_from_rust_TEMPLATE,$l)))
endif # RUST_LIBS
ifneq (,$(strip $(CXX_SRCS)))
LINK := $(CXX)
endif
EXCLUDE_APP_SRC=$(notdir $(EXCL_APP_LIB_ALL))
EXCLUDE_APP_OBJ+=$(patsubst %.c,%.o,$(EXCLUDE_APP_SRC))
ifdef FLASHROM
$(APP).elf: $(OBJS) $(firstword $(LINK))
$(OBJCOPY) $(if $(COVERAGE),--redefine-syms $(ROM_DIR)/gcov.redef) \
--redefine-syms $(ROM_DIR)/user.redef \
$(LIB_DIR)/lib$(FLASHROM)$(if $(DEBUG),_dbg).a flashrom.a
$(LINK) -Tcmsdk_cm0_flash_rom.ld $(LDFLAGS) $(OBJS) $(LIBS) -o $@ \
-Wl,-whole-archive flashrom.a -Wl,-no-whole-archive
else # FLASHROM
$(LIB_DIR)/app_lib/$(APP)$(if $(DEBUG),_dbg).a: $(OBJS)
mkdir -p $(@D)
$(AR) rcD --plugin=$(PLUGIN) $@ $(filter-out $(EXCLUDE_APP_OBJ),$(OBJS))
$(RANLIB) -D --plugin=$(PLUGIN) $@
$(AR) t $@
$(APP).elf: $(OBJS) $(firstword $(LINK)) \
$(if $(BUILD_APP_LIB),$(LIB_DIR)/app_lib/$(APP)$(if $(DEBUG),_dbg).a)
ifeq ($(MAKECMDGOALS),build_info)
@echo IDE_LINK_CMD:
endif
$(LINK) $(LDFLAGS) $(OBJS) $(LIBS) -o $@
endif # FLASHROM
ifeq ($(TOOLSET),ARM)
$(APP).bin: $(APP).elf
$(ARM_DIR)/fromelf --bin --output=$@ $<
$(APP).ihex: $(APP).elf
$(ARM_DIR)/fromelf --i32 --output=$@ $<
else
$(APP).bin: $(APP).elf $(OBJCOPY)
$(OBJCOPY) -O binary $< $@
$(APP).ihex: $(APP).elf $(OBJCOPY)
$(OBJCOPY) -O ihex $< $@
endif
$(APP).bo: $(APP).bin $(OBJCOPY)
$(OBJCOPY) -I binary -O elf32-littlearm -B arm --rename-section .data=.rodata,alloc,load,readonly,data,contents $< $@
$(APP).hex: $(APP).ihex $(OBJCOPY)
$(OBJCOPY) -O verilog $< $@
$(APP).asm: $(APP).elf $(OBJDUMP)
$(OBJDUMP) -d $< >$@
.PHONY: program
program: $(APP).elf reset_target
$(OPENOCD) -c "init; verify_rom_version; sydney_load_flash $< $(if $(FLASH_START),$(FLASH_START) $(if $(NVDS_START),$(NVDS_START))); exit"
.PHONY: program_all
program_all: $(if $(flash_nvds.data),build_flash_nvds push_flash_nvds) program
.PHONY: verify
verify: $(APP).elf reset_target
$(OPENOCD) -c "init; verify_rom_version; sydney_verify_flash $<; exit"
.PHONY: run.ram
run.ram: $(APP).bin reset_target
$(eval RUN_IN_RAM_HOOK:=$(shell $(NM) rom.elf | grep '\<run_in_ram_hook\>' | awk '{print "0x" $$1}'))\
$(OPENOCD) -c "init; verify_rom_version; catch {sydney_erase_flash}; load_ram_image $(RUN_IN_RAM_HOOK) $< $(if $(URAM_START),$(URAM_START),0x20014000); resume $(if $(URAM_START),$(URAM_START),0x20014000); exit"
.PHONY: run.flash
run.flash: $(APP).elf reset_target
$(OPENOCD) -c "init; verify_rom_version; sydney_load_flash $< \
$(if $(FLASH_START),$(FLASH_START) $(if $(PRESERVE_USER),$(USER_START),$(if $(NVDS_START),$(NVDS_START)) $(if $(FLASHOFF),$(FLASHOFF)))); set _RESET_HARD_ON_EXIT 1; exit"
.PHONY: run
run: run.$(if $(RUN_IN_RAM),ram,flash)
.PHONY: run_all
run_all: $(if $(flash_nvds.data),build_flash_nvds push_flash_nvds) run
.PHONY: pull_core
pull_core: check_openocd
$(OPENOCD) -c "init; get_coredump; exit"
.PHONY: gcov
gcov:
$(GCOV) -ab *.gcda
.PHONY: gdb
gdb: $(if $(NO_REBUILD),,$(APP).elf) $(GDB)
$(GDB) -x $(GDB_CFG_DIR)/atmx2.gdb $(APP).elf $(GDB_EXTRA)
.PHONY: gdb_target
gdb_target: $(if $(NO_REBUILD),,$(APP).elf) $(GDB)
$(GDB) -x $(GDB_CFG_DIR)/atmx2.gdb $(APP).elf $(GDB_EXTRA) -ex "target remote $(GDB_REMOTE)"
.PHONY: keil_gcc_gen
keil_gcc_gen:
python3 $(IDE_PRJ_GEN) $(CURDIR) -s ATMx2 -m $(MAKEOVERRIDES)
.PHONY: keil_arm_gen
keil_arm_gen:
python3 $(IDE_PRJ_GEN) $(CURDIR) -s ATMx2 -i keil_arm -m $(MAKEOVERRIDES)
.PHONY: ses_gen
ses_gen:
python3 $(IDE_PRJ_GEN) $(CURDIR) -s ATMx2 -i ses -m $(MAKEOVERRIDES)
.PHONY: iar_gen
iar_gen:
python3 $(IDE_PRJ_GEN) $(CURDIR) -s ATMx2 -i iar -m $(MAKEOVERRIDES)
.PHONY: build_info
build_info: all
@echo IDE_S_SRCS = $(S_SRCS)
@echo IDE_C_SRCS = $(C_SRCS)
@echo IDE_ASFLAGS = $(ASFLAGS)
@echo IDE_CFLAGS = $(CFLAGS)
@echo IDE_LIBS = $(LIBS)
.PHONY: clean
clean::
rm -f $(APP).{bin,elf,asm}
rm -f flashrom.a
-rm -f *.d *.o
-rm -f *.gcno *.gcda
ifndef COVERAGE
-rm -f *.gcov
endif
-rm -f *.map
ARCH_FLASH_TYPE := bin
ifeq ($(ARCH_FLASH_TYPE),bin)
# TODO: figure out a solution to avoid duplicating these platform-dependent
# values from <PLATFORM_DIR>/openocd/*_flash.tcl in Make. May require a change
# in archive format.
ATM_ISP_LOAD_FLASH_XARGS := \
$(if $(FLASH_START),$(FLASH_START),0x0) \
$(if $(NVDS_START),$(NVDS_START),0x78000) \
0x10000000 \
$(if $(MPR_START), -mpr_start $(MPR_START)) \
$(if $(MPR_SIZE), -mpr_size $(MPR_SIZE)) \
$(if $(MPR_LOCK_SIZE), -mpr_lock_size $(MPR_LOCK_SIZE))
else ifeq ($(ARCH_FLASH_TYPE),elf)
ATM_ISP_LOAD_FLASH_XARGS := $(if $(FLASH_START),$(FLASH_START) $(if $(NVDS_START),$(NVDS_START)))
else
$(error Unknown ARCH_FLASH_TYPE $(ARCH_FLASH_TYPE))
endif
.PHONY: arch_add_flash
arch_add_flash: $(APP).$(ARCH_FLASH_TYPE)
$(call ATM_ISP_LOAD,$< $(ATM_ISP_LOAD_FLASH_XARGS),Flash)
build_archive: arch_add_flash
.PHONY: info
info: $(APP).elf $(SIZE)
$(SIZE) $<
include $(COMMON_USER_DIR)/layout_info.mk
endif # __APP_MK__