Statistics
| Branch: | Revision:

root / arduino-1.0 / hardware / arduino / firmwares / arduino-usbdfu / makefile @ 58d82c77

History | View | Annotate | Download (21.1 KB)

1
# Hey Emacs, this is a -*- makefile -*-
2
#----------------------------------------------------------------------------
3
# WinAVR Makefile Template written by Eric B. Weddington, J?rg Wunsch, et al.
4
#  >> Modified for use with the LUFA project. <<
5
#
6
# Released to the Public Domain
7
#
8
# Additional material for this makefile was written by:
9
# Peter Fleury
10
# Tim Henigan
11
# Colin O'Flynn
12
# Reiner Patommel
13
# Markus Pfaff
14
# Sander Pool
15
# Frederik Rouleau
16
# Carlos Lamas
17
# Dean Camera
18
# Opendous Inc.
19
# Denver Gingerich
20
#
21
#----------------------------------------------------------------------------
22
# On command line:
23
#
24
# make all = Make software.
25
#
26
# make clean = Clean out built project files.
27
#
28
# make coff = Convert ELF to AVR COFF.
29
#
30
# make extcoff = Convert ELF to AVR Extended COFF.
31
#
32
# make program = Download the hex file to the device, using avrdude.
33
#                Please customize the avrdude settings below first!
34
#
35
# make doxygen = Generate DoxyGen documentation for the project (must have
36
#                DoxyGen installed)
37
#
38
# make debug = Start either simulavr or avarice as specified for debugging, 
39
#              with avr-gdb or avr-insight as the front end for debugging.
40
#
41
# make filename.s = Just compile filename.c into the assembler code only.
42
#
43
# make filename.i = Create a preprocessed source file for use in submitting
44
#                   bug reports to the GCC project.
45
#
46
# To rebuild project do "make clean" then "make all".
47
#----------------------------------------------------------------------------
48

    
49

    
50
# MCU name
51
MCU = atmega8u2
52
MCU_AVRDUDE = at90usb82
53

    
54
# Specify the Arduino model using the assigned PID.  This is used by Descriptors.c
55
#   to set the product descriptor string (for DFU we must use the PID for each
56
#   chip that dfu-bootloader or Flip expect)
57
# Uno PID:
58
ARDUINO_MODEL_PID = 0x0001
59
# Mega 2560 PID:
60
#ARDUINO_MODEL_PID = 0x0010
61

    
62
# Target board (see library "Board Types" documentation, NONE for projects not requiring
63
# LUFA board drivers). If USER is selected, put custom board drivers in a directory called 
64
# "Board" inside the application directory.
65
BOARD  = USER
66

    
67

    
68
# Processor frequency.
69
#     This will define a symbol, F_CPU, in all source code files equal to the 
70
#     processor frequency in Hz. You can then use this symbol in your source code to 
71
#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
72
#     automatically to create a 32-bit value in your source code.
73
#
74
#     This will be an integer division of F_CLOCK below, as it is sourced by
75
#     F_CLOCK after it has run through any CPU prescalers. Note that this value
76
#     does not *change* the processor frequency - it should merely be updated to
77
#     reflect the processor speed set externally so that the code can use accurate
78
#     software delays.
79
F_CPU = 16000000
80

    
81

    
82
# Input clock frequency.
83
#     This will define a symbol, F_CLOCK, in all source code files equal to the 
84
#     input clock frequency (before any prescaling is performed) in Hz. This value may
85
#     differ from F_CPU if prescaling is used on the latter, and is required as the
86
#     raw input clock is fed directly to the PLL sections of the AVR for high speed
87
#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
88
#     at the end, this will be done automatically to create a 32-bit value in your
89
#     source code.
90
#
91
#     If no clock division is performed on the input clock inside the AVR (via the
92
#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
93
F_CLOCK = $(F_CPU)
94

    
95

    
96
# Starting byte address of the bootloader, as a byte address - computed via the formula
97
#   BOOT_START = ((TOTAL_FLASH_BYTES - BOOTLOADER_SECTION_SIZE_BYTES) * 1024)
98
#
99
# Note that the bootloader size and start address given in AVRStudio is in words and not
100
# bytes, and so will need to be doubled to obtain the byte address needed by AVR-GCC.
101
BOOT_START =  0x1000
102

    
103

    
104
# Output format. (can be srec, ihex, binary)
105
FORMAT = ihex
106

    
107

    
108
# Target file name (without extension).
109
TARGET = Arduino-usbdfu
110

    
111

    
112
# Object files directory
113
#     To put object files in current directory, use a dot (.), do NOT make
114
#     this an empty or blank macro!
115
OBJDIR = .
116

    
117

    
118
# Path to the LUFA library
119
LUFA_PATH = ../..
120

    
121

    
122
# LUFA library compile-time options and predefined tokens
123
LUFA_OPTS  = -D USB_DEVICE_ONLY
124
LUFA_OPTS += -D DEVICE_STATE_AS_GPIOR=0
125
LUFA_OPTS += -D CONTROL_ONLY_DEVICE
126
LUFA_OPTS += -D FIXED_CONTROL_ENDPOINT_SIZE=32
127
LUFA_OPTS += -D FIXED_NUM_CONFIGURATIONS=1
128
LUFA_OPTS += -D USE_RAM_DESCRIPTORS
129
LUFA_OPTS += -D USE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"
130
LUFA_OPTS += -D NO_INTERNAL_SERIAL
131
LUFA_OPTS += -D NO_DEVICE_SELF_POWER
132
LUFA_OPTS += -D NO_DEVICE_REMOTE_WAKEUP
133
LUFA_OPTS += -D NO_STREAM_CALLBACKS
134

    
135

    
136
# Create the LUFA source path variables by including the LUFA root makefile
137
include $(LUFA_PATH)/LUFA/makefile
138

    
139

    
140
# List C source files here. (C dependencies are automatically generated.)
141
SRC = $(TARGET).c                                                 \
142
	  Descriptors.c                                               \
