Fri, 17 Nov 2017 10:13:31 +0100
proper configuration, homing and planner optimization
2 | 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 |