diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..9cb9989 --- /dev/null +++ b/Makefile @@ -0,0 +1,92 @@ +# 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)