bzr branch
http://bzr.ed.am/make/arduino-mk
| 
1
by edam
 initial commit  | 
1  | 
#_______________________________________________________________________________  | 
2  | 
#  | 
|
3  | 
# edam's arduino makefile  | 
|
4  | 
#_______________________________________________________________________________  | 
|
5  | 
# version 0.1  | 
|
6  | 
#  | 
|
7  | 
# Copyright (c) 2011 Tim Marston <tim@ed.am>.  | 
|
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  | 
| 
10
by edam
 formatting, and changed default for ARDUINODIR  | 
31  | 
# software. It works with the arduino-1.0 release and requires that software  | 
32  | 
# to be downloaded separately (see http://arduino.cc/). To download the latest  | 
|
33  | 
# version of this makefile, visit the following website, where you can also  | 
|
34  | 
# find more information and documentation on it's use. The following text can  | 
|
35  | 
# only really be considered a reference to it's use.  | 
|
| 
7
by edam
 fixed comments for publishing  | 
36  | 
#  | 
| 
11
by edam
 fixed URL  | 
37  | 
# 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.  | 
38  | 
#  | 
| 
10
by edam
 formatting, and changed default for ARDUINODIR  | 
39  | 
# This makefile can be used as a drop-in replacement for the Arduino IDE's  | 
| 
12
by edam
 cleaned up comments  | 
40  | 
# build system. To use it, save arduino.mk somewhere (I keep mine at  | 
41  | 
# ~/src/arduino.mk) and create a symlink to it in your project directory named  | 
|
42  | 
# "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.  | 
43  | 
#  | 
| 
7
by edam
 fixed comments for publishing  | 
44  | 
# $ 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.  | 
45  | 
#  | 
| 
16
by edam
 spellcheck, and added check for missing GNU screen  | 
46  | 
# You also need to set up a couple of environment variables. ARDUINODIR should  | 
| 
12
by edam
 cleaned up comments  | 
47  | 
# be set to the path where you unpacked the arduino software from arduino.cc  | 
48  | 
# (it defaults to ~/opt/arduino if unset). You might be best to set this in  | 
|
49  | 
# your ~/.profile by adding something like this:  | 
|
50  | 
#  | 
|
51  | 
# export ARDUINODIR=~/somewhere/arduino-1.0  | 
|
52  | 
#  | 
|
53  | 
# You will also need to set BOARD to the type of arduino you're using. This  | 
|
54  | 
# can be done when running make (or you could set a default in ~/.profile and  | 
|
| 
16
by edam
 spellcheck, and added check for missing GNU screen  | 
55  | 
# override it as necessary). For example:  | 
| 
12
by edam
 cleaned up comments  | 
56  | 
#  | 
57  | 
# $ export BOARD=uno  | 
|
58  | 
# $ make  | 
|
59  | 
#  | 
|
60  | 
# You may also need to set SERIALDEV if it is not detected correctly.  | 
|
61  | 
#  | 
|
| 
18
by edam
 downplay importance of .pde files  | 
62  | 
# 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  | 
63  | 
# determine values for SOURCES, TARGET and LIBRARIES. Any .c, .cc and .cpp  | 
64  | 
# files in the project directory (or any "util" or "utility" subdirectories)  | 
|
65  | 
# are automatically included in the build and are scanned for Arduino libraries  | 
|
| 
18
by edam
 downplay importance of .pde files  | 
66  | 
# 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.  | 
67  | 
#  | 
| 
10
by edam
 formatting, and changed default for ARDUINODIR  | 
68  | 
# Alternatively, if you want to manually specify build variables, create a  | 
| 
16
by edam
 spellcheck, and added check for missing GNU screen  | 
69  | 
# Makefile that defines SOURCES and LIBRARIES and then includes arduino.mk.  | 
| 
12
by edam
 cleaned up comments  | 
70  | 
# (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.  | 
71  | 
#  | 
| 
12
by edam
 cleaned up comments  | 
72  | 
# SOURCES := main.cc other.cc  | 
| 
7
by edam
 fixed comments for publishing  | 
73  | 
# LIBRARIES := EEPROM  | 
74  | 
# include ~/src/arduino.mk  | 
|
| 
1
by edam
 initial commit  | 
75  | 
#  | 
| 
8
by edam
 broke out ARDUINODIR, so it is not configured in the makefile  | 
