SIMGRID_INSTALL_DIR := ./simgrid-3.5-install
#SIMGRID_INSTALL_DIR := ../simgrid-git-install

OPTIM_FLAGS += -O3
DEBUG_FLAGS += -g
CHECK_FLAGS += -Wall -Wextra

CC := gcc
CXX := g++

CPPFLAGS += -I $(SIMGRID_INSTALL_DIR)/include
CPPFLAGS += $(CHECK_FLAGS)

CFLAGS += -std=c99
CFLAGS += -fgnu89-inline	# workaround simgrid bug
CFLAGS += $(OPTIM_FLAGS) $(DEBUG_FLAGS)

CXXFLAGS += $(OPTIM_FLAGS) $(DEBUG_FLAGS)

LDFLAGS += -L $(SIMGRID_INSTALL_DIR)/lib
LDFLAGS += -Wl,-rpath,$(SIMGRID_INSTALL_DIR)/lib

LINK.o = $(CXX) $(LDFLAGS) $(TARGET_ARCH)
LDLIBS := -lsimgrid

MAKEDEPEND.FLAGS =  $(CPPFLAGS) -MM -MF $@ $<
MAKEDEPEND.C = $(CC) $(MAKEDEPEND.FLAGS)
MAKEDEPEND.CXX = $(CXX) $(MAKEDEPEND.FLAGS)

LOCALVERSION := localversion
SETLOCALVERSION := ./setlocalversion

SRC.loba := main.cpp		\
	communicator.cpp	\
	cost_func.cpp		\
	hostdata.cpp		\
	$(wildcard loba_*.cpp)	\
	misc.cpp		\
	neighbor.cpp		\
	options.cpp		\
	process.cpp		\
	version.cpp

SRC.simple_async := simple_async.cpp

SRC := $(SRC.loba) $(SRC.simple_async)
OBJ := $(SRC:%.cpp=%.o)
DEP := $(SRC:%.cpp=%.d)

TARGETS := loba simple_async

$(shell $(SETLOCALVERSION))

.PHONY: all depend clean

all: $(TARGETS)

clean:
	$(RM) core core.[0-9]* vgcore.[0-9]*
	$(RM) $(LOCALVERSION)
	$(RM) $(OBJ)
	$(RM) $(DEP)
	$(RM) $(TARGETS)

realclean: clean
	$(RM) *~

%.d: %.c ; $(MAKEDEPEND.C)
%.d: %.cpp ; $(MAKEDEPEND.CXX)

version.o: $(patsubst %.cpp,%.o,$(filter-out version.cpp, $(SRC.loba)))

-include $(DEP)

.SECONDEXPANSION:
$(TARGETS): $$(patsubst %.cpp,%.o,$$(SRC.$$@))
	$(LINK.o) $^ $(LOADLIBES) $(LDLIBS) -o $@