From ccc6caadc42da79df8288e3681259cc64b5eb37c Mon Sep 17 00:00:00 2001 From: Martin Mares Date: Wed, 10 Jul 2019 10:13:47 +0200 Subject: [PATCH] Generic makefile for the BluePill --- mk/bluepill.mk | 121 ++++++++++++++++++++++++++++++++++++++++++++ test-blink/Makefile | 86 ++----------------------------- test-blink/test.c | 2 + 3 files changed, 128 insertions(+), 81 deletions(-) create mode 100644 mk/bluepill.mk diff --git a/mk/bluepill.mk b/mk/bluepill.mk new file mode 100644 index 0000000..bce93a3 --- /dev/null +++ b/mk/bluepill.mk @@ -0,0 +1,121 @@ +# Generic Makefile fragment for Blue Pill devices and LibOpenCM3 +# +# Parameters: +# +# ROOT path to root of the repository +# BINARY binary to build (without extension) +# OBJS list of object files +# LIB_OBJS list of library object files +# WITH_BOOT_LOADER define if code origin should be shifted by 8K for boot loader +# WITH_DFU_FLASH flashing uses dfu-util +# + +vpath %.c $(ROOT)/lib +OBJS += $(LIB_OBJS) + +OPENCM3_DIR=/home/mj/stm/libopencm3 +DEVICE=stm32f103x8 + +.PHONY: all +all: $(BINARY).elf $(BINARY).bin + +.PHONY: flash +flash: $(BINARY).flash + +ifneq ($(V),1) +Q := @ +NULL := 2>/dev/null +endif + +include $(OPENCM3_DIR)/mk/genlink-config.mk + +ifdef WITH_BOOT_LOADER + +# We want to generate a linked script for a different ROM start address +UCW_LDSCRIPT=bootloader-$(DEVICE).ld + +bootloader-$(DEVICE).ld: generated.$(DEVICE).ld + @printf " GENLNK2 $@\n" + $(Q)sed '/^ rom /s/ORIGIN = 0x08000000/ORIGIN = 0x08002000/' <$< >$@ + +else + +UCW_LDSCRIPT=$(LDSCRIPT) + +endif + +PREFIX ?= arm-none-eabi + +CC := $(PREFIX)-gcc +CXX := $(PREFIX)-g++ +LD := $(PREFIX)-gcc +AR := $(PREFIX)-ar +AS := $(PREFIX)-as +OBJCOPY := $(PREFIX)-objcopy +OBJDUMP := $(PREFIX)-objdump +GDB := $(PREFIX)-gdb +OPT := -Os +DEBUG := -ggdb3 +CSTD ?= -std=c99 + +TGT_CFLAGS += $(OPT) $(CSTD) $(DEBUG) +TGT_CFLAGS += $(ARCH_FLAGS) +TGT_CFLAGS += -Wall -Wextra -Wshadow -Wimplicit-function-declaration +TGT_CFLAGS += -Wredundant-decls -Wmissing-prototypes -Wstrict-prototypes +TGT_CFLAGS += -fno-common -ffunction-sections -fdata-sections +TGT_CFLAGS += -I. -I../lib + +TGT_CPPFLAGS += -MD + +TGT_LDFLAGS += --static -nostartfiles +TGT_LDFLAGS += -T$(UCW_LDSCRIPT) +TGT_LDFLAGS += $(ARCH_FLAGS) $(DEBUG) +TGT_LDFLAGS += -Wl,-Map=$(*).map -Wl,--cref +TGT_LDFLAGS += -Wl,--gc-sections +ifeq ($(V),99) +TGT_LDFLAGS += -Wl,--print-gc-sections +endif + +LDLIBS += -Wl,--start-group -lc -lgcc -lnosys -Wl,--end-group + +include $(OPENCM3_DIR)/mk/genlink-rules.mk + +%.bin: %.elf + @printf " OBJCOPY $(*).bin\n" + $(Q)$(OBJCOPY) -Obinary $(*).elf $(*).bin + +%.elf: $(OBJS) $(UCW_LDSCRIPT) + @printf " LD $(*).elf\n" + $(Q)$(LD) $(TGT_LDFLAGS) $(LDFLAGS) $(OBJS) $(LDLIBS) -o $*.elf + +%.o: %.c + @printf " CC $(*).c\n" + $(Q)$(CC) $(TGT_CFLAGS) $(CFLAGS) $(TGT_CPPFLAGS) $(CPPFLAGS) -o $@ -c $< + +.PHONY: clean +clean: + @printf " CLEAN\n" + $(Q)rm -f *.elf *.bin *.o *.d *.map $(LDSCRIPT) $(UCW_LDSCRIPT) + +ifdef WITH_DFU_FLASH + +%.flash: %.bin + @printf " FLASH $<\n" + $(Q)dfu-util -a2 -D $(*).bin + +else + +%.flash: %.bin + @printf " FLASH $<\n" + $(Q)$(ROOT)/bin/st-flash write $(*).bin 0x8000000 + +.PHONY: reset +reset: all + $(ROOT)/bin/st-flash reset + +endif + +.SECONDEXPANSION: +.SECONDARY: + +-include $(OBJS:.o=.d) diff --git a/test-blink/Makefile b/test-blink/Makefile index a713bd2..81ed48b 100644 --- a/test-blink/Makefile +++ b/test-blink/Makefile @@ -1,85 +1,9 @@ +ROOT=.. BINARY=test OBJS=test.o +LIB_OBJS=util-debug.o -# Library modules to use -#vpath %.c ../lib -#OBJS += util-debug.o +WITH_BOOT_LOADER=1 +WITH_DFU_FLASH=1 -OPENCM3_DIR=/home/mj/stm/libopencm3 -DEVICE=stm32f103x8 - -all: $(BINARY).elf $(BINARY).bin - -flash: $(BINARY).flash - -reset: all - ../bin/st-flash reset - -ifneq ($(V),1) -Q := @ -NULL := 2>/dev/null -endif - -include $(OPENCM3_DIR)/mk/genlink-config.mk - -PREFIX ?= arm-none-eabi - -CC := $(PREFIX)-gcc -CXX := $(PREFIX)-g++ -LD := $(PREFIX)-gcc -AR := $(PREFIX)-ar -AS := $(PREFIX)-as -OBJCOPY := $(PREFIX)-objcopy -OBJDUMP := $(PREFIX)-objdump -GDB := $(PREFIX)-gdb -OPT := -Os -DEBUG := -ggdb3 -CSTD ?= -std=c99 - -TGT_CFLAGS += $(OPT) $(CSTD) $(DEBUG) -TGT_CFLAGS += $(ARCH_FLAGS) -TGT_CFLAGS += -Wall -Wextra -Wshadow -Wimplicit-function-declaration -TGT_CFLAGS += -Wredundant-decls -Wmissing-prototypes -Wstrict-prototypes -TGT_CFLAGS += -fno-common -ffunction-sections -fdata-sections -TGT_CFLAGS += -I. -I../lib - -TGT_CPPFLAGS += -MD - -TGT_LDFLAGS += --static -nostartfiles -TGT_LDFLAGS += -T$(LDSCRIPT) -TGT_LDFLAGS += $(ARCH_FLAGS) $(DEBUG) -TGT_LDFLAGS += -Wl,-Map=$(*).map -Wl,--cref -TGT_LDFLAGS += -Wl,--gc-sections -ifeq ($(V),99) -TGT_LDFLAGS += -Wl,--print-gc-sections -endif - -LDLIBS += -Wl,--start-group -lc -lgcc -lnosys -Wl,--end-group - -include $(OPENCM3_DIR)/mk/genlink-rules.mk - -%.bin: %.elf - @printf " OBJCOPY $(*).bin\n" - $(Q)$(OBJCOPY) -Obinary $(*).elf $(*).bin - -%.elf: $(OBJS) $(LDSCRIPT) - @printf " LD $(*).elf\n" - $(Q)$(LD) $(TGT_LDFLAGS) $(LDFLAGS) $(OBJS) $(LDLIBS) -o $*.elf - -%.o: %.c - @printf " CC $(*).c\n" - $(Q)$(CC) $(TGT_CFLAGS) $(CFLAGS) $(TGT_CPPFLAGS) $(CPPFLAGS) -o $@ -c $< - -.PHONY: clean -clean: - @printf " CLEAN\n" - $(Q)rm -f *.elf *.bin *.o *.d *.map $(LDSCRIPT) - -%.flash: %.bin - @printf " FLASH $<\n" - $(Q)../bin/st-flash write $(*).bin 0x8000000 - -.SECONDEXPANSION: -.SECONDARY: - --include $(OBJS:.o=.d) +include $(ROOT)/mk/bluepill.mk diff --git a/test-blink/test.c b/test-blink/test.c index b1c8738..62c349d 100644 --- a/test-blink/test.c +++ b/test-blink/test.c @@ -52,6 +52,8 @@ int main(void) cm_enable_interrupts(); for (;;) { + gpio_toggle(GPIOC, GPIO13); + delay_ms(100); gpio_toggle(GPIOC, GPIO13); delay_ms(500); } -- 2.39.2