# --- 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 -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 STM32F030C8" > $@ echo "connect" >> $@ echo "S" >> $@ echo "4000" >> $@ echo "loadfile $(TARGET_BASE).hex" >> $@ echo "r" >> $@ echo "g" >> $@ echo "exit" >> $@ /tmp/jlink_rst_script: Makefile echo "Device STM32F030C8" > $@ echo "connect" >> $@ echo "S" >> $@ echo "4000" >> $@ echo "r" >> $@ echo "g" >> $@ echo "exit" >> $@ program_jlink: /tmp/jlink_prog_script $(TARGET_BASE).hex JLinkExe