Subversion Repositories DashDisplay

Rev

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

Rev Author Line No. Line
30 mjames 1
#############################################
2
# sort out basic conditional information FIRST
3
 
4
#put object paths in the right place 
5
FLASH_OUTPUT="ERROR_no_FLASH_OUTPUT_for_"$(MAKECMDGOALS) 
6
 
7
ifeq ($(MAKECMDGOALS),clean_debug_dashboard_L152)
8
FLASH_OUTPUT=debug_dashboard_L152
9
endif
10
 
11
ifeq ($(MAKECMDGOALS),clean_release_dashboard_L152)
12
FLASH_OUTPUT=release_dashboard_L152
13
endif
14
 
15
ifeq ($(MAKECMDGOALS),debug_dashboard_L152)
16
CFLAGS += -g -O0 -DDEBUG
17
ASFLAGS+= -g
18
LDFLAGS+= -g
19
FLASH_OUTPUT=debug_dashboard_L152
20
endif
21
 
22
 
23
ifeq ($(MAKECMDGOALS),release_dashboard_L152)
24
CFLAGS += $(OPTIMIZATION) -DRELEASE 
25
FLASH_OUTPUT=release_dashboard_L152
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 -DSTM32L152xE 
53
CFLAGS += -fdata-sections -ffunction-sections
54
ASFLAGS =  -mapcs-32
55
LDFLAGS +=  -nostartfiles  
56
LDFLAGS += $(CPUFLAGS) --specs=nano.specs 
57
OBJCOPYFLAGS = -O binary
58
OBJDUMPFLAGS = -x --syms -S
59
 
60
# Trace level used for compilation
61
# (can be overriden by adding TRACE_LEVEL=#number to the command-line)
62
# TRACE_LEVEL_DEBUG      5
63
# TRACE_LEVEL_INFO       4
64
# TRACE_LEVEL_WARNING    3
65
# TRACE_LEVEL_ERROR      2
66
# TRACE_LEVEL_FATAL      1
67
# TRACE_LEVEL_NO_TRACE   0
68
 
69
TRACE_LEVEL = 0
70
 
71
# Optimization level
72
OPTIMIZATION = -Os
73
# Output file basename
74
 
75
#tell gcc to generate dependency file
76
CFLAGS += -MMD
77
 
78
FLASH_LINKER_SCRIPT = STM32L152RE_FLASH.ld
79
 
80
#where the project is based relative to this directory
81
PROJROOT = .
82
# Output directories
83
BIN = $(PROJROOT)/Build
84
 
85
OBJPATH = $(BIN)/$(FLASH_OUTPUT)
86
 
87
DEPENDS = Makefile
88
 
89
 
90
#############################################
91
PRJ_SRC = $(PROJROOT)/Src
92
PRJ_INC = $(PROJROOT)/Inc
93
 
94
PRJ_OBJ = $(OBJPATH)/PRJ_Obj
95
INCLUDES += -I$(PRJ_INC)
96
 
97
PRJ_OBJECTS  = $(PRJ_OBJ)/main.o
98
 
99
PRJ_OBJECTS += $(PRJ_OBJ)/stm32l1xx_it.o
100
PRJ_OBJECTS += $(PRJ_OBJ)/stm32l1xx_hal_msp.o
101
PRJ_OBJECTS += $(PRJ_OBJ)/serial.o
102
PRJ_OBJECTS += $(PRJ_OBJ)/dials.o
103
PRJ_OBJECTS += $(PRJ_OBJ)/switches.o
104
PRJ_OBJECTS += $(PRJ_OBJ)/ap_math.o
105
PRJ_OBJECTS += $(PRJ_OBJ)/displayinfo.o
106
PRJ_OBJECTS += $(PRJ_OBJ)/nvram.o
107
 
108
C_OBJECTS += $(PRJ_OBJECTS)
109
 
110
$(PRJ_OBJ)/%.o: $(PRJ_SRC)/%.c $(DEPENDS)
111
	$(CC) $(CFLAGS)   $< -o $@
112
 
113
#####################################################
114
#Drivers for CMSIS
115
CMSIS_PATH=$(PROJROOT)/Drivers/CMSIS
116
DRV_PATH= $(CMSIS_PATH)/Device/ST/STM32L1xx
117
DRV_SRC = $(DRV_PATH)/Source/Templates
118
DRV_OBJ = $(OBJPATH)/Drv_Obj
119
 
