AR = ar cru FC = gfortran FFLAGS = -O3 -fopenmp -Wall CXX = g++ CXXFLAGS = -std=c++11 -fopenmp -march=native -Wall # need C++11 #Optional flags #CXXFLAGS += -O0 # debug build CXXFLAGS += -O3 -DNDEBUG # release build ifeq ($(shell uname -s),Darwin) CXXFLAGS += -g -rdynamic -Wl,-no_pie # for stack trace (on Mac) else CXXFLAGS += -g -rdynamic # for stack trace endif #CXXFLAGS += -DSCTL_MEMDEBUG # Enable memory checks CXXFLAGS += -DSCTL_PROFILE=5 -DSCTL_VERBOSE # Enable profiling LDLIBS = -L$(LIBDIR) -lkernels -lgfortran RM = rm -f MKDIRS = mkdir -p INCDIR = ./include SRCDIR = ./src OBJDIR = ./obj LIBDIR = ./lib BINDIR = ./bin TARGET_LIB = $(LIBDIR)/libkernels.a TARGET_BIN = \ $(BINDIR)/test-fortran \ $(BINDIR)/test-cpp all : $(TARGET_LIB) $(TARGET_BIN) $(OBJDIR)/%.o: $(SRCDIR)/%.f90 -@$(MKDIRS) $(dir $@) $(FC) $(FFLAGS) -I$(INCDIR) -c $^ -o $@ $(OBJDIR)/%.o: $(SRCDIR)/%.c -@$(MKDIRS) $(dir $@) $(CC) $(CXXFLAGS) -I$(INCDIR) -c $^ -o $@ $(OBJDIR)/%.o: $(SRCDIR)/%.cpp -@$(MKDIRS) $(dir $@) $(CXX) $(CXXFLAGS) -I$(INCDIR) -c $^ -o $@ $(BINDIR)/%: $(OBJDIR)/%.o $(TARGET_LIB) -@$(MKDIRS) $(dir $@) $(CXX) $(CXXFLAGS) $^ $(LDLIBS) -o $@ $(LIBDIR)/%.a: $(OBJDIR)/%.o -@$(MKDIRS) $(dir $@) $(AR) $@ $^ ranlib $@ clean: $(RM) -r $(BINDIR)/* $(LIBDIR)/* $(OBJDIR)/*