VERSION="Version 0.1"

TOP:=..
include $(TOP)/Makefile.conf


_TARGETOBJS=\
  simple_stream.o \
  exception.o \
  tidbits.o \
  memory_model.o \
  serial.o \
  m16c_flasher.o \

TARGETDIR=
M_MAINOBJS=flasher.o
MAIN=flasher
HEADERS=flasher.h\
  simple_stream.o \
  exception.h \
  tidbits.h \
  memory_model.h \
  serial.h \
  generic_flasher.h \
  m16c_flasher.h \

M_TESTEROBJS=test/flasher_tester.o 
TESTER=test/flasher_tester


ifeq ($(PLATFORM),WINDOWS)
MAINOBJS=$(subst .o,.obj,$(M_MAINOBJS))
TESTEROBJS=$(subst .o,.obj,$(M_TESTEROBJS))
OBJS=$(subst .o,.obj,$(_TARGETOBJS))
TARGET=$(subst .a,.lib,$(_TARGET))
MAINLIBS=/link /subsystem:CONSOLE /libpath:../src flasher.lib
TARGET=flasher.lib
else
MAINOBJS=$(M_MAINOBJS)
TESTEROBJS=$(M_TESTEROBJS)
OBJS=$(_TARGETOBJS)
TARGET=libflasher.a
MAINLIBS=-L. -lflasher 
endif

MYLIBS=$(MAINLIBS) $(ALL_LIBS)
RESOURCE=

.PHONY: clean test

all: $(TARGET) $(MAIN) $(TESTER)

$(MAIN): $(TARGET) $(MAINOBJS) 
	$(LD) -o $(MAIN) $(MAINOBJS) $(MAINLIBS) $(ALL_LIBS)

$(TESTER): $(TARGET) $(TESTEROBJS)
	$(LD) -o $(TESTER) $(TESTEROBJS) $(MAINLIBS) $(ALL_LIBS)

$(TARGET): $(OBJS)
	$(AR) $@ $(OBJS)
	$(RANLIB) $@      

%.o:%.cpp
	$(CXX) -c -I$(TOP) $(CPPFLAGS) $(subst .o,.cpp,$@)

%.o:%.cpp
	$(CXX) -c -I$(TOP) $(CPPFLAGS) $(subst .o,.cpp,$@)

test/flasher_tester.o:test/flasher_tester.cpp
	$(CXX) -c -o $@ -I$(TOP) -I. $(CPPFLAGS) $<

%.obj:%.cpp
	$(CXX) -c -I$(TOP) $(CPPFLAGS) $(subst .obj,.cpp,$@)

depend:
	$(CXX) -M  -I$(TOP) $(CPPFLAGS)  $(patsubst %.o,%.cpp,$(OBJS)) > .depend

install: 
	@if test ! -d  $(bindir); then mkdir -p $(bindir); fi 
	@rm -f $(DESTDIR)/$(bindir)/$(MAIN)
	@echo installing $(MAIN)  into $(bindir)
	@$(TOP)/$(INSTALL_PROGRAM) $(MAIN) $(bindir)
	@if test ! -d  $(mandir/man); then mkdir -p $(mandir/man); fi 
	@$(TOP)/$(INSTALL_DATA) flasher.1 $(mandir)/man1
	@echo installing flasher.1 into $(mandir)/man1

install_lib: 
	@if test ! -d  $(libdir); then mkdir -p $(libdir); fi 
	@$(TOP)/$(INSTALL_PROGRAM) $(TARGET) $(libdir)
	@echo installing $(TARGET)  into $(libdir)
	@if test ! -d  $(incdir); then mkdir -p $(incdir)/flasher; fi 
	@echo installing headers into $(incdir)/flasher
	@for i in $(HEADERS); do \
                echo installing header $$i; \
                $(TOP)/$(INSTALL_DATA) $$i $(incdir)/flasher; \
	done

clean: 
	rm -f *.o *.a core core*
	rm -f $(TARGET) $(MAIN) 
	rm -f *.pdb *.obj *.exe *.a *.lib
	rm -Rf SunWS_cache
	rm -f flash.out test/flasher_tester $(TESTER) $(TESTEROBJS)

test: ./test/flasher_tester
	./test/flasher_tester tidbits
	./test/flasher_tester memory_model
	./test/flasher_tester simple_stream

#
# I have a program in flash and I put it in blink.hex.
#
blink.hex:
	./flasher --from=F0048 --to=F00A2 --command=read -o $@

#
# Load a blinking program into RAM and execute it.
# This will blink p00.
#
blink: blink.hex
	./flasher --from=F0048 --to=F00A2 --command=execute $<

#
# An example of a conversion.
# srecord (sourceforge.net)
#
%.s:%.hex
	srec_cat $< -Needham_Hexadecimal -o $@ -Motorola

$(MAINOBJS): $(TARGET)

man:flasher.1

%.1:%.pod
	pod2man --release $(VERSION) $< $@

ifeq (.depend, $(wildcard .depend))
include .depend
endif
