/make/arduino-mk

To get this branch, use:
bzr branch http://bzr.ed.am/make/arduino-mk
1 by edam
initial commit
1
#_______________________________________________________________________________
2
#
32 by edam
typos/spelling
3
#                         edam's Arduino makefile
1 by edam
initial commit
4
#_______________________________________________________________________________
40 by Tim Marston
upload now depends on target (added dev to version no.)
5
#                                                                 version 0.4dev
1 by edam
initial commit
6
#
30 by edam
added THANKS, fixed ARDUINODIR default to look in /usr/share/arduino and capitalised the use of "Arduino" where appropriate.
7
# Copyright (C) 2011, 1012 Tim Marston <tim@ed.am>.
1 by edam
initial commit
8
#
9
# Permission is hereby granted, free of charge, to any person obtaining a copy
10
# of this software and associated documentation files (the "Software"), to deal
11
# in the Software without restriction, including without limitation the rights
12
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13
# copies of the Software, and to permit persons to whom the Software is
14
# furnished to do so, subject to the following conditions:
15
#
16
# The above copyright notice and this permission notice shall be included in
17
# all copies or substantial portions of the Software.
18
#
19
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
10 by edam
formatting, and changed default for ARDUINODIR
24
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25
# SOFTWARE.
1 by edam
initial commit
26
#
27
#_______________________________________________________________________________
28
#
29
#
7 by edam
fixed comments for publishing
30
# This is a general purpose makefile for use with Arduino hardware and
30 by edam
added THANKS, fixed ARDUINODIR default to look in /usr/share/arduino and capitalised the use of "Arduino" where appropriate.
31
# software.  It works with the arduino-1.0 software release.  To download the
32
# latest version of this makefile, visit the following website, where you can
33
# also find more information and documentation on it's use.  The following text
34
# can only really be considered a reference to it's use.
7 by edam
fixed comments for publishing
35
#
11 by edam
fixed URL
36
#   http://ed.am/dev/make/arduino-mk
5 by edam
updated comments; added checks for missing or misconfigured variables; use a default TARGET; attempt to autodetect SERIALDEV; added 'boards' goal; fixed use of 'util' project subdirectory.
37
#
10 by edam
formatting, and changed default for ARDUINODIR
38
# This makefile can be used as a drop-in replacement for the Arduino IDE's
12 by edam
cleaned up comments
39
# build system.  To use it, save arduino.mk somewhere (I keep mine at
40
# ~/src/arduino.mk) and create a symlink to it in your project directory named
41
# "Makefile".  For example:
5 by edam
updated comments; added checks for missing or misconfigured variables; use a default TARGET; attempt to autodetect SERIALDEV; added 'boards' goal; fixed use of 'util' project subdirectory.
42
#
7 by edam
fixed comments for publishing
43
#   $ ln -s ~/src/arduino.mk Makefile
5 by edam
updated comments; added checks for missing or misconfigured variables; use a default TARGET; attempt to autodetect SERIALDEV; added 'boards' goal; fixed use of 'util' project subdirectory.
44
#
30 by edam
added THANKS, fixed ARDUINODIR default to look in /usr/share/arduino and capitalised the use of "Arduino" where appropriate.
45
# The Arduino software (version 1.0 or later) is required.  If you are using
46
# Debian (or a derivative), type `apt-get install arduino`.  Otherwise, you
32 by edam
typos/spelling
47
# will have to download the Arduino software manually from http://arduino.cc/.
30 by edam
added THANKS, fixed ARDUINODIR default to look in /usr/share/arduino and capitalised the use of "Arduino" where appropriate.
48
# It is suggested that you install it at ~/opt/arduino if you are unsure.
49
#
50
# If you downloaded the Arduino software manually and unpacked it somewhere
51
# other than ~/opt/arduino, you will need to set up ARDUINODIR to be the path
52
# where you unpacked it.  (If unset, ARDUINODIR defaults to ~/opt/arduino and
53
# then /usr/share/arduino, in that order.)  You might be best to set this in
12 by edam
cleaned up comments
54
# your ~/.profile by adding something like this:
55
#
56
#   export ARDUINODIR=~/somewhere/arduino-1.0
57
#
30 by edam
added THANKS, fixed ARDUINODIR default to look in /usr/share/arduino and capitalised the use of "Arduino" where appropriate.
58
# You will also need to set BOARD to the type of Arduino you're building for.
32 by edam
typos/spelling
59
# Type `make boards` for a list of acceptable values.  You could set a default
60
# in your ~/.profile if you want, but it is suggested that you specify this at
61
# build time, especially if you work with different types of Arduino.  For
62
# example:
12 by edam
cleaned up comments
63
#
64
#   $ export BOARD=uno
65
#   $ make
66
#
67
# You may also need to set SERIALDEV if it is not detected correctly.
68
#
18 by edam
downplay importance of .pde files
69
# The presence of a .ino (or .pde) file causes the arduino.mk to automatically
16 by edam
spellcheck, and added check for missing GNU screen
70
# determine values for SOURCES, TARGET and LIBRARIES.  Any .c, .cc and .cpp
71
# files in the project directory (or any "util" or "utility" subdirectories)
72
# are automatically included in the build and are scanned for Arduino libraries
18 by edam
downplay importance of .pde files
73
# that have been #included. Note, there can only be one .ino (or .pde) file.
5 by edam
updated comments; added checks for missing or misconfigured variables; use a default TARGET; attempt to autodetect SERIALDEV; added 'boards' goal; fixed use of 'util' project subdirectory.
74
#
10 by edam
formatting, and changed default for ARDUINODIR
75
# Alternatively, if you want to manually specify build variables, create a
16 by edam
spellcheck, and added check for missing GNU screen
76
# Makefile that defines SOURCES and LIBRARIES and then includes arduino.mk.
12 by edam
cleaned up comments
77
# (There is no need to define TARGET).  Here is an example Makefile:
5 by edam
updated comments; added checks for missing or misconfigured variables; use a default TARGET; attempt to autodetect SERIALDEV; added 'boards' goal; fixed use of 'util' project subdirectory.
78
#
12 by edam
cleaned up comments
79
#   SOURCES := main.cc other.cc
7 by edam
fixed comments for publishing
80
#   LIBRARIES := EEPROM
81
#   include ~/src/arduino.mk
1 by edam
initial commit
82
#
8 by edam
broke out ARDUINODIR, so it is not configured in the makefile
83
# Here is a complete list of configuration parameters:
84
#
30 by edam
added THANKS, fixed ARDUINODIR default to look in /usr/share/arduino and capitalised the use of "Arduino" where appropriate.
85
# ARDUINODIR   The path where the Arduino software is installed on your system.
4 by edam
added included-library autodetection and updated comments
86
#
30 by edam
added THANKS, fixed ARDUINODIR default to look in /usr/share/arduino and capitalised the use of "Arduino" where appropriate.
87
# ARDUINOCONST The Arduino software version, as an integer, used to define the
25 by edam
added AVRDUDECONF variable; fixed some OS X issues; added SERIALDEV guess warning and invalid BOARD value error
88
#              ARDUINO version constant. This defaults to 100 if undefined.
89
#
90
# AVRDUDECONF  The avrdude.conf to use. If undefined, this defaults to a guess
91
#              based on where the avrdude in use is. If empty, no avrdude.conf
92
#              is passed to avrdude (to the system default is used).
23 by edam
added ARDUINOCONST, AVRTOOLSPATH, detection of avrdude.conf and cleaned up make variable types
93
#
94
# AVRTOOLSPATH A space-separated list of directories to search in order when
32 by edam
typos/spelling
95
#              looking for the avr build tools. This defaults to the system PATH
25 by edam
added AVRDUDECONF variable; fixed some OS X issues; added SERIALDEV guess warning and invalid BOARD value error
96
#              followed by subdirectories in ARDUINODIR if undefined.
23 by edam
added ARDUINOCONST, AVRTOOLSPATH, detection of avrdude.conf and cleaned up make variable types
97
#
12 by edam
cleaned up comments
98
# BOARD        Specify a target board type.  Run `make boards` to see available
99
#              board types.
4 by edam
added included-library autodetection and updated comments
100
#
30 by edam
added THANKS, fixed ARDUINODIR default to look in /usr/share/arduino and capitalised the use of "Arduino" where appropriate.
101
# LIBRARIES    A list of Arduino libraries to build and include.  This is set
23 by edam
added ARDUINOCONST, AVRTOOLSPATH, detection of avrdude.conf and cleaned up make variable types
102
#              automatically if a .ino (or .pde) is found.
103
#
30 by edam
added THANKS, fixed ARDUINODIR default to look in /usr/share/arduino and capitalised the use of "Arduino" where appropriate.
104
# SERIALDEV    The unix device name of the serial device that is the Arduino.
10 by edam
formatting, and changed default for ARDUINODIR
105
#              If unspecified, an attempt is made to determine the name of a
30 by edam
added THANKS, fixed ARDUINODIR default to look in /usr/share/arduino and capitalised the use of "Arduino" where appropriate.
106
#              connected Arduino's serial device.
10 by edam
formatting, and changed default for ARDUINODIR
107
#
23 by edam
added ARDUINOCONST, AVRTOOLSPATH, detection of avrdude.conf and cleaned up make variable types
108
# SOURCES      A list of all source files of whatever language.  The language
109
#              type is determined by the file extension.  This is set
110
#              automatically if a .ino (or .pde) is found.
111
#
10 by edam
formatting, and changed default for ARDUINODIR
112
# TARGET       The name of the target file.  This is set automatically if a
18 by edam
downplay importance of .pde files
113
#              .ino (or .pde) is found, but it is not necessary to set it
10 by edam
formatting, and changed default for ARDUINODIR
114
#              otherwise.
115
#
12 by edam
cleaned up comments
116
# This makefile also defines the following goals for use on the command line
117
# when you run make:
5 by edam
updated comments; added checks for missing or misconfigured variables; use a default TARGET; attempt to autodetect SERIALDEV; added 'boards' goal; fixed use of 'util' project subdirectory.
118
#
12 by edam
cleaned up comments
119
# all          This is the default if no goal is specified.  It builds the
35 by edam
build arduino static lib in .lib using full pathnames in object files (so files of the same name but in different locations can co-exist)
120
#              target.
1 by edam
initial commit
121
#
12 by edam
cleaned up comments
122
# target       Builds the target.
123
#
30 by edam
added THANKS, fixed ARDUINODIR default to look in /usr/share/arduino and capitalised the use of "Arduino" where appropriate.
124
# upload       Uploads the last built target to an attached Arduino.
12 by edam
cleaned up comments
125
#
126
# clean        Deletes files created during the build.
1 by edam
initial commit
127
#
10 by edam
formatting, and changed default for ARDUINODIR
128
# boards       Display a list of available board names, so that you can set the
129
#              BOARD environment variable appropriately.
130
#
16 by edam
spellcheck, and added check for missing GNU screen
131
# monitor      Start `screen` on the serial device.  This is meant to be an
30 by edam
added THANKS, fixed ARDUINODIR default to look in /usr/share/arduino and capitalised the use of "Arduino" where appropriate.
132
#              equivalent to the Arduino serial monitor.
10 by edam
formatting, and changed default for ARDUINODIR
133
#
34 by Tim Marston
added 'size' goal
134
# size         Displays size information about the bulit target.
135
#
10 by edam
formatting, and changed default for ARDUINODIR
136
# <file>       Builds the specified file, either an object file or the target,
137
#              from those that that would be built for the project.
1 by edam
initial commit
138
#_______________________________________________________________________________
5 by edam
updated comments; added checks for missing or misconfigured variables; use a default TARGET; attempt to autodetect SERIALDEV; added 'boards' goal; fixed use of 'util' project subdirectory.
139
#
1 by edam
initial commit
140
23 by edam
added ARDUINOCONST, AVRTOOLSPATH, detection of avrdude.conf and cleaned up make variable types
141
# default arduino software directory, check software exists
8 by edam
broke out ARDUINODIR, so it is not configured in the makefile
142
ifndef ARDUINODIR
30 by edam
added THANKS, fixed ARDUINODIR default to look in /usr/share/arduino and capitalised the use of "Arduino" where appropriate.
143
ARDUINODIR := $(firstword $(wildcard ~/opt/arduino /usr/share/arduino))
8 by edam
broke out ARDUINODIR, so it is not configured in the makefile
144
endif
25 by edam
added AVRDUDECONF variable; fixed some OS X issues; added SERIALDEV guess warning and invalid BOARD value error
145
ifeq "$(wildcard $(ARDUINODIR)/hardware/arduino/boards.txt)" ""
8 by edam
broke out ARDUINODIR, so it is not configured in the makefile
146
$(error ARDUINODIR is not set correctly; arduino software not found)
5 by edam
updated comments; added checks for missing or misconfigured variables; use a default TARGET; attempt to autodetect SERIALDEV; added 'boards' goal; fixed use of 'util' project subdirectory.
147
endif
1 by edam
initial commit
148
23 by edam
added ARDUINOCONST, AVRTOOLSPATH, detection of avrdude.conf and cleaned up make variable types
149
# default arduino version
150
ARDUINOCONST ?= 100
151
152
# default path for avr tools
153
ifndef AVRTOOLSPATH
154
AVRTOOLSPATH := $(subst :, , $(PATH))
155
AVRTOOLSPATH += $(ARDUINODIR)/hardware/tools
156
AVRTOOLSPATH += $(ARDUINODIR)/hardware/tools/avr/bin
157
endif
158
1 by edam
initial commit
159
# auto mode?
160
INOFILE := $(wildcard *.ino *.pde)
161
ifdef INOFILE
25 by edam
added AVRDUDECONF variable; fixed some OS X issues; added SERIALDEV guess warning and invalid BOARD value error
162
ifneq "$(words $(INOFILE))" "1"
5 by edam
updated comments; added checks for missing or misconfigured variables; use a default TARGET; attempt to autodetect SERIALDEV; added 'boards' goal; fixed use of 'util' project subdirectory.
163
$(error There is more than one .pde or .ino file in this directory!)
1 by edam
initial commit
164
endif
23 by edam
added ARDUINOCONST, AVRTOOLSPATH, detection of avrdude.conf and cleaned up make variable types
165
166
# automatically determine sources and targeet
1 by edam
initial commit
167
TARGET := $(basename $(INOFILE))
168
SOURCES := $(INOFILE) \
4 by edam
added included-library autodetection and updated comments
169
	$(wildcard *.c *.cc *.cpp) \
