#   Makefile - Build the tertiary bootloader for the SFB
#   Copyright (C) 2009 The Regents of the University of New Mexico.  All rights reserved.

#   This library is free software; you can redistribute it and/or
#   modify it under the terms of the GNU Lesser General Public
#   License as published by the Free Software Foundation; either
#   version 2.1 of the License, or (at your option) any later version.

#   This library is distributed in the hope that it will be useful,
#   but WITHOUT ANY WARRANTY; without even the implied warranty of
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
#   Lesser General Public License for more details.

#   You should have received a copy of the GNU General Public License
#   along with this library; if not, write to the Free Software
#   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
#   USA

export TARGET=thumb
ifndef (BASEDIR)
BASEDIR:=../../..
endif
include $(BASEDIR)/config/Makevars.mk
include $(BASEDIR)/config/Makecommon.mk

AVRDUDE=/usr/bin/avrdude
AVRDUDE_CONFIG_FILE=/etc/avrdude.conf
AVRDUDE_MACHINE=m2560
AVRDUDE_PROGRAMMER=butterfly
AVRDUDE_PORT=/dev/ttyUSB0
AVRDUDE_PORT1=/dev/ttyUSB1
AVRDUDE_PORT2=/dev/ttyUSB2
AVRDUDE_BAUD=115200
AVRDUDE_FLAGS=-v

CPPFLAGS+=$(CORE_EXTRA_CPPFLAGS) -I$(INCLUDEDIR) -I$(INCLUDEDIR)/lpc
CFLAGS+=$(CORE_EXTRA_CFLAGS) -I$(INCLUDEDIR) -I$(INCLUDEDIR)/lpc

ALLDEP+=Makefile

SRCFILES:=boot3.cpp 
OBJFILES:=$(patsubst %.cpp, $(OBJDIR)/%.o, $(SRCFILES))

LDFLAGS+=$(CORE_EXTRA_LDFLAGS) -nostartfiles --cref -M -Map $(TMPDIR)/sketch.map

PROGNAME:=boot3
PROGRAM:=$(BINDIR)/$(PROGNAME).hex

all:	$(PROGRAM)


$(PROGRAM):	$(OBJDIR)/$(PROGNAME) $(BINDIR)
	$(OBJCOPY) --strip-unneeded -O ihex "$(OBJDIR)/$(PROGNAME)" "$@"

$(BINDIR):
	mkdir -p $(BINDIR)

$(OBJDIR)/$(PROGNAME):	$(OBJFILES) $(LIBDIR)/libhw.a $(LIBDIR)/libreflex.a $(LIBDIR)/sfbloader3.ld
	$(LD) $(OBJFILES) $(LDFLAGS) -T "$(LIBDIR)/sfbloader3.ld"  -o"$@"

$(OBJDIR)/$(PROGNAME).o:	$(SRCFILES) $(ALLDEP)
	$(GCC) $(CPPFLAGS) $(SKETCH_EXTRA_CPPFLAGS) $(THUMB) -Wall -c -o "$@" "$<"

burn burn0:	FORCE $(PROGRAM)
	$(AVRDUDE) -C $(AVRDUDE_CONFIG_FILE) $(AVRDUDE_FLAGS) -p$(AVRDUDE_MACHINE) -c$(AVRDUDE_PROGRAMMER) -P$(AVRDUDE_PORT) -b$(AVRDUDE_BAUD) -D -Uflash:w:$(PROGRAM):i

burn1:	FORCE $(PROGRAM)
	$(AVRDUDE) -C $(AVRDUDE_CONFIG_FILE) $(AVRDUDE_FLAGS) -p$(AVRDUDE_MACHINE) -c$(AVRDUDE_PROGRAMMER) -P$(AVRDUDE_PORT1) -b$(AVRDUDE_BAUD) -D -Uflash:w:$(PROGRAM):i

burn2:	FORCE $(PROGRAM)
	$(AVRDUDE) -C $(AVRDUDE_CONFIG_FILE) $(AVRDUDE_FLAGS) -p$(AVRDUDE_MACHINE) -c$(AVRDUDE_PROGRAMMER) -P$(AVRDUDE_PORT2) -b$(AVRDUDE_BAUD) -D -Uflash:w:$(PROGRAM):i

clean:	FORCE
	@rm -f *~ $(OBJFILES) $(OBJDIR)/$(PROGNAME)

realclean: clean
	@rm -f $(PROGRAM)

.PHONY:	FORCE