143
	  $(LUFA_SRC_USB)                                             \
144

    
145

    
146
# List C++ source files here. (C dependencies are automatically generated.)
147
CPPSRC = 
148

    
149

    
150
# List Assembler source files here.
151
#     Make them always end in a capital .S.  Files ending in a lowercase .s
152
#     will not be considered source files but generated files (assembler
153
#     output from the compiler), and will be deleted upon "make clean"!
154
#     Even though the DOS/Win* filesystem matches both .s and .S the same,
155
#     it will preserve the spelling of the filenames, and gcc itself does
156
#     care about how the name is spelled on its command-line.
157
ASRC =
158

    
159

    
160
# Optimization level, can be [0, 1, 2, 3, s]. 
161
#     0 = turn off optimization. s = optimize for size.
162
#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
163
OPT = s
164

    
165

    
166
# Debugging format.
167
#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
168
#     AVR Studio 4.10 requires dwarf-2.
169
#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
170
DEBUG = dwarf-2
171

    
172

    
173
# List any extra directories to look for include files here.
174
#     Each directory must be seperated by a space.
175
#     Use forward slashes for directory separators.
176
#     For a directory that has spaces, enclose it in quotes.
177
EXTRAINCDIRS = $(LUFA_PATH)/
178

    
179

    
180
# Compiler flag to set the C Standard level.
181
#     c89   = "ANSI" C
182
#     gnu89 = c89 plus GCC extensions
183
#     c99   = ISO C99 standard (not yet fully implemented)
184
#     gnu99 = c99 plus GCC extensions
185
CSTANDARD = -std=c99
186

    
187

    
188
# Place -D or -U options here for C sources
189
CDEFS  = -DF_CPU=$(F_CPU)UL
190
CDEFS += -DARDUINO_MODEL_PID=$(ARDUINO_MODEL_PID)
191
CDEFS += -DF_CLOCK=$(F_CLOCK)UL
192
CDEFS += -DBOARD=BOARD_$(BOARD)
193
CDEFS += -DBOOT_START_ADDR=$(BOOT_START)UL
194
CDEFS += -DTX_RX_LED_PULSE_MS=3
195
CDEFS += $(LUFA_OPTS)
196

    
197

    
198
# Place -D or -U options here for ASM sources
199
ADEFS  = -DF_CPU=$(F_CPU)
200
ADEFS += -DF_CLOCK=$(F_CLOCK)UL
201
ADEFS += -DBOARD=BOARD_$(BOARD)
202
CDEFS += -DBOOT_START_ADDR=$(BOOT_START)UL
203
ADEFS += $(LUFA_OPTS)
204

    
205
# Place -D or -U options here for C++ sources
206
CPPDEFS  = -DF_CPU=$(F_CPU)UL
207
CPPDEFS += -DF_CLOCK=$(F_CLOCK)UL
208
CPPDEFS += -DBOARD=BOARD_$(BOARD)
209
CDEFS += -DBOOT_START_ADDR=$(BOOT_START)UL
210
CPPDEFS += $(LUFA_OPTS)
211
#CPPDEFS += -D__STDC_LIMIT_MACROS
212
#CPPDEFS += -D__STDC_CONSTANT_MACROS
213

    
214

    
215

    
216
#---------------- Compiler Options C ----------------
217
#  -g*:          generate debugging information
218
#  -O*:          optimization level
219
#  -f...:        tuning, see GCC manual and avr-libc documentation
220
#  -Wall...:     warning level
221
#  -Wa,...:      tell GCC to pass this to the assembler.
222
#    -adhlns...: create assembler listing
223
CFLAGS = -g$(DEBUG)
224
CFLAGS += $(CDEFS)
225
CFLAGS += -O$(OPT)
226
CFLAGS += -funsigned-char
227
CFLAGS += -funsigned-bitfields
228
CFLAGS += -ffunction-sections
229
CFLAGS += -fno-inline-small-functions
230
CFLAGS += -fpack-struct
231
CFLAGS += -fshort-enums
232
CFLAGS += -fno-strict-aliasing
233
CFLAGS += -Wall
234
CFLAGS += -Wstrict-prototypes
235
#CFLAGS += -mshort-calls
236
#CFLAGS += -fno-unit-at-a-time
237
#CFLAGS += -Wundef
238
#CFLAGS += -Wunreachable-code
239
#CFLAGS += -Wsign-compare
240
CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)
241
CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
242
CFLAGS += $(CSTANDARD)
243

    
244

    
245
#---------------- Compiler Options C++ ----------------
246
#  -g*:          generate debugging information
247
#  -O*:          optimization level
248
#  -f...:        tuning, see GCC manual and avr-libc documentation
249
#  -Wall...:     warning level
250
#  -Wa,...:      tell GCC to pass this to the assembler.
251
#    -adhlns...: create assembler listing
252
CPPFLAGS = -g$(DEBUG)
253
CPPFLAGS += $(CPPDEFS)
254
CPPFLAGS += -O$(OPT)
255
CPPFLAGS += -funsigned-char
256
CPPFLAGS += -funsigned-bitfields
257
CPPFLAGS += -fpack-struct
258
CPPFLAGS += -fshort-enums
259
CPPFLAGS += -fno-exceptions
260
CPPFLAGS += -Wall
261
CPPFLAGS += -Wundef
262
#CPPFLAGS += -mshort-calls
263
#CPPFLAGS += -fno-unit-at-a-time
264
#CPPFLAGS += -Wstrict-prototypes
265
#CPPFLAGS += -Wunreachable-code
266
#CPPFLAGS += -Wsign-compare
267
CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)
268
CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
269
#CPPFLAGS += $(CSTANDARD)
270

    
271

    
272
#---------------- Assembler Options ----------------
273
#  -Wa,...:   tell GCC to pass this to the assembler.
274
#  -adhlns:   create listing
275
#  -gstabs:   have the assembler create line number information; note that
276
#             for use in COFF files, additional information about filenames
277
#             and function names needs to be present in the assembler source
278
#             files -- see avr-libc docs [FIXME: not yet described there]
279
#  -listing-cont-lines: Sets the maximum number of continuation lines of hex 
280
#       dump that will be displayed for a given single line of source input.
281
ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100
282

    
283

    
284
#---------------- Library Options ----------------
285
# Minimalistic printf version
286
PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
287

    
288
# Floating point printf version (requires MATH_LIB = -lm below)
289
PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
290

    
291
# If this is left blank, then it will use the Standard printf version.
292
PRINTF_LIB = 
293
#PRINTF_LIB = $(PRINTF_LIB_MIN)
294
#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
295

    
296

    
297
# Minimalistic scanf version
298
SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
299

    
300
# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
301
SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
302

    
303
# If this is left blank, then it will use the Standard scanf version.
304
SCANF_LIB = 
305
#SCANF_LIB = $(SCANF_LIB_MIN)
306
#SCANF_LIB = $(SCANF_LIB_FLOAT)
307

    
308

    
309
MATH_LIB = -lm
310

    
311

    
312
# List any extra directories to look for libraries here.
313
#     Each directory must be seperated by a space.
314
#     Use forward slashes for directory separators.
315
#     For a directory that has spaces, enclose it in quotes.
316
EXTRALIBDIRS = 
317

    
318

    
319

    
320
#---------------- External Memory Options ----------------
321

    
322
# 64 KB of external RAM, starting after internal RAM (ATmega128!),
323
# used for variables (.data/.bss) and heap (malloc()).
324
#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
325

    
326
# 64 KB of external RAM, starting after internal RAM (ATmega128!),
327
# only used for heap (malloc()).
328
#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff
329

    
330
EXTMEMOPTS =
331

    
332

    
333

    
334
#---------------- Linker Options ----------------
335
#  -Wl,...:     tell GCC to pass this to linker.
336
#    -Map:      create map file
337
#    --cref:    add cross reference to  map file
338
LDFLAGS  = -Wl,-Map=$(TARGET).map,--cref
339
LDFLAGS += -Wl,--section-start=.text=$(BOOT_START)
340
LDFLAGS += -Wl,--relax 
341
LDFLAGS += -Wl,--gc-sections
342
LDFLAGS += $(EXTMEMOPTS)
343
LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))
344
LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
345
#LDFLAGS += -T linker_script.x
346

    
347

    
348

    
349
#---------------- Programming Options (avrdude) ----------------
350

    
351
# Fuse settings for Arduino Uno DFU bootloader project
352
AVRDUDE_FUSES = -U efuse:w:0xF4:m -U hfuse:w:0xD9:m -U lfuse:w:0xFF:m 
353

    
354
# Lock settings for Arduino Uno DFU bootloader project
355
AVRDUDE_LOCK = -U lock:w:0x0F:m
356

    
357
# Programming hardware
358
# Type: avrdude -c ?
359
# to get a full listing.
360
#
361
AVRDUDE_PROGRAMMER = avrispmkii
362

    
363
# com1 = serial port. Use lpt1 to connect to parallel port.
364
AVRDUDE_PORT = usb
365

    
366
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
367
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
368

    
369
# Uncomment the following if you want avrdude's erase cycle counter.
370
# Note that this counter needs to be initialized first using -Yn,
371
# see avrdude manual.
372
#AVRDUDE_ERASE_COUNTER = -y
373

    
374
# Uncomment the following if you do /not/ wish a verification to be
375
# performed after programming the device.
376
#AVRDUDE_NO_VERIFY = -V
377

    
378
# Increase verbosity level.  Please use this when submitting bug
379
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
380
# to submit bug reports.
381
#AVRDUDE_VERBOSE = -v -v
382

    
383
AVRDUDE_FLAGS = -p $(MCU_AVRDUDE) -F -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
384
AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
385
AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
386
AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
387

    
388

    
389

    
390
#---------------- Debugging Options ----------------
391

    
392
# For simulavr only - target MCU frequency.
393
DEBUG_MFREQ = $(F_CPU)
394

    
395
# Set the DEBUG_UI to either gdb or insight.
396
# DEBUG_UI = gdb
397
DEBUG_UI = insight
398

    
399
# Set the debugging back-end to either avarice, simulavr.
400
DEBUG_BACKEND = avarice
401
#DEBUG_BACKEND = simulavr
402

    
403
# GDB Init Filename.
404
GDBINIT_FILE = __avr_gdbinit
405

    
406
# When using avarice settings for the JTAG
407
JTAG_DEV = /dev/com1
408

    
409
# Debugging port used to communicate between GDB / avarice / simulavr.
410
DEBUG_PORT = 4242
411

    
412
# Debugging host used to communicate between GDB / avarice / simulavr, normally
413
#     just set to localhost unless doing some sort of crazy debugging when 
414
#     avarice is running on a different computer.
415
DEBUG_HOST = localhost
416

    
417

    
418

    
419
#============================================================================
420

    
421

    
422
# Define programs and commands.
423
SHELL = sh
424
CC = avr-gcc
425
OBJCOPY = avr-objcopy
426
OBJDUMP = avr-objdump
427
SIZE = avr-size
428
AR = avr-ar rcs
429
NM = avr-nm
430
AVRDUDE = avrdude
431
REMOVE = rm -f
432
REMOVEDIR = rm -rf
433
COPY = cp
434
WINSHELL = cmd
435

    
436

    
437
# Define Messages
438
# English
439
MSG_ERRORS_NONE = Errors: none
440
MSG_BEGIN = -------- begin --------
441
MSG_END = --------  end  --------
442
MSG_SIZE_BEFORE = Size before: 
443
MSG_SIZE_AFTER = Size after:
444
MSG_COFF = Converting to AVR COFF:
445
MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
446
MSG_FLASH = Creating load file for Flash:
447
MSG_EEPROM = Creating load file for EEPROM:
448
MSG_EXTENDED_LISTING = Creating Extended Listing:
449
MSG_SYMBOL_TABLE = Creating Symbol Table:
450
MSG_LINKING = Linking:
451
MSG_COMPILING = Compiling C:
452
MSG_COMPILING_CPP = Compiling C++:
453
MSG_ASSEMBLING = Assembling:
454
MSG_CLEANING = Cleaning project:
455
MSG_CREATING_LIBRARY = Creating library:
456

    
457

    
458

    
459

    
460
# Define all object files.
461
OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) 
462

    
463
# Define all listing files.
464
LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) 
465

    
466

    
467
# Compiler flags to generate dependency files.
468
GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d
469

    
470

    
471
# Combine all necessary flags and optional flags.
472
# Add target processor to flags.
473
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
474
ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)
475
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
476

    
477

    
478

    
479

    
480

    
481
# Default target.
482
all: begin gccversion sizebefore build sizeafter end
483

    
484
# Change the build target to build a HEX file or a library.
485
build: elf hex eep lss sym
486
#build: lib
487

    
488

    
489
elf: $(TARGET).elf
490
hex: $(TARGET).hex
491
eep: $(TARGET).eep
492
lss: $(TARGET).lss
493
sym: $(TARGET).sym
494
LIBNAME=lib$(TARGET).a
495
lib: $(LIBNAME)
496

    
497

    
498

    
499
# Eye candy.
500
# AVR Studio 3.x does not check make's exit code but relies on
501
# the following magic strings to be generated by the compile job.
502
begin:
503
	@echo
