#-*-makefile-*-

include ../Makefile.common

.PHONY: warpedroot depend clean install

ifndef WARPEDROOT
warpedroot:
	@echo "You _must_ define WARPEDROOT to build TyVis"
	exit
else
warpedroot: all
endif

# The following can be TimeWarp or Sequential
ifndef METHOD
METHOD=Sequential
endif

ifeq ($(METHOD), Sequential)
CPPFLAGS += -DSEQUENTIAL 
endif

TWDIR=$(WARPEDROOT)/$(METHOD)/src
COMMONDIR=$(WARPEDROOT)/common
LIBTW=$(TWDIR)/obj/libTW.a

ifndef VHDLDIR
VHDLDIR=.
endif

ifndef DESTDIR
DESTDIR=/usr/local
endif

libdir = $(DESTDIR)/lib
includedir = $(DESTDIR)/include/tyvis

SHAREDLIB=libTyVis.so.1

PWD = $(shell pwd)

export CPPFLAGS+=-I$(WARPEDROOT) -Istandard -Itextio -I. -DUSE_USER_VTIME \
		 -I$(WARPEDROOT)/$(METHOD)/src -I$(WARPEDROOT)/common/include -I$(PWD)

CXXFLAGS+=-g

AR = ar cr

VHDLSRCS = Block.cc ArrayInfo.cc MarkedQueue.cc STDTypes.cc Wait.cc \
	   SignalNetinfo.cc  VHDLData.cc _savant_entity_elab.cc \
	   StringBase.cc VTime.cc Types.cc VHDLType.cc SourceBase.cc \
	   SourceData.cc SourceInfo.cc RecordType.cc CallStack.cc \
	   ScalarType.cc ArrayType.cc AccessType.cc VectorBase.cc FileType.cc\
	   IntegerType.cc EnumerationType.cc RealType.cc PhysicalType.cc \
	   DefaultAttributes.cc PortMap.cc PortAssociation.cc \
	   VHDLKernel_state.cc SignalBase.cc VHDLKernel.cc SignalAttributes.cc\
	   SourceTypeConvert.cc TypeConvert.cc TypeInfo.cc\
           $(wildcard standard/*.cc) $(wildcard textio/*.cc)

VHDLOBJS = $(patsubst %.cc,%.o, $(VHDLSRCS))

all: libVHDL.a shared

libVHDL.a:  $(LIBTW) $(VHDLOBJS)
	-rm -f libVHDL.a
	$(AR) libVHDL.a $(VHDLOBJS)

shared:  warpedroot $(SHAREDLIB)

$(SHAREDLIB): $(LIBTW) $(VHDLOBJS)
	$(CXX) $(CXXFLAGS) -shared $(LDFLAGS) $(LIBS) $^ $(TWDIR)/obj/*.o\
	$(COMMONDIR)/src/*.o -o $(SHAREDLIB)

$(LIBTW):
	$(MAKE) -C $(TWDIR) all

%.o : %.cc
	$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $< -o $@

install: install-headers install-library

install-headers: 
	$(MKINSTALLDIRS) $(includedir) $(includedir)/standard  $(includedir)/textio
	for f in *.hh; do $(INSTALL) $$f $(includedir); done
	for f in AccessVariable.cc ImplicitSignal.cc SString.cc Signal.cc\
				 Variable.cc Vector.cc;\
	do  $(INSTALL) $$f $(includedir); done
	for f in standard/*.hh; do $(INSTALL) $$f $(includedir)/standard; done
	for f in textio/*.hh; do $(INSTALL) $$f $(includedir)/textio; done
	$(MAKE) -C $(TWDIR) install-headers

install-library: shared
	$(MKINSTALLDIRS) $(libdir)
	$(INSTALL) $(SHAREDLIB) $(libdir)/$(SHAREDLIB)
	$(MAKE) -C $(TWDIR) install-library
	cd $(libdir); rm -f libTyVis.so; ln -s $(SHAREDLIB) libTyVis.so

depend: cleandep
	makedepend -p$(VHDLDIR)/ -f- -- $(CPPFLAGS) -- $(DEPENDINC) $(VHDLSRCS) > .depend
	$(MAKE) -C $(TWDIR) depend

cleandep:
	-rm -f .depend

clean:
	rm -f *~ \#*\#\
	rm -f *.o *.a *.so
	rm -f $(VHDLDIR)/standard/*.o
	rm -f $(VHDLDIR)/textio/*.o
	$(MAKE) -C $(TWDIR) clean

-include .depend
