mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2024-12-02 10:24:11 +01:00
29ec2f198b
This change is made up of a number of tightly coupled changes: - Deprecate the use of the USE_BOOTLOADER command-line option. It is now hard-coded in each Makefile. Overriding it on the command line is not allowed. - Split apart the memory declaration and the section declaration in all linker files (*_memory.ld and *_sections.ld). - Describe the split between bootloader and app sections of flash in each board's _memory.ld file. - Change program target to selectively erase flash so that the installed bootloader is preserved across even JTAG programming operations. - All elf files are built with debug symbols and are not stripped. This should help debugging with gdb. The images programmed on the boards are all .bin files now which do not include symbols.
182 lines
5.8 KiB
Makefile
182 lines
5.8 KiB
Makefile
# Toolchain prefix (i.e arm-elf- -> arm-elf-gcc.exe)
|
|
TCHAIN_PREFIX ?= arm-none-eabi-
|
|
|
|
# Define toolchain component names.
|
|
CC = $(TCHAIN_PREFIX)gcc
|
|
CPP = $(TCHAIN_PREFIX)g++
|
|
AR = $(TCHAIN_PREFIX)ar
|
|
OBJCOPY = $(TCHAIN_PREFIX)objcopy
|
|
OBJDUMP = $(TCHAIN_PREFIX)objdump
|
|
SIZE = $(TCHAIN_PREFIX)size
|
|
NM = $(TCHAIN_PREFIX)nm
|
|
STRIP = $(TCHAIN_PREFIX)strip
|
|
|
|
THUMB = -mthumb
|
|
|
|
# Test if quotes are needed for the echo-command
|
|
result = ${shell echo "test"}
|
|
ifeq (${result}, test)
|
|
quote = '
|
|
# This line is just to clear out the single quote above '
|
|
else
|
|
quote =
|
|
endif
|
|
|
|
# Define Messages
|
|
# English
|
|
MSG_FORMATERROR := ${quote} Can not handle output-format${quote}
|
|
MSG_MODINIT := ${quote} MODINIT ${quote}
|
|
MSG_SIZE := ${quote} SIZE ${quote}
|
|
MSG_LOAD_FILE := ${quote} BIN/HEX ${quote}
|
|
MSG_BIN_OBJ := ${quote} BINO ${quote}
|
|
MSG_STRIP_FILE := ${quote} STRIP ${quote}
|
|
MSG_EXTENDED_LISTING := ${quote} LIS ${quote}
|
|
MSG_SYMBOL_TABLE := ${quote} NM ${quote}
|
|
MSG_LINKING := ${quote} LD ${quote}
|
|
MSG_COMPILING := ${quote} CC ${quote}
|
|
MSG_COMPILING_ARM := ${quote} CC-ARM ${quote}
|
|
MSG_COMPILINGCPP := ${quote} CXX ${quote}
|
|
MSG_COMPILINGCPP_ARM := ${quote} CXX-ARM ${quote}
|
|
MSG_ASSEMBLING := ${quote} AS ${quote}
|
|
MSG_ASSEMBLING_ARM := ${quote} AS-ARM ${quote}
|
|
MSG_CLEANING := ${quote} CLEAN ${quote}
|
|
MSG_ASMFROMC := ${quote} AS(C) ${quote}
|
|
MSG_ASMFROMC_ARM := ${quote} AS(C)-ARM ${quote}
|
|
MSG_PYMITEINIT := ${quote} PY ${quote}
|
|
|
|
toprel = $(subst $(realpath $(TOP))/,,$(abspath $(1)))
|
|
|
|
# Display compiler version information.
|
|
.PHONY: gccversion
|
|
gccversion :
|
|
@$(CC) --version
|
|
|
|
# Create final output file (.hex) from ELF output file.
|
|
%.hex: %.elf
|
|
@echo $(MSG_LOAD_FILE) $(call toprel, $@)
|
|
$(V1) $(OBJCOPY) -O ihex $< $@
|
|
|
|
# Create stripped output file (.elf.stripped) from ELF output file.
|
|
%.elf.stripped: %.elf
|
|
@echo $(MSG_STRIP_FILE) $(call toprel, $@)
|
|
$(V1) $(STRIP) --strip-unneeded $< -o $@
|
|
|
|
# Create final output file (.bin) from ELF output file.
|
|
%.bin: %.elf
|
|
@echo $(MSG_LOAD_FILE) $(call toprel, $@)
|
|
$(V1) $(OBJCOPY) -O binary $< $@
|
|
|
|
%.bin.o: %.bin
|
|
@echo $(MSG_BIN_OBJ) $(call toprel, $@)
|
|
$(V1) $(OBJCOPY) -I binary -O elf32-littlearm --binary-architecture arm \
|
|
--rename-section .data=.rodata,alloc,load,readonly,data,contents \
|
|
--wildcard \
|
|
--redefine-sym _binary_$(subst -,_,$(subst .,_,$(subst /,_,$<)))_start=_binary_start \
|
|
--redefine-sym _binary_$(subst -,_,$(subst .,_,$(subst /,_,$<)))_end=_binary_end \
|
|
--redefine-sym _binary_$(subst -,_,$(subst .,_,$(subst /,_,$<)))_size=_binary_size \
|
|
$< $@
|
|
|
|
# Create extended listing file/disassambly from ELF output file.
|
|
# using objdump testing: option -C
|
|
%.lss: %.elf
|
|
@echo $(MSG_EXTENDED_LISTING) $(call toprel, $@)
|
|
$(V1) $(OBJDUMP) -h -S -C -r $< > $@
|
|
|
|
# Create a symbol table from ELF output file.
|
|
%.sym: %.elf
|
|
@echo $(MSG_SYMBOL_TABLE) $(call toprel, $@)
|
|
$(V1) $(NM) -n $< > $@
|
|
|
|
define SIZE_TEMPLATE
|
|
.PHONY: $(1)_size
|
|
$(1)_size: $(1)
|
|
@echo $(MSG_SIZE) $$(call toprel, $$<)
|
|
$(V1) $(SIZE) -A $$<
|
|
endef
|
|
|
|
# Assemble: create object files from assembler source files.
|
|
define ASSEMBLE_TEMPLATE
|
|
$(OUTDIR)/$(notdir $(basename $(1))).o : $(1)
|
|
@echo $(MSG_ASSEMBLING) $$(call toprel, $$<)
|
|
$(V1) $(CC) -c -mthumb $$(ASFLAGS) $$< -o $$@
|
|
endef
|
|
|
|
# Assemble: create object files from assembler source files. ARM-only
|
|
define ASSEMBLE_ARM_TEMPLATE
|
|
$(OUTDIR)/$(notdir $(basename $(1))).o : $(1)
|
|
@echo $(MSG_ASSEMBLING_ARM) $$(call toprel, $$<)
|
|
$(V1) $(CC) -c $$(ASFLAGS) $$< -o $$@
|
|
endef
|
|
|
|
# Compile: create object files from C source files.
|
|
define COMPILE_C_TEMPLATE
|
|
$(OUTDIR)/$(notdir $(basename $(1))).o : $(1)
|
|
@echo $(MSG_COMPILING) $$(call toprel, $$<)
|
|
$(V1) $(CC) -c -mthumb $$(CFLAGS) $$(CONLYFLAGS) $$< -o $$@
|
|
endef
|
|
|
|
# Compile: create object files from C source files. ARM-only
|
|
define COMPILE_C_ARM_TEMPLATE
|
|
$(OUTDIR)/$(notdir $(basename $(1))).o : $(1)
|
|
@echo $(MSG_COMPILING_ARM) $$(call toprel, $$<)
|
|
$(V1) $(CC) -c $$(CFLAGS) $$(CONLYFLAGS) $$< -o $$@
|
|
endef
|
|
|
|
# Compile: create object files from C++ source files.
|
|
define COMPILE_CPP_TEMPLATE
|
|
$(OUTDIR)/$(notdir $(basename $(1))).o : $(1)
|
|
@echo $(MSG_COMPILINGCPP) $$(call toprel, $$<)
|
|
$(V1) $(CC) -c -mthumb $$(CFLAGS) $$(CPPFLAGS) $$< -o $$@
|
|
endef
|
|
|
|
# Compile: create object files from C++ source files. ARM-only
|
|
define COMPILE_CPP_ARM_TEMPLATE
|
|
$(OUTDIR)/$(notdir $(basename $(1))).o : $(1)
|
|
@echo $(MSG_COMPILINGCPP_ARM) $$(call toprel, $$<)
|
|
$(V1) $(CC) -c $$(CFLAGS) $$(CPPFLAGS) $$< -o $$@
|
|
endef
|
|
|
|
# Link: create ELF output file from object files.
|
|
# $1 = elf file to produce
|
|
# $2 = list of object files that make up the elf file
|
|
define LINK_TEMPLATE
|
|
.SECONDARY : $(1)
|
|
.PRECIOUS : $(2)
|
|
$(1): $(2)
|
|
@echo $(MSG_LINKING) $$(call toprel, $$@)
|
|
$(V1) $(CC) -mthumb $$(CFLAGS) $(2) --output $$@ $$(LDFLAGS)
|
|
endef
|
|
|
|
# Compile: create assembler files from C source files. ARM/Thumb
|
|
define PARTIAL_COMPILE_TEMPLATE
|
|
$($(1):.c=.s) : %.s : %.c
|
|
@echo $(MSG_ASMFROMC) $$(call toprel, $$<)
|
|
$(V1) $(CC) -mthumb -S $$(CFLAGS) $$(CONLYFLAGS) $$< -o $$@
|
|
endef
|
|
|
|
# Compile: create assembler files from C source files. ARM only
|
|
define PARTIAL_COMPILE_ARM_TEMPLATE
|
|
$($(1):.c=.s) : %.s : %.c
|
|
@echo $(MSG_ASMFROMC_ARM) $$(call toprel, $$<)
|
|
$(V1) $(CC) -S $$(CFLAGS) $$(CONLYFLAGS) $$< -o $$@
|
|
endef
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Options for OpenOCD flash-programming
|
|
# see openocd.pdf/openocd.texi for further information
|
|
|
|
# if OpenOCD is in the $PATH just set OPENOCDEXE=openocd
|
|
OOCD_EXE=openocd
|
|
# debug level
|
|
OOCD_CL=-d0
|
|
# interface and board/target settings (using the OOCD target-library here)
|
|
OOCD_CL+=-s $(TOP)/flight/Project/OpenOCD
|
|
OOCD_CL+=-f foss-jtag.revb.cfg -f stm32.cfg
|
|
|
|
# initialize
|
|
OOCD_CL+=-c init
|
|
# show the targets
|
|
OOCD_CL+=-c targets
|
|
# commands to prepare flash-write
|
|
OOCD_CL+= -c "reset halt"
|