504
	@echo $(MSG_BEGIN)
505

    
506
end:
507
	@echo $(MSG_END)
508
	@echo
509

    
510

    
511
# Display size of file.
512
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
513
ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf
514
MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )
515
FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )
516

    
517

    
518
sizebefore:
519
	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
520
	2>/dev/null; echo; fi
521

    
522
sizeafter:
523
	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
524
	2>/dev/null; echo; fi
525

    
526

    
527

    
528
# Display compiler version information.
529
gccversion : 
530
	@$(CC) --version
531

    
532

    
533
# Program the device.  
534
program: $(TARGET).hex $(TARGET).eep
535
	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) $(AVRDUDE_FUSES) $(AVRDUDE_LOCK)
536

    
537

    
538
# Generate avr-gdb config/init file which does the following:
539
#     define the reset signal, load the target file, connect to target, and set 
540
#     a breakpoint at main().
541
gdb-config: 
542
	@$(REMOVE) $(GDBINIT_FILE)
543
	@echo define reset >> $(GDBINIT_FILE)
544
	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
545
	@echo end >> $(GDBINIT_FILE)
546
	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
547
	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
548
ifeq ($(DEBUG_BACKEND),simulavr)
549
	@echo load  >> $(GDBINIT_FILE)
550
endif
551
	@echo break main >> $(GDBINIT_FILE)