76  | 
# Here is a complete list of configuration parameters:  | 
77  | 
#  | 
|
| 
10
by edam
 formatting, and changed default for ARDUINODIR  | 
78  | 
# ARDUINODIR The path where you have installed/unpacked the arduino software  | 
79  | 
# (from http://arduino.cc/)  | 
|
| 
4
by edam
 added included-library autodetection and updated comments  | 
80  | 
#  | 
| 
23
by edam
 added ARDUINOCONST, AVRTOOLSPATH, detection of avrdude.conf and cleaned up make variable types  | 
81  | 
# 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  | 
82  | 
# ARDUINO version constant. This defaults to 100 if undefined.  | 
83  | 
#  | 
|
84  | 
# AVRDUDECONF The avrdude.conf to use. If undefined, this defaults to a guess  | 
|
85  | 
# based on where the avrdude in use is. If empty, no avrdude.conf  | 
|
86  | 
# 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  | 
87  | 
#  | 
88  | 
# AVRTOOLSPATH A space-separated list of directories to search in order when  | 
|
89  | 
# lookin 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  | 
90  | 
# followed by subdirectories in ARDUINODIR if undefined.  | 
| 
23
by edam
 added ARDUINOCONST, AVRTOOLSPATH, detection of avrdude.conf and cleaned up make variable types  | 
91  | 
#  | 
| 
12
by edam
 cleaned up comments  | 
92  | 
# BOARD Specify a target board type. Run `make boards` to see available  | 
93  | 
# board types.  | 
|
| 
4
by edam
 added included-library autodetection and updated comments  | 
94  | 
#  | 
| 
23
by edam
 added ARDUINOCONST, AVRTOOLSPATH, detection of avrdude.conf and cleaned up make variable types  | 
95  | 
# LIBRARIES A list of arduino libraries to build and include. This is set  | 
96  | 
# automatically if a .ino (or .pde) is found.  | 
|
97  | 
#  | 
|
| 
16
by edam
 spellcheck, and added check for missing GNU screen  | 
98  | 
# SERIALDEV The unix device name of the serial device that is the arduino.  | 
| 
10
by edam
 formatting, and changed default for ARDUINODIR  | 
99  | 
# If unspecified, an attempt is made to determine the name of a  | 
100  | 
# connected arduino's serial device.  | 
|
101  | 
#  | 
|
| 
23
by edam
 added ARDUINOCONST, AVRTOOLSPATH, detection of avrdude.conf and cleaned up make variable types  | 
102  | 
# SOURCES A list of all source files of whatever language. The language  | 
103  | 
# type is determined by the file extension. This is set  | 
|
104  | 
# automatically if a .ino (or .pde) is found.  | 
|
105  | 
#  | 
|
| 
10
by edam
 formatting, and changed default for ARDUINODIR  | 
106  | 
# TARGET The name of the target file. This is set automatically if a  | 
| 
18
by edam
 downplay importance of .pde files  | 
107  | 
# .ino (or .pde) is found, but it is not necessary to set it  | 
| 
10
by edam
 formatting, and changed default for ARDUINODIR  | 
108  | 
# otherwise.  | 
109  | 
#  | 
|
| 
12
by edam
 cleaned up comments  | 
110  | 
# This makefile also defines the following goals for use on the command line  | 
111  | 
# 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.  | 
112  | 
#  | 
| 
12
by edam
 cleaned up comments  | 
113  | 
# all This is the default if no goal is specified. It builds the  | 
| 
10
by edam
 formatting, and changed default for ARDUINODIR  | 
114  | 
# target and uploads it.  | 
| 
1
by edam
 initial commit  | 
115  | 
#  | 
| 
12
by edam
 cleaned up comments  | 
116  | 
# target Builds the target.  | 
117  | 
#  | 
|
118  | 
# upload Uploads the last built target to an attached arduino.  | 
|
119  | 
#  | 
|
120  | 
# clean Deletes files created during the build.  | 
|
| 
1
by edam
 initial commit  | 
121  | 
#  | 
| 
10
by edam
 formatting, and changed default for ARDUINODIR  | 
122  | 
# boards Display a list of available board names, so that you can set the  | 
123  | 
# BOARD environment variable appropriately.  | 
|
124  | 
#  | 
|
| 
16
by edam
 spellcheck, and added check for missing GNU screen  | 
