Fri, 17 Nov 2017 10:13:31 +0100
proper configuration, homing and planner optimization
0 | 1 | # Sprinter Arduino Project Makefile |
2 | # | |
3 | # Makefile Based on: | |
4 | # Arduino 0011 Makefile | |
5 | # Arduino adaptation by mellis, eighthave, oli.keller | |
6 | # | |
7 | # This has been tested with Arduino 0022. | |
8 | # | |
9 | # This makefile allows you to build sketches from the command line | |
10 | # without the Arduino environment (or Java). | |
11 | # | |
12 | # Detailed instructions for using the makefile: | |
13 | # | |
14 | # 1. Modify the line containg "INSTALL_DIR" to point to the directory that | |
15 | # contains the Arduino installation (for example, under Mac OS X, this | |
16 | # might be /Applications/arduino-0012). | |
17 | # | |
18 | # 2. Modify the line containing "PORT" to refer to the filename | |
19 | # representing the USB or serial connection to your Arduino board | |
20 | # (e.g. PORT = /dev/tty.USB0). If the exact name of this file | |
21 | # changes, you can use * as a wildcard (e.g. PORT = /dev/tty.usb*). | |
22 | # | |
23 | # 3. Set the line containing "MCU" to match your board's processor. | |
24 | # Older one's are atmega8 based, newer ones like Arduino Mini, Bluetooth | |
25 | # or Diecimila have the atmega168. If you're using a LilyPad Arduino, | |
26 | # change F_CPU to 8000000. If you are using Gen7 electronics, you | |
27 | # probably need to use 20000000. Either way, you must regenerate | |
28 | # the speed lookup table with create_speed_lookuptable.py. | |
29 | # | |
30 | # 4. Type "make" and press enter to compile/verify your program. | |
31 | # | |
32 | # 5. Type "make upload", reset your Arduino board, and press enter to | |
33 | # upload your program to the Arduino board. | |
34 | # | |
35 | # $Id$ | |
36 | ||
37 | #For "old" Arduino Mega | |
38 | #MCU = atmega1280 | |
39 | #For Arduino Mega2560 | |
40 | #MCU = atmega2560 | |
41 | #For Sanguinololu | |
42 | #MCU = atmega644p | |
43 | MCU = atmega1284p | |
44 | #For Printrboard | |
45 | #MCU = at90usb1286 | |
46 | ||
47 | ||
48 | #Arduino install directory | |
49 | INSTALL_DIR = ../../arduino-0022/ | |
50 | ||
51 | # Be sure to regenerate speed_lookuptable.h with create_speed_lookuptable.py | |
52 | # if you are setting this to something other than 16MHz | |
53 | F_CPU = 16000000 | |
54 | ||
55 | UPLOAD_RATE = 115200 | |
56 | AVRDUDE_PROGRAMMER = arduino | |
57 | PORT = /dev/arduino | |
58 | ||
59 | TARGET = $(notdir $(CURDIR)) | |
60 | ||
61 | ||
62 | ############################################################################ | |
63 | # Below here nothing should be changed... | |
64 | ||
65 | ARDUINO = $(INSTALL_DIR)/hardware/arduino/cores/arduino | |
66 | AVR_TOOLS_PATH = | |
67 | SRC = $(ARDUINO)/pins_arduino.c $(ARDUINO)/wiring.c \ | |
68 | $(ARDUINO)/wiring_analog.c $(ARDUINO)/wiring_digital.c \ | |
69 | $(ARDUINO)/wiring_pulse.c \ | |
70 | $(ARDUINO)/wiring_shift.c $(ARDUINO)/WInterrupts.c | |
71 | CXXSRC = $(ARDUINO)/WMath.cpp $(ARDUINO)/WString.cpp\ | |
72 | $(ARDUINO)/Print.cpp applet/Marlin.cpp MarlinSerial.cpp Sd2Card.cpp SdBaseFile.cpp SdFatUtil.cpp SdFile.cpp SdVolume.cpp motion_control.cpp planner.cpp stepper.cpp temperature.cpp cardreader.cpp MatrixMath.cpp FPUTransform.cpp z_probe.cpp | |
73 | ||
74 | FORMAT = ihex | |
75 | ||
76 | ||
77 | # Name of this Makefile (used for "make depend"). | |
78 | MAKEFILE = Makefile | |
79 | ||
80 | # Debugging format. | |
81 | # Native formats for AVR-GCC's -g are stabs [default], or dwarf-2. | |
82 | # AVR (extended) COFF requires stabs, plus an avr-objcopy run. | |
83 | DEBUG = stabs | |
84 | ||
85 | OPT = s | |
86 | ||
87 | # Place -D or -U options here | |
88 | CDEFS = -DF_CPU=$(F_CPU) | |
89 | CXXDEFS = -DF_CPU=$(F_CPU) | |
90 | ||
91 | # Place -I options here | |
92 | CINCS = -I$(ARDUINO) | |
93 | CXXINCS = -I$(ARDUINO) | |
94 | ||
95 | # Compiler flag to set the C Standard level. | |
96 | # c89 - "ANSI" C | |
97 | # gnu89 - c89 plus GCC extensions | |
98 | # c99 - ISO C99 standard (not yet fully implemented) | |
99 | # gnu99 - c99 plus GCC extensions | |
100 | #CSTANDARD = -std=gnu99 | |
101 | CDEBUG = -g$(DEBUG) | |
102 | CWARN = -Wall -Wstrict-prototypes | |
103 | CTUNING = -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -w -ffunction-sections -fdata-sections -DARDUINO=22 | |
104 | #CEXTRA = -Wa,-adhlns=$(<:.c=.lst) | |
105 | ||
106 | CFLAGS = $(CDEBUG) $(CDEFS) $(CINCS) -O$(OPT) $(CWARN) $(CEXTRA) $(CTUNING) | |
107 | CXXFLAGS = $(CDEFS) $(CINCS) -O$(OPT) -Wall $(CEXTRA) $(CTUNING) | |
108 | #ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs | |
109 | LDFLAGS = -lm | |
110 | ||
111 | ||
112 | # Programming support using avrdude. Settings and variables. | |
113 | AVRDUDE_PORT = $(PORT) | |
114 | AVRDUDE_WRITE_FLASH = -U flash:w:applet/$(TARGET).hex:i | |
115 | AVRDUDE_FLAGS = -D -C $(INSTALL_DIR)/hardware/tools/avrdude.conf \ | |
116 | -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) \ | |
117 | -b $(UPLOAD_RATE) | |
118 | ||
119 | # Program settings | |
120 | CC = $(AVR_TOOLS_PATH)avr-gcc | |
121 | CXX = $(AVR_TOOLS_PATH)avr-g++ | |
122 | OBJCOPY = $(AVR_TOOLS_PATH)avr-objcopy | |
123 | OBJDUMP = $(AVR_TOOLS_PATH)avr-objdump | |
124 | AR = $(AVR_TOOLS_PATH)avr-ar | |
125 | SIZE = $(AVR_TOOLS_PATH)avr-size | |
126 | NM = $(AVR_TOOLS_PATH)avr-nm | |
127 | AVRDUDE = avrdude | |
128 | REMOVE = rm -f | |
129 | MV = mv -f | |
130 | ||
131 | # Define all object files. | |
132 | OBJ = $(SRC:.c=.o) $(CXXSRC:.cpp=.o) $(ASRC:.S=.o) | |
133 | ||
134 | # Define all listing files. | |
135 | LST = $(ASRC:.S=.lst) $(CXXSRC:.cpp=.lst) $(SRC:.c=.lst) | |
136 | ||
137 | # Combine all necessary flags and optional flags. | |
138 | # Add target processor to flags. | |
139 | ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) | |
140 | ALL_CXXFLAGS = -mmcu=$(MCU) -I. $(CXXFLAGS) | |
141 | ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) | |
142 | ||
143 | ||
144 | # Default target. | |
145 | all: build sizeafter | |
146 | ||
147 | build: elf hex | |
148 | ||
149 | applet/$(TARGET).cpp: $(TARGET).pde $(MAKEFILE) | |
150 | ||
151 | applet/%.cpp: %.pde | |
152 | # Here is the "preprocessing". | |
153 | # It creates a .cpp file based with the same name as the .pde file. | |
154 | # On top of the new .cpp file comes the WProgram.h header. | |
155 | # At the end there is a generic main() function attached. | |
156 | # Then the .cpp file will be compiled. Errors during compile will | |
157 | # refer to this new, automatically generated, file. | |
158 | # Not the original .pde file you actually edit... | |
159 | @echo " WR $@" | |
160 | @test -d $(dir $@) || mkdir $(dir $@) | |
161 | @echo '#include "WProgram.h"' > $@ | |
162 | @cat $< >> $@ | |
163 | @cat $(ARDUINO)/main.cpp >> $@ | |
164 | ||
165 | elf: applet/$(TARGET).elf | |
166 | hex: applet/$(TARGET).hex | |
167 | eep: applet/$(TARGET).eep | |
168 | lss: applet/$(TARGET).lss | |
169 | sym: applet/$(TARGET).sym | |
170 | ||
171 | # Program the device. | |
172 | upload: applet/$(TARGET).hex | |
173 | stty hup < $(PORT); true | |
174 | $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) | |
175 | stty -hup < $(PORT); true | |
176 | ||
177 | ||
178 | # Display size of file. | |
179 | HEXSIZE = $(SIZE) --target=$(FORMAT) applet/$(TARGET).hex | |
180 | ELFSIZE = $(SIZE) applet/$(TARGET).elf | |
181 | sizebefore: | |
182 | @if [ -f applet/$(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(HEXSIZE); echo; fi | |
183 | ||
184 | sizeafter: | |
185 | @if [ -f applet/$(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); echo; fi | |
186 | ||
187 | ||
188 | # Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. | |
189 | COFFCONVERT=$(OBJCOPY) --debugging \ | |
190 | --change-section-address .data-0x800000 \ | |
191 | --change-section-address .bss-0x800000 \ | |
192 | --change-section-address .noinit-0x800000 \ | |
193 | --change-section-address .eeprom-0x810000 | |
194 | ||
195 | ||
196 | coff: applet/$(TARGET).elf | |
197 | $(COFFCONVERT) -O coff-avr applet/$(TARGET).elf $(TARGET).cof | |
198 | ||
199 | ||
200 | extcoff: $(TARGET).elf | |
201 | $(COFFCONVERT) -O coff-ext-avr applet/$(TARGET).elf $(TARGET).cof | |
202 | ||
203 | ||
204 | .SUFFIXES: .elf .hex .eep .lss .sym | |
205 | .PRECIOUS: .o | |
206 | ||
207 | .elf.hex: | |
208 | @echo " COPY $@" | |
209 | @$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ | |
210 | ||
211 | .elf.eep: | |
212 | -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ | |
213 | --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ | |
214 | ||
215 | # Create extended listing file from ELF output file. | |
216 | .elf.lss: | |
217 | $(OBJDUMP) -h -S $< > $@ | |
218 | ||
219 | # Create a symbol table from ELF output file. | |
220 | .elf.sym: | |
221 | $(NM) -n $< > $@ | |
222 | ||
223 | # Link: create ELF output file from library. | |
224 | applet/$(TARGET).elf: applet/$(TARGET).cpp applet/core.a Configuration.h | |
225 | @echo " CXX $@" | |
226 | @$(CC) $(ALL_CXXFLAGS) -Wl,--gc-sections -o $@ applet/$(TARGET).cpp -L. applet/core.a $(LDFLAGS) | |
227 | ||
228 | applet/core.a: $(OBJ) Configuration.h | |
229 | @for i in $(OBJ); do echo " AR $$i"; $(AR) rcs applet/core.a $$i; done | |
230 | ||
231 | %.o: %.c Configuration.h $(MAKEFILE) | |
232 | @echo " CC $@" | |
233 | @$(CC) -c $(ALL_CFLAGS) $< -o $@ | |
234 | ||
235 | %.o: %.cpp Configuration.h $(MAKEFILE) | |
236 | @echo " CXX $@" | |
237 | @$(CXX) -c $(ALL_CXXFLAGS) $< -o $@ | |
238 | ||
239 | # Target: clean project. | |
240 | clean: | |
241 | @echo " RM applet/*" | |
242 | @$(REMOVE) applet/$(TARGET).hex applet/$(TARGET).eep applet/$(TARGET).cof applet/$(TARGET).elf \ | |
243 | applet/$(TARGET).map applet/$(TARGET).sym applet/$(TARGET).lss applet/$(TARGET).cpp applet/core.a \ | |
244 | $(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d) $(CXXSRC:.cpp=.s) $(CXXSRC:.cpp=.d) | |
245 | @echo " RMDIR applet/" | |
246 | @rmdir applet | |
247 | ||
248 | depend: | |
249 | if grep '^# DO NOT DELETE' $(MAKEFILE) >/dev/null; \ | |
250 | then \ | |
251 | sed -e '/^# DO NOT DELETE/,$$d' $(MAKEFILE) > \ | |
252 | $(MAKEFILE).$$$$ && \ | |
253 | $(MV) $(MAKEFILE).$$$$ $(MAKEFILE); \ | |
254 | fi | |
255 | echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' \ | |
256 | >> $(MAKEFILE); \ | |
257 | $(CC) -M -mmcu=$(MCU) $(CDEFS) $(CINCS) $(SRC) $(ASRC) >> $(MAKEFILE) | |
258 | ||
259 | .PHONY: all build elf hex eep lss sym program coff extcoff clean depend applet_files sizebefore sizeafter |