aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xcores/arduino/Makefile168
1 files changed, 87 insertions, 81 deletions
diff --git a/cores/arduino/Makefile b/cores/arduino/Makefile
index f0c1047..32eda14 100755
--- a/cores/arduino/Makefile
+++ b/cores/arduino/Makefile
@@ -1,77 +1,61 @@
-# Arduino makefile
+# Arduino 0011 Makefile
+# Arduino adaptation by mellis, eighthave, oli.keller
#
# This makefile allows you to build sketches from the command line
# without the Arduino environment (or Java).
#
-# The Arduino environment does preliminary processing on a sketch before
-# compiling it. If you're using this makefile instead, you'll need to do
-# a few things differently:
+# Detailed instructions for using the makefile:
#
-# - Give your program's file a .cpp extension (e.g. foo.cpp).
-#
-# - Put this line at top of your code: #include <WProgram.h>
-#
-# - Write prototypes for all your functions (or define them before you
-# call them). A prototype declares the types of parameters a
-# function will take and what type of value it will return. This
-# means that you can have a call to a function before the definition
-# of the function. A function prototype looks like the first line of
-# the function, with a semi-colon at the end. For example:
-# int digitalRead(int pin);
-#
-# - Write a main() function for your program that returns an int, calls
-# init() and setup() once (in that order), and then calls loop()
-# repeatedly():
-#
-# int main()
-# {
-# init();
-# setup();
-#
-# for (;;)
-# loop();
-#
-# return 0;
-# }
-#
-# Instructions for using the makefile:
-#
-# 1. Copy this file into the folder with your sketch.
+# 1. Copy this file into the folder with your sketch. There should be a
+# file with the extension .pde (e.g. foo.pde)
#
# 2. Below, modify the line containing "TARGET" to refer to the name of
# of your program's file without an extension (e.g. TARGET = foo).
#
-# 3. Modify the line containg "ARDUINO" to point the directory that
-# contains the Arduino core (for normal Arduino installations, this
-# is the hardware/cores/arduino sub-directory).
+# 3. Modify the line containg "INSTALL_DIR" to point to the directory that
+# contains the Arduino installation (for example, under Mac OS X, this
+# might be /Applications/arduino-0011).
#
# 4. Modify the line containing "PORT" to refer to the filename
# representing the USB or serial connection to your Arduino board
# (e.g. PORT = /dev/tty.USB0). If the exact name of this file
# changes, you can use * as a wildcard (e.g. PORT = /dev/tty.USB*).
#
-# 5. At the command line, change to the directory containing your
+# 5. Set the line containing "MCU" to match your board's processor.
+# Older one's are atmega8 based, newer ones like Arduino Mini, Bluetooth
+# or Diecimila have the atmega168. If you're using a LilyPad Arduino,
+# change F_CPU to 8000000.
+#
+# 6. At the command line, change to the directory containing your
# program's file and the makefile.
#
-# 6. Type "make" and press enter to compile/verify your program.
+# 7. Type "make" and press enter to compile/verify your program.
#
-# 7. Type "make upload", reset your Arduino board, and press enter to
+# 8. Type "make upload", reset your Arduino board, and press enter to
# upload your program to the Arduino board.
#
# $Id$
-PORT = /dev/tty.usbserial*
TARGET = foo
-ARDUINO = arduino
-SRC = $(ARDUINO)/pins_arduino.c $(ARDUINO)/wiring.c \
+INSTALL_DIR = /Users/dmellis/Source/arduino/trunk/build/macosx/build/work
+PORT = /dev/tty.usb*
+UPLOAD_RATE = 19200
+AVRDUDE_PROGRAMMER = stk500v1
+MCU = atmega168
+F_CPU = 16000000
+
+############################################################################
+# Below here nothing should be changed...
+
+ARDUINO = $(INSTALL_DIR)/hardware/cores/arduino
+AVR_TOOLS_PATH = $(INSTALL_DIR)/hardware/tools/avr/bin
+SRC = $(ARDUINO)/pins_arduino.c $(ARDUINO)/wiring.c \
$(ARDUINO)/wiring_analog.c $(ARDUINO)/wiring_digital.c \
$(ARDUINO)/wiring_pulse.c $(ARDUINO)/wiring_serial.c \
$(ARDUINO)/wiring_shift.c $(ARDUINO)/WInterrupts.c
-CXXSRC = $(ARDUINO)/HardwareSerial.cpp $(ARDUINO)/WMath.cpp
-MCU = atmega168
-F_CPU = 16000000
+CXXSRC = $(ARDUINO)/HardwareSerial.cpp $(ARDUINO)/WMath.cpp
FORMAT = ihex
-UPLOAD_RATE = 19200
+
# Name of this Makefile (used for "make depend").
MAKEFILE = Makefile
@@ -109,26 +93,26 @@ LDFLAGS = -lm
# Programming support using avrdude. Settings and variables.
-AVRDUDE_PROGRAMMER = stk500
AVRDUDE_PORT = $(PORT)
-AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
-AVRDUDE_FLAGS = -F -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) \
- -b $(UPLOAD_RATE)
+AVRDUDE_WRITE_FLASH = -U flash:w:applet/$(TARGET).hex
+AVRDUDE_FLAGS = -V -F -C $(INSTALL_DIR)/hardware/tools/avr/etc/avrdude.conf \
+-p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) \
+-b $(UPLOAD_RATE)
# Program settings
-CC = avr-gcc
-CXX = avr-g++
-OBJCOPY = avr-objcopy
-OBJDUMP = avr-objdump
-AR = avr-ar
-SIZE = avr-size
-NM = avr-nm
-AVRDUDE = avrdude
+CC = $(AVR_TOOLS_PATH)/avr-gcc
+CXX = $(AVR_TOOLS_PATH)/avr-g++
+OBJCOPY = $(AVR_TOOLS_PATH)/avr-objcopy
+OBJDUMP = $(AVR_TOOLS_PATH)/avr-objdump
+AR = $(AVR_TOOLS_PATH)/avr-ar
+SIZE = $(AVR_TOOLS_PATH)/avr-size
+NM = $(AVR_TOOLS_PATH)/avr-nm
+AVRDUDE = $(AVR_TOOLS_PATH)/avrdude
REMOVE = rm -f
MV = mv -f
# Define all object files.
-OBJ = $(SRC:.c=.o) $(CXXSRC:.cpp=.o) $(ASRC:.S=.o)
+OBJ = $(SRC:.c=.o) $(CXXSRC:.cpp=.o) $(ASRC:.S=.o)
# Define all listing files.
LST = $(ASRC:.S=.lst) $(CXXSRC:.cpp=.lst) $(SRC:.c=.lst)
@@ -141,21 +125,42 @@ ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
# Default target.
-all: build
-
-build: elf hex
-
-elf: $(TARGET).elf
-hex: $(TARGET).hex
-eep: $(TARGET).eep
-lss: $(TARGET).lss
-sym: $(TARGET).sym
+all: applet_files build sizeafter
+
+build: elf hex
+
+applet_files: $(TARGET).pde
+ # Here is the "preprocessing".
+ # It creates a .cpp file based with the same name as the .pde file.
+ # On top of the new .cpp file comes the WProgram.h header.
+ # At the end there is a generic main() function attached.
+ # Then the .cpp file will be compiled. Errors during compile will
+ # refer to this new, automatically generated, file.
+ # Not the original .pde file you actually edit...
+ test -d applet || mkdir applet
+ echo '#include "WProgram.h"' > applet/$(TARGET).cpp
+ cat $(TARGET).pde >> applet/$(TARGET).cpp
+ cat $(ARDUINO)/main.cxx >> applet/$(TARGET).cpp
+
+elf: applet/$(TARGET).elf
+hex: applet/$(TARGET).hex
+eep: applet/$(TARGET).eep
+lss: applet/$(TARGET).lss
+sym: applet/$(TARGET).sym
# Program the device.
-upload: $(TARGET).hex
+upload: applet/$(TARGET).hex
$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH)
+ # Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) applet/$(TARGET).hex
+ELFSIZE = $(SIZE) applet/$(TARGET).elf
+sizebefore:
+ @if [ -f applet/$(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(HEXSIZE); echo; fi
+
+sizeafter:
+ @if [ -f applet/$(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(HEXSIZE); echo; fi
# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
@@ -166,12 +171,12 @@ COFFCONVERT=$(OBJCOPY) --debugging \
--change-section-address .eeprom-0x810000
-coff: $(TARGET).elf
- $(COFFCONVERT) -O coff-avr $(TARGET).elf $(TARGET).cof
+coff: applet/$(TARGET).elf
+ $(COFFCONVERT) -O coff-avr applet/$(TARGET).elf $(TARGET).cof
extcoff: $(TARGET).elf
- $(COFFCONVERT) -O coff-ext-avr $(TARGET).elf $(TARGET).cof
+ $(COFFCONVERT) -O coff-ext-avr applet/$(TARGET).elf $(TARGET).cof
.SUFFIXES: .elf .hex .eep .lss .sym
@@ -191,13 +196,14 @@ extcoff: $(TARGET).elf
.elf.sym:
$(NM) -n $< > $@
+ # Link: create ELF output file from library.
+applet/$(TARGET).elf: $(TARGET).pde applet/core.a
+ $(CC) $(ALL_CFLAGS) -o $@ applet/$(TARGET).cpp -L. applet/core.a $(LDFLAGS)
+
+applet/core.a: $(OBJ)
+ @for i in $(OBJ); do echo $(AR) rcs applet/core.a $$i; $(AR) rcs applet/core.a $$i; done
-core.a: $(OBJ)
- @for i in $(OBJ); do echo $(AR) rcs core.a $$i; $(AR) rcs core.a $$i; done
-# Link: create ELF output file from library.
-$(TARGET).elf: core.a
- $(CC) $(ALL_CFLAGS) -o $@ $(TARGET).cpp -L. core.a $(LDFLAGS)
# Compile: create object files from C++ source files.
.cpp.o:
@@ -221,8 +227,8 @@ $(TARGET).elf: core.a
# Target: clean project.
clean:
- $(REMOVE) $(TARGET).hex $(TARGET).eep $(TARGET).cof $(TARGET).elf \
- $(TARGET).map $(TARGET).sym $(TARGET).lss core.a \
+ $(REMOVE) applet/$(TARGET).hex applet/$(TARGET).eep applet/$(TARGET).cof applet/$(TARGET).elf \
+ applet/$(TARGET).map applet/$(TARGET).sym applet/$(TARGET).lss applet/core.a \
$(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d) $(CXXSRC:.cpp=.s) $(CXXSRC:.cpp=.d)
depend:
@@ -236,4 +242,4 @@ depend:
>> $(MAKEFILE); \
$(CC) -M -mmcu=$(MCU) $(CDEFS) $(CINCS) $(SRC) $(ASRC) >> $(MAKEFILE)
-.PHONY: all build elf hex eep lss sym program coff extcoff clean depend
+.PHONY: all build elf hex eep lss sym program coff extcoff clean depend applet_files sizebefore sizeafter