552

    
553
debug: gdb-config $(TARGET).elf
554
ifeq ($(DEBUG_BACKEND), avarice)
555
	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
556
	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
557
	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
558
	@$(WINSHELL) /c pause
559

    
560
else
561
	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
562
	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
563
endif
564
	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
565

    
566

    
567

    
568

    
569
# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
570
COFFCONVERT = $(OBJCOPY) --debugging
571
COFFCONVERT += --change-section-address .data-0x800000
572
COFFCONVERT += --change-section-address .bss-0x800000
573
COFFCONVERT += --change-section-address .noinit-0x800000
574
COFFCONVERT += --change-section-address .eeprom-0x810000
575

    
576

    
577

    
578
coff: $(TARGET).elf
579
	@echo
580
	@echo $(MSG_COFF) $(TARGET).cof
581
	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
582

    
583

    
584
extcoff: $(TARGET).elf
585
	@echo
586
	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
587
	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
588

    
589

    
590

    
591
# Create final output files (.hex, .eep) from ELF output file.
592
%.hex: %.elf
593
	@echo
594
	@echo $(MSG_FLASH) $@
595
	$(OBJCOPY) -O $(FORMAT) -R .eeprom -R .fuse -R .lock $< $@
596

    
597
%.eep: %.elf
598
	@echo
