Subversion Repositories DashDisplay

Rev

Rev 20 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 mjames 1
#############################################
2
# sort out basic conditional information FIRST
3
 
4
#put object paths in the right place 
10 mjames 5
FLASH_OUTPUT="ERROR_no_FLASH_OUTPUT_for_"$(MAKECMDGOALS) 
2 mjames 6
 
10 mjames 7
ifeq ($(MAKECMDGOALS),clean_debug_dashboard_F103)
8
FLASH_OUTPUT=debug_dashboard_F103
2 mjames 9
endif
10
 
10 mjames 11
ifeq ($(MAKECMDGOALS),clean_release_dashboard_F103)
12
FLASH_OUTPUT=release_dashboard_F103
2 mjames 13
endif
14
 
10 mjames 15
ifeq ($(MAKECMDGOALS),debug_dashboard_F103)
2 mjames 16
CFLAGS += -g -O0 -DDEBUG
17
ASFLAGS+= -g
18
LDFLAGS+= -g
10 mjames 19
FLASH_OUTPUT=debug_dashboard_F103
2 mjames 20
endif
21
 
22
 
10 mjames 23
ifeq ($(MAKECMDGOALS),release_dashboard_F103)
2 mjames 24
CFLAGS += $(OPTIMIZATION) -DRELEASE 
10 mjames 25
FLASH_OUTPUT=release_dashboard_F103
2 mjames 26
endif
27
 
28
 
29
 
30
#-------------------------------------------------------------------------------
31
#		User-modifiable options
32
#-------------------------------------------------------------------------------
33
 
34
# Tool suffix when cross-compiling
35
CROSS_COMPILE = arm-none-eabi-
36
 
37
CC = $(CROSS_COMPILE)gcc
38
SIZE = $(CROSS_COMPILE)size
39
STRIP = $(CROSS_COMPILE)strip
40
OBJCOPY = $(CROSS_COMPILE)objcopy
41
OBJDUMP = $(CROSS_COMPILE)objdump
42
LD = $(CROSS_COMPILE)ld
43
AS = $(CROSS_COMPILE)as
44
AR = $(CROSS_COMPILE)ar
45
 
46
#########################################################
47
CPUFLAGS = -mfloat-abi=soft   -mcpu=cortex-m3 -mthumb 
48
CFLAGS +=   -Wall -fno-common -c $(CPUFLAGS)  
49
CFLAGS +=  $(INCLUDES) -DTRACE_LEVEL=$(TRACE_LEVEL)
50
CFLAGS += -DUSE_STDPERIPH_DRIVER
51
CFLAGS += -DHSE_Value=8000000L 
52
CFLAGS += -DEMB_FLASH -DSTM32F103xB  -DUSE_USB_FS
53
#-DSTM32F10X_MD 
54
CFLAGS += -fdata-sections -ffunction-sections
55
ASFLAGS =  -mapcs-32
56
LDFLAGS +=  -nostartfiles  
57
LDFLAGS += $(CPUFLAGS) --specs=nano.specs 
58
OBJCOPYFLAGS = -O binary
59
OBJDUMPFLAGS = -x --syms -S
60
 
61
# Trace level used for compilation
62
# (can be overriden by adding TRACE_LEVEL=#number to the command-line)
63
# TRACE_LEVEL_DEBUG      5
64
# TRACE_LEVEL_INFO       4
65
# TRACE_LEVEL_WARNING    3
66
# TRACE_LEVEL_ERROR      2
67
# TRACE_LEVEL_FATAL      1
68
# TRACE_LEVEL_NO_TRACE   0
69
 
70
TRACE_LEVEL = 0
71
 
72
# Optimization level
73
OPTIMIZATION = -Os
74
# Output file basename
75
 
76
#tell gcc to generate dependency file
77
CFLAGS += -MMD
78
 
79
FLASH_LINKER_SCRIPT = STM32F103CB_FLASH2.ld
80
 
81
#where the project is based relative to this directory
82
PROJROOT = .
83
# Output directories
84
BIN = $(PROJROOT)/Build
85
 
