🩹 Add missing FORCE_SOFT_SPI (#24940)
[Marlin.git] / Marlin / Makefile
blobc72c1d5896077d57ae6d10272f627c630886638b
1 # Marlin Firmware Arduino Project Makefile
3 # Makefile Based on:
4 # Arduino 0011 Makefile
5 # Arduino adaptation by mellis, eighthave, oli.keller
6 # Marlin adaption by Daid
7 # Marlin 2.0 support and RELOC_WORKAROUND by @marcio-ao
9 # This has been tested with Arduino 0022.
11 # This makefile allows you to build sketches from the command line
12 # without the Arduino environment (or Java).
14 # Detailed instructions for using the makefile:
16 # 1. Modify the line containing "ARDUINO_INSTALL_DIR" to point to the directory that
17 # contains the Arduino installation (for example, under macOS, this
18 # might be /Applications/Arduino.app/Contents/Resources/Java).
20 # 2. Modify the line containing "UPLOAD_PORT" to refer to the filename
21 # representing the USB or serial connection to your Arduino board
22 # (e.g. UPLOAD_PORT = /dev/tty.USB0). If the exact name of this file
23 # changes, you can use * as a wild card (e.g. UPLOAD_PORT = /dev/tty.usb*).
25 # 3. Set the line containing "MCU" to match your board's processor. Set
26 # "PROG_MCU" as the AVR part name corresponding to "MCU". You can use the
27 # following command to get a list of correspondences: `avrdude -c alf -p x`
28 # Older boards are atmega8 based, newer ones like Arduino Mini, Bluetooth
29 # or Diecimila have the atmega168. If you're using a LilyPad Arduino,
30 # change F_CPU to 8000000. If you are using Gen7 electronics, you
31 # probably need to use 20000000. Either way, you must regenerate
32 # the speed lookup table with create_speed_lookuptable.py.
34 # 4. Type "make" and press enter to compile/verify your program.
36 # 5. Type "make upload", reset your Arduino board, and press enter to
37 # upload your program to the Arduino board.
39 # Note that all settings at the top of this file can be overridden from
40 # the command line with, for example, "make HARDWARE_MOTHERBOARD=71"
42 # To compile for RAMPS (atmega2560) with Arduino 1.6.9 at root/arduino you would use...
44 # make ARDUINO_VERSION=10609 AVR_TOOLS_PATH=/root/arduino/hardware/tools/avr/bin/ \
45 # HARDWARE_MOTHERBOARD=1200 ARDUINO_INSTALL_DIR=/root/arduino
47 # To compile and upload simply add "upload" to the end of the line...
49 # make ARDUINO_VERSION=10609 AVR_TOOLS_PATH=/root/arduino/hardware/tools/avr/bin/ \
50 # HARDWARE_MOTHERBOARD=1200 ARDUINO_INSTALL_DIR=/root/arduino upload
52 # If uploading doesn't work try adding the parameter "AVRDUDE_PROGRAMMER=wiring" or
53 # start upload manually (using stk500) like so:
55 # avrdude -C /root/arduino/hardware/tools/avr/etc/avrdude.conf -v -p m2560 -c stk500 \
56 # -U flash:w:applet/Marlin.hex:i -P /dev/ttyUSB0
58 # Or, try disconnecting USB to power down and then reconnecting before running avrdude.
61 # This defines the board to compile for (see boards.h for your board's ID)
62 HARDWARE_MOTHERBOARD ?= 1020
64 ifeq ($(OS),Windows_NT)
65 # Windows
66 ARDUINO_INSTALL_DIR ?= ${HOME}/Arduino
67 ARDUINO_USER_DIR ?= ${HOME}/Arduino
68 else
69 UNAME_S := $(shell uname -s)
70 ifeq ($(UNAME_S),Linux)
71 # Linux
72 ARDUINO_INSTALL_DIR ?= /usr/share/arduino
73 ARDUINO_USER_DIR ?= ${HOME}/Arduino
74 endif
75 ifeq ($(UNAME_S),Darwin)
76 # Darwin (macOS)
77 ARDUINO_INSTALL_DIR ?= /Applications/Arduino.app/Contents/Java
78 ARDUINO_USER_DIR ?= ${HOME}/Documents/Arduino
79 AVR_TOOLS_PATH ?= /Applications/Arduino.app/Contents/Java/hardware/tools/avr/bin/
80 endif
81 endif
83 # Arduino source install directory, and version number
84 # On most linuxes this will be /usr/share/arduino
85 ARDUINO_INSTALL_DIR ?= ${HOME}/Arduino
86 ARDUINO_VERSION ?= 106
88 # The installed Libraries are in the User folder
89 ARDUINO_USER_DIR ?= ${HOME}/Arduino
91 # You can optionally set a path to the avr-gcc tools.
92 # Requires a trailing slash. For example, /usr/local/avr-gcc/bin/
93 AVR_TOOLS_PATH ?=
95 # Programmer configuration
96 UPLOAD_RATE ?= 57600
97 AVRDUDE_PROGRAMMER ?= arduino
98 # On most linuxes this will be /dev/ttyACM0 or /dev/ttyACM1
99 UPLOAD_PORT ?= /dev/ttyUSB0
101 # Directory used to build files in, contains all the build files, from object
102 # files to the final hex file on linux it is best to put an absolute path
103 # like /home/username/tmp .
104 BUILD_DIR ?= applet
106 # This defines whether Liquid_TWI2 support will be built
107 LIQUID_TWI2 ?= 0
109 # This defines if Wire is needed
110 WIRE ?= 0
112 # This defines if Tone is needed (i.e., SPEAKER is defined in Configuration.h)
113 # Disabling this (and SPEAKER) saves approximately 350 bytes of memory.
114 TONE ?= 1
116 # This defines if U8GLIB is needed (may require RELOC_WORKAROUND)
117 U8GLIB ?= 0
119 # This defines whether to include the Trinamic TMCStepper library
120 TMC ?= 0
122 # This defines whether to include the AdaFruit NeoPixel library
123 NEOPIXEL ?= 0
125 ############
126 # Try to automatically determine whether RELOC_WORKAROUND is needed based
127 # on GCC versions:
128 # https://www.avrfreaks.net/comment/1789106#comment-1789106
130 CC_MAJ:=$(shell $(CC) -dM -E - < /dev/null | grep __GNUC__ | cut -f3 -d\ )
131 CC_MIN:=$(shell $(CC) -dM -E - < /dev/null | grep __GNUC_MINOR__ | cut -f3 -d\ )
132 CC_PATCHLEVEL:=$(shell $(CC) -dM -E - < /dev/null | grep __GNUC_PATCHLEVEL__ | cut -f3 -d\ )
133 CC_VER:=$(shell echo $$(( $(CC_MAJ) * 10000 + $(CC_MIN) * 100 + $(CC_PATCHLEVEL) )))
134 ifeq ($(shell test $(CC_VER) -lt 40901 && echo 1),1)
135 $(warning This GCC version $(CC_VER) is likely broken. Enabling relocation workaround.)
136 RELOC_WORKAROUND = 1
137 endif
139 ############################################################################
140 # Below here nothing should be changed...
142 # Here the Arduino variant is selected by the board type
143 # HARDWARE_VARIANT = "arduino", "Sanguino", "Gen7", ...
144 # MCU = "atmega1280", "Mega2560", "atmega2560", "atmega644p", ...
146 ifeq ($(HARDWARE_MOTHERBOARD),0)
148 # No motherboard selected
151 # RAMPS 1.3 / 1.4 - ATmega1280, ATmega2560
154 # MEGA/RAMPS up to 1.2
155 else ifeq ($(HARDWARE_MOTHERBOARD),1000)
157 # RAMPS 1.3 (Power outputs: Hotend, Fan, Bed)
158 else ifeq ($(HARDWARE_MOTHERBOARD),1010)
159 # RAMPS 1.3 (Power outputs: Hotend0, Hotend1, Bed)
160 else ifeq ($(HARDWARE_MOTHERBOARD),1011)
161 # RAMPS 1.3 (Power outputs: Hotend, Fan0, Fan1)
162 else ifeq ($(HARDWARE_MOTHERBOARD),1012)
163 # RAMPS 1.3 (Power outputs: Hotend0, Hotend1, Fan)
164 else ifeq ($(HARDWARE_MOTHERBOARD),1013)
165 # RAMPS 1.3 (Power outputs: Spindle, Controller Fan)
166 else ifeq ($(HARDWARE_MOTHERBOARD),1014)
168 # RAMPS 1.4 (Power outputs: Hotend, Fan, Bed)
169 else ifeq ($(HARDWARE_MOTHERBOARD),1020)
170 # RAMPS 1.4 (Power outputs: Hotend0, Hotend1, Bed)
171 else ifeq ($(HARDWARE_MOTHERBOARD),1021)
172 # RAMPS 1.4 (Power outputs: Hotend, Fan0, Fan1)
173 else ifeq ($(HARDWARE_MOTHERBOARD),1022)
174 # RAMPS 1.4 (Power outputs: Hotend0, Hotend1, Fan)
175 else ifeq ($(HARDWARE_MOTHERBOARD),1023)
176 # RAMPS 1.4 (Power outputs: Spindle, Controller Fan)
177 else ifeq ($(HARDWARE_MOTHERBOARD),1024)
179 # RAMPS Plus 3DYMY (Power outputs: Hotend, Fan, Bed)
180 else ifeq ($(HARDWARE_MOTHERBOARD),1030)
181 # RAMPS Plus 3DYMY (Power outputs: Hotend0, Hotend1, Bed)
182 else ifeq ($(HARDWARE_MOTHERBOARD),1031)
183 # RAMPS Plus 3DYMY (Power outputs: Hotend, Fan0, Fan1)
184 else ifeq ($(HARDWARE_MOTHERBOARD),1032)
185 # RAMPS Plus 3DYMY (Power outputs: Hotend0, Hotend1, Fan)
186 else ifeq ($(HARDWARE_MOTHERBOARD),1033)
187 # RAMPS Plus 3DYMY (Power outputs: Spindle, Controller Fan)
188 else ifeq ($(HARDWARE_MOTHERBOARD),1034)
191 # RAMPS Derivatives - ATmega1280, ATmega2560
194 # 3Drag Controller
195 else ifeq ($(HARDWARE_MOTHERBOARD),1100)
196 # Velleman K8200 Controller (derived from 3Drag Controller)
197 else ifeq ($(HARDWARE_MOTHERBOARD),1101)
198 # Velleman K8400 Controller (derived from 3Drag Controller)
199 else ifeq ($(HARDWARE_MOTHERBOARD),1102)
200 # Velleman K8600 Controller (Vertex Nano)
201 else ifeq ($(HARDWARE_MOTHERBOARD),1103)
202 # Velleman K8800 Controller (Vertex Delta)
203 else ifeq ($(HARDWARE_MOTHERBOARD),1104)
204 # 2PrintBeta BAM&DICE with STK drivers
205 else ifeq ($(HARDWARE_MOTHERBOARD),1105)
206 # 2PrintBeta BAM&DICE Due with STK drivers
207 else ifeq ($(HARDWARE_MOTHERBOARD),1106)
208 # MKS BASE v1.0
209 else ifeq ($(HARDWARE_MOTHERBOARD),1107)
210 # MKS BASE v1.4 with Allegro A4982 stepper drivers
211 else ifeq ($(HARDWARE_MOTHERBOARD),1108)
212 # MKS BASE v1.5 with Allegro A4982 stepper drivers
213 else ifeq ($(HARDWARE_MOTHERBOARD),1109)
214 # MKS BASE v1.6 with Allegro A4982 stepper drivers
215 else ifeq ($(HARDWARE_MOTHERBOARD),1110)
216 # MKS BASE 1.0 with Heroic HR4982 stepper drivers
217 else ifeq ($(HARDWARE_MOTHERBOARD),1111)
218 # MKS GEN v1.3 or 1.4
219 else ifeq ($(HARDWARE_MOTHERBOARD),1112)
220 # MKS GEN L
221 else ifeq ($(HARDWARE_MOTHERBOARD),1113)
222 # BigTreeTech or BIQU KFB2.0
223 else ifeq ($(HARDWARE_MOTHERBOARD),1114)
224 # zrib V2.0 (Chinese RAMPS replica)
225 else ifeq ($(HARDWARE_MOTHERBOARD),1115)
226 # zrib V5.2 (Chinese RAMPS replica)
227 else ifeq ($(HARDWARE_MOTHERBOARD),1116)
228 # Felix 2.0+ Electronics Board (RAMPS like)
229 else ifeq ($(HARDWARE_MOTHERBOARD),1117)
230 # Invent-A-Part RigidBoard
231 else ifeq ($(HARDWARE_MOTHERBOARD),1118)
232 # Invent-A-Part RigidBoard V2
233 else ifeq ($(HARDWARE_MOTHERBOARD),1119)
234 # Sainsmart 2-in-1 board
235 else ifeq ($(HARDWARE_MOTHERBOARD),1120)
236 # Ultimaker
237 else ifeq ($(HARDWARE_MOTHERBOARD),1121)
238 # Ultimaker (Older electronics. Pre 1.5.4. This is rare)
239 else ifeq ($(HARDWARE_MOTHERBOARD),1122)
240 MCU ?= atmega1280
241 PROG_MCU ?= m1280
242 # Azteeg X3
243 else ifeq ($(HARDWARE_MOTHERBOARD),1123)
244 # Azteeg X3 Pro
245 else ifeq ($(HARDWARE_MOTHERBOARD),1124)
246 # Ultimainboard 2.x (Uses TEMP_SENSOR 20)
247 else ifeq ($(HARDWARE_MOTHERBOARD),1125)
248 # Rumba
249 else ifeq ($(HARDWARE_MOTHERBOARD),1126)
250 # Raise3D N series Rumba derivative
251 else ifeq ($(HARDWARE_MOTHERBOARD),1127)
252 # Rapide Lite 200 (v1, low-cost RUMBA clone with drv)
253 else ifeq ($(HARDWARE_MOTHERBOARD),1128)
254 # Formbot T-Rex 2 Plus
255 else ifeq ($(HARDWARE_MOTHERBOARD),1129)
256 # Formbot T-Rex 3
257 else ifeq ($(HARDWARE_MOTHERBOARD),1130)
258 # Formbot Raptor
259 else ifeq ($(HARDWARE_MOTHERBOARD),1131)
260 # Formbot Raptor 2
261 else ifeq ($(HARDWARE_MOTHERBOARD),1132)
262 # bq ZUM Mega 3D
263 else ifeq ($(HARDWARE_MOTHERBOARD),1133)
264 # MakeBoard Mini v2.1.2 by MicroMake
265 else ifeq ($(HARDWARE_MOTHERBOARD),1134)
266 # TriGorilla Anycubic version 1.3-based on RAMPS EFB
267 else ifeq ($(HARDWARE_MOTHERBOARD),1135)
268 # ... Ver 1.4
269 else ifeq ($(HARDWARE_MOTHERBOARD),1136)
270 # ... Rev 1.1 (new servo pin order)
271 else ifeq ($(HARDWARE_MOTHERBOARD),1137)
272 # Creality: Ender-4, CR-8
273 else ifeq ($(HARDWARE_MOTHERBOARD),1138)
274 # Creality: CR10S, CR20, CR-X
275 else ifeq ($(HARDWARE_MOTHERBOARD),1139)
276 # Dagoma F5
277 else ifeq ($(HARDWARE_MOTHERBOARD),1140)
278 # FYSETC F6 1.3
279 else ifeq ($(HARDWARE_MOTHERBOARD),1141)
280 # FYSETC F6 1.4
281 else ifeq ($(HARDWARE_MOTHERBOARD),1142)
282 # Wanhao Duplicator i3 Plus
283 else ifeq ($(HARDWARE_MOTHERBOARD),1143)
284 # VORON Design
285 else ifeq ($(HARDWARE_MOTHERBOARD),1144)
286 # Tronxy TRONXY-V3-1.0
287 else ifeq ($(HARDWARE_MOTHERBOARD),1145)
288 # Z-Bolt X Series
289 else ifeq ($(HARDWARE_MOTHERBOARD),1146)
290 # TT OSCAR
291 else ifeq ($(HARDWARE_MOTHERBOARD),1147)
292 # Overlord/Overlord Pro
293 else ifeq ($(HARDWARE_MOTHERBOARD),1148)
294 # ADIMLab Gantry v1
295 else ifeq ($(HARDWARE_MOTHERBOARD),1149)
296 # ADIMLab Gantry v2
297 else ifeq ($(HARDWARE_MOTHERBOARD),1150)
298 # BIQU Tango V1
299 else ifeq ($(HARDWARE_MOTHERBOARD),1151)
300 # MKS GEN L V2
301 else ifeq ($(HARDWARE_MOTHERBOARD),1152)
302 # MKS GEN L V2.1
303 else ifeq ($(HARDWARE_MOTHERBOARD),1153)
304 # Copymaster 3D
305 else ifeq ($(HARDWARE_MOTHERBOARD),1154)
306 # Ortur 4
307 else ifeq ($(HARDWARE_MOTHERBOARD),1155)
308 # Tenlog D3 Hero IDEX printer
309 else ifeq ($(HARDWARE_MOTHERBOARD),1156)
310 # Ramps S 1.2 by Sakul.cz (Power outputs: Hotend0, Hotend1, Fan, Bed)
311 else ifeq ($(HARDWARE_MOTHERBOARD),1157)
312 # Ramps S 1.2 by Sakul.cz (Power outputs: Hotend0, Hotend1, Hotend2, Bed)
313 else ifeq ($(HARDWARE_MOTHERBOARD),1158)
314 # Ramps S 1.2 by Sakul.cz (Power outputs: Hotend, Fan0, Fan1, Bed)
315 else ifeq ($(HARDWARE_MOTHERBOARD),1159)
316 # Longer LK1 PRO / Alfawise U20 Pro (PRO version)
317 else ifeq ($(HARDWARE_MOTHERBOARD),1160)
318 # Longer LKx PRO / Alfawise Uxx Pro (PRO version)
319 else ifeq ($(HARDWARE_MOTHERBOARD),1161)
320 # Zonestar zrib V5.3 (Chinese RAMPS replica)
321 else ifeq ($(HARDWARE_MOTHERBOARD),1162)
322 # Pxmalion Core I3
323 else ifeq ($(HARDWARE_MOTHERBOARD),1163)
326 # RAMBo and derivatives
329 # Rambo
330 else ifeq ($(HARDWARE_MOTHERBOARD),1200)
331 # Mini-Rambo
332 else ifeq ($(HARDWARE_MOTHERBOARD),1201)
333 # Mini-Rambo 1.0a
334 else ifeq ($(HARDWARE_MOTHERBOARD),1202)
335 # Einsy Rambo
336 else ifeq ($(HARDWARE_MOTHERBOARD),1203)
337 # Einsy Retro
338 else ifeq ($(HARDWARE_MOTHERBOARD),1204)
339 # abee Scoovo X9H
340 else ifeq ($(HARDWARE_MOTHERBOARD),1205)
341 # Rambo ThinkerV2
342 else ifeq ($(HARDWARE_MOTHERBOARD),1206)
345 # Other ATmega1280, ATmega2560
348 # Cartesio CN Controls V11
349 else ifeq ($(HARDWARE_MOTHERBOARD),1300)
350 # Cartesio CN Controls V12
351 else ifeq ($(HARDWARE_MOTHERBOARD),1301)
352 # Cartesio CN Controls V15
353 else ifeq ($(HARDWARE_MOTHERBOARD),1302)
354 # Cheaptronic v1.0
355 else ifeq ($(HARDWARE_MOTHERBOARD),1303)
356 # Cheaptronic v2.0
357 else ifeq ($(HARDWARE_MOTHERBOARD),1304)
358 # Makerbot Mightyboard Revision E
359 else ifeq ($(HARDWARE_MOTHERBOARD),1305)
360 # Megatronics
361 else ifeq ($(HARDWARE_MOTHERBOARD),1306)
362 # Megatronics v2.0
363 else ifeq ($(HARDWARE_MOTHERBOARD),1307)
364 # Megatronics v3.0
365 else ifeq ($(HARDWARE_MOTHERBOARD),1308)
366 # Megatronics v3.1
367 else ifeq ($(HARDWARE_MOTHERBOARD),1309)
368 # Megatronics v3.2
369 else ifeq ($(HARDWARE_MOTHERBOARD),1310)
370 # Elefu Ra Board (v3)
371 else ifeq ($(HARDWARE_MOTHERBOARD),1311)
372 # Leapfrog
373 else ifeq ($(HARDWARE_MOTHERBOARD),1312)
374 # Mega controller
375 else ifeq ($(HARDWARE_MOTHERBOARD),1313)
376 # Geeetech GT2560 Rev A
377 else ifeq ($(HARDWARE_MOTHERBOARD),1314)
378 # Geeetech GT2560 Rev A+ (with auto level probe)
379 else ifeq ($(HARDWARE_MOTHERBOARD),1315)
380 # Geeetech GT2560 Rev B
381 else ifeq ($(HARDWARE_MOTHERBOARD),1316)
382 # Geeetech GT2560 Rev B for A10(M/T/D)
383 else ifeq ($(HARDWARE_MOTHERBOARD),1317)
384 # Geeetech GT2560 Rev B for A10(M/T/D)
385 else ifeq ($(HARDWARE_MOTHERBOARD),1318)
386 # Geeetech GT2560 Rev B for Mecreator2
387 else ifeq ($(HARDWARE_MOTHERBOARD),1319)
388 # Geeetech GT2560 Rev B for A20(M/T/D)
389 else ifeq ($(HARDWARE_MOTHERBOARD),1320)
390 # Einstart retrofit
391 else ifeq ($(HARDWARE_MOTHERBOARD),1321)
392 # Wanhao 0ne+ i3 Mini
393 else ifeq ($(HARDWARE_MOTHERBOARD),1322)
394 # Leapfrog Xeed 2015
395 else ifeq ($(HARDWARE_MOTHERBOARD),1323)
396 # PICA Shield (original version)
397 else ifeq ($(HARDWARE_MOTHERBOARD),1324)
398 # PICA Shield (rev C or later)
399 else ifeq ($(HARDWARE_MOTHERBOARD),1325)
400 # Intamsys 4.0 (Funmat HT)
401 else ifeq ($(HARDWARE_MOTHERBOARD),1326)
402 # Malyan M180 Mainboard Version 2 (no display function, direct G-code only)
403 else ifeq ($(HARDWARE_MOTHERBOARD),1327)
404 # Geeetech GT2560 Rev B for A20(M/T/D)
405 else ifeq ($(HARDWARE_MOTHERBOARD),1328)
406 # Mega controller & Protoneer CNC Shield V3.00
407 else ifeq ($(HARDWARE_MOTHERBOARD),1329)
410 # ATmega1281, ATmega2561
413 # Minitronics v1.0/1.1
414 else ifeq ($(HARDWARE_MOTHERBOARD),1400)
415 MCU ?= atmega1281
416 PROG_MCU ?= m1281
417 # Silvergate v1.0
418 else ifeq ($(HARDWARE_MOTHERBOARD),1401)
419 MCU ?= atmega1281
420 PROG_MCU ?= m1281
423 # Sanguinololu and Derivatives - ATmega644P, ATmega1284P
426 # Sanguinololu < 1.2
427 else ifeq ($(HARDWARE_MOTHERBOARD),1500)
428 HARDWARE_VARIANT ?= Sanguino
429 MCU ?= atmega644p
430 PROG_MCU ?= m644p
431 # Sanguinololu 1.2 and above
432 else ifeq ($(HARDWARE_MOTHERBOARD),1501)
433 HARDWARE_VARIANT ?= Sanguino
434 MCU ?= atmega644p
435 PROG_MCU ?= m644p
436 # Melzi
437 else ifeq ($(HARDWARE_MOTHERBOARD),1502)
438 HARDWARE_VARIANT ?= Sanguino
439 MCU ?= atmega644p
440 PROG_MCU ?= m644p
441 # Melzi V2.0
442 else ifeq ($(HARDWARE_MOTHERBOARD),1503)
443 HARDWARE_VARIANT ?= Sanguino
444 MCU ?= atmega1284p
445 PROG_MCU ?= m1284p
446 # Melzi with ATmega1284 (MaKr3d version)
447 else ifeq ($(HARDWARE_MOTHERBOARD),1504)
448 HARDWARE_VARIANT ?= Sanguino
449 MCU ?= atmega1284p
450 PROG_MCU ?= m1284p
451 # Melzi Creality3D board (for CR-10 etc)
452 else ifeq ($(HARDWARE_MOTHERBOARD),1505)
453 HARDWARE_VARIANT ?= Sanguino
454 MCU ?= atmega1284p
455 PROG_MCU ?= m1284p
456 # Melzi Malyan M150 board
457 else ifeq ($(HARDWARE_MOTHERBOARD),1506)
458 HARDWARE_VARIANT ?= Sanguino
459 MCU ?= atmega1284p
460 PROG_MCU ?= m1284p
461 # Tronxy X5S
462 else ifeq ($(HARDWARE_MOTHERBOARD),1507)
463 HARDWARE_VARIANT ?= Sanguino
464 MCU ?= atmega1284p
465 PROG_MCU ?= m1284p
466 # STB V1.1
467 else ifeq ($(HARDWARE_MOTHERBOARD),1508)
468 HARDWARE_VARIANT ?= Sanguino
469 MCU ?= atmega1284p
470 PROG_MCU ?= m1284p
471 # Azteeg X1
472 else ifeq ($(HARDWARE_MOTHERBOARD),1509)
473 HARDWARE_VARIANT ?= Sanguino
474 MCU ?= atmega1284p
475 PROG_MCU ?= m1284p
476 # Anet 1.0 (Melzi clone)
477 else ifeq ($(HARDWARE_MOTHERBOARD),1510)
478 HARDWARE_VARIANT ?= Sanguino
479 MCU ?= atmega1284p
480 PROG_MCU ?= m1284p
481 # ZoneStar ZMIB V2
482 else ifeq ($(HARDWARE_MOTHERBOARD),1511)
483 HARDWARE_VARIANT ?= Sanguino
484 MCU ?= atmega1284p
485 PROG_MCU ?= m1284p
488 # Other ATmega644P, ATmega644, ATmega1284P
491 # Gen3 Monolithic Electronics
492 else ifeq ($(HARDWARE_MOTHERBOARD),1600)
493 HARDWARE_VARIANT ?= Sanguino
494 MCU ?= atmega644p
495 PROG_MCU ?= m644p
496 # Gen3+
497 else ifeq ($(HARDWARE_MOTHERBOARD),1601)
498 HARDWARE_VARIANT ?= Sanguino
499 MCU ?= atmega644p
500 PROG_MCU ?= m644p
501 # Gen6
502 else ifeq ($(HARDWARE_MOTHERBOARD),1602)
503 HARDWARE_VARIANT ?= Gen6
504 MCU ?= atmega644p
505 PROG_MCU ?= m644p
506 # Gen6 deluxe
507 else ifeq ($(HARDWARE_MOTHERBOARD),1603)
508 HARDWARE_VARIANT ?= Gen6
509 MCU ?= atmega644p
510 PROG_MCU ?= m644p
511 # Gen7 custom (Alfons3 Version)
512 else ifeq ($(HARDWARE_MOTHERBOARD),1604)
513 HARDWARE_VARIANT ?= Gen7
514 MCU ?= atmega644
515 PROG_MCU ?= m644
516 F_CPU ?= 20000000
517 # Gen7 v1.1, v1.2
518 else ifeq ($(HARDWARE_MOTHERBOARD),1605)
519 HARDWARE_VARIANT ?= Gen7
520 MCU ?= atmega644p
521 PROG_MCU ?= m644p
522 F_CPU ?= 20000000
523 # Gen7 v1.3
524 else ifeq ($(HARDWARE_MOTHERBOARD),1606)
525 HARDWARE_VARIANT ?= Gen7
526 MCU ?= atmega644p
527 PROG_MCU ?= m644p
528 F_CPU ?= 20000000
529 # Gen7 v1.4
530 else ifeq ($(HARDWARE_MOTHERBOARD),1607)
531 HARDWARE_VARIANT ?= Gen7
532 MCU ?= atmega1284p
533 PROG_MCU ?= m1284p
534 F_CPU ?= 20000000
535 # Alpha OMCA board
536 else ifeq ($(HARDWARE_MOTHERBOARD),1608)
537 HARDWARE_VARIANT ?= SanguinoA
538 MCU ?= atmega644
539 PROG_MCU ?= m644
540 # Final OMCA board
541 else ifeq ($(HARDWARE_MOTHERBOARD),1609)
542 HARDWARE_VARIANT ?= Sanguino
543 MCU ?= atmega644p
544 PROG_MCU ?= m644p
545 # Sethi 3D_1
546 else ifeq ($(HARDWARE_MOTHERBOARD),1610)
547 HARDWARE_VARIANT ?= Sanguino
548 MCU ?= atmega644p
549 PROG_MCU ?= m644p
552 # Teensyduino - AT90USB1286, AT90USB1286P
555 # Teensylu
556 else ifeq ($(HARDWARE_MOTHERBOARD),1700)
557 HARDWARE_VARIANT ?= Teensy
558 MCU ?= at90usb1286
559 PROG_MCU ?= usb1286
560 # Printrboard (AT90USB1286)
561 else ifeq ($(HARDWARE_MOTHERBOARD),1701)
562 HARDWARE_VARIANT ?= Teensy
563 MCU ?= at90usb1286
564 PROG_MCU ?= usb1286
565 # Printrboard Revision F (AT90USB1286)
566 else ifeq ($(HARDWARE_MOTHERBOARD),1702)
567 HARDWARE_VARIANT ?= Teensy
568 MCU ?= at90usb1286
569 PROG_MCU ?= usb1286
570 # Brainwave (AT90USB646)
571 else ifeq ($(HARDWARE_MOTHERBOARD),1703)
572 HARDWARE_VARIANT ?= Teensy
573 MCU ?= at90usb646
574 PROG_MCU ?= usb646
575 # Brainwave Pro (AT90USB1286)
576 else ifeq ($(HARDWARE_MOTHERBOARD),1704)
577 HARDWARE_VARIANT ?= Teensy
578 MCU ?= at90usb1286
579 PROG_MCU ?= usb1286
580 # SAV Mk-I (AT90USB1286)
581 else ifeq ($(HARDWARE_MOTHERBOARD),1705)
582 HARDWARE_VARIANT ?= Teensy
583 MCU ?= at90usb1286
584 PROG_MCU ?= usb1286
585 # Teensy++2.0 (AT90USB1286)
586 else ifeq ($(HARDWARE_MOTHERBOARD),1706)
587 HARDWARE_VARIANT ?= Teensy
588 MCU ?= at90usb1286
589 PROG_MCU ?= usb1286
590 # 5DPrint D8 Driver Board
591 else ifeq ($(HARDWARE_MOTHERBOARD),1707)
592 HARDWARE_VARIANT ?= Teensy
593 MCU ?= at90usb1286
594 PROG_MCU ?= usb1286
596 # UltiMachine Archim1 (with DRV8825 drivers)
597 else ifeq ($(HARDWARE_MOTHERBOARD),3023)
598 HARDWARE_VARIANT ?= archim
599 MCPU = cortex-m3
600 F_CPU = 84000000
601 IS_MCU = 0
602 # UltiMachine Archim2 (with TMC2130 drivers)
603 else ifeq ($(HARDWARE_MOTHERBOARD),3024)
604 HARDWARE_VARIANT ?= archim
605 MCPU = cortex-m3
606 F_CPU = 84000000
607 IS_MCU = 0
608 endif
610 # Be sure to regenerate speed_lookuptable.h with create_speed_lookuptable.py
611 # if you are setting this to something other than 16MHz
612 # Do not put the UL suffix, it's done later on.
613 # Set to 16Mhz if not yet set.
614 F_CPU ?= 16000000
616 # Set to microcontroller if IS_MCU not yet set
617 IS_MCU ?= 1
619 ifeq ($(IS_MCU),1)
620 # Set to arduino, ATmega2560 if not yet set.
621 HARDWARE_VARIANT ?= arduino
622 MCU ?= atmega2560
623 PROG_MCU ?= m2560
625 TOOL_PREFIX = avr
626 MCU_FLAGS = -mmcu=$(MCU)
627 SIZE_FLAGS = --mcu=$(MCU) -C
628 else
629 TOOL_PREFIX = arm-none-eabi
630 CPU_FLAGS = -mthumb -mcpu=$(MCPU)
631 SIZE_FLAGS = -A
632 endif
634 # Arduino contained the main source code for the Arduino
635 # Libraries, the "hardware variant" are for boards
636 # that derives from that, and their source are present in
637 # the main Marlin source directory
639 TARGET = $(notdir $(CURDIR))
641 # VPATH tells make to look into these directory for source files,
642 # there is no need to specify explicit pathnames as long as the
643 # directory is added here
645 # The Makefile for previous versions of Marlin used VPATH for all
646 # source files, but for Marlin 2.0, we use VPATH only for arduino
647 # library files.
649 VPATH = .
650 VPATH += $(BUILD_DIR)
651 VPATH += $(HARDWARE_SRC)
653 ifeq ($(HARDWARE_VARIANT), $(filter $(HARDWARE_VARIANT),arduino Teensy Sanguino))
654 # Old libraries (avr-core 1.6.21 < / Arduino < 1.6.8)
655 VPATH += $(ARDUINO_INSTALL_DIR)/hardware/arduino/avr/libraries/SPI
656 # New libraries (avr-core >= 1.6.21 / Arduino >= 1.6.8)
657 VPATH += $(ARDUINO_INSTALL_DIR)/hardware/arduino/avr/libraries/SPI/src
658 endif
660 ifeq ($(IS_MCU),1)
661 VPATH += $(ARDUINO_INSTALL_DIR)/hardware/arduino/avr/cores/arduino
663 # Old libraries (avr-core 1.6.21 < / Arduino < 1.6.8)
664 VPATH += $(ARDUINO_INSTALL_DIR)/hardware/arduino/avr/libraries/SPI
665 VPATH += $(ARDUINO_INSTALL_DIR)/hardware/arduino/avr/libraries/SoftwareSerial
666 # New libraries (avr-core >= 1.6.21 / Arduino >= 1.6.8)
667 VPATH += $(ARDUINO_INSTALL_DIR)/hardware/arduino/avr/libraries/SPI/src
668 VPATH += $(ARDUINO_INSTALL_DIR)/hardware/arduino/avr/libraries/SoftwareSerial/src
669 endif
671 VPATH += $(ARDUINO_INSTALL_DIR)/libraries/LiquidCrystal/src
673 ifeq ($(LIQUID_TWI2), 1)
674 WIRE = 1
675 VPATH += $(ARDUINO_INSTALL_DIR)/libraries/LiquidTWI2
676 endif
677 ifeq ($(WIRE), 1)
678 # Old libraries (avr-core 1.6.21 / Arduino < 1.6.8)
679 VPATH += $(ARDUINO_INSTALL_DIR)/hardware/arduino/avr/libraries/Wire
680 VPATH += $(ARDUINO_INSTALL_DIR)/hardware/arduino/avr/libraries/Wire/utility
681 # New libraries (avr-core >= 1.6.21 / Arduino >= 1.6.8)
682 VPATH += $(ARDUINO_INSTALL_DIR)/hardware/arduino/avr/libraries/Wire/src
683 VPATH += $(ARDUINO_INSTALL_DIR)/hardware/arduino/avr/libraries/Wire/src/utility
684 endif
685 ifeq ($(NEOPIXEL), 1)
686 VPATH += $(ARDUINO_INSTALL_DIR)/libraries/Adafruit_NeoPixel
687 endif
688 ifeq ($(U8GLIB), 1)
689 VPATH += $(ARDUINO_INSTALL_DIR)/libraries/U8glib
690 VPATH += $(ARDUINO_INSTALL_DIR)/libraries/U8glib/csrc
691 VPATH += $(ARDUINO_INSTALL_DIR)/libraries/U8glib/cppsrc
692 VPATH += $(ARDUINO_INSTALL_DIR)/libraries/U8glib/fntsrc
693 endif
694 ifeq ($(TMC), 1)
695 VPATH += $(ARDUINO_INSTALL_DIR)/libraries/TMCStepper/src
696 VPATH += $(ARDUINO_INSTALL_DIR)/libraries/TMCStepper/src/source
697 endif
699 ifeq ($(HARDWARE_VARIANT), arduino)
700 HARDWARE_SUB_VARIANT ?= mega
701 VPATH += $(ARDUINO_INSTALL_DIR)/hardware/arduino/avr/variants/$(HARDWARE_SUB_VARIANT)
702 else ifeq ($(HARDWARE_VARIANT), Sanguino)
703 VPATH += $(ARDUINO_INSTALL_DIR)/hardware/marlin/avr/variants/sanguino
704 else ifeq ($(HARDWARE_VARIANT), archim)
705 VPATH += $(ARDUINO_INSTALL_DIR)/packages/ultimachine/hardware/sam/1.6.9-b/system/libsam
706 VPATH += $(ARDUINO_INSTALL_DIR)/packages/ultimachine/hardware/sam/1.6.9-b/system/CMSIS/CMSIS/Include/
707 VPATH += $(ARDUINO_INSTALL_DIR)/packages/ultimachine/hardware/sam/1.6.9-b/system/CMSIS/Device/ATMEL/
708 VPATH += $(ARDUINO_INSTALL_DIR)/packages/ultimachine/hardware/sam/1.6.9-b/cores/arduino
709 VPATH += $(ARDUINO_INSTALL_DIR)/packages/ultimachine/hardware/sam/1.6.9-b/cores/arduino/avr
710 VPATH += $(ARDUINO_INSTALL_DIR)/packages/ultimachine/hardware/sam/1.6.9-b/cores/arduino/USB
711 VPATH += $(ARDUINO_INSTALL_DIR)/packages/ultimachine/hardware/sam/1.6.9-b/libraries/Wire/src
712 VPATH += $(ARDUINO_INSTALL_DIR)/packages/ultimachine/hardware/sam/1.6.9-b/libraries/SPI/src
713 VPATH += $(ARDUINO_INSTALL_DIR)/packages/ultimachine/hardware/sam/1.6.9-b/libraries/U8glib/src/clib
714 VPATH += $(ARDUINO_INSTALL_DIR)/packages/ultimachine/hardware/sam/1.6.9-b/variants/archim
715 LDSCRIPT = $(ARDUINO_INSTALL_DIR)/packages/ultimachine/hardware/sam/1.6.9-b/variants/archim/linker_scripts/gcc/flash.ld
716 LDLIBS = $(ARDUINO_INSTALL_DIR)/packages/ultimachine/hardware/sam/1.6.9-b/variants/archim/libsam_sam3x8e_gcc_rel.a
717 else
718 HARDWARE_SUB_VARIANT ?= standard
719 VPATH += $(ARDUINO_INSTALL_DIR)/hardware/$(HARDWARE_VARIANT)/variants/$(HARDWARE_SUB_VARIANT)
720 endif
722 LIB_SRC = wiring.c \
723 wiring_analog.c wiring_digital.c \
724 wiring_shift.c WInterrupts.c hooks.c
726 ifeq ($(HARDWARE_VARIANT), archim)
727 LIB_ASRC += wiring_pulse_asm.S
728 else
729 LIB_SRC += wiring_pulse.c
730 endif
732 ifeq ($(HARDWARE_VARIANT), Teensy)
733 LIB_SRC = wiring.c
734 VPATH += $(ARDUINO_INSTALL_DIR)/hardware/teensy/cores/teensy
735 endif
737 LIB_CXXSRC = WMath.cpp WString.cpp Print.cpp SPI.cpp
739 ifeq ($(NEOPIXEL), 1)
740 LIB_CXXSRC += Adafruit_NeoPixel.cpp
741 endif
743 ifeq ($(LIQUID_TWI2), 0)
744 LIB_CXXSRC += LiquidCrystal.cpp
745 else
746 LIB_SRC += twi.c
747 LIB_CXXSRC += Wire.cpp LiquidTWI2.cpp
748 endif
750 ifeq ($(WIRE), 1)
751 LIB_SRC += twi.c
752 LIB_CXXSRC += Wire.cpp
753 endif
755 ifeq ($(TONE), 1)
756 LIB_CXXSRC += Tone.cpp
757 endif
759 ifeq ($(U8GLIB), 1)
760 LIB_CXXSRC += U8glib.cpp
761 LIB_SRC += u8g_ll_api.c u8g_bitmap.c u8g_clip.c u8g_com_null.c u8g_delay.c \
762 u8g_page.c u8g_pb.c u8g_pb16h1.c u8g_rect.c u8g_state.c u8g_font.c \
763 u8g_font_6x13.c u8g_font_04b_03.c u8g_font_5x8.c
764 endif
766 ifeq ($(TMC), 1)
767 LIB_CXXSRC += TMCStepper.cpp COOLCONF.cpp DRV_STATUS.cpp IHOLD_IRUN.cpp \
768 CHOPCONF.cpp GCONF.cpp PWMCONF.cpp DRV_CONF.cpp DRVCONF.cpp DRVCTRL.cpp \
769 DRVSTATUS.cpp ENCMODE.cpp RAMP_STAT.cpp SGCSCONF.cpp SHORT_CONF.cpp \
770 SMARTEN.cpp SW_MODE.cpp SW_SPI.cpp TMC2130Stepper.cpp TMC2208Stepper.cpp \
771 TMC2209Stepper.cpp TMC2660Stepper.cpp TMC5130Stepper.cpp TMC5160Stepper.cpp
772 endif
774 ifeq ($(RELOC_WORKAROUND), 1)
775 LD_PREFIX=-nodefaultlibs
776 LD_SUFFIX=-lm -lgcc -lc -lgcc
777 endif
779 #Check for Arduino 1.0.0 or higher and use the correct source files for that version
780 ifeq ($(shell [ $(ARDUINO_VERSION) -ge 100 ] && echo true), true)
781 LIB_CXXSRC += main.cpp
782 else
783 LIB_SRC += pins_arduino.c main.c
784 endif
786 FORMAT = ihex
788 # Name of this Makefile (used for "make depend").
789 MAKEFILE = Makefile
791 # Debugging format.
792 # Native formats for AVR-GCC's -g are stabs [default], or dwarf-2.
793 # AVR (extended) COFF requires stabs, plus an avr-objcopy run.
794 DEBUG = stabs
796 OPT = s
798 DEFINES ?=
800 # Program settings
801 CC = $(AVR_TOOLS_PATH)$(TOOL_PREFIX)-gcc
802 CXX = $(AVR_TOOLS_PATH)$(TOOL_PREFIX)-g++
803 OBJCOPY = $(AVR_TOOLS_PATH)$(TOOL_PREFIX)-objcopy
804 OBJDUMP = $(AVR_TOOLS_PATH)$(TOOL_PREFIX)-objdump
805 AR = $(AVR_TOOLS_PATH)$(TOOL_PREFIX)-ar
806 SIZE = $(AVR_TOOLS_PATH)$(TOOL_PREFIX)-size
807 NM = $(AVR_TOOLS_PATH)$(TOOL_PREFIX)-nm
808 AVRDUDE = avrdude
809 REMOVE = rm -f
810 MV = mv -f
812 # Place -D or -U options here
813 CDEFS = -DF_CPU=$(F_CPU)UL ${addprefix -D , $(DEFINES)} -DARDUINO=$(ARDUINO_VERSION)
814 CXXDEFS = $(CDEFS)
816 ifeq ($(HARDWARE_VARIANT), Teensy)
817 CDEFS += -DUSB_SERIAL
818 LIB_SRC += usb.c pins_teensy.c
819 LIB_CXXSRC += usb_api.cpp
821 else ifeq ($(HARDWARE_VARIANT), archim)
822 CDEFS += -DARDUINO_SAM_ARCHIM -DARDUINO_ARCH_SAM -D__SAM3X8E__
823 CDEFS += -DUSB_VID=0x27B1 -DUSB_PID=0x0001 -DUSBCON
824 CDEFS += '-DUSB_MANUFACTURER="UltiMachine"' '-DUSB_PRODUCT_STRING="Archim"'
826 LIB_CXXSRC += variant.cpp IPAddress.cpp Reset.cpp RingBuffer.cpp Stream.cpp \
827 UARTClass.cpp USARTClass.cpp abi.cpp new.cpp watchdog.cpp CDC.cpp \
828 PluggableUSB.cpp USBCore.cpp
830 LIB_SRC += cortex_handlers.c iar_calls_sam3.c syscalls_sam3.c dtostrf.c itoa.c
832 ifeq ($(U8GLIB), 1)
833 LIB_SRC += u8g_com_api.c u8g_pb32h1.c
834 endif
835 endif
837 # Add all the source directories as include directories too
838 CINCS = ${addprefix -I ,${VPATH}}
839 CXXINCS = ${addprefix -I ,${VPATH}}
841 # Silence warnings for library code (won't work for .h files, unfortunately)
842 LIBWARN = -w -Wno-packed-bitfield-compat
844 # Compiler flag to set the C/CPP Standard level.
845 CSTANDARD = -std=gnu99
846 CXXSTANDARD = -std=gnu++11
847 CDEBUG = -g$(DEBUG)
848 CWARN = -Wall -Wstrict-prototypes -Wno-packed-bitfield-compat -Wno-pragmas -Wunused-parameter
849 CXXWARN = -Wall -Wno-packed-bitfield-compat -Wno-pragmas -Wunused-parameter
850 CTUNING = -fsigned-char -funsigned-bitfields -fno-exceptions \
851 -fshort-enums -ffunction-sections -fdata-sections
852 ifneq ($(HARDWARE_MOTHERBOARD),)
853 CTUNING += -DMOTHERBOARD=${HARDWARE_MOTHERBOARD}
854 endif
856 #CEXTRA = -Wa,-adhlns=$(<:.c=.lst)
857 CXXEXTRA = -fno-use-cxa-atexit -fno-threadsafe-statics -fno-rtti
858 CFLAGS := $(CDEBUG) $(CDEFS) $(CINCS) -O$(OPT) $(CEXTRA) $(CTUNING) $(CSTANDARD)
859 CXXFLAGS := $(CDEFS) $(CINCS) -O$(OPT) $(CXXEXTRA) $(CTUNING) $(CXXSTANDARD)
860 ASFLAGS := $(CDEFS)
861 #ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
863 ifeq ($(HARDWARE_VARIANT), archim)
864 LD_PREFIX = -Wl,--gc-sections,-Map,Marlin.ino.map,--cref,--check-sections,--entry=Reset_Handler,--unresolved-symbols=report-all,--warn-common,--warn-section-align
865 LD_SUFFIX = $(LDLIBS)
867 LDFLAGS = -lm -T$(LDSCRIPT) -u _sbrk -u link -u _close -u _fstat -u _isatty
868 LDFLAGS += -u _lseek -u _read -u _write -u _exit -u kill -u _getpid
869 else
870 LD_PREFIX = -Wl,--gc-sections,--relax
871 LDFLAGS = -lm
872 CTUNING += -flto
873 endif
875 # Programming support using avrdude. Settings and variables.
876 AVRDUDE_PORT = $(UPLOAD_PORT)
877 AVRDUDE_WRITE_FLASH = -Uflash:w:$(BUILD_DIR)/$(TARGET).hex:i
878 ifeq ($(shell uname -s), Linux)
879 AVRDUDE_CONF = /etc/avrdude/avrdude.conf
880 else
881 AVRDUDE_CONF = $(ARDUINO_INSTALL_DIR)/hardware/tools/avr/etc/avrdude.conf
882 endif
883 AVRDUDE_FLAGS = -D -C$(AVRDUDE_CONF) \
884 -p$(PROG_MCU) -P$(AVRDUDE_PORT) -c$(AVRDUDE_PROGRAMMER) \
885 -b$(UPLOAD_RATE)
887 # Since Marlin 2.0, the source files may be distributed into several
888 # different directories, so it is necessary to find them recursively
890 SRC = $(shell find src -name '*.c' -type f)
891 CXXSRC = $(shell find src -name '*.cpp' -type f)
893 # Define all object files.
894 OBJ = ${patsubst %.c, $(BUILD_DIR)/arduino/%.o, ${LIB_SRC}}
895 OBJ += ${patsubst %.cpp, $(BUILD_DIR)/arduino/%.o, ${LIB_CXXSRC}}
896 OBJ += ${patsubst %.S, $(BUILD_DIR)/arduino/%.o, ${LIB_ASRC}}
897 OBJ += ${patsubst %.c, $(BUILD_DIR)/%.o, ${SRC}}
898 OBJ += ${patsubst %.cpp, $(BUILD_DIR)/%.o, ${CXXSRC}}
900 # Define all listing files.
901 LST = $(LIB_ASRC:.S=.lst) $(LIB_CXXSRC:.cpp=.lst) $(LIB_SRC:.c=.lst)
903 # Combine all necessary flags and optional flags.
904 # Add target processor to flags.
905 ALL_CFLAGS = $(MCU_FLAGS) $(CPU_FLAGS) $(CFLAGS) -I.
906 ALL_CXXFLAGS = $(MCU_FLAGS) $(CPU_FLAGS) $(CXXFLAGS)
907 ALL_ASFLAGS = $(MCU_FLAGS) $(CPU_FLAGS) $(ASFLAGS) -x assembler-with-cpp
909 # set V=1 (eg, "make V=1") to print the full commands etc.
910 ifneq ($V,1)
911 Pecho=@echo
913 else
914 Pecho=@:
916 endif
918 # Create required build hierarchy if it does not exist
920 $(shell mkdir -p $(dir $(OBJ)))
922 # Default target.
923 all: sizeafter
925 build: elf hex bin
927 elf: $(BUILD_DIR)/$(TARGET).elf
928 bin: $(BUILD_DIR)/$(TARGET).bin
929 hex: $(BUILD_DIR)/$(TARGET).hex
930 eep: $(BUILD_DIR)/$(TARGET).eep
931 lss: $(BUILD_DIR)/$(TARGET).lss
932 sym: $(BUILD_DIR)/$(TARGET).sym
934 # Program the device.
935 # Do not try to reset an Arduino if it's not one
936 upload: $(BUILD_DIR)/$(TARGET).hex
937 ifeq (${AVRDUDE_PROGRAMMER}, arduino)
938 stty hup < $(UPLOAD_PORT); true
939 endif
940 $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH)
941 ifeq (${AVRDUDE_PROGRAMMER}, arduino)
942 stty -hup < $(UPLOAD_PORT); true
943 endif
945 # Display size of file.
946 HEXSIZE = $(SIZE) --target=$(FORMAT) $(BUILD_DIR)/$(TARGET).hex
947 ELFSIZE = $(SIZE) $(SIZE_FLAGS) $(BUILD_DIR)/$(TARGET).elf; \
948 $(SIZE) $(BUILD_DIR)/$(TARGET).elf
949 sizebefore:
950 $P if [ -f $(BUILD_DIR)/$(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(HEXSIZE); echo; fi
952 sizeafter: build
953 $P if [ -f $(BUILD_DIR)/$(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); echo; fi
956 # Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
957 COFFCONVERT=$(OBJCOPY) --debugging \
958 --change-section-address .data-0x800000 \
959 --change-section-address .bss-0x800000 \
960 --change-section-address .noinit-0x800000 \
961 --change-section-address .eeprom-0x810000
964 coff: $(BUILD_DIR)/$(TARGET).elf
965 $(COFFCONVERT) -O coff-avr $(BUILD_DIR)/$(TARGET).elf $(TARGET).cof
968 extcoff: $(TARGET).elf
969 $(COFFCONVERT) -O coff-ext-avr $(BUILD_DIR)/$(TARGET).elf $(TARGET).cof
972 .SUFFIXES: .elf .hex .eep .lss .sym .bin
973 .PRECIOUS: .o
975 .elf.hex:
976 $(Pecho) " COPY $@"
977 $P $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
979 .elf.bin:
980 $(Pecho) " COPY $@"
981 $P $(OBJCOPY) -O binary -R .eeprom $< $@
983 .elf.eep:
984 -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
985 --change-section-lma .eeprom=0 -O $(FORMAT) $< $@
987 # Create extended listing file from ELF output file.
988 .elf.lss:
989 $(OBJDUMP) -h -S $< > $@
991 # Create a symbol table from ELF output file.
992 .elf.sym:
993 $(NM) -n $< > $@
995 # Link: create ELF output file from library.
997 $(BUILD_DIR)/$(TARGET).elf: $(OBJ) Configuration.h
998 $(Pecho) " CXX $@"
999 $P $(CXX) $(LD_PREFIX) $(ALL_CXXFLAGS) -o $@ -L. $(OBJ) $(LDFLAGS) $(LD_SUFFIX)
1001 # Object files that were found in "src" will be stored in $(BUILD_DIR)
1002 # in directories that mirror the structure of "src"
1004 $(BUILD_DIR)/%.o: %.c Configuration.h Configuration_adv.h $(MAKEFILE)
1005 $(Pecho) " CC $<"
1006 $P $(CC) -MMD -c $(ALL_CFLAGS) $(CWARN) $< -o $@
1008 $(BUILD_DIR)/%.o: %.cpp Configuration.h Configuration_adv.h $(MAKEFILE)
1009 $(Pecho) " CXX $<"
1010 $P $(CXX) -MMD -c $(ALL_CXXFLAGS) $(CXXWARN) $< -o $@
1012 # Object files for Arduino libs will be created in $(BUILD_DIR)/arduino
1014 $(BUILD_DIR)/arduino/%.o: %.c Configuration.h Configuration_adv.h $(MAKEFILE)
1015 $(Pecho) " CC $<"
1016 $P $(CC) -MMD -c $(ALL_CFLAGS) $(LIBWARN) $< -o $@
1018 $(BUILD_DIR)/arduino/%.o: %.cpp Configuration.h Configuration_adv.h $(MAKEFILE)
1019 $(Pecho) " CXX $<"
1020 $P $(CXX) -MMD -c $(ALL_CXXFLAGS) $(LIBWARN) $< -o $@
1022 $(BUILD_DIR)/arduino/%.o: %.S $(MAKEFILE)
1023 $(Pecho) " CXX $<"
1024 $P $(CXX) -MMD -c $(ALL_ASFLAGS) $< -o $@
1026 # Target: clean project.
1027 clean:
1028 $(Pecho) " RMDIR $(BUILD_DIR)/"
1029 $P rm -rf $(BUILD_DIR)
1032 .PHONY: all build elf hex eep lss sym program coff extcoff clean depend sizebefore sizeafter
1034 # Automatically include the dependency files created by gcc
1035 -include ${patsubst %.o, %.d, ${OBJ}}