You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Makefile 3.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. #**********************************************************
  2. #
  3. # This software is part of J.-S. Caux's ABACUS++ library.
  4. #
  5. # Copyright (c).
  6. #
  7. #-----------------------------------------------------------
  8. #
  9. # File: Makefile
  10. #
  11. #
  12. #***********************************************************/
  13. # Semver
  14. VERSION = ABACUS_1.0.0
  15. # Directories
  16. BASE_DIR = .
  17. OBJ_DIR = $(BASE_DIR)/obj
  18. HEAD_DIR = $(BASE_DIR)/include
  19. LIB_DIR = $(BASE_DIR)/lib
  20. SRC_DIR = $(BASE_DIR)/src
  21. BIN_DIR = $(BASE_DIR)/bin
  22. # Source file extension
  23. SRC_EXT = cc
  24. # Compiler choice
  25. CXX = g++
  26. CXXFLAGS = -fopenmp
  27. LDFLAGS = -O3 -w -fopenmp
  28. # Compilation command
  29. COMPILE = $(CXX) -I$(BASE_DIR)/include/ -L$(LIB_DIR)/ $(LDFLAGS)
  30. # Compiler choice and command (parallel case)
  31. MPICXX = mpicxx
  32. COMPILE_MPI = mpicxx -I$(BASE_DIR)/include/ -L$(LIB_DIR)/ $(LDFLAGS)
  33. # Enable finding all sources
  34. vpath %.$(SRC_EXT) $(wildcard $(SRC_DIR)/*)
  35. vpath %.h
  36. # List of all source files
  37. SOURCES_ALL = $(shell find $(SRC_DIR) -name '*.$(SRC_EXT)')
  38. # Those involving parallelism
  39. SOURCES_PAR = $(filter %_par.$(SRC_EXT) %_par_Prepare.$(SRC_EXT) %_par_Run.$(SRC_EXT) %_par_Wrapup.$(SRC_EXT) %_server.$(SRC_EXT) %_client.$(SRC_EXT), $(SOURCES_ALL))
  40. # Executables
  41. SOURCES_EXECS_ALL = $(shell find $(SRC_DIR)/EXECS -name '*.$(SRC_EXT)')
  42. # Executables (parallel)
  43. SOURCES_EXECS_PAR = $(filter %_par.$(SRC_EXT) %_par_Prepare.$(SRC_EXT) %_par_Run.$(SRC_EXT) %_par_Wrapup.$(SRC_EXT) %_server.$(SRC_EXT) %_client.$(SRC_EXT), $(SOURCES_EXECS_ALL))
  44. SOURCES_EXECS = $(filter-out $(SOURCES_EXECS_PAR), $(SOURCES_EXECS_ALL))
  45. # ... leaving the basic sources
  46. SOURCES = $(filter-out $(SOURCES_PAR) $(SOURCES_EXECS), $(SOURCES_ALL))
  47. # List of all header files
  48. HEADERS = $(notdir $(shell find $(HEAD_DIR) -name '*.h'))
  49. # Objects to go into library
  50. OBJECTS = $(patsubst %.$(SRC_EXT), $(OBJ_DIR)/%.o, $(notdir $(SOURCES)))
  51. # Executables
  52. EXECUTABLES = $(patsubst %.$(SRC_EXT), $(BIN_DIR)/%, $(notdir $(SOURCES_EXECS)))
  53. # Executables (parallel)
  54. EXECUTABLES_PAR = $(patsubst %.$(SRC_EXT), $(BIN_DIR)/%, $(notdir $(SOURCES_EXECS_PAR)))
  55. # Main target: all executables (and thus the library, and thus all objects)
  56. all: $(EXECUTABLES)
  57. # Build executables
  58. $(EXECUTABLES): $(BIN_DIR)/%: $(SRC_DIR)/EXECS/%.$(SRC_EXT) $(LIB_DIR)/lib$(VERSION).a
  59. $(COMPILE) $< -o $@ -l$(VERSION)
  60. # Compile all object files
  61. $(OBJ_DIR)/%.o: %.$(SRC_EXT)
  62. $(COMPILE) -c $< -o $@
  63. # Create the ABACUS library
  64. $(LIB_DIR)/lib$(VERSION).a : $(OBJECTS)
  65. ar -cr $(LIB_DIR)/lib$(VERSION).a $(OBJECTS)
  66. ###########################################
  67. # Parallel version
  68. .PHONY: parallel
  69. parallel : $(EXECUTABLES_PAR)
  70. $(EXECUTABLES_PAR): $(BIN_DIR)/%: $(SRC_DIR)/EXECS/%.$(SRC_EXT) $(LIB_DIR)/lib$(VERSION).a
  71. $(COMPILE_MPI) $< -o $@ -l$(VERSION)
  72. ###########################################
  73. # Cleanup
  74. .PHONY: clean
  75. clean :
  76. /bin/rm -f $(OBJECTS)
  77. /bin/rm -f $(LIB_DIR)/lib$(VERSION).a
  78. /bin/rm -f $(EXECUTABLES)
  79. /bin/rm -f $(EXECUTABLES_PAR)
  80. ###########################################
  81. # Documentation
  82. .PHONY: docs
  83. docs :
  84. doxygen ABACUS_Doxyfile && make -C docs/latex && cp docs/latex/refman.pdf docs/$(VERSION)_manual.pdf