Makefile 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. AR = ar cru
  2. FC = gfortran
  3. FFLAGS = -O3 -fopenmp -Wall
  4. CXX = g++
  5. CXXFLAGS = -std=c++11 -fopenmp -march=native -Wall # need C++11
  6. #Optional flags
  7. #CXXFLAGS += -O0 # debug build
  8. CXXFLAGS += -O3 -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. LDLIBS = -L$(LIBDIR) -lkernels -lgfortran
  17. RM = rm -f
  18. MKDIRS = mkdir -p
  19. INCDIR = ./include
  20. SRCDIR = ./src
  21. OBJDIR = ./obj
  22. LIBDIR = ./lib
  23. BINDIR = ./bin
  24. TARGET_LIB = $(LIBDIR)/libkernels.a
  25. TARGET_BIN = \
  26. $(BINDIR)/test-fortran \
  27. $(BINDIR)/test-cpp
  28. all : $(TARGET_LIB) $(TARGET_BIN)
  29. $(OBJDIR)/%.o: $(SRCDIR)/%.f90
  30. -@$(MKDIRS) $(dir $@)
  31. $(FC) $(FFLAGS) -I$(INCDIR) -c $^ -o $@
  32. $(OBJDIR)/%.o: $(SRCDIR)/%.c
  33. -@$(MKDIRS) $(dir $@)
  34. $(CC) $(CXXFLAGS) -I$(INCDIR) -c $^ -o $@
  35. $(OBJDIR)/%.o: $(SRCDIR)/%.cpp
  36. -@$(MKDIRS) $(dir $@)
  37. $(CXX) $(CXXFLAGS) -I$(INCDIR) -c $^ -o $@
  38. $(BINDIR)/%: $(OBJDIR)/%.o $(TARGET_LIB)
  39. -@$(MKDIRS) $(dir $@)
  40. $(CXX) $(CXXFLAGS) $^ $(LDLIBS) -o $@
  41. $(LIBDIR)/%.a: $(OBJDIR)/%.o
  42. -@$(MKDIRS) $(dir $@)
  43. $(AR) $@ $^
  44. ranlib $@
  45. clean:
  46. $(RM) -r $(BINDIR)/* $(LIBDIR)/* $(OBJDIR)/*