170
	$(wildcard $(addprefix util/, *.c *.cc *.cpp)) \
171
	$(wildcard $(addprefix utility/, *.c *.cc *.cpp))
23 by edam
added ARDUINOCONST, AVRTOOLSPATH, detection of avrdude.conf and cleaned up make variable types
172
4 by edam
added included-library autodetection and updated comments
173
# automatically determine included libraries
35 by edam
build arduino static lib in .lib using full pathnames in object files (so files of the same name but in different locations can co-exist)
174
LIBRARIES := $(filter $(notdir $(wildcard $(ARDUINODIR)/libraries/*)), \
4 by edam
added included-library autodetection and updated comments
175
	$(shell sed -ne "s/^ *\# *include *[<\"]\(.*\)\.h[>\"]/\1/p" $(SOURCES)))
23 by edam
added ARDUINOCONST, AVRTOOLSPATH, detection of avrdude.conf and cleaned up make variable types
176
5 by edam
updated comments; added checks for missing or misconfigured variables; use a default TARGET; attempt to autodetect SERIALDEV; added 'boards' goal; fixed use of 'util' project subdirectory.
177
endif
178
23 by edam
added ARDUINOCONST, AVRTOOLSPATH, detection of avrdude.conf and cleaned up make variable types
179
# no serial device? make a poor attempt to detect an arduino
25 by edam
added AVRDUDECONF variable; fixed some OS X issues; added SERIALDEV guess warning and invalid BOARD value error
180
SERIALDEVGUESS := 0
181
ifeq "$(SERIALDEV)" ""
182
SERIALDEV := $(firstword $(wildcard \
37 by edam
Removed non-standard sed command and added OSX usbserial device (thanks to
183
	/dev/ttyACM? /dev/ttyUSB? /dev/tty.usbserial* /dev/tty.usbmodem*))
25 by edam
added AVRDUDECONF variable; fixed some OS X issues; added SERIALDEV guess warning and invalid BOARD value error
184
SERIALDEVGUESS := 1
23 by edam
added ARDUINOCONST, AVRTOOLSPATH, detection of avrdude.conf and cleaned up make variable types
185
endif
186
187
# software
188
findsoftware = $(firstword $(wildcard $(addsuffix /$(1), $(AVRTOOLSPATH))))
189
CC := $(call findsoftware,avr-gcc)
190
CXX := $(call findsoftware,avr-g++)
191
LD := $(call findsoftware,avr-ld)
192
AR := $(call findsoftware,avr-ar)
193
OBJCOPY := $(call findsoftware,avr-objcopy)
194
AVRDUDE := $(call findsoftware,avrdude)
34 by Tim Marston
added 'size' goal
195
AVRSIZE := $(call findsoftware,avr-size)
23 by edam
added ARDUINOCONST, AVRTOOLSPATH, detection of avrdude.conf and cleaned up make variable types
196
1 by edam
initial commit
197
# files
25 by edam
added AVRDUDECONF variable; fixed some OS X issues; added SERIALDEV guess warning and invalid BOARD value error
198
TARGET := $(if $(TARGET),$(TARGET),a.out)
1 by edam
initial commit
199
OBJECTS := $(addsuffix .o, $(basename $(SOURCES)))
36 by edam
added dependency generation to project files
200
DEPFILES := $(patsubst %, .dep/%.dep, $(SOURCES))
35 by edam
build arduino static lib in .lib using full pathnames in object files (so files of the same name but in different locations can co-exist)
201
ARDUINOCOREDIR := $(ARDUINODIR)/hardware/arduino/cores/arduino
202
ARDUINOLIB := .lib/arduino.a
203
ARDUINOLIBLIBSDIR := $(ARDUINODIR)/libraries
204
ARDUINOLIBLIBSPATH := $(foreach lib, $(LIBRARIES), \
205
	$(ARDUINODIR)/libraries/$(lib)/ $(ARDUINODIR)/libraries/$(lib)/utility/ )
206
ARDUINOLIBOBJS := $(foreach dir, $(ARDUINOCOREDIR) $(ARDUINOLIBLIBSPATH), \
207
	$(patsubst %, .lib/%.o, $(wildcard $(addprefix $(dir)/, *.c *.cpp))))
25 by edam
added AVRDUDECONF variable; fixed some OS X issues; added SERIALDEV guess warning and invalid BOARD value error
208
ifeq "$(AVRDUDECONF)" ""
209
ifeq "$(AVRDUDE)" "$(ARDUINODIR)/hardware/tools/avr/bin/avrdude"
210
AVRDUDECONF := $(ARDUINODIR)/hardware/tools/avr/etc/avrdude.conf
211
else
23 by edam
added ARDUINOCONST, AVRTOOLSPATH, detection of avrdude.conf and cleaned up make variable types
212
AVRDUDECONF := $(wildcard $(AVRDUDE).conf)
25 by edam
added AVRDUDECONF variable; fixed some OS X issues; added SERIALDEV guess warning and invalid BOARD value error
213
endif
214
endif
215
216
# no board?
217
ifndef BOARD
218
ifneq "$(MAKECMDGOALS)" "boards"
219
ifneq "$(MAKECMDGOALS)" "clean"
220
$(error BOARD is unset.  Type 'make boards' to see possible values)
221
endif
222
endif
223
endif
1 by edam
initial commit
224
2 by edam
fixed build (missing library), tested upload, and made the .elf file an intermediate file (the .hex file is now the target)
225
# obtain board parameters from the arduino boards.txt file
1 by edam
initial commit
226
BOARDS_FILE := $(ARDUINODIR)/hardware/arduino/boards.txt
227
BOARD_BUILD_MCU := \
228
	$(shell sed -ne "s/$(BOARD).build.mcu=\(.*\)/\1/p" $(BOARDS_FILE))
229
BOARD_BUILD_FCPU := \
230
	$(shell sed -ne "s/$(BOARD).build.f_cpu=\(.*\)/\1/p" $(BOARDS_FILE))
231
BOARD_BUILD_VARIANT := \
232
	$(shell sed -ne "s/$(BOARD).build.variant=\(.*\)/\1/p" $(BOARDS_FILE))
233
BOARD_UPLOAD_SPEED := \
234
	$(shell sed -ne "s/$(BOARD).upload.speed=\(.*\)/\1/p" $(BOARDS_FILE))
235
BOARD_UPLOAD_PROTOCOL := \
236
	$(shell sed -ne "s/$(BOARD).upload.protocol=\(.*\)/\1/p" $(BOARDS_FILE))
237
25 by edam
added AVRDUDECONF variable; fixed some OS X issues; added SERIALDEV guess warning and invalid BOARD value error
238
# invalid board?
239
ifeq "$(BOARD_BUILD_MCU)" ""
240
ifneq "$(MAKECMDGOALS)" "boards"
241
ifneq "$(MAKECMDGOALS)" "clean"
242
$(error BOARD is invalid.  Type 'make boards' to see possible values)
243
endif
244
endif
245
endif
246
1 by edam
initial commit
247
# flags
36 by edam
added dependency generation to project files
248
CPPFLAGS := -Os -Wall -fno-exceptions -ffunction-sections -fdata-sections
249
CPPFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
250
CPPFLAGS += -mmcu=$(BOARD_BUILD_MCU)
251
CPPFLAGS += -DF_CPU=$(BOARD_BUILD_FCPU) -DARDUINO=$(ARDUINOCONST)
252
CPPFLAGS += -I. -Iutil -Iutility -I$(ARDUINOCOREDIR)
253
CPPFLAGS += -I$(ARDUINODIR)/hardware/arduino/variants/$(BOARD_BUILD_VARIANT)/
254
CPPFLAGS += $(addprefix -I$(ARDUINODIR)/libraries/, $(LIBRARIES))
255
CPPFLAGS += $(patsubst %, -I$(ARDUINODIR)/libraries/%/utility, $(LIBRARIES))
256
CPPDEPFLAGS = -MMD -MP -MF .dep/$<.dep
257
CPPINOFLAGS := -x c++ -include $(ARDUINOCOREDIR)/Arduino.h
23 by edam
added ARDUINOCONST, AVRTOOLSPATH, detection of avrdude.conf and cleaned up make variable types
258
AVRDUDEFLAGS := $(addprefix -C , $(AVRDUDECONF)) -DV
1 by edam
initial commit
259
AVRDUDEFLAGS += -p $(BOARD_BUILD_MCU) -P $(SERIALDEV)
260
AVRDUDEFLAGS += -c $(BOARD_UPLOAD_PROTOCOL) -b $(BOARD_UPLOAD_SPEED)
23 by edam
added ARDUINOCONST, AVRTOOLSPATH, detection of avrdude.conf and cleaned up make variable types
261
LINKFLAGS := -Os -Wl,--gc-sections -mmcu=$(BOARD_BUILD_MCU)
1 by edam
initial commit
262
25 by edam
added AVRDUDECONF variable; fixed some OS X issues; added SERIALDEV guess warning and invalid BOARD value error
263
# figure out which arg to use with stty
264
STTYFARG := $(shell stty --help > /dev/null 2>&1 && echo -F || echo -f)
265
36 by edam
added dependency generation to project files
266
# include dependencies
267
ifneq "$(MAKECMDGOALS)" "clean"
268
-include $(DEPFILES)
269
endif
270
1 by edam
initial commit
271
# default rule
272
.DEFAULT_GOAL := all
273
274
#_______________________________________________________________________________
275
#                                                                          RULES
276
34 by Tim Marston
added 'size' goal
277
.PHONY:	all target upload clean boards monitor size
1 by edam
initial commit
278
35 by edam
build arduino static lib in .lib using full pathnames in object files (so files of the same name but in different locations can co-exist)
279
all: target
1 by edam
initial commit
280
2 by edam
fixed build (missing library), tested upload, and made the .elf file an intermediate file (the .hex file is now the target)
281
target: $(TARGET).hex
1 by edam
initial commit
282
40 by Tim Marston
upload now depends on target (added dev to version no.)
283
upload: target
13 by edam
announce that we're uploading and error on SERIALDEV blank
284
	@echo "\nUploading to board..."
285
	@test -n "$(SERIALDEV)" || { \
286
		echo "error: SERIALDEV could not be determined automatically." >&2; \
287
		exit 1; }
27 by edam
fixed test not returning 0
288
	@test 0 -eq $(SERIALDEVGUESS) || { \
25 by edam
added AVRDUDECONF variable; fixed some OS X issues; added SERIALDEV guess warning and invalid BOARD value error
289
		echo "*GUESSING* at serial device:" $(SERIALDEV); \
290
		echo; }
291
	stty $(STTYFARG) $(SERIALDEV) hupcl
2 by edam
fixed build (missing library), tested upload, and made the .elf file an intermediate file (the .hex file is now the target)
292
	$(AVRDUDE) $(AVRDUDEFLAGS) -U flash:w:$(TARGET).hex:i
1 by edam
initial commit
293
294
clean:
295
	rm -f $(OBJECTS)
296
	rm -f $(TARGET).elf $(TARGET).hex $(ARDUINOLIB) *~
36 by edam
added dependency generation to project files
297
	rm -rf .lib .dep
1 by edam
initial commit
298
5 by edam
updated comments; added checks for missing or misconfigured variables; use a default TARGET; attempt to autodetect SERIALDEV; added 'boards' goal; fixed use of 'util' project subdirectory.
299
boards:
300
	@echo Available values for BOARD:
41 by edam
updated boards goal to work on OS X (explicitly use extended REs)
301
	@sed -nEe '/^#/d; /^[^.]+\.name=/p' $(BOARDS_FILE) | \
302
		sed -Ee 's/([^.]+)\.name=(.*)/\1            \2/' \
303
			-e 's/(.{12}) *(.*)/\1 \2/'
5 by edam
updated comments; added checks for missing or misconfigured variables; use a default TARGET; attempt to autodetect SERIALDEV; added 'boards' goal; fixed use of 'util' project subdirectory.
304
9 by edam
added "monitor" goal; documented boards and monitor goals
305
monitor:
13 by edam
announce that we're uploading and error on SERIALDEV blank
306
	@test -n "$(SERIALDEV)" || { \
307
		echo "error: SERIALDEV could not be determined automatically." >&2; \
308
		exit 1; }
16 by edam
spellcheck, and added check for missing GNU screen
309
	@test -n `which screen` || { \
310
		echo "error: can't find GNU screen, you might need to install it." >&2 \
311
		ecit 1; }
27 by edam
fixed test not returning 0
312
	@test 0 -eq $(SERIALDEVGUESS) || { \
25 by edam
added AVRDUDECONF variable; fixed some OS X issues; added SERIALDEV guess warning and invalid BOARD value error
313
		echo "*GUESSING* at serial device:" $(SERIALDEV); \
314
		echo; }
9 by edam
added "monitor" goal; documented boards and monitor goals
315
	screen $(SERIALDEV)
316
34 by Tim Marston
added 'size' goal
317
size: $(TARGET).elf
318
	echo && $(AVRSIZE) --format=avr --mcu=$(BOARD_BUILD_MCU) $(TARGET).elf
319
1 by edam
initial commit
320
# building the target
321
2 by edam
fixed build (missing library), tested upload, and made the .elf file an intermediate file (the .hex file is now the target)
322
$(TARGET).hex: $(TARGET).elf
323
	$(OBJCOPY) -O ihex -R .eeprom $< $@
324
325
.INTERMEDIATE: $(TARGET).elf
326
1 by edam
initial commit
327
$(TARGET).elf: $(ARDUINOLIB) $(OBJECTS)
2 by edam
fixed build (missing library), tested upload, and made the .elf file an intermediate file (the .hex file is now the target)
328
	$(CC) $(LINKFLAGS) $(OBJECTS) $(ARDUINOLIB) -o $@
1 by edam
initial commit
329
36 by edam
added dependency generation to project files
330
%.o: %.c
331
	mkdir -p .dep/$(dir $<)
332
	$(COMPILE.c) $(CPPDEPFLAGS) -o $@ $<
333
334
%.o: %.cpp
335
	mkdir -p .dep/$(dir $<)
336
	$(COMPILE.cpp) $(CPPDEPFLAGS) -o $@ $<
337
338
%.o: %.cc
339
	mkdir -p .dep/$(dir $<)
340
	$(COMPILE.cpp) $(CPPDEPFLAGS) -o $@ $<
341
342
%.o: %.C
343
	mkdir -p .dep/$(dir $<)
344
	$(COMPILE.cpp) $(CPPDEPFLAGS) -o $@ $<
35 by edam
build arduino static lib in .lib using full pathnames in object files (so files of the same name but in different locations can co-exist)
345
1 by edam
initial commit
346
%.o: %.ino
36 by edam
added dependency generation to project files
347
	mkdir -p .dep/$(dir $<)
348
	$(COMPILE.cpp) $(CPPDEPFLAGS) -o $@ $(CPPINOFLAGS) $<
1 by edam
initial commit
349
350
%.o: %.pde
36 by edam
added dependency generation to project files
351
	mkdir -p .dep/$(dir $<)
352
	$(COMPILE.cpp) $(CPPDEPFLAGS) -o $@ -x c++ -include $(ARDUINOCOREDIR)/Arduino.h $<
1 by edam
initial commit
353
354
# building the arduino library
355
4 by edam
added included-library autodetection and updated comments
356
$(ARDUINOLIB): $(ARDUINOLIBOBJS)
1 by edam
initial commit
357
	$(AR) rcs $@ $?
35 by edam
build arduino static lib in .lib using full pathnames in object files (so files of the same name but in different locations can co-exist)
358
359
.lib/%.c.o: %.c
360
	mkdir -p $(dir $@)
361
	$(COMPILE.c) -o $@ $<
362
363
.lib/%.cpp.o: %.cpp
364
	mkdir -p $(dir $@)
365
	$(COMPILE.cpp) -o $@ $<
366
367
.lib/%.cc.o: %.cc
368
	mkdir -p $(dir $@)
369
	$(COMPILE.cpp) -o $@ $<
370
371
.lib/%.C.o: %.C
372
	mkdir -p $(dir $@)
14 by Dan
search for software in ARDUINODIR; include library/*/utility code in core lib
373
	$(COMPILE.cpp) -o $@ $<