86
OBJPATH = $(BIN)/$(FLASH_OUTPUT)
87
 
88
DEPENDS = Makefile
89
 
90
 
91
#############################################
92
PRJ_SRC = ./Src
93
PRJ_INC = ./Inc
94
 
95
PRJ_OBJ = $(OBJPATH)/PRJ_Obj
96
INCLUDES += -I$(PRJ_INC)
97
 
98
PRJ_OBJECTS  = $(PRJ_OBJ)/main.o
99
 
100
PRJ_OBJECTS += $(PRJ_OBJ)/stm32f1xx_it.o
14 mjames 101
PRJ_OBJECTS += $(PRJ_OBJ)/stm32f1xx_hal_msp.o
2 mjames 102
PRJ_OBJECTS += $(PRJ_OBJ)/serial.o
103
PRJ_OBJECTS += $(PRJ_OBJ)/dials.o
104
PRJ_OBJECTS += $(PRJ_OBJ)/switches.o
105
PRJ_OBJECTS += $(PRJ_OBJ)/ap_math.o
20 mjames 106
PRJ_OBJECTS += $(PRJ_OBJ)/displayinfo.o
2 mjames 107
 
108
C_OBJECTS += $(PRJ_OBJECTS)
109
 
110
 
111
$(PRJ_OBJ)/%.o: $(PRJ_SRC)/%.c $(DEPENDS)
112
	$(CC) $(CFLAGS)   $< -o $@
113
 
114
 
115
 
116
 
117
#####################################################
118
#Drivers for CMSIS
119
DRV_PATH= Drivers/CMSIS/Device/ST/STM32F1xx
120
DRV_SRC = $(DRV_PATH)/Source/Templates
121
DRV_INC = $(DRV_PATH)/Include
122
DRV_OBJ = $(OBJPATH)/Drv_Obj
123
 
124
INCLUDES += -I$(DRV_INC)
125
INCLUDES += -IDrivers/CMSIS/Include
126
 
127
DRV_OBJECTS =  $(DRV_OBJ)/system_stm32f1xx.o
128
 
129
C_OBJECTS += $(DRV_OBJECTS)
130
 
131
$(DRV_OBJ)/%.o: $(DRV_SRC)/%.c $(DEPENDS)
132
	$(CC) $(CFLAGS) $< -o $@
133
 
134
 
135
#####################################################
136
#Drivers for HAL
137
HAL_PATH= Drivers/STM32F1xx_HAL_Driver
138
HAL_SRC = $(HAL_PATH)/Src
139
HAL_INC = $(HAL_PATH)/Inc
140
HAL_OBJ = $(OBJPATH)/Hal_Obj
141
 
142
INCLUDES += -I$(HAL_INC)
143
 
144
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_adc_ex.o
145
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_adc.o
146
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_can.o
147
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_cec.o
148
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_cortex.o
149
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_crc.o
150
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_dac_ex.o
151
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_dac.o
152
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_dma.o
153
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_eth.o
154
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_flash_ex.o
155
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_flash.o
156
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_gpio_ex.o
157
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_gpio.o
158
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_hcd.o
159
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_i2c.o
160
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_i2s.o
161
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_irda.o
162
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_iwdg.o
163
#HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_msp_template.o
164
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_nand.o
165
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_nor.o
166
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_pccard.o
167
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_pcd_ex.o
168
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_pcd.o
169
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_pwr.o
170
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_rcc_ex.o
171
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_rcc.o
172
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_rtc_ex.o
173
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_rtc.o
174
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_sd.o
175
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_smartcard.o
176
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_spi_ex.o
177
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_spi.o
178
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_sram.o
179
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_tim_ex.o
180
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_tim.o
181
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_uart.o
182
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_usart.o
183
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal_wwdg.o
184
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_hal.o
185
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_ll_fsmc.o
186
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_ll_sdmmc.o
187
HAL_OBJECTS +=  $(HAL_OBJ)/stm32f1xx_ll_usb.o
188
 
189
C_OBJECTS += $(HAL_OBJECTS)
190
 
