SYSTEMC = $(HOME)/systemc-2.0.1

TARGET_ARCH = linux

INCDIR = -I. -I$(SYSTEMC)/include
LIBDIR = -L. -L$(SYSTEMC)/lib-$(TARGET_ARCH)

LIBS   =  -lsystemc -lm

CC     = g++
OPT    = -O3
DEBUG  = -g
OTHER  = -Wall
# CFLAGS = $(OPT) $(OTHER)
CFLAGS = $(DEBUG) $(OTHER)

# project files

SRCS =  TTokens.cpp \
        TToken_channel.cpp \
        TActor.cpp \
        TGenerator.cpp \
        TTimedDelay.cpp \
        TDiscard.cpp \
        MainProgram.cpp

HEADS = $(filter-out MainProgram.h, $(SRCS:.cpp=.h)) \
        TToken_interfaces.h \
        TToken_ports.h

OBJS = $(SRCS:.cpp=.o)

EXE    = run.x

# rules and suffixes

all: $(EXE)

clean:
	@echo "Clean everything"
	@rm -f $(OBJS) *~ $(EXE) core *.bak Makefile.depend

package:
	@tar chf test.tar Makefile
	@tar rhf test.tar $(SRCS)
	@tar rhf test.tar $(HEADS)
	@gzip -f test.tar
	@echo "test.tar.gz done"

ifeq ($(findstring package, $(MAKECMDGOALS)),)
ifeq ($(findstring clean, $(MAKECMDGOALS)),)

-include Makefile.depend

Makefile.depend: $(HEADS) $(SRCS)
	@rm -f Makefile.depend
	@echo "Make dependency ..."
	@$(CC) $(CFLAGS) $(INCDIR) -M $(SRCS) > Makefile.depend

endif
endif


$(EXE): $(OBJS) $(SYSTEMC)/lib-$(TARGET_ARCH)/libsystemc.a 
	$(CC) $(CFLAGS) $(INCDIR) $(LIBDIR) -o $@ $(OBJS) $(LIBS) 2>&1 | c++filt

.SUFFIXES: .cpp .o .x

.cpp.o:
	$(CC) -c $< $(CFLAGS) $(INCDIR) 

