1 # Marlin Firmware Arduino Project Makefile
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
)
66 ARDUINO_INSTALL_DIR ?
= ${HOME}/Arduino
67 ARDUINO_USER_DIR ?
= ${HOME}/Arduino
69 UNAME_S
:= $(shell uname
-s
)
70 ifeq ($(UNAME_S
),Linux
)
72 ARDUINO_INSTALL_DIR ?
= /usr
/share
/arduino
73 ARDUINO_USER_DIR ?
= ${HOME}/Arduino
75 ifeq ($(UNAME_S
),Darwin
)
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
/
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/
95 # Programmer configuration
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 .
106 # This defines whether Liquid_TWI2 support will be built
109 # This defines if Wire is needed
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.
116 # This defines if U8GLIB is needed (may require RELOC_WORKAROUND)
119 # This defines whether to include the Trinamic TMCStepper library
122 # This defines whether to include the AdaFruit NeoPixel library
126 # Try to automatically determine whether RELOC_WORKAROUND is needed based
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.
)
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
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)
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)
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)
237 else ifeq ($(HARDWARE_MOTHERBOARD
),1121)
238 # Ultimaker (Older electronics. Pre 1.5.4. This is rare)
239 else ifeq ($(HARDWARE_MOTHERBOARD
),1122)
243 else ifeq ($(HARDWARE_MOTHERBOARD
),1123)
245 else ifeq ($(HARDWARE_MOTHERBOARD
),1124)
246 # Ultimainboard 2.x (Uses TEMP_SENSOR 20)
247 else ifeq ($(HARDWARE_MOTHERBOARD
),1125)
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)
257 else ifeq ($(HARDWARE_MOTHERBOARD
),1130)
259 else ifeq ($(HARDWARE_MOTHERBOARD
),1131)
261 else ifeq ($(HARDWARE_MOTHERBOARD
),1132)
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)
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)
277 else ifeq ($(HARDWARE_MOTHERBOARD
),1140)
279 else ifeq ($(HARDWARE_MOTHERBOARD
),1141)
281 else ifeq ($(HARDWARE_MOTHERBOARD
),1142)
282 # Wanhao Duplicator i3 Plus
283 else ifeq ($(HARDWARE_MOTHERBOARD
),1143)
285 else ifeq ($(HARDWARE_MOTHERBOARD
),1144)
286 # Tronxy TRONXY-V3-1.0
287 else ifeq ($(HARDWARE_MOTHERBOARD
),1145)
289 else ifeq ($(HARDWARE_MOTHERBOARD
),1146)
291 else ifeq ($(HARDWARE_MOTHERBOARD
),1147)
292 # Overlord/Overlord Pro
293 else ifeq ($(HARDWARE_MOTHERBOARD
),1148)
295 else ifeq ($(HARDWARE_MOTHERBOARD
),1149)
297 else ifeq ($(HARDWARE_MOTHERBOARD
),1150)
299 else ifeq ($(HARDWARE_MOTHERBOARD
),1151)
301 else ifeq ($(HARDWARE_MOTHERBOARD
),1152)
303 else ifeq ($(HARDWARE_MOTHERBOARD
),1153)
305 else ifeq ($(HARDWARE_MOTHERBOARD
),1154)
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)
323 else ifeq ($(HARDWARE_MOTHERBOARD
),1163)
326 # RAMBo and derivatives
330 else ifeq ($(HARDWARE_MOTHERBOARD
),1200)
332 else ifeq ($(HARDWARE_MOTHERBOARD
),1201)
334 else ifeq ($(HARDWARE_MOTHERBOARD
),1202)
336 else ifeq ($(HARDWARE_MOTHERBOARD
),1203)
338 else ifeq ($(HARDWARE_MOTHERBOARD
),1204)
340 else ifeq ($(HARDWARE_MOTHERBOARD
),1205)
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)
355 else ifeq ($(HARDWARE_MOTHERBOARD
),1303)
357 else ifeq ($(HARDWARE_MOTHERBOARD
),1304)
358 # Makerbot Mightyboard Revision E
359 else ifeq ($(HARDWARE_MOTHERBOARD
),1305)
361 else ifeq ($(HARDWARE_MOTHERBOARD
),1306)
363 else ifeq ($(HARDWARE_MOTHERBOARD
),1307)
365 else ifeq ($(HARDWARE_MOTHERBOARD
),1308)
367 else ifeq ($(HARDWARE_MOTHERBOARD
),1309)
369 else ifeq ($(HARDWARE_MOTHERBOARD
),1310)
370 # Elefu Ra Board (v3)
371 else ifeq ($(HARDWARE_MOTHERBOARD
),1311)
373 else ifeq ($(HARDWARE_MOTHERBOARD
),1312)
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)
391 else ifeq ($(HARDWARE_MOTHERBOARD
),1321)
392 # Wanhao 0ne+ i3 Mini
393 else ifeq ($(HARDWARE_MOTHERBOARD
),1322)
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)
418 else ifeq ($(HARDWARE_MOTHERBOARD
),1401)
423 # Sanguinololu and Derivatives - ATmega644P, ATmega1284P
427 else ifeq ($(HARDWARE_MOTHERBOARD
),1500)
428 HARDWARE_VARIANT ?
= Sanguino
431 # Sanguinololu 1.2 and above
432 else ifeq ($(HARDWARE_MOTHERBOARD
),1501)
433 HARDWARE_VARIANT ?
= Sanguino
437 else ifeq ($(HARDWARE_MOTHERBOARD
),1502)
438 HARDWARE_VARIANT ?
= Sanguino
442 else ifeq ($(HARDWARE_MOTHERBOARD
),1503)
443 HARDWARE_VARIANT ?
= Sanguino
446 # Melzi with ATmega1284 (MaKr3d version)
447 else ifeq ($(HARDWARE_MOTHERBOARD
),1504)
448 HARDWARE_VARIANT ?
= Sanguino
451 # Melzi Creality3D board (for CR-10 etc)
452 else ifeq ($(HARDWARE_MOTHERBOARD
),1505)
453 HARDWARE_VARIANT ?
= Sanguino
456 # Melzi Malyan M150 board
457 else ifeq ($(HARDWARE_MOTHERBOARD
),1506)
458 HARDWARE_VARIANT ?
= Sanguino
462 else ifeq ($(HARDWARE_MOTHERBOARD
),1507)
463 HARDWARE_VARIANT ?
= Sanguino
467 else ifeq ($(HARDWARE_MOTHERBOARD
),1508)
468 HARDWARE_VARIANT ?
= Sanguino
472 else ifeq ($(HARDWARE_MOTHERBOARD
),1509)
473 HARDWARE_VARIANT ?
= Sanguino
476 # Anet 1.0 (Melzi clone)
477 else ifeq ($(HARDWARE_MOTHERBOARD
),1510)
478 HARDWARE_VARIANT ?
= Sanguino
482 else ifeq ($(HARDWARE_MOTHERBOARD
),1511)
483 HARDWARE_VARIANT ?
= Sanguino
488 # Other ATmega644P, ATmega644, ATmega1284P
491 # Gen3 Monolithic Electronics
492 else ifeq ($(HARDWARE_MOTHERBOARD
),1600)
493 HARDWARE_VARIANT ?
= Sanguino
497 else ifeq ($(HARDWARE_MOTHERBOARD
),1601)
498 HARDWARE_VARIANT ?
= Sanguino
502 else ifeq ($(HARDWARE_MOTHERBOARD
),1602)
503 HARDWARE_VARIANT ?
= Gen6
507 else ifeq ($(HARDWARE_MOTHERBOARD
),1603)
508 HARDWARE_VARIANT ?
= Gen6
511 # Gen7 custom (Alfons3 Version)
512 else ifeq ($(HARDWARE_MOTHERBOARD
),1604)
513 HARDWARE_VARIANT ?
= Gen7
518 else ifeq ($(HARDWARE_MOTHERBOARD
),1605)
519 HARDWARE_VARIANT ?
= Gen7
524 else ifeq ($(HARDWARE_MOTHERBOARD
),1606)
525 HARDWARE_VARIANT ?
= Gen7
530 else ifeq ($(HARDWARE_MOTHERBOARD
),1607)
531 HARDWARE_VARIANT ?
= Gen7
536 else ifeq ($(HARDWARE_MOTHERBOARD
),1608)
537 HARDWARE_VARIANT ?
= SanguinoA
541 else ifeq ($(HARDWARE_MOTHERBOARD
),1609)
542 HARDWARE_VARIANT ?
= Sanguino
546 else ifeq ($(HARDWARE_MOTHERBOARD
),1610)
547 HARDWARE_VARIANT ?
= Sanguino
552 # Teensyduino - AT90USB1286, AT90USB1286P
556 else ifeq ($(HARDWARE_MOTHERBOARD
),1700)
557 HARDWARE_VARIANT ?
= Teensy
560 # Printrboard (AT90USB1286)
561 else ifeq ($(HARDWARE_MOTHERBOARD
),1701)
562 HARDWARE_VARIANT ?
= Teensy
565 # Printrboard Revision F (AT90USB1286)
566 else ifeq ($(HARDWARE_MOTHERBOARD
),1702)
567 HARDWARE_VARIANT ?
= Teensy
570 # Brainwave (AT90USB646)
571 else ifeq ($(HARDWARE_MOTHERBOARD
),1703)
572 HARDWARE_VARIANT ?
= Teensy
575 # Brainwave Pro (AT90USB1286)
576 else ifeq ($(HARDWARE_MOTHERBOARD
),1704)
577 HARDWARE_VARIANT ?
= Teensy
580 # SAV Mk-I (AT90USB1286)
581 else ifeq ($(HARDWARE_MOTHERBOARD
),1705)
582 HARDWARE_VARIANT ?
= Teensy
585 # Teensy++2.0 (AT90USB1286)
586 else ifeq ($(HARDWARE_MOTHERBOARD
),1706)
587 HARDWARE_VARIANT ?
= Teensy
590 # 5DPrint D8 Driver Board
591 else ifeq ($(HARDWARE_MOTHERBOARD
),1707)
592 HARDWARE_VARIANT ?
= Teensy
596 # UltiMachine Archim1 (with DRV8825 drivers)
597 else ifeq ($(HARDWARE_MOTHERBOARD
),3023)
598 HARDWARE_VARIANT ?
= archim
602 # UltiMachine Archim2 (with TMC2130 drivers)
603 else ifeq ($(HARDWARE_MOTHERBOARD
),3024)
604 HARDWARE_VARIANT ?
= archim
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.
616 # Set to microcontroller if IS_MCU not yet set
620 # Set to arduino, ATmega2560 if not yet set.
621 HARDWARE_VARIANT ?
= arduino
626 MCU_FLAGS
= -mmcu
=$(MCU
)
627 SIZE_FLAGS
= --mcu
=$(MCU
) -C
629 TOOL_PREFIX
= arm-none-eabi
630 CPU_FLAGS
= -mthumb
-mcpu
=$(MCPU
)
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
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
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
671 VPATH
+= $(ARDUINO_INSTALL_DIR
)/libraries
/LiquidCrystal
/src
673 ifeq ($(LIQUID_TWI2
), 1)
675 VPATH
+= $(ARDUINO_INSTALL_DIR
)/libraries
/LiquidTWI2
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
685 ifeq ($(NEOPIXEL
), 1)
686 VPATH
+= $(ARDUINO_INSTALL_DIR
)/libraries
/Adafruit_NeoPixel
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
695 VPATH
+= $(ARDUINO_INSTALL_DIR
)/libraries
/TMCStepper
/src
696 VPATH
+= $(ARDUINO_INSTALL_DIR
)/libraries
/TMCStepper
/src
/source
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
718 HARDWARE_SUB_VARIANT ?
= standard
719 VPATH
+= $(ARDUINO_INSTALL_DIR
)/hardware
/$(HARDWARE_VARIANT
)/variants
/$(HARDWARE_SUB_VARIANT
)
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
729 LIB_SRC
+= wiring_pulse.c
732 ifeq ($(HARDWARE_VARIANT
), Teensy
)
734 VPATH
+= $(ARDUINO_INSTALL_DIR
)/hardware
/teensy
/cores
/teensy
737 LIB_CXXSRC
= WMath.
cpp WString.
cpp Print.
cpp SPI.
cpp
739 ifeq ($(NEOPIXEL
), 1)
740 LIB_CXXSRC
+= Adafruit_NeoPixel.
cpp
743 ifeq ($(LIQUID_TWI2
), 0)
744 LIB_CXXSRC
+= LiquidCrystal.
cpp
747 LIB_CXXSRC
+= Wire.
cpp LiquidTWI2.
cpp
752 LIB_CXXSRC
+= Wire.
cpp
756 LIB_CXXSRC
+= Tone.
cpp
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
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
774 ifeq ($(RELOC_WORKAROUND
), 1)
775 LD_PREFIX
=-nodefaultlibs
776 LD_SUFFIX
=-lm
-lgcc
-lc
-lgcc
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
783 LIB_SRC
+= pins_arduino.c main.c
788 # Name of this Makefile (used for "make depend").
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.
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
812 # Place -D or -U options here
813 CDEFS
= -DF_CPU
=$(F_CPU
)UL
${addprefix -D
, $(DEFINES
)} -DARDUINO
=$(ARDUINO_VERSION
)
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
833 LIB_SRC
+= u8g_com_api.c u8g_pb32h1.c
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
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}
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
)
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
870 LD_PREFIX
= -Wl
,--gc-sections
,--relax
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
881 AVRDUDE_CONF
= $(ARDUINO_INSTALL_DIR
)/hardware
/tools
/avr
/etc
/avrdude.conf
883 AVRDUDE_FLAGS
= -D
-C
$(AVRDUDE_CONF
) \
884 -p
$(PROG_MCU
) -P
$(AVRDUDE_PORT
) -c
$(AVRDUDE_PROGRAMMER
) \
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.
918 # Create required build hierarchy if it does not exist
920 $(shell mkdir
-p
$(dir $(OBJ
)))
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
940 $(AVRDUDE
) $(AVRDUDE_FLAGS
) $(AVRDUDE_WRITE_FLASH
)
941 ifeq (${AVRDUDE_PROGRAMMER}, arduino
)
942 stty
-hup
< $(UPLOAD_PORT
); true
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
950 $P if
[ -f
$(BUILD_DIR
)/$(TARGET
).elf
]; then echo
; echo
$(MSG_SIZE_BEFORE
); $(HEXSIZE
); echo
; fi
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
977 $P $(OBJCOPY
) -O
$(FORMAT
) -R .eeprom
$< $@
981 $P $(OBJCOPY
) -O binary
-R .eeprom
$< $@
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.
989 $(OBJDUMP
) -h
-S
$< > $@
991 # Create a symbol table from ELF output file.
995 # Link: create ELF output file from library.
997 $(BUILD_DIR
)/$(TARGET
).elf
: $(OBJ
) Configuration.h
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
)
1006 $P $(CC
) -MMD
-c
$(ALL_CFLAGS
) $(CWARN
) $< -o
$@
1008 $(BUILD_DIR
)/%.o
: %.
cpp Configuration.h Configuration_adv.h
$(MAKEFILE
)
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
)
1016 $P $(CC
) -MMD
-c
$(ALL_CFLAGS
) $(LIBWARN
) $< -o
$@
1018 $(BUILD_DIR
)/arduino
/%.o
: %.
cpp Configuration.h Configuration_adv.h
$(MAKEFILE
)
1020 $P $(CXX
) -MMD
-c
$(ALL_CXXFLAGS
) $(LIBWARN
) $< -o
$@
1022 $(BUILD_DIR
)/arduino
/%.o
: %.S
$(MAKEFILE
)
1024 $P $(CXX
) -MMD
-c
$(ALL_ASFLAGS
) $< -o
$@
1026 # Target: clean project.
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}}