191
$(HAL_OBJ)/%.o: $(HAL_SRC)/%.c $(DEPENDS)
192
	$(CC) $(CFLAGS) $< -o $@
193
 
194
 
195
#############################################
196
 
197
# this one has assembler too 
198
$(DRV_OBJ)/startup_stm32f103xb.o : $(DRV_SRC)/gcc/startup_stm32f103xb.s $(DEPENDS)
199
	$(AS) $(ASFLAGS)  $< -o $@
200
 
201
ASM_OBJECTS += $(DRV_OBJ)/startup_stm32f103xb.o
202
 
203
 
204
 
205
#############################################
206
# SPI OLED screen 
207
 
208
 
209
OLED_PATH  = SSD1306_lib
210
OLED_SRC   = $(OLED_PATH)
211
OLED_INC   = $(OLED_PATH)
212
OLED_OBJ   = $(OBJPATH)/OLED_Obj
213
INCLUDES += -I$(OLED_INC)
214
 
215
OLED_OBJECTS += $(OLED_OBJ)/SSD1306.o
216
OLED_OBJECTS += $(OLED_OBJ)/Font.o
217
 
218
C_OBJECTS += $(OLED_OBJECTS)
219
 
220
$(OLED_OBJ)/%.o: $(OLED_SRC)/%.c $(DEPENDS)
221
	$(CC) $(CFLAGS)   $< -o $@
222
 
223
 
224
 
225
#############################################
226
# PLX communications
227
 
228
 
229
PLX_PATH  = plx_lib
230
PLX_SRC   = $(PLX_PATH)
231
PLX_INC   = $(PLX_PATH)
232
PLX_OBJ   = $(OBJPATH)/PLX_Obj
233
INCLUDES += -I$(PLX_INC)
234
 
235
PLX_OBJECTS += $(PLX_OBJ)/plx.o
236
 
237
C_OBJECTS += $(PLX_OBJECTS)
238
 
239
$(PLX_OBJ)/%.o: $(PLX_SRC)/%.c $(DEPENDS)
240
	$(CC) $(CFLAGS)   $< -o $@
241
 
16 mjames 242
#############################################
243
# EEPROM emulation via Flash
2 mjames 244
 
245
 
16 mjames 246
EEPROM_PATH  = eeprom_lib
247
EEPROM_SRC   = $(EEPROM_PATH)
248
EEPROM_INC   = $(EEPROM_PATH)
249
EEPROM_OBJ   = $(OBJPATH)/EEPROM_Obj
250
INCLUDES += -I$(EEPROM_INC)
251
 
252
EEPROM_OBJECTS += $(EEPROM_OBJ)/eeprom.o
253
 
254
C_OBJECTS += $(EEPROM_OBJECTS)
255
 
256
$(EEPROM_OBJ)/%.o: $(EEPROM_SRC)/%.c $(DEPENDS)
257
	$(CC) $(CFLAGS)   $< -o $@
26 mjames 258
 
259
 
260
#############################################
261
# SMALL print 
16 mjames 262
 
263
 
26 mjames 264
SMALL_PRINTF_PATH  = small_printf
265
SMALL_PRINTF_SRC   = $(SMALL_PRINTF_PATH)/Src
266
SMALL_PRINTF_INC   = $(SMALL_PRINTF_PATH)/Inc
267
SMALL_PRINTF_OBJ   = $(OBJPATH)/tiny_printf_Obj
268
INCLUDES += -I$(SMALL_PRINTF_INC)
16 mjames 269
 
26 mjames 270
SMALL_PRINTF_OBJECTS += $(SMALL_PRINTF_OBJ)/small_printf.o
271
 
272
C_OBJECTS += $(SMALL_PRINTF_OBJECTS)
273
 
274
$(SMALL_PRINTF_OBJ)/%.o: $(SMALL_PRINTF_SRC)/%.c $(DEPENDS)
275
	$(CC) $(CFLAGS)   $< -o $@
276
 
277
 
278
 
279
 
