SIMGRID_INSTALL_DIR := ./simgrid-stable
#SIMGRID_INSTALL_DIR := ./simgrid-dev

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

CXX := g++

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

#CXXFLAGS += -std=c++0x
CXXFLAGS += $(OPTIM_FLAGS) $(DEBUG_FLAGS)

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

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

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

SRC.loba := main.cpp		\
	communicator.cpp	\
	cost_func.cpp		\
	deployment.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

.PHONY: all clean realclean

all: $(TARGETS)

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

realclean: clean
	$(RM) *~

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

misc_autogen.h: $(SIMGRID_INSTALL_DIR)/include/xbt/log.h
	grep -C1 '# *define *CLOG' $< \
	| sed 's/CLOG/XCLOG/;s/_XBT_LOGV\(([^)]*)\)/(*\1)/' > $@

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

ifneq ($(MAKECMDGOALS),clean)
  ifneq ($(MAKECMDGOALS),realclean)
    $(shell ./setlocalversion)
    -include $(DEP)
  endif
endif

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