188 lines
7.2 KiB
Makefile
188 lines
7.2 KiB
Makefile
# **************************************************************************** #
|
|
# #
|
|
# Copyright (c) 2017 Andrea Loi #
|
|
# #
|
|
# Permission is hereby granted, free of charge, to any person obtaining a #
|
|
# copy of this software and associated documentation files (the "Software"), #
|
|
# to deal in the Software without restriction, including without limitation #
|
|
# the rights to use, copy, modify, merge, publish, distribute, sublicense, #
|
|
# and/or sell copies of the Software, and to permit persons to whom the #
|
|
# Software is furnished to do so, subject to the following conditions: #
|
|
# #
|
|
# The above copyright notice and this permission notice shall be included #
|
|
# in all copies or substantial portions of the Software. #
|
|
# #
|
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
|
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, #
|
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL #
|
|
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER #
|
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING #
|
|
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER #
|
|
# DEALINGS IN THE SOFTWARE. #
|
|
# #
|
|
# **************************************************************************** #
|
|
|
|
|
|
|
|
# **************************************************************************** #
|
|
# < Project configuration variables > #
|
|
# **************************************************************************** #
|
|
# You probably need to change these. #
|
|
# **************************************************************************** #
|
|
|
|
|
|
|
|
# **************************************************************************** #
|
|
# TARGET: This sets the name of the program. #
|
|
# It's used as a prefix for the output files. #
|
|
# **************************************************************************** #
|
|
TARGET = downconvert
|
|
|
|
|
|
|
|
# **************************************************************************** #
|
|
# OTHER_SRCS: List here all the .c files that needs to be compiled. #
|
|
# You can separete them using a space. #
|
|
# **************************************************************************** #
|
|
OTHER_SRCS = main.c
|
|
|
|
|
|
|
|
# **************************************************************************** #
|
|
# OPTFLAGS: Select GCC optimization level. #
|
|
# This is only used for the release build ("make"). #
|
|
# The debug build ("make debug") optimization flags are set #
|
|
# in DBG_OPTFLAGS down below. #
|
|
# Also be aware that some levels (usually -O3) may require you to #
|
|
# add additional support functions like memcpy and memset. #
|
|
# **************************************************************************** #
|
|
OPTFLAGS = -O0
|
|
|
|
|
|
|
|
# **************************************************************************** #
|
|
# < Advanced configuration variables > #
|
|
# **************************************************************************** #
|
|
# You probably don't need to change these. #
|
|
# **************************************************************************** #
|
|
INIT_SRC = init.c
|
|
LINKER_SCRIPT = STM32F103C8.ld
|
|
STUTIL_PORT = 4242
|
|
DBG_OPTFLAGS = -O0
|
|
REMOVE_OBJS = Y
|
|
VERBOSE = N
|
|
CROSS_COMPILE = arm-none-eabi-
|
|
STFLASH = st-flash
|
|
STUTIL = st-util
|
|
OPENOCD = openocd
|
|
|
|
|
|
|
|
# **************************************************************************** #
|
|
# < Makefile guts > #
|
|
# **************************************************************************** #
|
|
# DON'T CHANGE ANYTHING UNLESS YOU KNOW WHAT YOU'RE DOING #
|
|
# **************************************************************************** #
|
|
|
|
SRCS += $(INIT_SRC)
|
|
SRCS += $(OTHER_SRCS)
|
|
|
|
OBJS = $(addsuffix .o, $(basename $(SRCS)))
|
|
SUS = $(addsuffix .su, $(basename $(OBJS)))
|
|
|
|
CFLAGS += -mcpu=cortex-m3 -mthumb -mabi=aapcs
|
|
CFLAGS += -Wall -Wextra
|
|
CFLAGS += -fno-common -static
|
|
CFLAGS += -ffunction-sections -fdata-sections -Wl,--gc-sections
|
|
|
|
LDFLAGS += -march=armv7-m -mabi=aapcs
|
|
LDFLAGS += -nostartfiles -nostdlib -lgcc
|
|
LDFLAGS += -T$(LINKER_SCRIPT)
|
|
|
|
CC = $(CROSS_COMPILE)gcc
|
|
LD = $(CROSS_COMPILE)ld
|
|
OBJDUMP = $(CROSS_COMPILE)objdump
|
|
OBJCOPY = $(CROSS_COMPILE)objcopy
|
|
SIZE = $(CROSS_COMPILE)size
|
|
GDB = $(CROSS_COMPILE)gdb
|
|
|
|
ECHO = echo
|
|
RM = rm
|
|
|
|
ifeq ($(VERBOSE),Y)
|
|
SILENCE =
|
|
else
|
|
SILENCE = @
|
|
endif
|
|
|
|
GDB_PARAM = -quiet --eval-command="target extended-remote localhost:$(STUTIL_PORT)"
|
|
|
|
.PHONY: all debug build debug_build output info size flash erase server gdb clean_objs clean
|
|
|
|
all: clean $(SRCS) build clean_objs output size
|
|
|
|
debug: clean $(SRCS) debug_build info output size
|
|
|
|
build: COMFLAGS = $(OPTFLAGS)
|
|
build: $(TARGET).elf
|
|
|
|
debug_build: COMFLAGS = $(DBG_OPTFLAGS) -ggdb3
|
|
debug_build: CFLAGS += -fstack-usage
|
|
debug_build: LDFLAGS += -Xlinker -Map=$(TARGET).map
|
|
debug_build: $(TARGET).elf
|
|
|
|
$(TARGET).elf: $(OBJS)
|
|
$(SILENCE)$(CC) $(LDFLAGS) $(COMFLAGS) $(OBJS) -o "$@"
|
|
|
|
.SECONDARY: $(OBJS)
|
|
|
|
%.o: %.c
|
|
$(SILENCE)$(CC) $(CFLAGS) $(COMFLAGS) -c "$<" -o "$@"
|
|
|
|
output: $(TARGET).hex $(TARGET).bin
|
|
|
|
$(TARGET).hex: $(TARGET).elf
|
|
$(SILENCE)$(OBJCOPY) -O ihex $< $@
|
|
|
|
$(TARGET).bin: $(TARGET).elf
|
|
$(SILENCE)$(OBJCOPY) -O binary $< $@
|
|
|
|
info: $(TARGET).elf
|
|
$(SILENCE)$(OBJDUMP) -x -S $(TARGET).elf > $(TARGET).lst
|
|
$(SILENCE)$(OBJDUMP) -D $(TARGET).elf > $(TARGET).dis
|
|
$(SILENCE)$(SIZE) $(TARGET).elf > $(TARGET).size
|
|
|
|
size: $(TARGET).elf
|
|
$(SILENCE)$(SIZE) $(TARGET).elf
|
|
|
|
flash: $(TARGET).bin
|
|
$(OPENOCD) -f /home/ianw/STM/opendps/openocd/scripts/interface/stlink-v2.cfg -f /home/ianw/STM/opendps/openocd/scripts/target/stm32f1x.cfg -c "program $(TARGET).bin verify reset exit 0x8000000"
|
|
|
|
erase:
|
|
$(OPENOCD) -f /home/ianw/STM/opendps/openocd/scripts/interface/stlink-v2.cfg -f /home/ianw/STM/opendps/openocd/scripts/target/stm32f1x.cfg -c "flash erase_address unlock 0x08000000 0x10000"
|
|
|
|
server: $(TARGET).elf
|
|
$(SILENCE)$(ECHO) "On another terminal run \"make gdb\""
|
|
$(SILENCE)$(STUTIL) -p $(STUTIL_PORT)
|
|
|
|
gdb: $(TARGET).elf
|
|
$(SILENCE)$(ECHO) "Run \"load\" to start debugging."
|
|
$(SILENCE)$(GDB) $(GDB_PARAM) $(TARGET).elf
|
|
|
|
clean_objs:
|
|
ifeq ($(REMOVE_OBJS),Y)
|
|
$(SILENCE)$(RM) -f $(OBJS)
|
|
endif
|
|
|
|
clean:
|
|
$(SILENCE)$(RM) -f $(TARGET).elf
|
|
$(SILENCE)$(RM) -f $(TARGET).bin
|
|
$(SILENCE)$(RM) -f $(TARGET).hex
|
|
$(SILENCE)$(RM) -f $(TARGET).size
|
|
$(SILENCE)$(RM) -f $(TARGET).lst
|
|
$(SILENCE)$(RM) -f $(TARGET).dis
|
|
$(SILENCE)$(RM) -f $(TARGET).map
|
|
$(SILENCE)$(RM) -f $(OBJS)
|
|
$(SILENCE)$(RM) -f $(SUS)
|
|
|
|
|