]> git.sur5r.net Git - freertos/blob - Demo/AVR32_UC3/AT32UC3B/GCC/Makefile
Start to re-arrange files to include FreeRTOS+ in main download.
[freertos] / Demo / AVR32_UC3 / AT32UC3B / GCC / Makefile
1 # 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