Rev 14 | 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 |
||
106 | |||
107 | C_OBJECTS += $(PRJ_OBJECTS) |
||
108 | |||
109 | |||
110 | $(PRJ_OBJ)/%.o: $(PRJ_SRC)/%.c $(DEPENDS) |
||
111 | $(CC) $(CFLAGS) $< -o $@ |
||
112 | |||
113 | |||
114 | |||
115 | |||
116 | ##################################################### |
||
117 | #Drivers for CMSIS |
||
118 | DRV_PATH= Drivers/CMSIS/Device/ST/STM32F1xx |
||
119 | DRV_SRC = $(DRV_PATH)/Source/Templates |
||
120 | DRV_INC = $(DRV_PATH)/Include |
||
121 | DRV_OBJ = $(OBJPATH)/Drv_Obj |
||
122 | |||
123 | INCLUDES += -I$(DRV_INC) |
||
124 | INCLUDES += -IDrivers/CMSIS/Include |
||
125 | |||
126 | DRV_OBJECTS = $(DRV_OBJ)/system_stm32f1xx.o |
||
127 | |||
128 | C_OBJECTS += $(DRV_OBJECTS) |
||
129 | |||
130 | $(DRV_OBJ)/%.o: $(DRV_SRC)/%.c $(DEPENDS) |
||
131 | $(CC) $(CFLAGS) $< -o $@ |
||
132 | |||
133 | |||
134 | ##################################################### |
||
135 | #Drivers for HAL |
||
136 | HAL_PATH= Drivers/STM32F1xx_HAL_Driver |
||
137 | HAL_SRC = $(HAL_PATH)/Src |
||
138 | HAL_INC = $(HAL_PATH)/Inc |
||
139 | HAL_OBJ = $(OBJPATH)/Hal_Obj |
||
140 | |||
141 | INCLUDES += -I$(HAL_INC) |
||
142 | |||
143 | HAL_OBJECTS += $(HAL_OBJ)/stm32f1xx_hal_adc_ex.o |
||
144 | HAL_OBJECTS += $(HAL_OBJ)/stm32f1xx_hal_adc.o |
||
145 | HAL_OBJECTS += $(HAL_OBJ)/stm32f1xx_hal_can.o |
||
146 | HAL_OBJECTS += $(HAL_OBJ)/stm32f1xx_hal_cec.o |
||
147 | HAL_OBJECTS += $(HAL_OBJ)/stm32f1xx_hal_cortex.o |
||
148 | HAL_OBJECTS += $(HAL_OBJ)/stm32f1xx_hal_crc.o |
||
149 | HAL_OBJECTS += $(HAL_OBJ)/stm32f1xx_hal_dac_ex.o |
||
150 | HAL_OBJECTS += $(HAL_OBJ)/stm32f1xx_hal_dac.o |
||
151 | HAL_OBJECTS += $(HAL_OBJ)/stm32f1xx_hal_dma.o |
||
152 | HAL_OBJECTS += $(HAL_OBJ)/stm32f1xx_hal_eth.o |
||
153 | HAL_OBJECTS += $(HAL_OBJ)/stm32f1xx_hal_flash_ex.o |
||
154 | HAL_OBJECTS += $(HAL_OBJ)/stm32f1xx_hal_flash.o |
||
155 | HAL_OBJECTS += $(HAL_OBJ)/stm32f1xx_hal_gpio_ex.o |
||
156 | HAL_OBJECTS += $(HAL_OBJ)/stm32f1xx_hal_gpio.o |
||
157 | HAL_OBJECTS += $(HAL_OBJ)/stm32f1xx_hal_hcd.o |
||
158 | HAL_OBJECTS += $(HAL_OBJ)/stm32f1xx_hal_i2c.o |
||
159 | HAL_OBJECTS += $(HAL_OBJ)/stm32f1xx_hal_i2s.o |
||
160 | HAL_OBJECTS += $(HAL_OBJ)/stm32f1xx_hal_irda.o |
||
161 | HAL_OBJECTS += $(HAL_OBJ)/stm32f1xx_hal_iwdg.o |
||
162 | #HAL_OBJECTS += $(HAL_OBJ)/stm32f1xx_hal_msp_template.o |
||
163 | HAL_OBJECTS += $(HAL_OBJ)/stm32f1xx_hal_nand.o |
||
164 | HAL_OBJECTS += $(HAL_OBJ)/stm32f1xx_hal_nor.o |
||
165 | HAL_OBJECTS += $(HAL_OBJ)/stm32f1xx_hal_pccard.o |
||
166 | HAL_OBJECTS += $(HAL_OBJ)/stm32f1xx_hal_pcd_ex.o |
||
167 | HAL_OBJECTS += $(HAL_OBJ)/stm32f1xx_hal_pcd.o |
||
168 | HAL_OBJECTS += $(HAL_OBJ)/stm32f1xx_hal_pwr.o |
||
169 | HAL_OBJECTS += $(HAL_OBJ)/stm32f1xx_hal_rcc_ex.o |
||
170 | HAL_OBJECTS += $(HAL_OBJ)/stm32f1xx_hal_rcc.o |
||
171 | HAL_OBJECTS += $(HAL_OBJ)/stm32f1xx_hal_rtc_ex.o |
||
172 | HAL_OBJECTS += $(HAL_OBJ)/stm32f1xx_hal_rtc.o |
||
173 | HAL_OBJECTS += $(HAL_OBJ)/stm32f1xx_hal_sd.o |
||
174 | HAL_OBJECTS += $(HAL_OBJ)/stm32f1xx_hal_smartcard.o |
||
175 | HAL_OBJECTS += $(HAL_OBJ)/stm32f1xx_hal_spi_ex.o |
||
176 | HAL_OBJECTS += $(HAL_OBJ)/stm32f1xx_hal_spi.o |
||
177 | HAL_OBJECTS += $(HAL_OBJ)/stm32f1xx_hal_sram.o |
||
178 | HAL_OBJECTS += $(HAL_OBJ)/stm32f1xx_hal_tim_ex.o |
||
179 | HAL_OBJECTS += $(HAL_OBJ)/stm32f1xx_hal_tim.o |
||
180 | HAL_OBJECTS += $(HAL_OBJ)/stm32f1xx_hal_uart.o |
||
181 | HAL_OBJECTS += $(HAL_OBJ)/stm32f1xx_hal_usart.o |
||
182 | HAL_OBJECTS += $(HAL_OBJ)/stm32f1xx_hal_wwdg.o |
||
183 | HAL_OBJECTS += $(HAL_OBJ)/stm32f1xx_hal.o |
||
184 | HAL_OBJECTS += $(HAL_OBJ)/stm32f1xx_ll_fsmc.o |
||
185 | HAL_OBJECTS += $(HAL_OBJ)/stm32f1xx_ll_sdmmc.o |
||
186 | HAL_OBJECTS += $(HAL_OBJ)/stm32f1xx_ll_usb.o |
||
187 | |||
188 | C_OBJECTS += $(HAL_OBJECTS) |
||
189 | |||
190 | $(HAL_OBJ)/%.o: $(HAL_SRC)/%.c $(DEPENDS) |
||
191 | $(CC) $(CFLAGS) $< -o $@ |
||
192 | |||
193 | |||
194 | ############################################# |
||
195 | |||
196 | # this one has assembler too |
||
197 | $(DRV_OBJ)/startup_stm32f103xb.o : $(DRV_SRC)/gcc/startup_stm32f103xb.s $(DEPENDS) |
||
198 | $(AS) $(ASFLAGS) $< -o $@ |
||
199 | |||
200 | ASM_OBJECTS += $(DRV_OBJ)/startup_stm32f103xb.o |
||
201 | |||
202 | |||
203 | |||
204 | ############################################# |
||
205 | # SPI OLED screen |
||
206 | |||
207 | |||
208 | OLED_PATH = SSD1306_lib |
||
209 | OLED_SRC = $(OLED_PATH) |
||
210 | OLED_INC = $(OLED_PATH) |
||
211 | OLED_OBJ = $(OBJPATH)/OLED_Obj |
||
212 | INCLUDES += -I$(OLED_INC) |
||
213 | |||
214 | OLED_OBJECTS += $(OLED_OBJ)/SSD1306.o |
||
215 | OLED_OBJECTS += $(OLED_OBJ)/Font.o |
||
216 | |||
217 | C_OBJECTS += $(OLED_OBJECTS) |
||
218 | |||
219 | $(OLED_OBJ)/%.o: $(OLED_SRC)/%.c $(DEPENDS) |
||
220 | $(CC) $(CFLAGS) $< -o $@ |
||
221 | |||
222 | |||
223 | |||
224 | ############################################# |
||
225 | # PLX communications |
||
226 | |||
227 | |||
228 | PLX_PATH = plx_lib |
||
229 | PLX_SRC = $(PLX_PATH) |
||
230 | PLX_INC = $(PLX_PATH) |
||
231 | PLX_OBJ = $(OBJPATH)/PLX_Obj |
||
232 | INCLUDES += -I$(PLX_INC) |
||
233 | |||
234 | PLX_OBJECTS += $(PLX_OBJ)/plx.o |
||
235 | |||
236 | C_OBJECTS += $(PLX_OBJECTS) |
||
237 | |||
238 | $(PLX_OBJ)/%.o: $(PLX_SRC)/%.c $(DEPENDS) |
||
239 | $(CC) $(CFLAGS) $< -o $@ |
||
240 | |||
16 | mjames | 241 | ############################################# |
242 | # EEPROM emulation via Flash |
||
2 | mjames | 243 | |
244 | |||
16 | mjames | 245 | EEPROM_PATH = eeprom_lib |
246 | EEPROM_SRC = $(EEPROM_PATH) |
||
247 | EEPROM_INC = $(EEPROM_PATH) |
||
248 | EEPROM_OBJ = $(OBJPATH)/EEPROM_Obj |
||
249 | INCLUDES += -I$(EEPROM_INC) |
||
250 | |||
251 | EEPROM_OBJECTS += $(EEPROM_OBJ)/eeprom.o |
||
252 | |||
253 | C_OBJECTS += $(EEPROM_OBJECTS) |
||
254 | |||
255 | $(EEPROM_OBJ)/%.o: $(EEPROM_SRC)/%.c $(DEPENDS) |
||
256 | $(CC) $(CFLAGS) $< -o $@ |
||
257 | |||
258 | |||
259 | |||
2 | mjames | 260 | ############################################# |
261 | # for version.h |
||
262 | INCLUDES += -I. |
||
263 | |||
264 | $(OBJPATH)/.exist: |
||
265 | mkdir -p $(OBJPATH) |
||
266 | mkdir -p $(DRV_OBJ) |
||
267 | mkdir -p $(HAL_OBJ) |
||
268 | mkdir -p $(PRJ_OBJ) |
||
269 | mkdir -p $(OLED_OBJ) |
||
270 | mkdir -p $(PLX_OBJ) |
||
16 | mjames | 271 | mkdir -p $(EEPROM_OBJ) |
2 | mjames | 272 | touch $@ |
273 | |||
274 | |||
275 | -include $(HAL_OBJECTS:.o=.d) |
||
276 | -include $(DRV_OBJECTS:.o=.d) |
||
277 | -include $(PRJ_OBJECTS:.o=.d) |
||
278 | -include $(OLED_OBJECTS:.o=.d) |
||
279 | -include $(PLX_OBJECTS:.o=.d) |
||
16 | mjames | 280 | -include $(EEPROM_OBJECTS:.o=.d) |
2 | mjames | 281 | |
282 | |||
283 | |||
284 | ########################################### |
||
285 | # clean rules |
||
10 | mjames | 286 | clean_debug_dashboard_F103: clean_base |
287 | -rm -f $(BIN)/debug_dashboard_F103.* |
||
2 | mjames | 288 | |
10 | mjames | 289 | clean_release_dashboard_F103: clean_base |
290 | -rm -f $(BIN)/release_dashboard_F103.* |
||
2 | mjames | 291 | |
292 | |||
293 | #common clean rule |
||
10 | mjames | 294 | clean_base: |
2 | mjames | 295 | rm -f $(DRV_OBJ)/* |
296 | rm -f $(HAL_OBJ)/* |
||
297 | rm -f $(PRJ_OBJ)/* |
||
298 | rm -f $(OLED_OBJ)/* |
||
299 | rm -f $(PLX_OBJ)/* |
||
16 | mjames | 300 | rm -f $(EEPROM_OBJ)/* |
2 | mjames | 301 | |
302 | #Macro expansion in the makefile change the paths used |
||
303 | BUILD_TARGETS = $(OBJPATH)/.exist revision flash |
||
304 | |||
10 | mjames | 305 | debug_dashboard_F103: $(BUILD_TARGETS) |
306 | @echo "done debug Dashboard F103" |
||
2 | mjames | 307 | |
10 | mjames | 308 | release_dashboard_F103: $(BUILD_TARGETS) |
309 | @echo "done release Dashboard F103" |
||
2 | mjames | 310 | |
311 | FINAL_BUILD=$(BIN)/$(FLASH_OUTPUT) |
||
312 | |||
313 | |||
314 | |||
315 | |||
316 | |||
317 | # updated to separate the debug info from the hex file |
||
318 | $(FINAL_BUILD).out: $(C_OBJECTS) $(ASM_OBJECTS) $(FLASH_LINKER_SCRIPT) |
||
319 | @ echo "..linking" |
||
320 | $(CC) $(LDFLAGS) -Wl,--gc-sections -Wl,-Map,$(FINAL_BUILD).map -T$(FLASH_LINKER_SCRIPT) -o $(FINAL_BUILD).out $(C_OBJECTS) $(ASM_OBJECTS) |
||
321 | $(OBJCOPY) --only-keep-debug $(FINAL_BUILD).out $(FINAL_BUILD).debug |
||
322 | $(OBJCOPY) --strip-all --strip-debug --add-gnu-debuglink=$(FINAL_BUILD).debug --output-target srec --image-base 0x08000000 $(FINAL_BUILD).out $(FINAL_BUILD).s19 |
||
323 | |||
324 | %.bin : %.out; |
||
325 | # $(OBJCOPY) $(OBJCOPYFLAGS) $< $@ |
||
326 | $(OBJDUMP) $(OBJDUMPFLAGS) $< > $<.list |
||
327 | # $(OBJDUMP) $(OBJDUMPFLAGS) $< |
||
328 | @ echo "...completed." |
||
329 | |||
330 | #getting the Subversion Repository information |
||
331 | #This requires that $(PROJROOT)/src/versions.h is NOT under SVN control (or always will see (Modified) version status) |
||
332 | revision: |
||
333 | touch $(PROJROOT)/versions.h |
||
334 | # @echo subWCrev . $(PROJROOT)/versions_base.h $(PROJROOT)/versions.h |
||
335 | |||
336 | #final target |
||
337 | flash:$(FINAL_BUILD).bin |
||
338 | |||
339 |