120
INCLUDES += -I$(DRV_PATH)/Include
121
INCLUDES += -I$(CMSIS_PATH)/Include
122
 
123
DRV_OBJECTS =  $(DRV_OBJ)/system_stm32l1xx.o
124
 
125
C_OBJECTS += $(DRV_OBJECTS)
126
 
127
$(DRV_OBJ)/%.o: $(DRV_SRC)/%.c $(DEPENDS)
128
	$(CC) $(CFLAGS) $< -o $@
129
 
130
 
131
 
132
 
133
#####################################################
134
#Drivers for HAL
135
HAL_PATH= $(PROJROOT)/Drivers/STM32L1xx_HAL_Driver
136
HAL_SRC = $(HAL_PATH)/Src
137
HAL_INC = $(HAL_PATH)/Inc
138
HAL_OBJ = $(OBJPATH)/Hal_Obj
139
 
140
INCLUDES += -I$(HAL_INC)
141
 
142
#HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_adc_ex.o
143
#HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_adc.o
144
 
145
HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_cortex.o
146
#HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_dac_ex.o
147
#HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_dac.o
148
HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_dma.o
149
HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_flash_ex.o
150
HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_flash_ramfunc.o
151
HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_flash.o
152
HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_gpio.o
153
#HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_i2c.o
154
#HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_irda.o
155
#HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_pcd_ex.o
156
#HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_pcd.o
157
HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_pwr_ex.o
158
HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_pwr.o
159
HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_rcc_ex.o
160
HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_rcc.o
161
HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_spi_ex.o
162
HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_spi.o
163
HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_tim_ex.o
164
HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_tim.o
165
HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_uart.o
166
HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal.o
167
 
168
C_OBJECTS += $(HAL_OBJECTS)
169
 
170
$(HAL_OBJ)/%.o: $(HAL_SRC)/%.c $(DEPENDS)
171
	$(CC) $(CFLAGS) $< -o $@
172
 
173
 
174
#############################################
175
 
176
# this one has assembler too 
177
$(DRV_OBJ)/startup_stm32l152xe.o : $(DRV_SRC)/gcc/startup_stm32l152xe.s $(DEPENDS)
178
	$(AS) $(ASFLAGS)  $< -o $@
179
 
180
ASM_OBJECTS += $(DRV_OBJ)/startup_stm32l152xe.o
181
 
182
 
183
#############################################
184
# SPI OLED screen 
185
 
186
 
187
OLED_PATH  = $(PROJROOT)/SSD1306_lib
188
OLED_SRC   = $(OLED_PATH)
189
OLED_INC   = $(OLED_PATH)
190
OLED_OBJ   = $(OBJPATH)/OLED_Obj
191
INCLUDES += -I$(OLED_INC)
192
 
193
OLED_OBJECTS += $(OLED_OBJ)/SSD1306.o
194
OLED_OBJECTS += $(OLED_OBJ)/Font.o
195
 
196
C_OBJECTS += $(OLED_OBJECTS)
197
 
198
$(OLED_OBJ)/%.o: $(OLED_SRC)/%.c $(DEPENDS)
199
	$(CC) $(CFLAGS)   $< -o $@
200
 
201
 
202
 
203
#############################################
204
# PLX communications
205
 
206
 
207
PLX_PATH  = $(PROJROOT)/plx_lib
208
PLX_SRC   = $(PLX_PATH)
209
PLX_INC   = $(PLX_PATH)
210
PLX_OBJ   = $(OBJPATH)/PLX_Obj
211
INCLUDES += -I$(PLX_INC)
212
 
213
PLX_OBJECTS += $(PLX_OBJ)/plx.o
214
 
215
C_OBJECTS += $(PLX_OBJECTS)
216
 
217
$(PLX_OBJ)/%.o: $(PLX_SRC)/%.c $(DEPENDS)
218
	$(CC) $(CFLAGS)   $< -o $@
219
 
220
 
221
 
222
#############################################
223
# SMALL print 
224
 
225
 
226
SM_PRINT_PATH  = $(PROJROOT)/small_printf
227
SM_PRINT_SRC   = $(SM_PRINT_PATH)/Src
228
SM_PRINT_INC   = $(SM_PRINT_PATH)/Inc
229
SM_PRINT_OBJ   = $(OBJPATH)/sm_print_Obj
230
INCLUDES += -I$(SM_PRINT_INC)
231
 