599
	@echo $(MSG_EEPROM) $@
600
	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
601
	--change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0
602

    
603
# Create extended listing file from ELF output file.
604
%.lss: %.elf
605
	@echo
606
	@echo $(MSG_EXTENDED_LISTING) $@
607
	$(OBJDUMP) -h -S -z $< > $@
608

    
609
# Create a symbol table from ELF output file.
610
%.sym: %.elf
611
	@echo
612
	@echo $(MSG_SYMBOL_TABLE) $@
613
	$(NM) -n $< > $@
614

    
615

    
616

    
617
# Create library from object files.
618
.SECONDARY : $(TARGET).a
619
.PRECIOUS : $(OBJ)
620
%.a: $(OBJ)
621
	@echo
622
	@echo $(MSG_CREATING_LIBRARY) $@
623
	$(AR) $@ $(OBJ)
624

    
625

    
626
# Link: create ELF output file from object files.
627
.SECONDARY : $(TARGET).elf
628
.PRECIOUS : $(OBJ)
629
%.elf: $(OBJ)
630
	@echo
631
	@echo $(MSG_LINKING) $@
632
	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
633

    
634

    
635
# Compile: create object files from C source files.
636
$(OBJDIR)/%.o : %.c
637
	@echo
638
	@echo $(MSG_COMPILING) $<
