###############################
##     RecoSim MAKEFILE     ###
###############################

# Path export
SYSTEMC = $(SYSTEMC_PATH)
SYSTEMC_LIB = $(SYSTEMC_LIB_PATH)
TLM = $(TLM_PATH)
XERCES = $(XERCES_PATH)

RECOSIM_DIR = RecoSim
RECOSIM_EXE_NAME = RecoSim
RECOSIM_EXEC = $(RECOSIM_DIR)/exe/$(RECOSIM_EXE_NAME)

# Paths
DSRC = src
DSRCLIB = src_lib
DSRCGEN = src_gen
DOBJ = obj
DOBJLIB = obj_lib
DOBJGEN = obj_gen
DEXE = exe

CXX		= g++-4.8
LD		= g++-4.8
CXXFLAGS	= -I$(DSRC) -I$(DSRCLIB) -I$(DSRCGEN) -std=c++11 -Wno-deprecated -pthread
LDFLAGS	    	= -pthread  -std=c++11 -I$(DSRC) -I$(DSRCLIB) -I$(DSRCGEN)

SOURCES	   := $(wildcard $(DSRC)/*.cpp)
SOURCESLIB := $(wildcard $(DSRCLIB)/*.cpp)
SOURCESGEN := $(wildcard $(DSRCGEN)/*.cpp)
OBJS	   := $(SOURCES:$(DSRC)/%.cpp=$(DOBJ)/%.o)
OBJSLIB    := $(SOURCESLIB:$(DSRCLIB)/%.cpp=$(DOBJLIB)/%.o)
OBJSGEN    := $(SOURCESGEN:$(DSRCGEN)/%.cpp=$(DOBJGEN)/%.o)
EXE	   := $(DEXE)/$(RECOSIM_EXE_NAME)

all: $(EXE)

$(EXE) : $(OBJSLIB) $(OBJS) $(OBJSGEN)
	mkdir -p $(DEXE)
	$(LD) $(LDFLAGS) $(OBJSLIB) $(OBJS) $(OBJSGEN) -g -o $@ 2>&1 | c++filt
	@echo ""
	@echo "Compilation successful!"

$(OBJSGEN): $(DOBJGEN)/%.o : $(DSRCGEN)/%.cpp
	mkdir -p $(DOBJGEN)
	$(CXX) $(CXXFLAGS) -g -c -o $@ $<

$(OBJSLIB): $(DOBJLIB)/%.o : $(DSRCLIB)/%.cpp
	mkdir -p $(DOBJLIB)
	$(CXX) $(CXXFLAGS) -g -c -o $@ $<

$(OBJS): $(DOBJ)/%.o : $(DSRC)/%.cpp
	mkdir -p $(DOBJ)
	$(CXX) $(CXXFLAGS) -g -c -o $@ $<

clean:
	-rm -f $(OBJS)
	-rm -f $(OBJSLIB)
	-rm -f $(OBJSGEN)
	-rm -f $(EXE)
