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 2.7KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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. # Main target: all executables (and thus the library, and thus all objects)
  54. all: $(EXECUTABLES)
  55. # Build executables
  56. $(EXECUTABLES): $(BIN_DIR)/%: $(SRC_DIR)/EXECS/%.$(SRC_EXT) lib$(VERSION).a
  57. $(COMPILE) $< -o $@ -l$(VERSION)
  58. # Compile all object files
  59. $(OBJ_DIR)/%.o: %.$(SRC_EXT)
  60. $(COMPILE) -c $< -o $@
  61. # Create the ABACUS library
  62. lib$(VERSION).a : $(OBJECTS)
  63. ar -cr lib$(VERSION).a $(OBJECTS)
  64. mv lib$(VERSION).a $(LIB_DIR)/
  65. ###########################################
  66. # Cleanup
  67. .PHONY: clean
  68. clean :
  69. /bin/rm -f $(OBJECTS)
  70. /bin/rm -f $(LIB_DIR)/lib$(VERSION).a
  71. /bin/rm -f $(EXECUTABLES)
  72. ###########################################
  73. # Documentation
  74. .PHONY: docs
  75. docs :
  76. doxygen ABACUS_Doxyfile && make -C docs/latex && cp docs/latex/refman.pdf docs/$(VERSION)_manual.pdf