This repository has been archived on 2024-10-30. You can view files and clone it, but cannot push or open issues or pull requests.
24DownConverter/Makefile
2019-06-12 14:38:18 +01:00

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)