2 mjames 280
#############################################
281
# for version.h
282
INCLUDES +=  -I.	
283
 
284
$(OBJPATH)/.exist: 
285
	mkdir -p $(OBJPATH)
286
	mkdir -p $(DRV_OBJ)
287
	mkdir -p $(HAL_OBJ)
288
	mkdir -p $(PRJ_OBJ)
289
	mkdir -p $(OLED_OBJ)
290
	mkdir -p $(PLX_OBJ)
16 mjames 291
	mkdir -p $(EEPROM_OBJ)
2 mjames 292
	touch $@
293
 
294
 
295
-include $(HAL_OBJECTS:.o=.d)
296
-include $(DRV_OBJECTS:.o=.d)
297
-include $(PRJ_OBJECTS:.o=.d)
298
-include $(OLED_OBJECTS:.o=.d)
299
-include $(PLX_OBJECTS:.o=.d)
16 mjames 300
-include $(EEPROM_OBJECTS:.o=.d)
2 mjames 301
 
302
 
303
 
304
###########################################
305
# clean rules
10 mjames 306
clean_debug_dashboard_F103: clean_base
307
	-rm -f $(BIN)/debug_dashboard_F103.* 
2 mjames 308
 
10 mjames 309
clean_release_dashboard_F103: clean_base
310
	-rm -f $(BIN)/release_dashboard_F103.* 
2 mjames 311
 
312
 
313
#common clean rule
10 mjames 314
clean_base:
2 mjames 315
	rm -f $(DRV_OBJ)/*
316
	rm -f $(HAL_OBJ)/*
317
	rm -f $(PRJ_OBJ)/*
318
	rm -f $(OLED_OBJ)/*
319
	rm -f $(PLX_OBJ)/*
16 mjames 320
	rm -f $(EEPROM_OBJ)/*
2 mjames 321
 
322
#Macro expansion in the makefile change the paths used
323
BUILD_TARGETS = $(OBJPATH)/.exist revision flash 
324
 
10 mjames 325
debug_dashboard_F103: $(BUILD_TARGETS)
326
	@echo "done debug Dashboard F103"
2 mjames 327
 
10 mjames 328
release_dashboard_F103: $(BUILD_TARGETS)
329
	@echo "done release Dashboard F103"	
2 mjames 330
 
331
FINAL_BUILD=$(BIN)/$(FLASH_OUTPUT)
332
 
333
 
334
 
335
 
336
 
337
# updated to separate the debug info from the hex file
338
$(FINAL_BUILD).out:  $(C_OBJECTS) $(ASM_OBJECTS) $(FLASH_LINKER_SCRIPT) 
339
	@ echo "..linking"
340
	$(CC) $(LDFLAGS) -Wl,--gc-sections -Wl,-Map,$(FINAL_BUILD).map -T$(FLASH_LINKER_SCRIPT) -o $(FINAL_BUILD).out  $(C_OBJECTS) $(ASM_OBJECTS)
341
	$(OBJCOPY) --only-keep-debug $(FINAL_BUILD).out $(FINAL_BUILD).debug
342
	$(OBJCOPY) --strip-all --strip-debug --add-gnu-debuglink=$(FINAL_BUILD).debug --output-target srec --image-base 0x08000000  $(FINAL_BUILD).out $(FINAL_BUILD).s19
343
 
344
%.bin : %.out;
345
#	$(OBJCOPY) $(OBJCOPYFLAGS) $< $@
346
	$(OBJDUMP) $(OBJDUMPFLAGS) $< > $<.list 
347
#	$(OBJDUMP) $(OBJDUMPFLAGS) $< 
348
	@ echo "...completed."
349
 
350
#getting the Subversion Repository information
351
#This requires that $(PROJROOT)/src/versions.h is NOT under SVN control (or always will see (Modified) version status)
352
revision:
353
	touch $(PROJROOT)/versions.h
354
#	@echo subWCrev . $(PROJROOT)/versions_base.h $(PROJROOT)/versions.h
355
 
356
#final target 
357
flash:$(FINAL_BUILD).bin 
358
 
359