ifndef __TOOLS_MK__ __TOOLS_MK__ = 1 ifeq ($(OS),Windows_NT) MD5SUM := md5sum SED := sed else ifeq ($(shell uname),Darwin) OS := Darwin MD5SUM := md5 -r SED := gsed else OS := Linux MD5SUM := md5sum SED := sed endif endif TOOLS_DIR := $(realpath $(PLATFORM_DIR)/../../../tools) ifeq ($(ATM_SDK_TOOLS_IN_PATH),) BINUTILS_DIR := $(TOOLS_DIR)/gcc-arm-none-eabi-10.3-2021.07/bin ifeq ($(BINUTILS_DIR),) $(error BINUTILS_DIR unset) endif endif BINUTILS_PREFIX_BASE := arm-none-eabi- ifeq ($(ATM_SDK_TOOLS_IN_PATH),) BINUTILS_PREFIX := $(BINUTILS_DIR)/$(BINUTILS_PREFIX_BASE) else BINUTILS_PREFIX := $(BINUTILS_PREFIX_BASE) WHICH_GCC := $(shell which $(BINUTILS_PREFIX_BASE)gcc) ifeq ($(OS),Windows_NT) BINUTILS_DIR_TXT := directory of $(WHICH_GCC) else BINUTILS_DIR_TXT := $(dir $(WHICH_GCC)) endif endif ifeq ($(TOOLSET),IAR) IAR_DIR := $(TOOLS_DIR)/bxarm-9.10.2/arm/bin ASSEMBLE := $(IAR_DIR)/iasmarm COMPILE := $(IAR_DIR)/iccarm CXX := $(IAR_DIR)/iccarm --c++ LINK := $(IAR_DIR)/ilinkarm else ifeq ($(TOOLSET),ARM) ARM_DIR := $(TOOLS_DIR)/ARMCompiler6.16/bin ASSEMBLE := $(ARM_DIR)/armasm COMPILE := $(ARM_DIR)/armclang --target=arm-arm-none-eabi CXX := $(ARM_DIR)/armclang --target=arm-arm-none-eabi -x c++ LINK := $(ARM_DIR)/armlink else ASSEMBLE := $(BINUTILS_PREFIX)as COMPILE := $(BINUTILS_PREFIX)gcc CXX := $(BINUTILS_PREFIX)c++ GCOV := $(BINUTILS_PREFIX)gcov LINK := $(BINUTILS_PREFIX)gcc PLUGIN := $(shell $(COMPILE) --print-file-name=liblto_plugin$(if $(filter Windows_NT,$(OS)),-0.dll,.so)) endif GCC := $(BINUTILS_PREFIX)gcc GDB := $(BINUTILS_PREFIX)gdb NM := $(BINUTILS_PREFIX)nm OBJCOPY := $(BINUTILS_PREFIX)objcopy OBJDUMP := $(BINUTILS_PREFIX)objdump SIZE := $(BINUTILS_PREFIX)size AR := $(BINUTILS_PREFIX)ar RANLIB := $(BINUTILS_PREFIX)ranlib $(sort $(foreach t,ASSEMBLE COMPILE CXX GCOV LINK GCC GDB NM OBJCOPY OBJDUMP \ SIZE AR RANLIB,$(firstword $($t)))): ifneq ($(ATM_SDK_TOOLS_IN_PATH),) $(info Getting bin utils from $(BINUTILS_DIR_TXT)) else @echo @echo "ERROR: Failed to find $@" @echo @echo "ERROR: Toolchain not found - needs to be downloaded and extracted." @echo "ERROR: See $(TOOLS_DIR)/README for instructions." @echo @exit 1 endif # FIXME: C removed due to problems on case-insensitive filesystems CXX_EXT := cc cp cxx cpp c++ GDB_REMOTE ?= localhost:3333 RTT_PORT ?= 9090 OPENOCD_DIR := $(TOOLS_DIR)/openocd OPENOCD_EXE := $(OPENOCD_DIR)/bin/$(OS)/openocd OPENOCD_FLAGS += -s $(OPENOCD_DIR)/tcl -s $(OPENOCD_CFG_DIR) OPENOCD_FLAGS += -f atm2x_openocd.cfg ifneq ($(OPENOCD_DEBUG),) OPENOCD_FLAGS += -d endif OPENOCD := $(OPENOCD_EXE) $(OPENOCD_FLAGS) NVDS_TOOL := $(PLAT_TOOLS_DIR)/bin/$(OS)/nvds_tool ATM_ISP := $(TOOLS_DIR)/atm_isp IDE_PRJ_GEN := $(TOOLS_DIR)/ide_prj_gen/ide_prj_generator.py .PHONY: check_openocd check_openocd: ifeq ($(OS),Linux) @if ! groups | grep -q plugdev; then \ echo; \ echo "ERROR: User $$USER is not a member of group plugdev."; \ echo "ERROR: See $(TOOLS_DIR)/README for instructions."; \ echo; \ exit 1; \ fi endif .PHONY: openocd openocd: check_openocd HTTP_KEEP_GOING=1 HTTP_NVDS_TOOL=$(NVDS_TOOL) HTTP_ATM_ISP=$(ATM_ISP) $(OPENOCD) -f servers.tcl .PHONY: segger_rtt_server segger_rtt_server: check_openocd SWDIF=JLINK $(OPENOCD) -c 'init; rtt setup 0x20014000 0x4000 "SEGGER RTT"; rtt start; rtt server start $(RTT_PORT) 0' .PHONY: reset_target reset_target: check_openocd FTDI_BENIGN_BOOT=1 FTDI_HARD_RESET=1 $(OPENOCD) -c "init; release_reset; sleep 100; set_normal_boot; exit" ARCH_ATM := arch.atm .PHONY: truncate_arch truncate_arch: $(ATM_ISP) init -o $(ARCH_ATM) $(PLATFORM_FAMILY) $(PLATFORM_NAME) ATM_ISP_LOAD = $(if $1,$(ATM_ISP) load$2 $1 -i $(ARCH_ATM) -o $(ARCH_ATM)) .PHONY: build_archive build_archive: truncate_arch .PHONY: show_archive show_archive: $(ATM_ISP) decode -i $(ARCH_ATM) burn_archive: $(ATM_ISP) burn -r $(realpath $(PLATFORM_DIR)/../../../) -i $(ARCH_ATM) $(if $(BURN_ARCH_VERIFY),-c) $(if $(BURN_ARCH_DEBUG),-v) $(if $(BURN_ARCH_ERASE_WORKAROUNDS),-e) $(if $(BURN_ARCH_PROGRAM_ONLY),-p) $(if $(BURN_ARCH_DEST_DIR),-d $(BURN_ARCH_DEST_DIR)) endif # __TOOLS_MK__