125  | 
# monitor Start `screen` on the serial device. This is meant to be an  | 
126  | 
# equivalent to the arduino serial monitor.  | 
|
| 
10
by edam
 formatting, and changed default for ARDUINODIR  | 
127  | 
#  | 
128  | 
# <file> Builds the specified file, either an object file or the target,  | 
|
129  | 
# from those that that would be built for the project.  | 
|
| 
1
by edam
 initial commit  | 
130  | 
#_______________________________________________________________________________  | 
| 
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.  | 
131  | 
#  | 
| 
1
by edam
 initial commit  | 
132  | 
|
| 
23
by edam
 added ARDUINOCONST, AVRTOOLSPATH, detection of avrdude.conf and cleaned up make variable types  | 
133  | 
# default arduino software directory, check software exists  | 
| 
8
by edam
 broke out ARDUINODIR, so it is not configured in the makefile  | 
134  | 
ifndef ARDUINODIR  | 
| 
10
by edam
 formatting, and changed default for ARDUINODIR  | 
135  | 
ARDUINODIR := $(wildcard ~/opt/arduino)  | 
| 
8
by edam
 broke out ARDUINODIR, so it is not configured in the makefile  | 
136  | 
endif  | 
| 
25
by edam
 added AVRDUDECONF variable; fixed some OS X issues; added SERIALDEV guess warning and invalid BOARD value error  | 
137  | 
ifeq "$(wildcard $(ARDUINODIR)/hardware/arduino/boards.txt)" ""  | 
| 
8
by edam
 broke out ARDUINODIR, so it is not configured in the makefile  | 
