blob: b7c95eb92fe99f1fe57b071ee0cd07890dabbf30 [file] [log] [blame]
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__