181 lines
4.5 KiB
Makefile
181 lines
4.5 KiB
Makefile
# --- START OF CONFIG ---------------------------------------------------
|
|
# Edit the following variables for your own needs
|
|
|
|
# toolchain configuration
|
|
PREFIX ?= arm-none-eabi-
|
|
CC = $(PREFIX)gcc
|
|
LD = $(PREFIX)gcc
|
|
OBJCOPY = $(PREFIX)objcopy
|
|
OBJDUMP = $(PREFIX)objdump
|
|
GDB = $(PREFIX)gdb
|
|
SIZE = $(PREFIX)size
|
|
|
|
OOCD = openocd
|
|
OOCD_CFG = ./oocd/tinyfancontrol.cfg
|
|
|
|
TOOLCHAIN_DIR ?= /usr/arm-none-eabi
|
|
OPENCM3_DIR ?= ./libopencm3
|
|
|
|
# default build configuration
|
|
# "make BUILD=release" does a release build
|
|
BUILD:=debug
|
|
|
|
# basic build flags configuration
|
|
CFLAGS+=-Wall -std=c99 -pedantic -Wextra -Wimplicit-function-declaration \
|
|
-Wredundant-decls -Wmissing-prototypes -Wstrict-prototypes \
|
|
-Wundef -Wshadow \
|
|
-fno-common -ffunction-sections -fdata-sections -mcpu=cortex-m0 -mthumb \
|
|
-mfloat-abi=soft -MD -DSTM32L0
|
|
|
|
LDFLAGS+=--static \
|
|
-L$(OPENCM3_DIR)/lib \
|
|
-nostartfiles -Wl,--gc-sections \
|
|
-mthumb -mcpu=cortex-m0 -mthumb -mfloat-abi=soft
|
|
|
|
# the LD script (RAM-only does not work because the code is too large)
|
|
#LDFLAGS+=-Tldscripts/tinyfancontrol-$(BUILD).ld
|
|
LDFLAGS+=-Tldscripts/tinyfancontrol-release.ld
|
|
|
|
# Flags for libopencm3
|
|
CFLAGS+=-I$(OPENCM3_DIR)/include
|
|
LDFLAGS+=-L$(OPENCM3_DIR)/lib -lopencm3_stm32l0
|
|
|
|
# Flags for fxplib
|
|
CFLAGS+=-Ifxplib/include -DPOINTPOS=16
|
|
LDFLAGS+=-Lfxplib/lib/$(BUILD) -lfxp_stm32l0
|
|
|
|
# generic linking
|
|
LDFLAGS+=-Wl,--start-group -lc -lm -lgcc -lnosys -Wl,--end-group
|
|
|
|
# build type specific flags
|
|
CFLAGS_debug=-O0 -ggdb -DDEBUG
|
|
LDFLAGS_debug=
|
|
|
|
CFLAGS_release=-Os -ggdb
|
|
LDFLAGS_release=
|
|
|
|
# target configuration
|
|
TARGET := tinyfancontrol
|
|
VERSION := $(shell git describe --always)
|
|
|
|
# source files for the project
|
|
SOURCE := $(shell find src/ -name '*.c')
|
|
INCLUDES := $(shell find src/ -name '*.h')
|
|
|
|
# additional dependencies for build (proper targets must be specified by user)
|
|
DEPS := build_libfxp
|
|
|
|
# default target
|
|
all: $(TARGET)
|
|
|
|
# user-specific targets
|
|
export CFLAGS
|
|
export BUILD
|
|
export PREFIX
|
|
export POSTFIX = stm32l0
|
|
build_libfxp:
|
|
cd fxplib && $(MAKE)
|
|
|
|
# --- END OF CONFIG -----------------------------------------------------
|
|
|
|
OBJ1=$(patsubst %.c, %.o, $(SOURCE))
|
|
OBJ=$(patsubst src/%, obj/$(BUILD)/%, $(OBJ1))
|
|
|
|
VERSIONSTR="\"$(VERSION)\""
|
|
|
|
CFLAGS+=-DVERSION=$(VERSIONSTR)
|
|
|
|
TARGET_BASE := bin/$(BUILD)/$(TARGET)
|
|
|
|
CFLAGS+=$(CFLAGS_$(BUILD))
|
|
LDFLAGS+=$(LDFLAGS_$(BUILD))
|
|
|
|
.PHONY show_cflags:
|
|
@echo --- Build parameters: ------------------------------------------
|
|
@echo CFLAGS\=$(CFLAGS)
|
|
@echo LDFLAGS\=$(LDFLAGS)
|
|
@echo SOURCE\=$(SOURCE)
|
|
@echo -----------------------------------------------------------------
|
|
|
|
$(TARGET): show_cflags $(TARGET_BASE).elf $(TARGET_BASE).hex \
|
|
$(TARGET_BASE).lss $(TARGET_BASE).bin
|
|
@$(SIZE) $(TARGET_BASE).elf
|
|
@echo ">>> $(BUILD) build complete."
|
|
|
|
$(TARGET_BASE).elf: $(DEPS) $(OBJ) $(INCLUDES) Makefile
|
|
@echo Linking $@ ...
|
|
@mkdir -p $(shell dirname $@)
|
|
@$(LD) -o $(TARGET_BASE).elf $(OBJ) $(LDFLAGS)
|
|
|
|
$(TARGET_BASE).hex: $(TARGET_BASE).elf
|
|
@echo "Generating $@ ..."
|
|
@$(OBJCOPY) -Oihex $< $@
|
|
|
|
$(TARGET_BASE).bin: $(TARGET_BASE).elf
|
|
@echo "Generating $@ ..."
|
|
@$(OBJCOPY) -Obinary $< $@
|
|
|
|
$(TARGET_BASE).lss: $(TARGET_BASE).elf
|
|
@echo "Generating $@ ..."
|
|
@$(OBJDUMP) -S $< > $@
|
|
|
|
obj/$(BUILD)/%.o: src/%.c $(INCLUDES) Makefile
|
|
@echo "Compiling $< ..."
|
|
@mkdir -p $(shell dirname $@)
|
|
@$(CC) -c $(CFLAGS) -o $@ $<
|
|
|
|
clean:
|
|
rm -f $(TARGET_BASE).elf
|
|
rm -f $(TARGET_BASE).hex
|
|
rm -f $(TARGET_BASE).lss
|
|
rm -f $(TARGET_BASE).bin
|
|
rm -f $(OBJ)
|
|
|
|
program: program_jlink
|
|
|
|
reset: reset_jlink
|
|
|
|
/tmp/jlink_prog_script: Makefile
|
|
echo "Device STM32L010K8" > $@
|
|
echo "connect" >> $@
|
|
echo "S" >> $@
|
|
echo "4000" >> $@
|
|
echo "loadfile $(TARGET_BASE).hex" >> $@
|
|
echo "r" >> $@
|
|
echo "g" >> $@
|
|
echo "exit" >> $@
|
|
|
|
/tmp/jlink_rst_script: Makefile
|
|
echo "Device STM32L010K8" > $@
|
|
echo "connect" >> $@
|
|
echo "S" >> $@
|
|
echo "4000" >> $@
|
|
echo "r" >> $@
|
|
echo "g" >> $@
|
|
echo "exit" >> $@
|
|
|
|
program_jlink: /tmp/jlink_prog_script $(TARGET_BASE).hex
|
|
JLinkExe </tmp/jlink_prog_script
|
|
|
|
reset_jlink: /tmp/jlink_rst_script
|
|
JLinkExe </tmp/jlink_rst_script
|
|
|
|
program_release: $(TARGET_BASE).hex
|
|
$(OOCD) -f $(OOCD_CFG) \
|
|
-c "init" \
|
|
-c "reset halt" \
|
|
-c "flash write_image erase $(TARGET_BASE).hex" \
|
|
-c "resume 0x08000000" \
|
|
-c "shutdown"
|
|
|
|
program_debug: $(TARGET_BASE).hex
|
|
$(OOCD) -f $(OOCD_CFG) \
|
|
-c "init" \
|
|
-c "reset halt" \
|
|
-c "load_image $(TARGET_BASE).hex" \
|
|
-c "resume `arm-none-eabi-readelf -h bin/debug/$(TARGET).elf | awk '/Entry/{print $$4;}'`" \
|
|
-c "shutdown"
|
|
|
|
debug: $(TARGET_BASE).hex
|
|
JLinkGDBServerCLExe -device STM32L010K8 -if SWD
|