1 |
589 |
jeremybenn |
# Hey Emacs, this is a -*- makefile -*-
|
2 |
|
|
|
3 |
|
|
# Goals available on make command line:
|
4 |
|
|
#
|
5 |
|
|
# [all] Default goal: build the project.
|
6 |
|
|
# clean Clean up the project.
|
7 |
|
|
# rebuild Rebuild the project.
|
8 |
|
|
# ccversion Display CC version information.
|
9 |
|
|
# cppfiles file.i Generate preprocessed files from C source files.
|
10 |
|
|
# asfiles file.x Generate preprocessed assembler files from C and assembler source files.
|
11 |
|
|
# objfiles file.o Generate object files from C and assembler source files.
|
12 |
|
|
# a file.a Archive: create A output file from object files.
|
13 |
|
|
# elf file.elf Link: create ELF output file from object files.
|
14 |
|
|
# lss file.lss Create extended listing from target output file.
|
15 |
|
|
# sym file.sym Create symbol table from target output file.
|
16 |
|
|
# hex file.hex Create Intel HEX image from ELF output file.
|
17 |
|
|
# bin file.bin Create binary image from ELF output file.
|
18 |
|
|
# sizes Display target size information.
|
19 |
|
|
# isp Use ISP instead of JTAGICE mkII when programming.
|
20 |
|
|
# cpuinfo Get CPU information.
|
21 |
|
|
# halt Stop CPU execution.
|
22 |
|
|
# chiperase Perform a JTAG Chip Erase command.
|
23 |
|
|
# erase Perform a flash chip erase.
|
24 |
|
|
# program Program MCU memory from ELF output file.
|
25 |
|
|
# secureflash Protect chip by setting security bit.
|
26 |
|
|
# reset Reset MCU.
|
27 |
|
|
# debug Open a debug connection with the MCU.
|
28 |
|
|
# run Start CPU execution.
|
29 |
|
|
# readregs Read CPU registers.
|
30 |
|
|
# doc Build the documentation.
|
31 |
|
|
# cleandoc Clean up the documentation.
|
32 |
|
|
# rebuilddoc Rebuild the documentation.
|
33 |
|
|
# verbose Display main executed commands.
|
34 |
|
|
|
35 |
|
|
# Copyright (c) 2007, Atmel Corporation All rights reserved.
|
36 |
|
|
#
|
37 |
|
|
# Redistribution and use in source and binary forms, with or without
|
38 |
|
|
# modification, are permitted provided that the following conditions are met:
|
39 |
|
|
#
|
40 |
|
|
# 1. Redistributions of source code must retain the above copyright notice, this
|
41 |
|
|
# list of conditions and the following disclaimer.
|
42 |
|
|
#
|
43 |
|
|
# 2. Redistributions in binary form must reproduce the above copyright notice,
|
44 |
|
|
# this list of conditions and the following disclaimer in the documentation and/
|
45 |
|
|
# or other materials provided with the distribution.
|
46 |
|
|
#
|
47 |
|
|
# 3. The name of ATMEL may not be used to endorse or promote products derived
|
48 |
|
|
# from this software without specific prior written permission.
|
49 |
|
|
#
|
50 |
|
|
# THIS SOFTWARE IS PROVIDED BY ATMEL ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
51 |
|
|
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
52 |
|
|
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND
|
53 |
|
|
# SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT,
|
54 |
|
|
# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
55 |
|
|
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
56 |
|
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
57 |
|
|
# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
58 |
|
|
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
59 |
|
|
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
60 |
|
|
|
61 |
|
|
|
62 |
|
|
# ** ** ** *** ** ** ** ** ** ** ** ** ** ** **
|
63 |
|
|
# ENVIRONMENT SETTINGS
|
64 |
|
|
# ** ** ** *** ** ** ** ** ** ** ** ** ** ** **
|
65 |
|
|
|
66 |
|
|
FirstWord = $(if $(1),$(word 1,$(1)))
|
67 |
|
|
LastWord = $(if $(1),$(word $(words $(1)),$(1)))
|
68 |
|
|
|
69 |
|
|
MAKE = make
|
70 |
|
|
MAKECFG = config.mk
|
71 |
|
|
TGTTYPE = $(suffix $(TARGET))
|
72 |
|
|
|
73 |
|
|
RM = rm -Rf
|
74 |
|
|
|
75 |
|
|
AR = avr32-ar
|
76 |
|
|
ARFLAGS = rcs
|
77 |
|
|
|
78 |
|
|
CPP = $(CC) -E
|
79 |
|
|
CPPFLAGS = -march=$(ARCH) -mpart=$(PART) $(WARNINGS) $(DEFS) \
|
80 |
|
|
$(PLATFORM_INC_PATH:%=-I%) $(INC_PATH:%=-I%) $(CPP_EXTRA_FLAGS)
|
81 |
|
|
DPNDFILES = $(CSRCS:.c=.d) $(ASSRCS:.S=.d)
|
82 |
|
|
CPPFILES = $(CSRCS:.c=.i)
|
83 |
|
|
|
84 |
|
|
CC = avr32-gcc
|
85 |
|
|
CFLAGS = $(DEBUG) $(OPTIMIZATION) $(C_EXTRA_FLAGS) \
|
86 |
|
|
$(PLATFORM_INC_PATH:%=-Wa,-I%) $(INC_PATH:%=-Wa,-I%) $(AS_EXTRA_FLAGS)
|
87 |
|
|
ASFILES = $(CSRCS:.c=.x) $(ASSRCS:.S=.x)
|
88 |
|
|
|
89 |
|
|
AS = avr32-as
|
90 |
|
|
ASFLAGS = $(DEBUG) \
|
91 |
|
|
$(PLATFORM_INC_PATH:%=-Wa,-I%) $(INC_PATH:%=-Wa,-I%) $(AS_EXTRA_FLAGS)
|
92 |
|
|
OBJFILES = $(CSRCS:.c=.o) $(ASSRCS:.S=.o)
|
93 |
|
|
|
94 |
|
|
LD = avr32-ld
|
95 |
|
|
LDFLAGS = -march=$(ARCH) -mpart=$(PART) \
|
96 |
|
|
$(LIB_PATH:%=-L%) $(LINKER_SCRIPT:%=-T%) $(LD_EXTRA_FLAGS)
|
97 |
|
|
LOADLIBES =
|
98 |
|
|
LDLIBS = $(LIBS:%=-l%)
|
99 |
|
|
|
100 |
|
|
OBJDUMP = avr32-objdump
|
101 |
|
|
LSS = $(TARGET:$(TGTTYPE)=.lss)
|
102 |
|
|
|
103 |
|
|
NM = avr32-nm
|
104 |
|
|
SYM = $(TARGET:$(TGTTYPE)=.sym)
|
105 |
|
|
|
106 |
|
|
OBJCOPY = avr32-objcopy
|
107 |
|
|
HEX = $(TARGET:$(TGTTYPE)=.hex)
|
108 |
|
|
BIN = $(TARGET:$(TGTTYPE)=.bin)
|
109 |
|
|
|
110 |
|
|
SIZE = avr32-size
|
111 |
|
|
|
112 |
|
|
SLEEP = sleep
|
113 |
|
|
SLEEPUSB = 9
|
114 |
|
|
|
115 |
|
|
PROGRAM = avr32program
|
116 |
|
|
|
117 |
|
|
ISP = batchisp
|
118 |
|
|
ISPFLAGS = -device at32$(PART) -hardware usb -operation
|
119 |
|
|
|
120 |
|
|
DBGPROXY = avr32gdbproxy
|
121 |
|
|
|
122 |
|
|
DOCGEN = doxygen
|
123 |
|
|
|
124 |
|
|
|
125 |
|
|
# ** ** ** *** ** ** ** ** ** ** ** ** ** ** **
|
126 |
|
|
# MESSAGES
|
127 |
|
|
# ** ** ** *** ** ** ** ** ** ** ** ** ** ** **
|
128 |
|
|
|
129 |
|
|
ERR_TARGET_TYPE = Target type not supported: `$(TGTTYPE)'
|
130 |
|
|
MSG_CLEANING = Cleaning project.
|
131 |
|
|
MSG_PREPROCESSING = Preprocessing \`$<\' to \`$@\'.
|
132 |
|
|
MSG_COMPILING = Compiling \`$<\' to \`$@\'.
|
133 |
|
|
MSG_ASSEMBLING = Assembling \`$<\' to \`$@\'.
|
134 |
|
|
MSG_ARCHIVING = Archiving to \`$@\'.
|
135 |
|
|
MSG_LINKING = Linking to \`$@\'.
|
136 |
|
|
MSG_EXTENDED_LISTING = Creating extended listing to \`$@\'.
|
137 |
|
|
MSG_SYMBOL_TABLE = Creating symbol table to \`$@\'.
|
138 |
|
|
MSG_IHEX_IMAGE = Creating Intel HEX image to \`$@\'.
|
139 |
|
|
MSG_BINARY_IMAGE = Creating binary image to \`$@\'.
|
140 |
|
|
MSG_GETTING_CPU_INFO = Getting CPU information.
|
141 |
|
|
MSG_HALTING = Stopping CPU execution.
|
142 |
|
|
MSG_ERASING_CHIP = Performing a JTAG Chip Erase command.
|
143 |
|
|
MSG_ERASING = Performing a flash chip erase.
|
144 |
|
|
MSG_PROGRAMMING = Programming MCU memory from \`$(TARGET)\'.
|
145 |
|
|
MSG_SECURING_FLASH = Protecting chip by setting security bit.
|
146 |
|
|
MSG_RESETTING = Resetting MCU.
|
147 |
|
|
MSG_DEBUGGING = Opening debug connection with MCU.
|
148 |
|
|
MSG_RUNNING = Starting CPU execution.
|
149 |
|
|
MSG_READING_CPU_REGS = Reading CPU registers.
|
150 |
|
|
MSG_CLEANING_DOC = Cleaning documentation.
|
151 |
|
|
MSG_GENERATING_DOC = Generating documentation to \`$(DOC_PATH)\'.
|
152 |
|
|
|
153 |
|
|
|
154 |
|
|
# ** ** ** *** ** ** ** ** ** ** ** ** ** ** **
|
155 |
|
|
# MAKE RULES
|
156 |
|
|
# ** ** ** *** ** ** ** ** ** ** ** ** ** ** **
|
157 |
|
|
|
158 |
|
|
# Include the make configuration file.
|
159 |
|
|
include $(MAKECFG)
|
160 |
|
|
|
161 |
|
|
# ** ** TOP-LEVEL RULES ** **
|
162 |
|
|
|
163 |
|
|
# Default goal: build the project.
|
164 |
|
|
ifeq ($(TGTTYPE),.a)
|
165 |
|
|
.PHONY: all
|
166 |
|
|
all: ccversion a lss sym sizes
|
167 |
|
|
else
|
168 |
|
|
ifeq ($(TGTTYPE),.elf)
|
169 |
|
|
.PHONY: all
|
170 |
|
|
all: ccversion elf lss sym hex bin sizes
|
171 |
|
|
else
|
172 |
|
|
$(error $(ERR_TARGET_TYPE))
|
173 |
|
|
endif
|
174 |
|
|
endif
|
175 |
|
|
|
176 |
|
|
# Clean up the project.
|
177 |
|
|
.PHONY: clean
|
178 |
|
|
clean:
|
179 |
|
|
@echo $(MSG_CLEANING)
|
180 |
|
|
-$(VERBOSE_CMD)$(RM) $(BIN)
|
181 |
|
|
-$(VERBOSE_CMD)$(RM) $(HEX)
|
182 |
|
|
-$(VERBOSE_CMD)$(RM) $(SYM)
|
183 |
|
|
-$(VERBOSE_CMD)$(RM) $(LSS)
|
184 |
|
|
-$(VERBOSE_CMD)$(RM) $(TARGET)
|
185 |
|
|
-$(VERBOSE_CMD)$(RM) $(OBJFILES)
|
186 |
|
|
-$(VERBOSE_CMD)$(RM) $(ASFILES)
|
187 |
|
|
-$(VERBOSE_CMD)$(RM) $(CPPFILES)
|
188 |
|
|
-$(VERBOSE_CMD)$(RM) $(DPNDFILES)
|
189 |
|
|
$(VERBOSE_NL)
|
190 |
|
|
|
191 |
|
|
# Rebuild the project.
|
192 |
|
|
.PHONY: rebuild
|
193 |
|
|
rebuild: clean all
|
194 |
|
|
|
195 |
|
|
# Display CC version information.
|
196 |
|
|
.PHONY: ccversion
|
197 |
|
|
ccversion:
|
198 |
|
|
@echo
|
199 |
|
|
@echo
|
200 |
|
|
@$(CC) --version
|
201 |
|
|
|
202 |
|
|
# Generate preprocessed files from C source files.
|
203 |
|
|
.PHONY: cppfiles
|
204 |
|
|
cppfiles: $(CPPFILES)
|
205 |
|
|
|
206 |
|
|
# Generate preprocessed assembler files from C and assembler source files.
|
207 |
|
|
.PHONY: asfiles
|
208 |
|
|
asfiles: $(ASFILES)
|
209 |
|
|
|
210 |
|
|
# Generate object files from C and assembler source files.
|
211 |
|
|
.PHONY: objfiles
|
212 |
|
|
objfiles: $(OBJFILES)
|
213 |
|
|
|
214 |
|
|
ifeq ($(TGTTYPE),.a)
|
215 |
|
|
# Archive: create A output file from object files.
|
216 |
|
|
.PHONY: a
|
217 |
|
|
a: $(TARGET)
|
218 |
|
|
else
|
219 |
|
|
ifeq ($(TGTTYPE),.elf)
|
220 |
|
|
# Link: create ELF output file from object files.
|
221 |
|
|
.PHONY: elf
|
222 |
|
|
elf: $(TARGET)
|
223 |
|
|
endif
|
224 |
|
|
endif
|
225 |
|
|
|
226 |
|
|
# Create extended listing from target output file.
|
227 |
|
|
.PHONY: lss
|
228 |
|
|
lss: $(LSS)
|
229 |
|
|
|
230 |
|
|
# Create symbol table from target output file.
|
231 |
|
|
.PHONY: sym
|
232 |
|
|
sym: $(SYM)
|
233 |
|
|
|
234 |
|
|
ifeq ($(TGTTYPE),.elf)
|
235 |
|
|
|
236 |
|
|
# Create Intel HEX image from ELF output file.
|
237 |
|
|
.PHONY: hex
|
238 |
|
|
hex: $(HEX)
|
239 |
|
|
|
240 |
|
|
# Create binary image from ELF output file.
|
241 |
|
|
.PHONY: bin
|
242 |
|
|
bin: $(BIN)
|
243 |
|
|
|
244 |
|
|
endif
|
245 |
|
|
|
246 |
|
|
# Display target size information.
|
247 |
|
|
.PHONY: sizes
|
248 |
|
|
sizes: $(TARGET)
|
249 |
|
|
@echo
|
250 |
|
|
@echo
|
251 |
|
|
ifeq ($(TGTTYPE),.a)
|
252 |
|
|
@$(SIZE) -Bxt $<
|
253 |
|
|
else
|
254 |
|
|
ifeq ($(TGTTYPE),.elf)
|
255 |
|
|
@$(SIZE) -Ax $<
|
256 |
|
|
@$(SIZE) -Bx $<
|
257 |
|
|
endif
|
258 |
|
|
endif
|
259 |
|
|
@echo
|
260 |
|
|
@echo
|
261 |
|
|
|
262 |
|
|
ifeq ($(TGTTYPE),.elf)
|
263 |
|
|
|
264 |
|
|
# Use ISP instead of JTAGICE mkII when programming.
|
265 |
|
|
.PHONY: isp
|
266 |
|
|
ifeq ($(filter-out isp verbose,$(MAKECMDGOALS)),)
|
267 |
|
|
isp: all
|
268 |
|
|
else
|
269 |
|
|
isp:
|
270 |
|
|
@:
|
271 |
|
|
endif
|
272 |
|
|
|
273 |
|
|
ifeq ($(findstring isp,$(MAKECMDGOALS)),)
|
274 |
|
|
|
275 |
|
|
# Get CPU information.
|
276 |
|
|
.PHONY: cpuinfo
|
277 |
|
|
cpuinfo:
|
278 |
|
|
@echo
|
279 |
|
|
@echo $(MSG_GETTING_CPU_INFO)
|
280 |
|
|
$(VERBOSE_CMD)$(PROGRAM) cpuinfo
|
281 |
|
|
ifneq ($(call LastWord,$(filter cpuinfo chiperase erase program secureflash reset debug run readregs,$(MAKECMDGOALS))),cpuinfo)
|
282 |
|
|
@$(SLEEP) $(SLEEPUSB)
|
283 |
|
|
else
|
284 |
|
|
@echo
|
285 |
|
|
endif
|
286 |
|
|
|
287 |
|
|
# Stop CPU execution.
|
288 |
|
|
.PHONY: halt
|
289 |
|
|
halt:
|
290 |
|
|
ifeq ($(filter cpuinfo chiperase erase program secureflash reset run readregs,$(MAKECMDGOALS)),)
|
291 |
|
|
@echo
|
292 |
|
|
@echo $(MSG_HALTING)
|
293 |
|
|
$(VERBOSE_CMD)$(PROGRAM) halt
|
294 |
|
|
ifneq ($(call LastWord,$(filter halt debug,$(MAKECMDGOALS))),halt)
|
295 |
|
|
@$(SLEEP) $(SLEEPUSB)
|
296 |
|
|
else
|
297 |
|
|
@echo
|
298 |
|
|
endif
|
299 |
|
|
else
|
300 |
|
|
@:
|
301 |
|
|
endif
|
302 |
|
|
|
303 |
|
|
# Perform a JTAG Chip Erase command.
|
304 |
|
|
.PHONY: chiperase
|
305 |
|
|
chiperase:
|
306 |
|
|
@echo
|
307 |
|
|
@echo $(MSG_ERASING_CHIP)
|
308 |
|
|
$(VERBOSE_CMD)$(PROGRAM) chiperase
|
309 |
|
|
ifneq ($(call LastWord,$(filter cpuinfo chiperase program secureflash reset debug run readregs,$(MAKECMDGOALS))),chiperase)
|
310 |
|
|
@$(SLEEP) $(SLEEPUSB)
|
311 |
|
|
else
|
312 |
|
|
@echo
|
313 |
|
|
endif
|
314 |
|
|
|
315 |
|
|
# Perform a flash chip erase.
|
316 |
|
|
.PHONY: erase
|
317 |
|
|
erase:
|
318 |
|
|
ifeq ($(filter chiperase program,$(MAKECMDGOALS)),)
|
319 |
|
|
@echo
|
320 |
|
|
@echo $(MSG_ERASING)
|
321 |
|
|
$(VERBOSE_CMD)$(PROGRAM) erase $(FLASH:%=-f%)
|
322 |
|
|
ifneq ($(call LastWord,$(filter cpuinfo erase secureflash reset debug run readregs,$(MAKECMDGOALS))),erase)
|
323 |
|
|
@$(SLEEP) $(SLEEPUSB)
|
324 |
|
|
else
|
325 |
|
|
@echo
|
326 |
|
|
endif
|
327 |
|
|
else
|
328 |
|
|
@:
|
329 |
|
|
endif
|
330 |
|
|
|
331 |
|
|
# Program MCU memory from ELF output file.
|
332 |
|
|
.PHONY: program
|
333 |
|
|
program: all
|
334 |
|
|
@echo
|
335 |
|
|
@echo $(MSG_PROGRAMMING)
|
336 |
|
|
$(VERBOSE_CMD)$(PROGRAM) program $(FLASH:%=-f%) $(PROG_CLOCK:%=-c%) -e -v -R $(if $(findstring run,$(MAKECMDGOALS)),-r) $(TARGET)
|
337 |
|
|
ifneq ($(call LastWord,$(filter cpuinfo chiperase program secureflash debug readregs,$(MAKECMDGOALS))),program)
|
338 |
|
|
@$(SLEEP) $(SLEEPUSB)
|
339 |
|
|
else
|
340 |
|
|
@echo
|
341 |
|
|
endif
|
342 |
|
|
|
343 |
|
|
# Protect chip by setting security bit.
|
344 |
|
|
.PHONY: secureflash
|
345 |
|
|
secureflash:
|
346 |
|
|
@echo
|
347 |
|
|
@echo $(MSG_SECURING_FLASH)
|
348 |
|
|
$(VERBOSE_CMD)$(PROGRAM) secureflash
|
349 |
|
|
ifneq ($(call LastWord,$(filter cpuinfo chiperase erase program secureflash reset debug run readregs,$(MAKECMDGOALS))),secureflash)
|
350 |
|
|
@$(SLEEP) $(SLEEPUSB)
|
351 |
|
|
else
|
352 |
|
|
@echo
|
353 |
|
|
endif
|
354 |
|
|
|
355 |
|
|
# Reset MCU.
|
356 |
|
|
.PHONY: reset
|
357 |
|
|
reset:
|
358 |
|
|
ifeq ($(filter program run,$(MAKECMDGOALS)),)
|
359 |
|
|
@echo
|
360 |
|
|
@echo $(MSG_RESETTING)
|
361 |
|
|
$(VERBOSE_CMD)$(PROGRAM) reset
|
362 |
|
|
ifneq ($(call LastWord,$(filter cpuinfo chiperase erase secureflash reset debug readregs,$(MAKECMDGOALS))),reset)
|
363 |
|
|
@$(SLEEP) $(SLEEPUSB)
|
364 |
|
|
else
|
365 |
|
|
@echo
|
366 |
|
|
endif
|
367 |
|
|
else
|
368 |
|
|
@:
|
369 |
|
|
endif
|
370 |
|
|
|
371 |
|
|
# Open a debug connection with the MCU.
|
372 |
|
|
.PHONY: debug
|
373 |
|
|
debug:
|
374 |
|
|
@echo
|
375 |
|
|
@echo $(MSG_DEBUGGING)
|
376 |
|
|
$(VERBOSE_CMD)$(DBGPROXY) $(FLASH:%=-f%)
|
377 |
|
|
ifneq ($(call LastWord,$(filter cpuinfo halt chiperase erase program secureflash reset debug run readregs,$(MAKECMDGOALS))),debug)
|
378 |
|
|
@$(SLEEP) $(SLEEPUSB)
|
379 |
|
|
else
|
380 |
|
|
@echo
|
381 |
|
|
endif
|
382 |
|
|
|
383 |
|
|
# Start CPU execution.
|
384 |
|
|
.PHONY: run
|
385 |
|
|
run:
|
386 |
|
|
ifeq ($(findstring program,$(MAKECMDGOALS)),)
|
387 |
|
|
@echo
|
388 |
|
|
@echo $(MSG_RUNNING)
|
389 |
|
|
$(VERBOSE_CMD)$(PROGRAM) run $(if $(findstring reset,$(MAKECMDGOALS)),-R)
|
390 |
|
|
ifneq ($(call LastWord,$(filter cpuinfo chiperase erase secureflash debug run readregs,$(MAKECMDGOALS))),run)
|
391 |
|
|
@$(SLEEP) $(SLEEPUSB)
|
392 |
|
|
else
|
393 |
|
|
@echo
|
394 |
|
|
endif
|
395 |
|
|
else
|
396 |
|
|
@:
|
397 |
|
|
endif
|
398 |
|
|
|
399 |
|
|
# Read CPU registers.
|
400 |
|
|
.PHONY: readregs
|
401 |
|
|
readregs:
|
402 |
|
|
@echo
|
403 |
|
|
@echo $(MSG_READING_CPU_REGS)
|
404 |
|
|
$(VERBOSE_CMD)$(PROGRAM) readregs
|
405 |
|
|
ifneq ($(call LastWord,$(filter cpuinfo chiperase erase program secureflash reset debug run readregs,$(MAKECMDGOALS))),readregs)
|
406 |
|
|
@$(SLEEP) $(SLEEPUSB)
|
407 |
|
|
else
|
408 |
|
|
@echo
|
409 |
|
|
endif
|
410 |
|
|
|
411 |
|
|
else
|
412 |
|
|
|
413 |
|
|
# Perform a flash chip erase.
|
414 |
|
|
.PHONY: erase
|
415 |
|
|
erase:
|
416 |
|
|
ifeq ($(findstring program,$(MAKECMDGOALS)),)
|
417 |
|
|
@echo
|
418 |
|
|
@echo $(MSG_ERASING)
|
419 |
|
|
$(VERBOSE_CMD)$(ISP) $(ISPFLAGS) erase f memory flash blankcheck
|
420 |
|
|
ifeq ($(call LastWord,$(filter erase secureflash debug run,$(MAKECMDGOALS))),erase)
|
421 |
|
|
@echo
|
422 |
|
|
endif
|
423 |
|
|
else
|
424 |
|
|
@:
|
425 |
|
|
endif
|
426 |
|
|
|
427 |
|
|
# Program MCU memory from ELF output file.
|
428 |
|
|
.PHONY: program
|
429 |
|
|
program: all
|
430 |
|
|
@echo
|
431 |
|
|
@echo $(MSG_PROGRAMMING)
|
432 |
|
|
$(VERBOSE_CMD)$(ISP) $(ISPFLAGS) erase f memory flash blankcheck loadbuffer $(TARGET) program verify $(if $(findstring run,$(MAKECMDGOALS)),$(if $(findstring secureflash,$(MAKECMDGOALS)),,start $(if $(findstring reset,$(MAKECMDGOALS)),,no)reset 0))
|
433 |
|
|
ifeq ($(call LastWord,$(filter program secureflash debug,$(MAKECMDGOALS))),program)
|
434 |
|
|
@echo
|
435 |
|
|
endif
|
436 |
|
|
|
437 |
|
|
# Protect chip by setting security bit.
|
438 |
|
|
.PHONY: secureflash
|
439 |
|
|
secureflash:
|
440 |
|
|
@echo
|
441 |
|
|
@echo $(MSG_SECURING_FLASH)
|
442 |
|
|
$(VERBOSE_CMD)$(ISP) $(ISPFLAGS) memory security addrange 0x0 0x0 fillbuffer 0x01 program $(if $(findstring run,$(MAKECMDGOALS)),start $(if $(findstring reset,$(MAKECMDGOALS)),,no)reset 0)
|
443 |
|
|
ifeq ($(call LastWord,$(filter erase program secureflash debug,$(MAKECMDGOALS))),secureflash)
|
444 |
|
|
@echo
|
445 |
|
|
endif
|
446 |
|
|
|
447 |
|
|
# Reset MCU.
|
448 |
|
|
.PHONY: reset
|
449 |
|
|
reset:
|
450 |
|
|
@:
|
451 |
|
|
|
452 |
|
|
# Open a debug connection with the MCU.
|
453 |
|
|
.PHONY: debug
|
454 |
|
|
debug:
|
455 |
|
|
@echo
|
456 |
|
|
@echo $(MSG_DEBUGGING)
|
457 |
|
|
$(VERBOSE_CMD)$(DBGPROXY) $(FLASH:%=-f%)
|
458 |
|
|
ifeq ($(call LastWord,$(filter erase program secureflash debug run,$(MAKECMDGOALS))),debug)
|
459 |
|
|
@echo
|
460 |
|
|
endif
|
461 |
|
|
|
462 |
|
|
# Start CPU execution.
|
463 |
|
|
.PHONY: run
|
464 |
|
|
run:
|
465 |
|
|
ifeq ($(filter program secureflash,$(MAKECMDGOALS)),)
|
466 |
|
|
@echo
|
467 |
|
|
@echo $(MSG_RUNNING)
|
468 |
|
|
$(VERBOSE_CMD)$(ISP) $(ISPFLAGS) start $(if $(findstring reset,$(MAKECMDGOALS)),,no)reset 0
|
469 |
|
|
ifeq ($(call LastWord,$(filter erase debug run,$(MAKECMDGOALS))),run)
|
470 |
|
|
@echo
|
471 |
|
|
endif
|
472 |
|
|
else
|
473 |
|
|
@:
|
474 |
|
|
endif
|
475 |
|
|
|
476 |
|
|
endif
|
477 |
|
|
|
478 |
|
|
endif
|
479 |
|
|
|
480 |
|
|
# Build the documentation.
|
481 |
|
|
.PHONY: doc
|
482 |
|
|
doc:
|
483 |
|
|
@echo
|
484 |
|
|
@echo $(MSG_GENERATING_DOC)
|
485 |
|
|
$(VERBOSE_CMD)cd $(dir $(DOC_CFG)) && $(DOCGEN) $(notdir $(DOC_CFG))
|
486 |
|
|
@echo
|
487 |
|
|
|
488 |
|
|
# Clean up the documentation.
|
489 |
|
|
.PHONY: cleandoc
|
490 |
|
|
cleandoc:
|
491 |
|
|
@echo $(MSG_CLEANING_DOC)
|
492 |
|
|
-$(VERBOSE_CMD)$(RM) $(DOC_PATH)
|
493 |
|
|
$(VERBOSE_NL)
|
494 |
|
|
|
495 |
|
|
# Rebuild the documentation.
|
496 |
|
|
.PHONY: rebuilddoc
|
497 |
|
|
rebuilddoc: cleandoc doc
|
498 |
|
|
|
499 |
|
|
# Display main executed commands.
|
500 |
|
|
.PHONY: verbose
|
501 |
|
|
ifeq ($(filter-out isp verbose,$(MAKECMDGOALS)),)
|
502 |
|
|
verbose: all
|
503 |
|
|
else
|
504 |
|
|
verbose:
|
505 |
|
|
@:
|
506 |
|
|
endif
|
507 |
|
|
ifneq ($(findstring verbose,$(MAKECMDGOALS)),)
|
508 |
|
|
# Prefix displaying the following command if and only if verbose is a goal.
|
509 |
|
|
VERBOSE_CMD =
|
510 |
|
|
# New line displayed if and only if verbose is a goal.
|
511 |
|
|
VERBOSE_NL = @echo
|
512 |
|
|
else
|
513 |
|
|
VERBOSE_CMD = @
|
514 |
|
|
VERBOSE_NL =
|
515 |
|
|
endif
|
516 |
|
|
|
517 |
|
|
# ** ** COMPILATION RULES ** **
|
518 |
|
|
|
519 |
|
|
# Include silently the dependency files.
|
520 |
|
|
-include $(DPNDFILES)
|
521 |
|
|
|
522 |
|
|
# The dependency files are not built alone but along with first generation files.
|
523 |
|
|
$(DPNDFILES):
|
524 |
|
|
|
525 |
|
|
# First generation files depend on make files.
|
526 |
|
|
$(CPPFILES) $(ASFILES) $(OBJFILES): Makefile $(MAKECFG)
|
527 |
|
|
|
528 |
|
|
ifeq ($(TGTTYPE),.elf)
|
529 |
|
|
# Files resulting from linking depend on linker script.
|
530 |
|
|
$(TARGET): $(LINKER_SCRIPT)
|
531 |
|
|
endif
|
532 |
|
|
|
533 |
|
|
# Preprocess: create preprocessed files from C source files.
|
534 |
|
|
%.i: %.c %.d
|
535 |
|
|
@echo $(MSG_PREPROCESSING)
|
536 |
|
|
$(VERBOSE_CMD)$(CPP) $(CPPFLAGS) -MD -MP -MT '$*.i $*.x $*.o' -o $@ $<
|
537 |
|
|
@touch $*.d
|
538 |
|
|
@touch $@
|
539 |
|
|
$(VERBOSE_NL)
|
540 |
|
|
|
541 |
|
|
# Preprocess & compile: create assembler files from C source files.
|
542 |
|
|
%.x: %.c %.d
|
543 |
|
|
@echo $(MSG_COMPILING)
|
544 |
|
|
$(VERBOSE_CMD)$(CC) -S $(CPPFLAGS) -MD -MP -MT '$*.i $*.o' $(CFLAGS) -o $@ $<
|
545 |
|
|
@touch $*.d
|
546 |
|
|
@touch $@
|
547 |
|
|
$(VERBOSE_NL)
|
548 |
|
|
|
549 |
|
|
# Preprocess: create preprocessed files from assembler source files.
|
550 |
|
|
%.x: %.S %.d
|
551 |
|
|
@echo $(MSG_PREPROCESSING)
|
552 |
|
|
$(VERBOSE_CMD)$(CPP) $(CPPFLAGS) -MD -MP -MT '$*.x $*.o' -o $@ $<
|
553 |
|
|
@touch $*.d
|
554 |
|
|
@touch $@
|
555 |
|
|
$(VERBOSE_NL)
|
556 |
|
|
|
557 |
|
|
# Preprocess, compile & assemble: create object files from C source files.
|
558 |
|
|
%.o: %.c %.d
|
559 |
|
|
@echo $(MSG_COMPILING)
|
560 |
|
|
$(VERBOSE_CMD)$(CC) -c $(CPPFLAGS) -MD -MP -MT '$*.i $*.x' $(CFLAGS) -o $@ $<
|
561 |
|
|
@touch $*.d
|
562 |
|
|
@touch $@
|
563 |
|
|
$(VERBOSE_NL)
|
564 |
|
|
|
565 |
|
|
# Preprocess & assemble: create object files from assembler source files.
|
566 |
|
|
%.o: %.S %.d
|
567 |
|
|
@echo $(MSG_ASSEMBLING)
|
568 |
|
|
$(VERBOSE_CMD)$(CC) -c $(CPPFLAGS) -MD -MP -MT '$*.x' $(ASFLAGS) -o $@ $<
|
569 |
|
|
@touch $*.d
|
570 |
|
|
@touch $@
|
571 |
|
|
$(VERBOSE_NL)
|
572 |
|
|
|
573 |
|
|
.PRECIOUS: $(OBJFILES)
|
574 |
|
|
ifeq ($(TGTTYPE),.a)
|
575 |
|
|
# Archive: create A output file from object files.
|
576 |
|
|
.SECONDARY: $(TARGET)
|
577 |
|
|
$(TARGET): $(OBJFILES)
|
578 |
|
|
@echo $(MSG_ARCHIVING)
|
579 |
|
|
$(VERBOSE_CMD)$(AR) $(ARFLAGS) $@ $(filter %.o,$+)
|
580 |
|
|
$(VERBOSE_NL)
|
581 |
|
|
else
|
582 |
|
|
ifeq ($(TGTTYPE),.elf)
|
583 |
|
|
# Link: create ELF output file from object files.
|
584 |
|
|
.SECONDARY: $(TARGET)
|
585 |
|
|
$(TARGET): $(OBJFILES)
|
586 |
|
|
@echo $(MSG_LINKING)
|
587 |
|
|
$(VERBOSE_CMD)$(CC) $(LDFLAGS) $(filter %.o,$+) $(LOADLIBES) $(LDLIBS) -o $@
|
588 |
|
|
$(VERBOSE_NL)
|
589 |
|
|
endif
|
590 |
|
|
endif
|
591 |
|
|
|
592 |
|
|
# Create extended listing from target output file.
|
593 |
|
|
$(LSS): $(TARGET)
|
594 |
|
|
@echo $(MSG_EXTENDED_LISTING)
|
595 |
|
|
$(VERBOSE_CMD)$(OBJDUMP) -h -S $< > $@
|
596 |
|
|
$(VERBOSE_NL)
|
597 |
|
|
|
598 |
|
|
# Create symbol table from target output file.
|
599 |
|
|
$(SYM): $(TARGET)
|
600 |
|
|
@echo $(MSG_SYMBOL_TABLE)
|
601 |
|
|
$(VERBOSE_CMD)$(NM) -n $< > $@
|
602 |
|
|
$(VERBOSE_NL)
|
603 |
|
|
|
604 |
|
|
ifeq ($(TGTTYPE),.elf)
|
605 |
|
|
|
606 |
|
|
# Create Intel HEX image from ELF output file.
|
607 |
|
|
$(HEX): $(TARGET)
|
608 |
|
|
@echo $(MSG_IHEX_IMAGE)
|
609 |
|
|
$(VERBOSE_CMD)$(OBJCOPY) -O ihex $< $@
|
610 |
|
|
$(VERBOSE_NL)
|
611 |
|
|
|
612 |
|
|
# Create binary image from ELF output file.
|
613 |
|
|
$(BIN): $(TARGET)
|
614 |
|
|
@echo $(MSG_BINARY_IMAGE)
|
615 |
|
|
$(VERBOSE_CMD)$(OBJCOPY) -O binary $< $@
|
616 |
|
|
$(VERBOSE_NL)
|
617 |
|
|
|
618 |
|
|
endif
|