Rev 3 | Rev 9 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
#############################################
# sort out basic conditional information FIRST
#put object paths in the right place
FLASH_OUTPUT="ERROR no FLASH_OUTPUT for "$(MAKECMDGOALS)
ifeq ($(MAKECMDGOALS),clean-debug-enginebay-l152)
FLASH_OUTPUT=debug-enginebay-l152
endif
ifeq ($(MAKECMDGOALS),clean-release-enginebay-l152)
FLASH_OUTPUT=release-enginebay-l152
endif
ifeq ($(MAKECMDGOALS),debug-enginebay-l152)
CFLAGS += -g -Og -DDEBUG
ASFLAGS+= -g
LDFLAGS+= -g
FLASH_OUTPUT=debug-enginebay-l152
endif
ifeq ($(MAKECMDGOALS),release-enginebay-l152)
CFLAGS += $(OPTIMIZATION) -DRELEASE
FLASH_OUTPUT=release-enginebay-l152
endif
#-------------------------------------------------------------------------------
# User-modifiable options
#-------------------------------------------------------------------------------
# Tool suffix when cross-compiling
CROSS_COMPILE = arm-none-eabi-
CC = $(CROSS_COMPILE)gcc
SIZE = $(CROSS_COMPILE)size
STRIP = $(CROSS_COMPILE)strip
OBJCOPY = $(CROSS_COMPILE)objcopy
OBJDUMP = $(CROSS_COMPILE)objdump
LD = $(CROSS_COMPILE)ld
AS = $(CROSS_COMPILE)as
AR = $(CROSS_COMPILE)ar
#########################################################
CPUFLAGS = -mfloat-abi=soft -mcpu=cortex-m3 -mthumb
CFLAGS += -Wall -fno-common -c $(CPUFLAGS)
CFLAGS += $(INCLUDES) -DTRACE_LEVEL=$(TRACE_LEVEL)
CFLAGS += -DUSE_STDPERIPH_DRIVER
CFLAGS += -DHSE_Value=8000000L
CFLAGS += -DEMB_FLASH -DSTM32L152xE -DUSE_USB_FS
#-DSTM32F10X_MD
CFLAGS += -fdata-sections -ffunction-sections
ASFLAGS = -mapcs-32
LDFLAGS += -nostartfiles
LDFLAGS += $(CPUFLAGS) --specs=nano.specs
OBJCOPYFLAGS = -O binary
OBJDUMPFLAGS = -x --syms -S
# Trace level used for compilation
# (can be overriden by adding TRACE_LEVEL=#number to the command-line)
# TRACE_LEVEL_DEBUG 5
# TRACE_LEVEL_INFO 4
# TRACE_LEVEL_WARNING 3
# TRACE_LEVEL_ERROR 2
# TRACE_LEVEL_FATAL 1
# TRACE_LEVEL_NO_TRACE 0
TRACE_LEVEL = 0
# Optimization level
OPTIMIZATION = -O2
# Output file basename
#tell gcc to generate dependency file
CFLAGS += -MMD
FLASH_LINKER_SCRIPT = STM32L152RETx_FLASH.ld
#where the project is based relative to this directory
PROJROOT = .
# Output directories
BIN = $(PROJROOT)/Build
OBJPATH = $(BIN)/$(FLASH_OUTPUT)
DEPENDS = Makefile
#############################################
PRJ_SRC = ./Src
PRJ_INC = ./Inc
PRJ_OBJ = $(OBJPATH)/PRJ_Obj
INCLUDES += -I$(PRJ_INC)
PRJ_OBJECTS = $(PRJ_OBJ)/main.o
PRJ_OBJECTS += $(PRJ_OBJ)/stm32l1xx_hal_msp.o
PRJ_OBJECTS += $(PRJ_OBJ)/stm32l1xx_it.o
PRJ_OBJECTS += $(PRJ_OBJ)/ap_math.o
PRJ_OBJECTS += $(PRJ_OBJ)/misc.o
PRJ_OBJECTS += $(PRJ_OBJ)/serial.o
C_OBJECTS += $(PRJ_OBJECTS)
$(PRJ_OBJ)/%.o: $(PRJ_SRC)/%.c $(DEPENDS)
$(CC) $(CFLAGS) $< -o $@
#####################################################
#Drivers for CMSIS
DRV_PATH= Drivers/CMSIS/Device/ST/STM32L1xx
DRV_SRC = $(DRV_PATH)/Source/Templates
DRV_INC = $(DRV_PATH)/Include
DRV_OBJ = $(OBJPATH)/Drv_Obj
INCLUDES += -I$(DRV_INC)
INCLUDES += -IDrivers/CMSIS/Include
DRV_OBJECTS = $(DRV_OBJ)/system_stm32l1xx.o
C_OBJECTS += $(DRV_OBJECTS)
$(DRV_OBJ)/%.o: $(DRV_SRC)/%.c $(DEPENDS)
$(CC) $(CFLAGS) $< -o $@
#####################################################
#Drivers for HAL
HAL_PATH= Drivers/STM32L1xx_HAL_Driver
HAL_SRC = $(HAL_PATH)/Src
HAL_INC = $(HAL_PATH)/Inc
HAL_OBJ = $(OBJPATH)/Hal_Obj
INCLUDES += -I$(HAL_INC)
HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_adc_ex.o
HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_adc.o
HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_cortex.o
#HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_dac_ex.o
#HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_dac.o
HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_dma.o
HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_flash_ex.o
HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_flash_ramfunc.o
HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_flash.o
HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_gpio.o
#HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_i2c.o
#HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_irda.o
#HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_pcd_ex.o
#HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_pcd.o
HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_pwr_ex.o
HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_pwr.o
HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_rcc_ex.o
HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_rcc.o
HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_spi_ex.o
HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_spi.o
HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_tim_ex.o
HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_tim.o
HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal_uart.o
HAL_OBJECTS += $(HAL_OBJ)/stm32l1xx_hal.o
C_OBJECTS += $(HAL_OBJECTS)
$(HAL_OBJ)/%.o: $(HAL_SRC)/%.c $(DEPENDS)
$(CC) $(CFLAGS) $< -o $@
#############################################
# this one has assembler too
$(DRV_OBJ)/startup_stm32l152xe.o : $(DRV_SRC)/gcc/startup_stm32l152xe.s $(DEPENDS)
$(AS) $(ASFLAGS) $< -o $@
ASM_OBJECTS += $(DRV_OBJ)/startup_stm32l152xe.o
#############################################
# USB CDC
CDC_PATH = Middlewares/ST/STM32_USB_Device_Library/Class/CDC
CDC_SRC = $(CDC_PATH)/Src
CDC_INC = $(CDC_PATH)/Inc
CDC_OBJ = $(OBJPATH)/CDC_Obj
INCLUDES += -I$(CDC_INC)
#CDC_OBJECTS = $(CDC_OBJ)/usbd_cdc_if_template.o
#CDC_OBJECTS += $(CDC_OBJ)/usbd_cdc.o
C_OBJECTS += $(CDC_OBJECTS)
$(CDC_OBJ)/%.o: $(CDC_SRC)/%.c $(DEPENDS)
$(CC) $(CFLAGS) $< -o $@
#######################################################
USB_CORE = Middlewares/ST/STM32_USB_Device_Library/Core
USB_SRC = $(USB_CORE)/Src
USB_INC = $(USB_CORE)/Inc
USB_OBJ = $(OBJPATH)/USB_Obj
INCLUDES += -I$(USB_INC)
#USB_OBJECTS = $(USB_OBJ)/usbd_conf_template.o
#USB_OBJECTS += $(USB_OBJ)/usbd_core.o
#USB_OBJECTS += $(USB_OBJ)/usbd_ctlreq.o
#USB_OBJECTS += $(USB_OBJ)/usbd_ioreq.o
C_OBJECTS += $(USB_OBJECTS)
$(USB_OBJ)/%.o: $(USB_SRC)/%.c $(DEPENDS)
$(CC) $(CFLAGS) $< -o $@
#############################################
# SPI OLED screen
OLED_PATH = SSD1306_lib
OLED_SRC = $(OLED_PATH)
OLED_INC = $(OLED_PATH)
OLED_OBJ = $(OBJPATH)/OLED_Obj
INCLUDES += -I$(OLED_INC)
OLED_OBJECTS += $(OLED_OBJ)/SSD1306.o
OLED_OBJECTS += $(OLED_OBJ)/Font.o
C_OBJECTS += $(OLED_OBJECTS)
$(OLED_OBJ)/%.o: $(OLED_SRC)/%.c $(DEPENDS)
$(CC) $(CFLAGS) $< -o $@
#############################################
# for version.h
INCLUDES += -I.
$(OBJPATH)/.exist:
mkdir -p $(OBJPATH)
mkdir -p $(DRV_OBJ)
mkdir -p $(HAL_OBJ)
mkdir -p $(USB_OBJ)
mkdir -p $(CDC_OBJ)
mkdir -p $(PRJ_OBJ)
mkdir -p $(OLED_OBJ)
touch $@
-include $(HAL_OBJECTS:.o=.d)
-include $(DRV_OBJECTS:.o=.d)
-include $(CDC_OBJECTS:.o=.d)
-include $(USB_OBJECTS:.o=.d)
-include $(PRJ_OBJECTS:.o=.d)
-include $(OLED_OBJECTS:.o=.d)
###########################################
# clean rules
clean-debug-enginebay-l152: clean-base
-rm -f $(BIN)/debug-enginebay-l152.*
clean-release-enginebay-l152: clean-base
-rm -f $(BIN)/release-enginebay-l152.*
#common clean rule
clean-base:
rm -f $(DRV_OBJ)/*
rm -f $(HAL_OBJ)/*
rm -f $(USB_OBJ)/*
rm -f $(CDC_OBJ)/*
rm -f $(PRJ_OBJ)/*
rm -f $(OLED_OBJ)/*
#Macro expansion in the makefile change the paths used
BUILD_TARGETS = $(OBJPATH)/.exist revision flash
debug-enginebay-l152: $(BUILD_TARGETS)
@echo "done debug usb_l152"
release-enginebay-l152: $(BUILD_TARGETS)
@echo "done release usb_l152"
FINAL_BUILD=$(BIN)/$(FLASH_OUTPUT)
# updated to separate the debug info from the hex file
$(FINAL_BUILD).out: $(C_OBJECTS) $(ASM_OBJECTS) $(FLASH_LINKER_SCRIPT)
@ echo "..linking"
$(CC) $(LDFLAGS) -Wl,--gc-sections -Wl,-Map,$(FINAL_BUILD).map -T$(FLASH_LINKER_SCRIPT) -o $(FINAL_BUILD).out $(C_OBJECTS) $(ASM_OBJECTS)
$(OBJCOPY) --only-keep-debug $(FINAL_BUILD).out $(FINAL_BUILD).debug
$(OBJCOPY) --strip-all --strip-debug --add-gnu-debuglink=$(FINAL_BUILD).debug --output-target srec --image-base 0x08000000 $(FINAL_BUILD).out $(FINAL_BUILD).s19
%.bin : %.out;
# $(OBJCOPY) $(OBJCOPYFLAGS) $< $@
$(OBJDUMP) $(OBJDUMPFLAGS) $< > $<.list
# $(OBJDUMP) $(OBJDUMPFLAGS) $<
@ echo "...completed."
#getting the Subversion Repository information
#This requires that $(PROJROOT)/src/versions.h is NOT under SVN control (or always will see (Modified) version status)
revision:
touch $(PROJROOT)/versions.h
# @echo subWCrev . $(PROJROOT)/versions_base.h $(PROJROOT)/versions.h
#final target
flash:$(FINAL_BUILD).bin