#   Makefile - Build board-specific stuff in body mode
#   Copyright (C) 2008 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

BASEDIR:=../../..
include $(BASEDIR)/config/Makevars.mk
OBJDIR:=$(OBJDIR)/board
include $(BASEDIR)/config/Makecommon.mk

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

ifeq ($(TARGET),host)
all:
	$(info ->   Nothing to do in board/: Board code cannot be build when TARGET=host)
else 

SRCFILES:=$(wildcard *.c *.cpp)

# All the files extracted here will be compiled in ARM mode even if the rest of the library is thumb!
SRCFILES:=$(subst SFBbody.cpp,,$(SRCFILES))  # extract SFBbody to handle separately
SRCFILES:=$(subst SFBtalk.cpp,,$(SRCFILES))   # extract SFBtalk to handle separately
SRCFILES:=$(subst main.c,,$(SRCFILES))   # extract main to handle separately
SRCFILES:=$(subst clock.c,,$(SRCFILES))   # extract clock to handle separately
SRCFILES:=$(subst irq.c,,$(SRCFILES))   # extract irq to handle separately
SRCFILES:=$(subst elf-init.c,,$(SRCFILES))  # extract SFBbody to handle separately

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

EXTRAOBJ:=$(LIBDIR)/SFBbody.o $(LIBDIR)/sfbloader.ld $(LIBDIR)/sfbloader3.ld $(LIBDIR)/SFBtalk.o $(LIBDIR)/irq.o $(LIBDIR)/elf-init.o $(LIBDIR)/clock.o 

all:	$(LIBDIR)/libhw.a $(LIBDIR)/main.o $(LIBDIR)/SFBStartup.o $(EXTRAOBJ)

$(LIBDIR)/sfbloader.ld:	sfbloader.ld $(ALLDEP)
	cp -f "$<" "$@"

$(LIBDIR)/sfbloader3.ld:	sfbloader3.ld $(ALLDEP)
	cp -f "$<" "$@"

$(LIBDIR)/libhw.a:	$(OBJFILES) $(EXTRAOBJ) # $(info SRCFILES='$(SRCFILES) OBJFILES='$(OBJFILES)' OBJDIR='$(OBJDIR)')
	ar ruc "$@" $(OBJFILES) $(EXTRAOBJ)

$(LIBDIR)/SFBStartup.o:	SFBStartup.S
	$(GCC) $(OPTS) $(DEBUGS) $(CFLAGS) $(DEFINES) -c -o"$@" "$<"

$(LIBDIR)/SFBbody.o:	SFBbody.cpp
	$(GCC) $(OPTS) $(DEBUGS) $(CFLAGS) $(DEFINES) -c -o"$@" "$<"

$(LIBDIR)/main.o:	main.c
	$(GCC) $(DEBUGS) $(CFLAGS) $(DEFINES) -c -o"$@" "$<"

$(LIBDIR)/clock.o:	clock.c
	$(GCC) $(OPTS) $(DEBUGS) $(CFLAGS) $(DEFINES) -c -o"$@" "$<"

$(LIBDIR)/elf-init.o:	elf-init.c
	$(GCC) $(DEBUGS) $(CFLAGS) $(DEFINES) -c -o"$@" "$<"

$(LIBDIR)/SFBtalk.o:	SFBtalk.cpp
	$(GCC) $(OPTS) $(DEBUGS) $(CFLAGS) $(DEFINES) -c -o"$@" "$<"

$(LIBDIR)/irq.o:	irq.c
	$(GCC) $(DEBUGS) $(CFLAGS) $(DEFINES) -c -o"$@" "$<"

LDFLAGS+=$(CORE_EXTRA_LDFLAGS) -nostdlib -nostartfiles --cref -Map $(TMPDIR)/sfbloader.map
#$(info OBJFILES='$(OBJFILES)')


#$(BINDIR)/sfbloader.hex:	$(OBJDIR)/sfbloader
#	$(OBJCOPY) --strip-unneeded -O ihex $(OBJDIR)/sfbloader $@

#$(OBJDIR)/sfbloader:	$(OBJFILES) sfbloader.ld
#	$(LD) $(OBJFILES) $(LDFLAGS) -lSFB -lgcc -T sfbloader.ld  -o"$@"

endif # ifneq ($(TARGET),host)

clean:	
	@rm -f $(LIBDIR)/SFBStartup.o
	@rm -f $(LIBDIR)/SFBbody.o
	@rm -f $(LIBDIR)/SFBtalk.o
	@rm -f $(LIBDIR)/libhw.a
	@rm -f $(LIBDIR)/main.o
	@rm -f $(LIBDIR)/clock.o
	@rm -f $(LIBDIR)/irq.o
	@rm -f $(LIBDIR)/elf-init.o
	@rm -f $(OBJFILES) 
	@rm -f *~  

realclean:	clean
	@rm -f $(BINDIR)/sfbloader.hex
	@rm -f $(LIBDIR)/sfbloader.ld
	@rm -f $(LIBDIR)/sfbloader3.ld
	@rm -f $(OBJDIR)/*.[do]
	@rm -f $(OBJDIR)/sfbloader

.PHONY:	clean realclean all

include $(BASEDIR)/config/Makedeps.mk

