#defines
CXX = icpc
MPICXX = mpicxx
CXXFLAGS = -Wall -openmp -O3
LDFLAGS = -lrt -openmp

TARGET = community gen_RMAT gen_SSCA2 gen_LFR community_mpi 

all: $(TARGET)

# your own implementation
community: main.o graph_tools.o louvain_reference.o 
	$(CXX) $^ -o $@ $(LDFLAGS)

community_mpi: main_mpi.mpi.o graph_tools.mpi.o gen_LFR_mpi.mpi.o louvain_mpi_reference.mpi.o
	$(MPICXX) $^ -o $@ $(LDFLAGS)

gen_RMAT: gen_RMAT.o graph_tools.o
	$(CXX) $^ -o $@ $(LDFLAGS)

gen_SSCA2: gen_SSCA2.o
	$(CXX) $^ -o $@ $(LDFLAGS)

gen_LFR: gen_LFR.o
	$(CXX) $^ -o $@ $(LDFLAGS)

%.mpi.o: %.cpp
	$(MPICXX) -DUSE_MPI $(CXXFLAGS) -o $@ -c $<

.cpp.o:
	$(CXX) $(CXXFLAGS) -o $@ -c $<

clean:
	rm -rf *.o $(TARGET)