232
SM_PRINT_OBJECTS += $(SM_PRINT_OBJ)/small_printf.o
233
 
234
C_OBJECTS += $(SM_PRINT_OBJECTS)
235
 
236
$(SM_PRINT_OBJ)/%.o: $(SM_PRINT_SRC)/%.c $(DEPENDS)
237
	$(CC) $(CFLAGS)   $< -o $@
238
 
239
 
240
 
241
 
242
#############################################
243
# for version.h
244
INCLUDES +=  -I.	
245
 
246
$(OBJPATH)/.exist: 
247
	mkdir -p $(OBJPATH)
248
	mkdir -p $(DRV_OBJ)
249
	mkdir -p $(HAL_OBJ)
250
	mkdir -p $(PRJ_OBJ)
251
	mkdir -p $(OLED_OBJ)
252
	mkdir -p $(PLX_OBJ)
253
	mkdir -p $(SM_PRINT_OBJ)
254
	touch $@
255
 
256
 
257
-include $(HAL_OBJECTS:.o=.d)
258
-include $(DRV_OBJECTS:.o=.d)
259
-include $(PRJ_OBJECTS:.o=.d)
260
-include $(OLED_OBJECTS:.o=.d)
261
-include $(PLX_OBJECTS:.o=.d)
262
-include $(SM_PRINT_OBJ:.o=.d)
263
 
264
 
265
 
266
###########################################
267
# clean rules
268
clean_debug_dashboard_L152: clean_base
269
	-rm -f $(BIN)/debug_dashboard_L152.* 
270
 
271
clean_release_dashboard_L152: clean_base
272
	-rm -f $(BIN)/release_dashboard_L152.* 
273
 
274
 
275
#common clean rule
276
clean_base:
277
	rm -f $(DRV_OBJ)/*
278
	rm -f $(HAL_OBJ)/*
279
	rm -f $(PRJ_OBJ)/*
280
	rm -f $(OLED_OBJ)/*
281
	rm -f $(PLX_OBJ)/*
282
	rm -f $(SM_PRINT_OBJ)/*
283
 
284
#Macro expansion in the makefile change the paths used
285
BUILD_TARGETS = $(OBJPATH)/.exist revision flash 
286
 
287
debug_dashboard_L152: $(BUILD_TARGETS)
288
	@echo "done debug Dashboard L152"
289
 
290
release_dashboard_L152: $(BUILD_TARGETS)
291
	@echo "done release Dashboard L152"	
292
 
293
FINAL_BUILD=$(BIN)/$(FLASH_OUTPUT)
294
 
295
 
296
 
297
 
298
 
299
# updated to separate the debug info from the hex file
300
$(FINAL_BUILD).out:  $(C_OBJECTS) $(ASM_OBJECTS) $(FLASH_LINKER_SCRIPT) 
301
	@ echo "..linking"
302
	$(CC) $(LDFLAGS) -Wl,--gc-sections -Wl,-Map,$(FINAL_BUILD).map -T$(FLASH_LINKER_SCRIPT) -o $(FINAL_BUILD).out  $(C_OBJECTS) $(ASM_OBJECTS)
303
	$(OBJCOPY) --only-keep-debug $(FINAL_BUILD).out $(FINAL_BUILD).debug
304
	$(OBJCOPY) --strip-all --strip-debug --add-gnu-debuglink=$(FINAL_BUILD).debug --output-target srec --image-base 0x08000000  $(FINAL_BUILD).out $(FINAL_BUILD).s19
305
 
306
%.bin : %.out;
307
#	$(OBJCOPY) $(OBJCOPYFLAGS) $< $@
308
	$(OBJDUMP) $(OBJDUMPFLAGS) $< > $<.list 
309
#	$(OBJDUMP) $(OBJDUMPFLAGS) $< 
310
	@ echo "...completed."
311
 
312
#getting the Subversion Repository information
313
#This requires that $(PROJROOT)/src/versions.h is NOT under SVN control (or always will see (Modified) version status)
314
revision:
315
	touch $(PROJROOT)/versions.h
316
#	@echo subWCrev . $(PROJROOT)/versions_base.h $(PROJROOT)/versions.h
317
 
318
#final target 
319
flash:$(FINAL_BUILD).bin 
320
 
321