# The compiler CC=mpic++ # Flags CFLAGS=-Wall -larmadillo -std=c++11 -O3 -fomit-frame-pointer -fopenmp PROFFLAGS=-pg -fno-inline-functions DBGFLAGS=-DDBG -g MKDIR=mkdir -p RMDIR=rm -rf INSTRUMENTATION=scorep # Directories for binaries BINDIR=./bin PROFDIR=./prof DEBUGDIR=./debug # Directories for object files BUILDDIR=./build BINOBJDIR=$(BUILDDIR)/objs PROFOBJDIR=$(BUILDDIR)/prof DEBUGOBJDIR=$(BUILDDIR)/debug # Source directories SRC=./src INCLUDE=./include # Source files and object file locations SRCFILES=utils.cpp testlib.cpp data_type.cpp IsingModel.cpp monte_carlo.cpp SRCS=$(addprefix $(SRC)/, $(SRCS)) BINOBJS=$(addprefix $(BINOBJDIR)/, $(SRCFILES:.cpp=.o)) PROFOBJS=$(addprefix $(PROFOBJDIR)/, $(SRCFILES:.cpp=.o)) DEBUGOBJS=$(addprefix $(DEBUGOBJDIR)/, $(SRCFILES:.cpp=.o)) # Location for Binaries EXEC=main phase_transition_mpi test_suite time BINS=$(addprefix $(BINDIR)/, $(EXEC)) PROFBINS=$(PROFDIR)/phase_transition_mpi DEBUGBINS=$(addprefix $(DEBUGDIR)/, $(EXEC)) # List phony targets .PHONY: all clean binclean objclean latex # "Commands" all: $(BINS) profile: $(PROFBINS) debug: $(DEBUGBINS) # Rule for binaries $(BINDIR)/%: $(BINOBJDIR)/%.o $(BINOBJS) $(MKDIR) $(BINDIR) $(CC) $^ -o $@ $(CFLAGS) -I$(INCLUDE) # Rule for profiling binaries $(PROFDIR)/%: $(PROFOBJDIR)/%.o $(PROFOBJS) $(MKDIR) $(PROFDIR) $(INSTRUMENTATION) $(CC) $^ -o $@ $(CFLAGS) $(PROFFLAGS) -I$(INCLUDE) # Rule for debug binaries $(DEBUGDIR)/%: $(DEBUGOBJDIR)/%.o $(DEBUGOBJS) $(MKDIR) $(DEBUGDIR) $(CC) $^ -o $@ $(CFLAGS) $(DEBUGFLAGS) -I$(INCLUDE) # Rule for object files $(BINOBJDIR)/%.o: $(SRC)/%.cpp $(MKDIR) $(BINOBJDIR) $(CC) -c $^ -o $@ $(CFLAGS) -I$(INCLUDE) # Rule for instrumented object files $(PROFOBJDIR)/%.o: $(SRC)/%.cpp $(MKDIR) $(PROFOBJDIR) $INSTRUMENTATION $(CC) -c $^ -o $@ $(CFLAGS) $(PROFFLAGS) -I$(INCLUDE) # Rule for debug object files $(DEBUGOBJDIR)/%.o: $(SRC)/%.cpp $(MKDIR) $(DEBUGOBJDIR) $(CC) -c $^ -o $@ $(CFLAGS) $(DBGFLAG) $(DEBUGFLAGS) -I$(INCLUDE) latex: pdflatex --output-directory=./latexout ./latex/ising_model # Cleaning clean: objclean binclean objclean: $(RMDIR) $(BUILDDIR) binclean: $(RMDIR) $(BINDIR) $(PROFDIR) $(DEBUGDIR)