639
	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
640

    
641

    
642
# Compile: create object files from C++ source files.
643
$(OBJDIR)/%.o : %.cpp
644
	@echo
645
	@echo $(MSG_COMPILING_CPP) $<
646
	$(CC) -c $(ALL_CPPFLAGS) $< -o $@ 
647

    
648

    
649
# Compile: create assembler files from C source files.
650
%.s : %.c
651
	$(CC) -S $(ALL_CFLAGS) $< -o $@
652

    
653

    
654
# Compile: create assembler files from C++ source files.
655
%.s : %.cpp
656
	$(CC) -S $(ALL_CPPFLAGS) $< -o $@
657

    
658

    
659
# Assemble: create object files from assembler source files.
660
$(OBJDIR)/%.o : %.S
661
	@echo
662
	@echo $(MSG_ASSEMBLING) $<
663
	$(CC) -c $(ALL_ASFLAGS) $< -o $@
664

    
665

    
666
# Create preprocessed source for use in sending a bug report.
667
%.i : %.c
668
	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
669

    
670

    
671
# Target: clean project.
672
clean: begin clean_list end
673

    
674
clean_list :
675
	@echo
676
	@echo $(MSG_CLEANING)
677
	$(REMOVE) $(TARGET).hex
678
	$(REMOVE) $(TARGET).eep
679
	$(REMOVE) $(TARGET).cof
680
	$(REMOVE) $(TARGET).elf
681
	$(REMOVE) $(TARGET).map
682
	$(REMOVE) $(TARGET).sym
683
	$(REMOVE) $(TARGET).lss
684
	$(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)
685
	$(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)
686
	$(REMOVE) $(SRC:.c=.s)
687
	$(REMOVE) $(SRC:.c=.d)
688
	$(REMOVE) $(SRC:.c=.i)
689
	$(REMOVEDIR) .dep
690

    
691
doxygen:
692
	@echo Generating Project Documentation...
693
	@doxygen Doxygen.conf
694
	@echo Documentation Generation Complete.
695

    
696
clean_doxygen:
697
	rm -rf Documentation
698

    
699
# Create object files directory
700
$(shell mkdir $(OBJDIR) 2>/dev/null)
701

    
702

    
703
# Include the dependency files.
704
-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
705

    
706

    
707
# Listing of phony targets.
708
.PHONY : all begin finish end sizebefore sizeafter gccversion \
709
build elf hex eep lss sym coff extcoff doxygen clean          \
710
clean_list clean_doxygen program debug gdb-config