# STM32F0xx Makefile # ##################################### # # Part of the uCtools project # uctools.github.com # ####################################### # user configuration: ####################################### BUILD_NUMBER ?= 0 # SOURCES: list of sources in the user application SOURCES = main.c adc.c gpio.c i2c.c interrupts.c uart.c gps.c system_stm32f0xx.c system.c wspr.c rtc.c # TARGET: name of the user application TARGET = wsprhab-b$(BUILD_NUMBER) # BUILD_DIR: directory to place output files in BUILD_DIR = build # LD_SCRIPT: location of the linker script LD_SCRIPT = STM32F031G6_FLASH.ld # USER_DEFS user defined macros USER_DEFS = -D HSE_VALUE=16000000 USER_DEFS += -D WSPRHAB_BUILD_NUMBER=$(BUILD_NUMBER) # USER_INCLUDES: user defined includes USER_INCLUDES = # USB_INCLUDES: includes for the usb library # USB_INCLUDES = -IMiddlewares/ST/STM32_USB_Device_Library/Core/Inc #USB_INCLUDES += -IMiddlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc SI5351_INCLUDES = -Ilib/si5351 JTENCODE_INCLUDES = -Ilib/jtencode # USER_CFLAGS: user C flags (enable warnings, enable debug info) USER_CFLAGS = -Wall -g -ffunction-sections -fdata-sections -Os -fno-common --function-sections -fdata-sections USER_CFLAGS += -flto # USER_LDFLAGS: user LD flags USER_LDFLAGS = -fno-exceptions -ffunction-sections -fdata-sections -Wl,--gc-sections USER_LDFLAGS += -flto USER_LDFLAGS += --static #USER_LDFLAGS += -nostartfiles # TARGET_DEVICE: device to compile for TARGET_DEVICE = STM32F031x6 ####################################### # end of user configuration ####################################### # ####################################### # binaries ####################################### CC = arm-none-eabi-gcc AR = arm-none-eabi-ar RANLIB = arm-none-eabi-ranlib SIZE = arm-none-eabi-size OBJCOPY = arm-none-eabi-objcopy MKDIR = mkdir -p ####################################### # core and CPU type for Cortex M0 # ARM core type (CORE_M0, CORE_M3) CORE = CORE_M0 # ARM CPU type (cortex-m0, cortex-m3) CPU = cortex-m0 # where to build STM32Cube CUBELIB_BUILD_DIR = $(BUILD_DIR)/STM32Cube # various paths within the STmicro library CMSIS_PATH = drivers/CMSIS CMSIS_DEVICE_PATH = $(CMSIS_PATH)/Device/ST/STM32F0xx DRIVER_PATH = drivers/STM32F0xx_HAL_Driver # includes for gcc INCLUDES = -I$(CMSIS_PATH)/Include INCLUDES += -I$(CMSIS_DEVICE_PATH)/Include INCLUDES += -I$(DRIVER_PATH)/Inc INCLUDES += -Iinc #INCLUDES += $(USB_INCLUDES) INCLUDES += $(USER_INCLUDES) INCLUDES += $(SI5351_INCLUDES) INCLUDES += $(JTENCODE_INCLUDES) # macros for gcc DEFS = -D$(CORE) $(USER_DEFS) -D$(TARGET_DEVICE) # compile gcc flags CFLAGS = $(DEFS) $(INCLUDES) # EMZ: Maybe remove -msoft-float CFLAGS += -mcpu=$(CPU) -mthumb -msoft-float CFLAGS += $(USER_CFLAGS) # default action: build the user application all: $(BUILD_DIR)/$(TARGET).bin $(BUILD_DIR)/$(TARGET).hex flash: all st-flash write $(BUILD_DIR)/$(TARGET).bin 0x8000000 ####################################### # build the st micro peripherial library # (drivers and CMSIS) ####################################### CUBELIB = $(CUBELIB_BUILD_DIR)/libstm32cube.a # List of stm32 driver objects CUBELIB_DRIVER_OBJS = $(addprefix $(CUBELIB_BUILD_DIR)/, $(patsubst %.c, %.o, $(notdir $(wildcard $(DRIVER_PATH)/Src/*.c)))) # shortcut for building core library (make cubelib) cubelib: $(CUBELIB) $(CUBELIB): $(CUBELIB_DRIVER_OBJS) $(AR) rv $@ $(CUBELIB_DRIVER_OBJS) $(RANLIB) $@ $(CUBELIB_BUILD_DIR)/%.o: $(DRIVER_PATH)/Src/%.c | $(CUBELIB_BUILD_DIR) $(CC) -c $(CFLAGS) -o $@ $^ $(CUBELIB_BUILD_DIR): $(MKDIR) $@ ####################################### # build the USB library ####################################### #USB_MIDDLEWARE_PATH = ./Middlewares/ST/STM32_USB_Device_Library/ #USB_BUILD_DIR = $(BUILD_DIR)/usb #USB_SOURCES += usbd_ctlreq.c usbd_ioreq.c usbd_core.c usbd_cdc.c # list of usb library objects #USB_OBJECTS += $(addprefix $(USB_BUILD_DIR)/,$(notdir $(USB_SOURCES:.c=.o))) #usb: $(USB_OBJECTS) #$(USB_BUILD_DIR)/%.o: $(USB_MIDDLEWARE_PATH)/Core/Src/%.c | $(USB_BUILD_DIR) # $(CC) -Os $(CFLAGS) -c -o $@ $^ # #$(USB_BUILD_DIR)/%.o: $(USB_MIDDLEWARE_PATH)/Class/CDC/Src/%.c | $(USB_BUILD_DIR) # $(CC) -Os $(CFLAGS) -c -o $@ $^ #$(USB_BUILD_DIR): # @echo $(USB_BUILD_DIR) # $(MKDIR) $@ ####################################### # build the user libraries ####################################### # si5351 SI5351_PATH = ./lib/si5351/ SI5351_BUILD_DIR = $(BUILD_DIR)/si5351 SI5351_SOURCES += si5351.c SI5351_OBJECTS += $(addprefix $(SI5351_BUILD_DIR)/,$(notdir $(SI5351_SOURCES:.c=.o))) si5351: $(SI5351_OBJECTS) $(SI5351_BUILD_DIR)/%.o: $(SI5351_PATH)/%.c | $(SI5351_BUILD_DIR) $(CC) -Os $(CFLAGS) -c -o $@ $^ $(SI5351_BUILD_DIR): @echo $(SI5351_BUILD_DIR) $(MKDIR) $@ # jtencode JTENCODE_PATH = ./lib/jtencode/ JTENCODE_BUILD_DIR = $(BUILD_DIR)/jtencode JTENCODE_SOURCES += jtencode.c init_rs_int.c encode_rs_int.c JTENCODE_OBJECTS += $(addprefix $(JTENCODE_BUILD_DIR)/,$(notdir $(JTENCODE_SOURCES:.c=.o))) jtencode: $(JTENCODE_OBJECTS) $(JTENCODE_BUILD_DIR)/%.o: $(JTENCODE_PATH)/%.c | $(JTENCODE_BUILD_DIR) $(CC) -Os $(CFLAGS) -c -o $@ $^ $(JTENCODE_BUILD_DIR): @echo $(JTENCODE_BUILD_DIR) $(MKDIR) $@ ####################################### # build the user application ####################################### # list of user program objects OBJECTS = $(addprefix $(BUILD_DIR)/,$(notdir $(SOURCES:.c=.o))) # add an object for the startup code OBJECTS += $(BUILD_DIR)/startup_stm32f031x6.o # use the periphlib core library, plus generic ones (libc, libm, libnosys) LIBS = -lstm32cube -lc -lm -lnosys LDFLAGS = -T $(LD_SCRIPT) -L $(CUBELIB_BUILD_DIR) -static $(LIBS) $(USER_LDFLAGS) $(BUILD_DIR)/$(TARGET).hex: $(BUILD_DIR)/$(TARGET).elf $(OBJCOPY) -O ihex $(BUILD_DIR)/$(TARGET).elf $@ $(BUILD_DIR)/$(TARGET).bin: $(BUILD_DIR)/$(TARGET).elf $(OBJCOPY) -O binary $(BUILD_DIR)/$(TARGET).elf $@ #$(USB_OBJECTS) -o $(USB_OBJECTS) $(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) $(SI5351_OBJECTS) $(JTENCODE_OBJECTS) $(CUBELIB) $(CC) -o $@ $(CFLAGS) $(OBJECTS) $(SI5351_OBJECTS) $(JTENCODE_OBJECTS) \ $(LDFLAGS) -Xlinker \ -Map=$(BUILD_DIR)/$(TARGET).map $(SIZE) $@ $(BUILD_DIR)/%.o: src/%.c | $(BUILD_DIR) $(CC) $(CFLAGS) -Os -c -o $@ $^ $(BUILD_DIR)/%.o: src/%.s | $(BUILD_DIR) $(CC) $(CFLAGS) -Os -c -o $@ $^ $(BUILD_DIR): $(MKDIR) $@ # delete all user application files, keep the libraries clean: -rm $(BUILD_DIR)/*.o -rm $(BUILD_DIR)/*.elf -rm $(BUILD_DIR)/*.hex -rm $(BUILD_DIR)/*.map -rm $(BUILD_DIR)/*.bin .PHONY: clean all cubelib