Subversion Repositories DashDisplay

Rev

Rev 20 | 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_dashboard_F103)
FLASH_OUTPUT=debug_dashboard_F103
endif

ifeq ($(MAKECMDGOALS),clean_release_dashboard_F103)
FLASH_OUTPUT=release_dashboard_F103
endif

ifeq ($(MAKECMDGOALS),debug_dashboard_F103)
CFLAGS += -g -O0 -DDEBUG
ASFLAGS+= -g
LDFLAGS+= -g
FLASH_OUTPUT=debug_dashboard_F103
endif


ifeq ($(MAKECMDGOALS),release_dashboard_F103)
CFLAGS += $(OPTIMIZATION) -DRELEASE 
FLASH_OUTPUT=release_dashboard_F103
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 -DSTM32F103xB  -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 = -Os
# Output file basename

#tell gcc to generate dependency file
CFLAGS += -MMD

FLASH_LINKER_SCRIPT = STM32F103CB_FLASH2.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)/stm32f1xx_it.o
PRJ_OBJECTS += $(PRJ_OBJ)/stm32f1xx_hal_msp.o
PRJ_OBJECTS += $(PRJ_OBJ)/serial.o
PRJ_OBJECTS += $(PRJ_OBJ)/dials.o
PRJ_OBJECTS += $(PRJ_OBJ)/switches.o
PRJ_OBJECTS += $(PRJ_OBJ)/ap_math.o
PRJ_OBJECTS += $(PRJ_OBJ)/displayinfo.o

C_OBJECTS += $(PRJ_OBJECTS)


$(PRJ_OBJ)/%.o: $(PRJ_SRC)/%.c $(DEPENDS)
        $(CC) $(CFLAGS)   $< -o $@




#####################################################
#Drivers for CMSIS
DRV_PATH= Drivers/CMSIS/Device/ST/STM32F1xx
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_stm32f1xx.o

C_OBJECTS += $(DRV_OBJECTS)

$(DRV_OBJ)/%.o: $(DRV_SRC)/%.c $(DEPENDS)
        $(CC) $(CFLAGS) $< -o $@


#####################################################
#Drivers for HAL
HAL_PATH= Drivers/STM32F1xx_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)/stm32f1xx_hal_adc_ex.o
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_adc.o
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_can.o
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_cec.o
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_cortex.o
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_crc.o
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_dac_ex.o
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_dac.o
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_dma.o
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_eth.o
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_flash_ex.o
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_flash.o
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_gpio_ex.o
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_gpio.o
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_hcd.o
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_i2c.o
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_i2s.o
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_irda.o
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_iwdg.o
#HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_msp_template.o
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_nand.o
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_nor.o
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_pccard.o
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_pcd_ex.o
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_pcd.o
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_pwr.o
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_rcc_ex.o
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_rcc.o
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_rtc_ex.o
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_rtc.o
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_sd.o
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_smartcard.o
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_spi_ex.o
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_spi.o
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_sram.o
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_tim_ex.o
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_tim.o
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_uart.o
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_usart.o
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_wwdg.o
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal.o
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_ll_fsmc.o
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_ll_sdmmc.o
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_ll_usb.o

C_OBJECTS += $(HAL_OBJECTS)

$(HAL_OBJ)/%.o: $(HAL_SRC)/%.c $(DEPENDS)
        $(CC) $(CFLAGS) $< -o $@


#############################################
        
# this one has assembler too 
$(DRV_OBJ)/startup_stm32f103xb.o : $(DRV_SRC)/gcc/startup_stm32f103xb.s $(DEPENDS)
        $(AS) $(ASFLAGS)  $< -o $@

ASM_OBJECTS += $(DRV_OBJ)/startup_stm32f103xb.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 $@



#############################################
# PLX communications


PLX_PATH  = plx_lib
PLX_SRC   = $(PLX_PATH)
PLX_INC   = $(PLX_PATH)
PLX_OBJ   = $(OBJPATH)/PLX_Obj
INCLUDES += -I$(PLX_INC)

PLX_OBJECTS += $(PLX_OBJ)/plx.o

C_OBJECTS += $(PLX_OBJECTS)

$(PLX_OBJ)/%.o: $(PLX_SRC)/%.c $(DEPENDS)
        $(CC) $(CFLAGS)   $< -o $@

#############################################
# EEPROM emulation via Flash


EEPROM_PATH  = eeprom_lib
EEPROM_SRC   = $(EEPROM_PATH)
EEPROM_INC   = $(EEPROM_PATH)
EEPROM_OBJ   = $(OBJPATH)/EEPROM_Obj
INCLUDES += -I$(EEPROM_INC)

EEPROM_OBJECTS += $(EEPROM_OBJ)/eeprom.o

C_OBJECTS += $(EEPROM_OBJECTS)

$(EEPROM_OBJ)/%.o: $(EEPROM_SRC)/%.c $(DEPENDS)
        $(CC) $(CFLAGS)   $< -o $@
        
        
#############################################
# SMALL print 


SMALL_PRINTF_PATH  = small_printf
SMALL_PRINTF_SRC   = $(SMALL_PRINTF_PATH)/Src
SMALL_PRINTF_INC   = $(SMALL_PRINTF_PATH)/Inc
SMALL_PRINTF_OBJ   = $(OBJPATH)/tiny_printf_Obj
INCLUDES += -I$(SMALL_PRINTF_INC)

SMALL_PRINTF_OBJECTS += $(SMALL_PRINTF_OBJ)/small_printf.o

C_OBJECTS += $(SMALL_PRINTF_OBJECTS)

$(SMALL_PRINTF_OBJ)/%.o: $(SMALL_PRINTF_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 $(PRJ_OBJ)
        mkdir -p $(OLED_OBJ)
        mkdir -p $(PLX_OBJ)
        mkdir -p $(EEPROM_OBJ)
        touch $@


-include $(HAL_OBJECTS:.o=.d)
-include $(DRV_OBJECTS:.o=.d)
-include $(PRJ_OBJECTS:.o=.d)
-include $(OLED_OBJECTS:.o=.d)
-include $(PLX_OBJECTS:.o=.d)
-include $(EEPROM_OBJECTS:.o=.d)



###########################################
# clean rules
clean_debug_dashboard_F103: clean_base
        -rm -f $(BIN)/debug_dashboard_F103.* 

clean_release_dashboard_F103: clean_base
        -rm -f $(BIN)/release_dashboard_F103.* 


#common clean rule
clean_base:
        rm -f $(DRV_OBJ)/*
        rm -f $(HAL_OBJ)/*
        rm -f $(PRJ_OBJ)/*
        rm -f $(OLED_OBJ)/*
        rm -f $(PLX_OBJ)/*
        rm -f $(EEPROM_OBJ)/*

#Macro expansion in the makefile change the paths used
BUILD_TARGETS = $(OBJPATH)/.exist revision flash 

debug_dashboard_F103: $(BUILD_TARGETS)
        @echo "done debug Dashboard F103"

release_dashboard_F103: $(BUILD_TARGETS)
        @echo "done release Dashboard F103"     
                
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