Subversion Repositories EngineBay2

Rev

Rev 3 | Rev 9 | 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 
5
FLASH_OUTPUT="ERROR no FLASH_OUTPUT for "$(MAKECMDGOALS) 
6
 
7
ifeq ($(MAKECMDGOALS),clean-debug-enginebay-l152)
8
FLASH_OUTPUT=debug-enginebay-l152
9
endif
10
 
11
ifeq ($(MAKECMDGOALS),clean-release-enginebay-l152)
12
FLASH_OUTPUT=release-enginebay-l152
13
endif
14
 
15
ifeq ($(MAKECMDGOALS),debug-enginebay-l152)
16
CFLAGS += -g -Og -DDEBUG
17
ASFLAGS+= -g
18
LDFLAGS+= -g
19
FLASH_OUTPUT=debug-enginebay-l152
20
endif
21
 
22
 
23
ifeq ($(MAKECMDGOALS),release-enginebay-l152)
24
CFLAGS += $(OPTIMIZATION) -DRELEASE 
25
FLASH_OUTPUT=release-enginebay-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  -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 = -O2
74
# Output file basename
75
 
76
#tell gcc to generate dependency file
77
CFLAGS += -MMD
78
 
79
FLASH_LINKER_SCRIPT = STM32L152RETx_FLASH.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
PRJ_OBJECTS += $(PRJ_OBJ)/stm32l1xx_hal_msp.o
100
PRJ_OBJECTS += $(PRJ_OBJ)/stm32l1xx_it.o
3 mjames 101
PRJ_OBJECTS += $(PRJ_OBJ)/ap_math.o
102
PRJ_OBJECTS += $(PRJ_OBJ)/misc.o
6 mjames 103
PRJ_OBJECTS += $(PRJ_OBJ)/serial.o
2 mjames 104
 
3 mjames 105
C_OBJECTS += $(PRJ_OBJECTS)
2 mjames 106
 
107
$(PRJ_OBJ)/%.o: $(PRJ_SRC)/%.c $(DEPENDS)
108
	$(CC) $(CFLAGS)   $< -o $@
109
 
110
 
111
 
112
 
113
#####################################################
114
#Drivers for CMSIS
115
DRV_PATH= Drivers/CMSIS/Device/ST/STM32L1xx
116
DRV_SRC = $(DRV_PATH)/Source/Templates
117
DRV_INC = $(DRV_PATH)/Include
118
DRV_OBJ = $(OBJPATH)/Drv_Obj
119
 
120
INCLUDES += -I$(DRV_INC)
121
INCLUDES += -IDrivers/CMSIS/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
#Drivers for HAL
133
HAL_PATH= Drivers/STM32L1xx_HAL_Driver
134
HAL_SRC = $(HAL_PATH)/Src
135
HAL_INC = $(HAL_PATH)/Inc
136
HAL_OBJ = $(OBJPATH)/Hal_Obj
137
 
138
INCLUDES += -I$(HAL_INC)
139
 
140
HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_adc_ex.o
141
HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_adc.o
142
 
143
HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_cortex.o
144
#HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_dac_ex.o
145
#HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_dac.o
146
HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_dma.o
147
HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_flash_ex.o
148
HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_flash_ramfunc.o
149
HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_flash.o
150
HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_gpio.o
151
#HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_i2c.o
152
#HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_irda.o
153
#HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_pcd_ex.o
154
#HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_pcd.o
155
HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_pwr_ex.o
156
HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_pwr.o
157
HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_rcc_ex.o
158
HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_rcc.o
159
HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_spi_ex.o
160
HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_spi.o
161
HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_tim_ex.o
162
HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_tim.o
163
HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal_uart.o
164
HAL_OBJECTS +=  $(HAL_OBJ)/stm32l1xx_hal.o
165
 
166
C_OBJECTS += $(HAL_OBJECTS)
167
 
168
$(HAL_OBJ)/%.o: $(HAL_SRC)/%.c $(DEPENDS)
169
	$(CC) $(CFLAGS) $< -o $@
170
 
171
 
172
#############################################
173
 
174
# this one has assembler too 
175
$(DRV_OBJ)/startup_stm32l152xe.o : $(DRV_SRC)/gcc/startup_stm32l152xe.s $(DEPENDS)
176
	$(AS) $(ASFLAGS)  $< -o $@
177
 
178
ASM_OBJECTS += $(DRV_OBJ)/startup_stm32l152xe.o
179
 
180
#############################################
181
# USB CDC 
182
 
183
 
184
CDC_PATH  = Middlewares/ST/STM32_USB_Device_Library/Class/CDC
185
CDC_SRC   = $(CDC_PATH)/Src
186
CDC_INC   = $(CDC_PATH)/Inc
187
CDC_OBJ   = $(OBJPATH)/CDC_Obj
188
INCLUDES += -I$(CDC_INC)
189
 
190
#CDC_OBJECTS  = $(CDC_OBJ)/usbd_cdc_if_template.o
191
#CDC_OBJECTS += $(CDC_OBJ)/usbd_cdc.o
192
 
193
C_OBJECTS += $(CDC_OBJECTS)
194
 
195
$(CDC_OBJ)/%.o: $(CDC_SRC)/%.c $(DEPENDS)
196
	$(CC) $(CFLAGS)   $< -o $@
197
 
198
 
199
#######################################################
200
 
