1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2024-12-02 10:24:11 +01:00
LibrePilot/make/firmware-defs.mk
Stacey Sheldon 5ea814ae12 build: really handle colon in windows path names in bino symbol transform
colon in windows paths needs to be converted to an underscore,
not removed entirely from the symbol names autogenerated by
objcopy.
2011-05-08 17:36:16 -04:00

182 lines
5.9 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 .,_,$(subst /,_,$<))))_start=_binary_start \
--redefine-sym _binary_$(subst :,_,$(subst -,_,$(subst .,_,$(subst /,_,$<))))_end=_binary_end \
--redefine-sym _binary_$(subst :,_,$(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"