Makefile 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. AR = ar cru
  2. FC = mpif90 -lmpi_cxx
  3. FFLAGS = -O3 -g -rdynamic -fopenmp -march=native -Wall
  4. CXX = mpic++
  5. CXXFLAGS = -std=c++11 -fopenmp -Wall -Wfloat-conversion # need C++11 and OpenMP
  6. #Optional flags
  7. #CXXFLAGS += -O0 # debug build
  8. CXXFLAGS += -O3 -march=native -DNDEBUG # release build
  9. ifeq ($(shell uname -s),Darwin)
  10. CXXFLAGS += -g -rdynamic -Wl,-no_pie # for stack trace (on Mac)
  11. else
  12. CXXFLAGS += -g -rdynamic # for stack trace
  13. endif
  14. #CXXFLAGS += -DSCTL_MEMDEBUG # Enable memory checks
  15. CXXFLAGS += -DSCTL_PROFILE=5 -DSCTL_VERBOSE # Enable profiling
  16. CXXFLAGS += -DSCTL_HAVE_MPI #use MPI
  17. LDLIBS = -L$(LIBDIR) -ltree -lstdc++
  18. RM = rm -f
  19. MKDIRS = mkdir -p
  20. INCDIR = ./include
  21. SRCDIR = ./src
  22. OBJDIR = ./obj
  23. LIBDIR = ./lib
  24. BINDIR = ./bin
  25. TARGET_LIB = $(LIBDIR)/libtree.a
  26. TARGET_BIN = \
  27. $(BINDIR)/test-fortran \
  28. $(BINDIR)/test-cpp
  29. all : $(TARGET_LIB) $(TARGET_BIN)
  30. $(BINDIR)/%: $(SRCDIR)/%.f90 $(TARGET_LIB)
  31. -@$(MKDIRS) $(dir $@)
  32. $(FC) $(FFLAGS) -I$(INCDIR) $^ $(LDLIBS) -o $@
  33. $(BINDIR)/%: $(SRCDIR)/%.cpp $(TARGET_LIB)
  34. -@$(MKDIRS) $(dir $@)
  35. $(CXX) $(CXXFLAGS) -I$(INCDIR) $^ $(LDLIBS) -o $@
  36. $(OBJDIR)/%.o: $(SRCDIR)/%.cpp
  37. -@$(MKDIRS) $(dir $@)
  38. $(CXX) $(CXXFLAGS) -I$(INCDIR) -c $^ -o $@
  39. $(LIBDIR)/%.a: $(OBJDIR)/%.o
  40. -@$(MKDIRS) $(dir $@)
  41. $(AR) $@ $^
  42. ranlib $@
  43. clean:
  44. $(RM) -r $(BINDIR)/* $(LIBDIR)/* $(OBJDIR)/*
  45. $(RM) -f *~ */*~ */*/*~