138  | 
$(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.  | 
139  | 
endif  | 
| 
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 version  | 
142  | 
ARDUINOCONST ?= 100  | 
|
143  | 
||
144  | 
# default path for avr tools  | 
|
145  | 
ifndef AVRTOOLSPATH  | 
|
146  | 
AVRTOOLSPATH := $(subst :, , $(PATH))  | 
|
147  | 
AVRTOOLSPATH += $(ARDUINODIR)/hardware/tools  | 
|
148  | 
AVRTOOLSPATH += $(ARDUINODIR)/hardware/tools/avr/bin  | 
|
149  | 
endif  | 
|
150  | 
||
| 
1
by edam
 initial commit  | 
151  | 
# auto mode?  | 
152  | 
INOFILE := $(wildcard *.ino *.pde)  | 
|
153  | 
ifdef INOFILE  | 
|
| 
25
by edam
 added AVRDUDECONF variable; fixed some OS X issues; added SERIALDEV guess warning and invalid BOARD value error  | 
154  | 
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.  | 
155  | 
$(error There is more than one .pde or .ino file in this directory!)  | 
| 
1
by edam
 initial commit  | 
156  | 
endif  | 
| 
23
by edam
 added ARDUINOCONST, AVRTOOLSPATH, detection of avrdude.conf and cleaned up make variable types  | 
157  | 
|
158  | 
# automatically determine sources and targeet  | 
|
| 
1
by edam
 initial commit  | 
159  | 
TARGET := $(basename $(INOFILE))  | 
160  | 
SOURCES := $(INOFILE) \  | 
|
| 
4
by edam
 added included-library autodetection and updated comments  | 
161  | 
$(wildcard *.c *.cc *.cpp) \  | 
162  | 
$(wildcard $(addprefix util/, *.c *.cc *.cpp)) \  | 
|
163  | 
$(wildcard $(addprefix utility/, *.c *.cc *.cpp))  | 
|
| 
23
by edam
 added ARDUINOCONST, AVRTOOLSPATH, detection of avrdude.conf and cleaned up make variable types  | 
164  | 
|
| 
4
by edam
 added included-library autodetection and updated comments  | 
165  | 
# automatically determine included libraries  | 
166  | 
ARDUINOLIBSAVAIL := $(notdir $(wildcard $(ARDUINODIR)/libraries/*))  | 
|
167  | 
LIBRARIES := $(filter $(ARDUINOLIBSAVAIL), \  | 
|
168  | 
$(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  | 
169  | 
|
| 
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.  | 
170  | 
endif  | 
171  | 
||
| 
23
by edam
 added ARDUINOCONST, AVRTOOLSPATH, detection of avrdude.conf and cleaned up make variable types  | 
172  | 
# 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  | 
173  | 
SERIALDEVGUESS := 0  | 
174  | 
ifeq "$(SERIALDEV)" ""  | 
|
175  | 
SERIALDEV := $(firstword $(wildcard \  | 
|
176  | 
/dev/ttyACM? /dev/ttyUSB? /dev/tty.usbmodem*))  | 
|
177  | 
SERIALDEVGUESS := 1  | 
|
| 
23
by edam
 added ARDUINOCONST, AVRTOOLSPATH, detection of avrdude.conf and cleaned up make variable types  | 
178  | 
endif  | 
179  | 
||
180  | 
# software  | 
|
181  | 
findsoftware = $(firstword $(wildcard $(addsuffix /$(1), $(AVRTOOLSPATH))))  | 
|
182  | 
CC := $(call findsoftware,avr-gcc)  | 
|
183  | 
CXX := $(call findsoftware,avr-g++)  | 
|
184  | 
LD := $(call findsoftware,avr-ld)  | 
|
185  | 
AR := $(call findsoftware,avr-ar)  | 
|
186  | 
OBJCOPY := $(call findsoftware,avr-objcopy)  | 
|
187  | 
AVRDUDE := $(call findsoftware,avrdude)  | 
|
188  | 
||
| 
1
by edam
 initial commit  | 
189  | 
# files  | 
| 
25
by edam
 added AVRDUDECONF variable; fixed some OS X issues; added SERIALDEV guess warning and invalid BOARD value error  | 
190  | 
TARGET := $(if $(TARGET),$(TARGET),a.out)  | 
| 
1
by edam
 initial commit  | 
191  | 
OBJECTS := $(addsuffix .o, $(basename $(SOURCES)))  | 
192  | 
ARDUINOSRCDIR := $(ARDUINODIR)/hardware/arduino/cores/arduino  | 
|
| 
15
by edam
 fixed detection of env. vars. and a typo in a rule that caused it not to work  | 
193  | 
ARDUINOLIBSDIR := $(ARDUINODIR)/libraries  | 
| 
1
by edam
 initial commit  | 
194  | 
ARDUINOLIB := _arduino.a  | 
| 
14
by Dan
 search for software in ARDUINODIR; include library/*/utility code in core lib  | 
195  | 
ARDUINOLIBTMP := $(ARDUINOLIB).tmp  | 
| 
4
by edam
 added included-library autodetection and updated comments  | 
196  | 
ARDUINOLIBOBJS := $(patsubst %, $(ARDUINOLIBTMP)/%.o, $(basename $(notdir \  | 
197  | 
$(wildcard $(addprefix $(ARDUINOSRCDIR)/, *.c *.cpp)))))  | 
|
198  | 
ARDUINOLIBOBJS += $(foreach lib, $(LIBRARIES), \  | 
|
199  | 
$(patsubst %, $(ARDUINOLIBTMP)/%.o, $(basename $(notdir \  | 
|
| 
15
by edam
 fixed detection of env. vars. and a typo in a rule that caused it not to work  | 
200  | 
$(wildcard $(addprefix $(ARDUINOLIBSDIR)/$(lib)/, *.c *.cpp)) \  | 
201  | 
$(wildcard $(addprefix $(ARDUINOLIBSDIR)/$(lib)/utility/, *.c *.cpp)) ))))  | 
|
| 
25
by edam
 added AVRDUDECONF variable; fixed some OS X issues; added SERIALDEV guess warning and invalid BOARD value error  | 
202  | 
ifeq "$(AVRDUDECONF)" ""  | 
203  | 
ifeq "$(AVRDUDE)" "$(ARDUINODIR)/hardware/tools/avr/bin/avrdude"  | 
|
204  | 
AVRDUDECONF := $(ARDUINODIR)/hardware/tools/avr/etc/avrdude.conf  | 
|
205  | 
else  | 
|
| 
23
by edam
 added ARDUINOCONST, AVRTOOLSPATH, detection of avrdude.conf and cleaned up make variable types  | 
206  | 
AVRDUDECONF := $(wildcard $(AVRDUDE).conf)  | 
| 
25
by edam
 added AVRDUDECONF variable; fixed some OS X issues; added SERIALDEV guess warning and invalid BOARD value error  | 
207  | 
endif  | 
208  | 
endif  | 
|
209  | 
||
210  | 
# no board?  | 
|
211  | 
ifndef BOARD  | 
|
212  | 
ifneq "$(MAKECMDGOALS)" "boards"  | 
|
213  | 
ifneq "$(MAKECMDGOALS)" "clean"  | 
|
214  | 
$(error BOARD is unset. Type 'make boards' to see possible values)  | 
|
215  | 
endif  | 
|
216  | 
endif  | 
|
217  | 
endif  | 
|
| 
1
by edam
 initial commit  | 
218  | 
|
| 
2
by edam
 fixed build (missing library), tested upload, and made the .elf file an intermediate file (the .hex file is now the target)  | 
219  | 
# obtain board parameters from the arduino boards.txt file  | 
| 
1
by edam
 initial commit  | 
220  | 
BOARDS_FILE := $(ARDUINODIR)/hardware/arduino/boards.txt  | 
221  | 
BOARD_BUILD_MCU := \  | 
|
222  | 
$(shell sed -ne "s/$(BOARD).build.mcu=\(.*\)/\1/p" $(BOARDS_FILE))  | 
|
223  | 
BOARD_BUILD_FCPU := \  | 
|
224  | 
$(shell sed -ne "s/$(BOARD).build.f_cpu=\(.*\)/\1/p" $(BOARDS_FILE))  | 
|
225  | 
BOARD_BUILD_VARIANT := \  | 
|
226  | 
$(shell sed -ne "s/$(BOARD).build.variant=\(.*\)/\1/p" $(BOARDS_FILE))  | 
|
227  | 
BOARD_UPLOAD_SPEED := \  | 
|
228  | 
$(shell sed -ne "s/$(BOARD).upload.speed=\(.*\)/\1/p" $(BOARDS_FILE))  | 
|
229  | 
BOARD_UPLOAD_PROTOCOL := \  | 
|
230  | 
$(shell sed -ne "s/$(BOARD).upload.protocol=\(.*\)/\1/p" $(BOARDS_FILE))  | 
|
231  | 
||
| 
25
by edam
 added AVRDUDECONF variable; fixed some OS X issues; added SERIALDEV guess warning and invalid BOARD value error  | 
232  | 
# invalid board?  | 
233  | 
ifeq "$(BOARD_BUILD_MCU)" ""  | 
|
234  | 
ifneq "$(MAKECMDGOALS)" "boards"  | 
|
235  | 
ifneq "$(MAKECMDGOALS)" "clean"  | 
|
236  | 
$(error BOARD is invalid. Type 'make boards' to see possible values)  | 
|
237  | 
endif  | 
|
238  | 
endif  | 
|
239  | 
endif  | 
|
240  | 
||
| 
1
by edam
 initial commit  | 
241  | 
# flags  | 
| 
23
by edam
 added ARDUINOCONST, AVRTOOLSPATH, detection of avrdude.conf and cleaned up make variable types  | 
242  | 
CPPFLAGS := -Os -Wall -fno-exceptions -ffunction-sections -fdata-sections  | 
| 
20
by edam
 add some signed and packing gcc options  | 
243  | 
CPPFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums  | 
| 
19
by edam
 added fixed arduino software version  | 
244  | 
CPPFLAGS += -mmcu=$(BOARD_BUILD_MCU)  | 
| 
23
by edam
 added ARDUINOCONST, AVRTOOLSPATH, detection of avrdude.conf and cleaned up make variable types  | 
245  | 
CPPFLAGS += -DF_CPU=$(BOARD_BUILD_FCPU) -DARDUINO=$(ARDUINOCONST)  | 
| 
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.  | 
246  | 
CPPFLAGS += -I. -Iutil -Iutility -I$(ARDUINOSRCDIR)  | 
| 
1
by edam
 initial commit  | 
247  | 
CPPFLAGS += -I$(ARDUINODIR)/hardware/arduino/variants/$(BOARD_BUILD_VARIANT)/  | 
| 
9
by edam
 added "monitor" goal; documented boards and monitor goals  | 
248  | 
CPPFLAGS += $(addprefix -I$(ARDUINODIR)/libraries/, $(LIBRARIES))  | 
249  | 
CPPFLAGS += $(patsubst %, -I$(ARDUINODIR)/libraries/%/utility, $(LIBRARIES))  | 
|
| 
23
by edam
 added ARDUINOCONST, AVRTOOLSPATH, detection of avrdude.conf and cleaned up make variable types  | 
250  | 
AVRDUDEFLAGS := $(addprefix -C , $(AVRDUDECONF)) -DV  | 
| 
1
by edam
 initial commit  | 
251  | 
AVRDUDEFLAGS += -p $(BOARD_BUILD_MCU) -P $(SERIALDEV)  | 
252  | 
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  | 
253  | 
LINKFLAGS := -Os -Wl,--gc-sections -mmcu=$(BOARD_BUILD_MCU)  | 
| 
1
by edam
 initial commit  | 
254  | 
|
| 
25
by edam
 added AVRDUDECONF variable; fixed some OS X issues; added SERIALDEV guess warning and invalid BOARD value error  | 
255  | 
# figure out which arg to use with stty  | 
256  | 
STTYFARG := $(shell stty --help > /dev/null 2>&1 && echo -F || echo -f)  | 
|
257  | 
||
| 
1
by edam
 initial commit  | 
258  | 
# default rule  | 
259  | 
.DEFAULT_GOAL := all  | 
|
260  | 
||
261  | 
#_______________________________________________________________________________  | 
|
262  | 
# RULES  | 
|
263  | 
||
| 
9
by edam
 added "monitor" goal; documented boards and monitor goals  | 
264  | 
.PHONY: all target upload clean boards monitor  | 
| 
1
by edam
 initial commit  | 
265  | 
|
266  | 
all: target upload  | 
|
267  | 
||
| 
2
by edam
 fixed build (missing library), tested upload, and made the .elf file an intermediate file (the .hex file is now the target)  | 
268  | 
target: $(TARGET).hex  | 
| 
1
by edam
 initial commit  | 
269  | 
|
270  | 
upload:  | 
|
| 
13
by edam
 announce that we're uploading and error on SERIALDEV blank  | 
271  | 
@echo "\nUploading to board..."  | 
272  | 
	@test -n "$(SERIALDEV)" || { \
 | 
|
273  | 
echo "error: SERIALDEV could not be determined automatically." >&2; \  | 
|
274  | 
exit 1; }  | 
|
| 
27
by edam
 fixed test not returning 0  | 
275  | 
	@test 0 -eq $(SERIALDEVGUESS) || { \
 | 
| 
25
by edam
 added AVRDUDECONF variable; fixed some OS X issues; added SERIALDEV guess warning and invalid BOARD value error  | 
276  | 
echo "*GUESSING* at serial device:" $(SERIALDEV); \  | 
277  | 
echo; }  | 
|
278  | 
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)  | 
279  | 
$(AVRDUDE) $(AVRDUDEFLAGS) -U flash:w:$(TARGET).hex:i  | 
| 
1
by edam
 initial commit  | 
280  | 
|
281  | 
clean:  | 
|
282  | 
rm -f $(OBJECTS)  | 
|
283  | 
rm -f $(TARGET).elf $(TARGET).hex $(ARDUINOLIB) *~  | 
|
284  | 
rm -rf $(ARDUINOLIBTMP)  | 
|
285  | 
||
| 
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.  | 
286  | 
boards:  | 
287  | 
@echo Available values for BOARD:  | 
|
288  | 
@sed -ne '/^#/d;s/^\(.*\).name=\(.*\)/\1 \2/;T' \  | 
|
289  | 
		-e 's/\(.\{12\}\) *\(.*\)/\1 \2/;p' $(BOARDS_FILE)
 | 
|
290  | 
||
| 
9
by edam
 added "monitor" goal; documented boards and monitor goals  | 
291  | 
monitor:  | 
| 
13
by edam
 announce that we're uploading and error on SERIALDEV blank  | 
292  | 
	@test -n "$(SERIALDEV)" || { \
 | 
293  | 
echo "error: SERIALDEV could not be determined automatically." >&2; \  | 
|
294  | 
exit 1; }  | 
|
| 
16
by edam
 spellcheck, and added check for missing GNU screen  | 
295  | 
	@test -n `which screen` || { \
 | 
296  | 
echo "error: can't find GNU screen, you might need to install it." >&2 \  | 
|
297  | 
ecit 1; }  | 
|
| 
27
by edam
 fixed test not returning 0  | 
298  | 
	@test 0 -eq $(SERIALDEVGUESS) || { \
 | 
| 
25
by edam
 added AVRDUDECONF variable; fixed some OS X issues; added SERIALDEV guess warning and invalid BOARD value error  | 
299  | 
echo "*GUESSING* at serial device:" $(SERIALDEV); \  | 
300  | 
echo; }  | 
|
| 
9
by edam
 added "monitor" goal; documented boards and monitor goals  | 
301  | 
screen $(SERIALDEV)  | 
302  | 
||
| 
1
by edam
 initial commit  | 
303  | 
# building the target  | 
304  | 
||
| 
2
by edam
 fixed build (missing library), tested upload, and made the .elf file an intermediate file (the .hex file is now the target)  | 
305  | 
$(TARGET).hex: $(TARGET).elf  | 
306  | 
$(OBJCOPY) -O ihex -R .eeprom $< $@  | 
|
307  | 
||
308  | 
.INTERMEDIATE: $(TARGET).elf  | 
|
309  | 
||
| 
1
by edam
 initial commit  | 
310  | 
$(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)  | 
311  | 
$(CC) $(LINKFLAGS) $(OBJECTS) $(ARDUINOLIB) -o $@  | 
| 
1
by edam
 initial commit  | 
312  | 
|
313  | 
%.o: %.ino  | 
|
314  | 
$(COMPILE.cpp) -o $@ -x c++ -include $(ARDUINOSRCDIR)/Arduino.h $<  | 
|
315  | 
||
316  | 
%.o: %.pde  | 
|
317  | 
$(COMPILE.cpp) -o $@ -x c++ -include $(ARDUINOSRCDIR)/Arduino.h $<  | 
|
318  | 
||
319  | 
# building the arduino library  | 
|
320  | 
||
| 
4
by edam
 added included-library autodetection and updated comments  | 
321  | 
$(ARDUINOLIB): $(ARDUINOLIBOBJS)  | 
| 
1
by edam
 initial commit  | 
322  | 
$(AR) rcs $@ $?  | 
323  | 
rm -rf $(ARDUINOLIBTMP)  | 
|
324  | 
||
| 
4
by edam
 added included-library autodetection and updated comments  | 
325  | 
.INTERMEDIATE: $(ARDUINOLIBOBJS)  | 
| 
1
by edam
 initial commit  | 
326  | 
|
327  | 
$(ARDUINOLIBTMP)/%.o: $(ARDUINOSRCDIR)/%.c  | 
|
328  | 
@test -d $(ARDUINOLIBTMP) || mkdir $(ARDUINOLIBTMP)  | 
|
329  | 
$(COMPILE.c) -o $@ $<  | 
|
330  | 
||
331  | 
$(ARDUINOLIBTMP)/%.o: $(ARDUINOSRCDIR)/%.cpp  | 
|
332  | 
@test -d $(ARDUINOLIBTMP) || mkdir $(ARDUINOLIBTMP)  | 
|
333  | 
$(COMPILE.cpp) -o $@ $<  | 
|
| 
4
by edam
 added included-library autodetection and updated comments  | 
334  | 
|
335  | 
$(ARDUINOLIBTMP)/%.o: $(ARDUINODIR)/libraries/*/%.c  | 
|
336  | 
@test -d $(ARDUINOLIBTMP) || mkdir $(ARDUINOLIBTMP)  | 
|
337  | 
$(COMPILE.c) -o $@ $<  | 
|
338  | 
||
339  | 
$(ARDUINOLIBTMP)/%.o: $(ARDUINODIR)/libraries/*/%.cpp  | 
|
340  | 
@test -d $(ARDUINOLIBTMP) || mkdir $(ARDUINOLIBTMP)  | 
|
341  | 
$(COMPILE.cpp) -o $@ $<  | 
|
| 
14
by Dan
 search for software in ARDUINODIR; include library/*/utility code in core lib  | 
342  | 
|
343  | 
$(ARDUINOLIBTMP)/%.o: $(ARDUINODIR)/libraries/*/utility/%.c  | 
|
344  | 
@test -d $(ARDUINOLIBTMP) || mkdir $(ARDUINOLIBTMP)  | 
|
| 
15
by edam
 fixed detection of env. vars. and a typo in a rule that caused it not to work  | 
345  | 
$(COMPILE.c) -o $@ $<  | 
| 
14
by Dan
 search for software in ARDUINODIR; include library/*/utility code in core lib  | 
346  | 
|
347  | 
$(ARDUINOLIBTMP)/%.o: $(ARDUINODIR)/libraries/*/utility/%.cpp  | 
|
348  | 
@test -d $(ARDUINOLIBTMP) || mkdir $(ARDUINOLIBTMP)  | 
|
349  | 
$(COMPILE.cpp) -o $@ $<  |