275 lines
6.7 KiB
Makefile
275 lines
6.7 KiB
Makefile
# make clean ... clean
|
|
# make all ... compile TARGET
|
|
|
|
##############################################################################
|
|
# Input files
|
|
|
|
# ASM source files
|
|
ASRC += \
|
|
${TARGET}.S \
|
|
|
|
##############################################################################
|
|
# Configuration
|
|
|
|
# destination filename
|
|
#TARGET = boot2
|
|
|
|
# stack size of one CPU core (should be 4KB to fit into SRAM banks 4 and 5)
|
|
STACK_SIZE = 0x1000
|
|
|
|
# temporary build directory
|
|
TEMP = ./build
|
|
|
|
# Base makefile (to ensure recompilation after change)
|
|
MAKEFILE = ./Makefile
|
|
|
|
# linker script
|
|
LDSCRIPT = ./boot_stage2.ld
|
|
|
|
# CPU
|
|
MCU=cortex-m0plus
|
|
|
|
# CPU Architecture
|
|
MARCH=armv6-m
|
|
|
|
# FPU
|
|
FPU=auto
|
|
|
|
##############################################################################
|
|
# Compilation flags
|
|
|
|
# define MCU
|
|
ARCHCFG = -mcpu=${MCU} -march=${MARCH} -mfpu=${FPU} -mfloat-abi=soft
|
|
|
|
# use ARM instructions
|
|
ARCHCFG += -mthumb
|
|
|
|
# === ASM flags
|
|
|
|
# MCU
|
|
AFLAGS += ${ARCHCFG}
|
|
|
|
# === C flags
|
|
|
|
# MCU
|
|
CFLAGS += ${ARCHCFG}
|
|
|
|
# Optimization level
|
|
#CFLAGS += -O0 # do no optimization
|
|
#CFLAGS += -O1 # optimize minimally
|
|
CFLAGS += -O2 # optimize more
|
|
#CFLAGS += -O3 # optimize even more (do not use, compilation may be incorrect)
|
|
#CFLAGS += -Ofast # optimize for speed (do not use, compilation may be incorrect)
|
|
#CFLAGS += -Og -g3 # optimize for debugger (use together with -g0..-g3, level of debugging information)
|
|
#CFLAGS += -Os # optimize for size
|
|
|
|
# do not use builtin functions (memset)
|
|
CFLAGS += -Wl,--build-id=none
|
|
#CFLAGS += -fno-builtin
|
|
|
|
# do not use standard includes
|
|
#CFLAGS += -nostdinc
|
|
|
|
# create separate sections (to enable eliminate unused sections)
|
|
CFLAGS += -fdata-sections -ffunction-sections
|
|
|
|
# use signed char
|
|
CFLAGS += -fsigned-char
|
|
|
|
# do not assume usual definitions
|
|
#CFLAGS += -ffreestanding
|
|
|
|
# do not use exceptions and unwind frames
|
|
CFLAGS += -fno-unwind-tables -fno-exceptions
|
|
|
|
# --specs=nosys.specs ... do not use _exit
|
|
#CFLAGS += --specs=nosys.specs
|
|
|
|
# --specs=nano.specs ... use small library without printf float
|
|
#CFLAGS += --specs=nano.specs
|
|
|
|
# generate debug informations
|
|
#CFLAGS += -g3
|
|
|
|
# === C++ flags
|
|
|
|
CPPFLAGS = $(CFLAGS) -std=c++14 -Wno-aligned-new -fno-rtti -nostdinc++
|
|
|
|
# === Linker flags
|
|
|
|
# Entry point
|
|
LDFLAGS += --entry _stage2_boot
|
|
|
|
# Linker script
|
|
LDFLAGS += -Wl,-script=$(LDSCRIPT)
|
|
|
|
# do not link startup code and libs
|
|
LDFLAGS += -Wl,-nostdlib
|
|
# LDFLAGS += -Wl,-nostartfiles
|
|
|
|
# do not use builtin functions (memset)
|
|
LDLAGS += -Wl,--build-id=none
|
|
|
|
# symbol map
|
|
LDFLAGS += -Wl,-Map=./$(TARGET).map
|
|
|
|
# eliminate unused sections
|
|
LDFLAGS += -Wl,--gc-sections,--relax
|
|
|
|
##############################################################################
|
|
# Compiler
|
|
|
|
# compiler base
|
|
COMP = arm-none-eabi-
|
|
|
|
# C compiler name
|
|
CC = ${COMP}gcc
|
|
|
|
# C++ compiler name
|
|
CPP = ${COMP}g++
|
|
|
|
# ASM compiler name
|
|
AS = ${COMP}gcc -x assembler-with-cpp
|
|
|
|
# Linker
|
|
LD = ${COMP}gcc
|
|
|
|
# Object dump
|
|
OD = ${COMP}objdump
|
|
|
|
# Object copy
|
|
OC = ${COMP}objcopy
|
|
|
|
# Names
|
|
NM = ${COMP}nm
|
|
|
|
# Size
|
|
SZ = ${COMP}size
|
|
|
|
##############################################################################
|
|
# File list
|
|
|
|
# list of all source files
|
|
ALLSRC = $(ASRC) $(CSRC) $(SRC)
|
|
|
|
# list of all files without directory and without extension
|
|
ALLBASE = $(notdir $(basename $(ALLSRC)))
|
|
|
|
# list of all object files *.o
|
|
ALLOBJ = $(addprefix $(TEMP)/, $(addsuffix .o, $(ALLBASE)))
|
|
|
|
##############################################################################
|
|
# Clear temporary directory (use "make clean")
|
|
|
|
clean:
|
|
@rm -rf $(TEMP)
|
|
@rm -f ./$(TARGET).bin ./$(TARGET).hex ./$(TARGET).lst ./$(TARGET).map ./$(TARGET).sym ./$(TARGET).siz
|
|
|
|
##############################################################################
|
|
# Compile all (use "make all")
|
|
|
|
all: createdirs elf bin hex lst sym siz
|
|
|
|
##############################################################################
|
|
# Create temporary directory
|
|
|
|
createdirs:
|
|
@mkdir -p $(TEMP)
|
|
|
|
##############################################################################
|
|
# Dependencies of output files
|
|
|
|
elf: $(TEMP)/$(TARGET).elf
|
|
bin: ./$(TARGET).bin
|
|
hex: ./$(TARGET).hex
|
|
lst: ./$(TARGET).lst
|
|
sym: ./$(TARGET).sym
|
|
siz: ./$(TARGET).siz
|
|
|
|
##############################################################################
|
|
# Create .bin file from .elf file
|
|
|
|
./$(TARGET).bin: $(TEMP)/$(TARGET).elf
|
|
@echo " bin $@"
|
|
@$(OC) -O binary $< $@
|
|
|
|
##############################################################################
|
|
# Create .hex file from .elf file
|
|
|
|
./$(TARGET).hex: $(TEMP)/$(TARGET).elf
|
|
@echo " hex $@"
|
|
@$(OC) -O ihex $< $@
|
|
|
|
##############################################################################
|
|
# Create .lst file from .elf file
|
|
|
|
./$(TARGET).lst: $(TEMP)/$(TARGET).elf
|
|
@echo " lst $@"
|
|
@$(OD) -d -S $< > $@
|
|
|
|
##############################################################################
|
|
# Create .sym file from .elf file
|
|
|
|
./$(TARGET).sym: $(TEMP)/$(TARGET).elf
|
|
@echo " sym $@"
|
|
@$(NM) -n $< > $@
|
|
|
|
##############################################################################
|
|
# Create .siz file from .elf file
|
|
|
|
./$(TARGET).siz: $(TEMP)/$(TARGET).elf
|
|
@echo " siz $@"
|
|
@$(SZ) $< > $@
|
|
|
|
##############################################################################
|
|
# Create .o files from .c files
|
|
|
|
define CC_TEMP
|
|
$(TEMP)/$(notdir $(basename $(1))).o : $(1) $(MAKEFILE)
|
|
@echo " CC $$<"
|
|
@$(CC) $$(CFLAGS) -std=gnu99 -c $$< -o $$@
|
|
endef
|
|
|
|
$(foreach src, $(CSRC), $(eval $(call CC_TEMP, $(src))))
|
|
|
|
##############################################################################
|
|
# Create .o files from .cpp files
|
|
|
|
define CPP_TEMP
|
|
$(TEMP)/$(notdir $(basename $(1))).o : $(1) $(MAKEFILE)
|
|
@echo " C++ $$<"
|
|
@$(CPP) $$(CPPFLAGS) -c $$< -o $$@
|
|
endef
|
|
|
|
$(foreach src, $(SRC), $(eval $(call CPP_TEMP, $(src))))
|
|
|
|
##############################################################################
|
|
# Create .o files from .S files
|
|
|
|
define AS_TEMP
|
|
$(TEMP)/$(notdir $(basename $(1))).o : $(1) $(MAKEFILE)
|
|
@echo " ASM $$<"
|
|
@$(AS) $$(CFLAGS) $$(AFLAGS) -c $$< -o $$@
|
|
endef
|
|
|
|
$(foreach src, $(ASRC), $(eval $(call AS_TEMP, $(src))))
|
|
|
|
##############################################################################
|
|
# Create .elf from .o files
|
|
|
|
$(TEMP)/$(TARGET).elf: $(ALLOBJ) $(MAKEFILE) $(LDSCRIPT)
|
|
@echo " ld $@"
|
|
@$(LD) $(LDFLAGS) $(ALLOBJ) -o $@
|
|
|
|
##############################################################################
|
|
# Head dependencies, to recompile C after changing H
|
|
|
|
ifneq (${MAKECMDGOALS},clean)
|
|
-include $(wildcard $(TEMP)/*.d)
|
|
endif
|
|
|
|
##############################################################################
|
|
# List of dependencies not creating files
|
|
|
|
.PHONY: clean all createdirs elf bin hex lst sym siz
|