Changeset - 2e9e37796ebc
[Not reviewed]
default
0 2 0
Ethan Zonca - 6 years ago 2020-04-24 19:59:07
ez@ethanzonca.com
Switch to newlib nano. Untested on actual hardware. Saves flash/ram.
2 files changed with 7 insertions and 0 deletions:
0 comments (0 inline, 0 general)
.hgignore
Show inline comments
 
syntax: glob
 

	
 
*\.o
 
*\.d
 
analysis/*
 
.settings/*
 
Debug/*
 
build/*
 
*.orig
 
archive/*
Makefile
Show inline comments
 
# 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_CFLAGS += --specs=nano.specs
 

	
 
# 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
0 comments (0 inline, 0 general)