201
USB_CORE = Middlewares/ST/STM32_USB_Device_Library/Core
202
USB_SRC  = $(USB_CORE)/Src
203
USB_INC  = $(USB_CORE)/Inc
204
 
205
USB_OBJ  = $(OBJPATH)/USB_Obj
206
INCLUDES += -I$(USB_INC)
207
 
208
#USB_OBJECTS  = $(USB_OBJ)/usbd_conf_template.o
209
#USB_OBJECTS += $(USB_OBJ)/usbd_core.o
210
#USB_OBJECTS += $(USB_OBJ)/usbd_ctlreq.o
211
#USB_OBJECTS += $(USB_OBJ)/usbd_ioreq.o
212
 
213
C_OBJECTS += $(USB_OBJECTS)
214
 
215
 
216
$(USB_OBJ)/%.o: $(USB_SRC)/%.c $(DEPENDS)
217
	$(CC) $(CFLAGS)   $< -o $@
218
 
219
#############################################
220
# SPI OLED screen 
221
 
222
 
223
OLED_PATH  = SSD1306_lib
224
OLED_SRC   = $(OLED_PATH)
225
OLED_INC   = $(OLED_PATH)
226
OLED_OBJ   = $(OBJPATH)/OLED_Obj
227
INCLUDES += -I$(OLED_INC)
228
 
229
OLED_OBJECTS += $(OLED_OBJ)/SSD1306.o
230
OLED_OBJECTS += $(OLED_OBJ)/Font.o
231
 
232
C_OBJECTS += $(OLED_OBJECTS)
233
 
234
$(OLED_OBJ)/%.o: $(OLED_SRC)/%.c $(DEPENDS)
235
	$(CC) $(CFLAGS)   $< -o $@
236
 
237
 
238
#############################################
239
# for version.h
240
INCLUDES +=  -I.	
241
 
242
$(OBJPATH)/.exist: 
243
	mkdir -p $(OBJPATH)
244
	mkdir -p $(DRV_OBJ)
245
	mkdir -p $(HAL_OBJ)
246
	mkdir -p $(USB_OBJ)
247
	mkdir -p $(CDC_OBJ)
248
	mkdir -p $(PRJ_OBJ)
249
	mkdir -p $(OLED_OBJ)
250
	touch $@
251
 
252
 
253
-include $(HAL_OBJECTS:.o=.d)
254
-include $(DRV_OBJECTS:.o=.d)
255
-include $(CDC_OBJECTS:.o=.d)
256
-include $(USB_OBJECTS:.o=.d)
257
-include $(PRJ_OBJECTS:.o=.d)
258
-include $(OLED_OBJECTS:.o=.d)
259
 
260
 
261
 
262
###########################################
263
# clean rules
264
clean-debug-enginebay-l152: clean-base
265
	-rm -f $(BIN)/debug-enginebay-l152.* 
266
 
267
clean-release-enginebay-l152: clean-base
268
	-rm -f $(BIN)/release-enginebay-l152.* 
269
 
270
 
271
#common clean rule
272
clean-base:
273
	rm -f $(DRV_OBJ)/*
274
	rm -f $(HAL_OBJ)/*
275
	rm -f $(USB_OBJ)/*
276
	rm -f $(CDC_OBJ)/*
277
	rm -f $(PRJ_OBJ)/*
278
	rm -f $(OLED_OBJ)/*
279
 
280
#Macro expansion in the makefile change the paths used
281
BUILD_TARGETS = $(OBJPATH)/.exist revision flash 
282
 
283
debug-enginebay-l152: $(BUILD_TARGETS)
284
	@echo "done debug usb_l152"
285
 
286
release-enginebay-l152: $(BUILD_TARGETS)
287
	@echo "done release usb_l152"	
288
 
289
FINAL_BUILD=$(BIN)/$(FLASH_OUTPUT)
290
 
291
 
292
 
293
 
294
 
295
# updated to separate the debug info from the hex file
296
$(FINAL_BUILD).out:  $(C_OBJECTS) $(ASM_OBJECTS) $(FLASH_LINKER_SCRIPT) 
297
	@ echo "..linking"
298
	$(CC) $(LDFLAGS) -Wl,--gc-sections -Wl,-Map,$(FINAL_BUILD).map -T$(FLASH_LINKER_SCRIPT) -o $(FINAL_BUILD).out  $(C_OBJECTS) $(ASM_OBJECTS)
299
	$(OBJCOPY) --only-keep-debug $(FINAL_BUILD).out $(FINAL_BUILD).debug
300
	$(OBJCOPY) --strip-all --strip-debug --add-gnu-debuglink=$(FINAL_BUILD).debug --output-target srec --image-base 0x08000000  $(FINAL_BUILD).out $(FINAL_BUILD).s19
301
 
302
%.bin : %.out;
303
#	$(OBJCOPY) $(OBJCOPYFLAGS) $< $@
304
	$(OBJDUMP) $(OBJDUMPFLAGS) $< > $<.list 
305
#	$(OBJDUMP) $(OBJDUMPFLAGS) $< 
306
	@ echo "...completed."
307
 
308
#getting the Subversion Repository information
309
#This requires that $(PROJROOT)/src/versions.h is NOT under SVN control (or always will see (Modified) version status)
310
revision:
311
	touch $(PROJROOT)/versions.h
312
#	@echo subWCrev . $(PROJROOT)/versions_base.h $(PROJROOT)/versions.h
313
 
314
#final target 
315
flash:$(FINAL_BUILD).bin 
316
 
317