123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- #**********************************************************
- #
- # This software is part of J.-S. Caux's ABACUS++ library.
- #
- # Copyright (c).
- #
- #-----------------------------------------------------------
- #
- # File: Makefile
- #
- #
- #***********************************************************/
-
- # Semver
- VERSION = ABACUS_1.0.0
-
- # Directories
- BASE_DIR = .
- OBJ_DIR = $(BASE_DIR)/obj
- HEAD_DIR = $(BASE_DIR)/include
- LIB_DIR = $(BASE_DIR)/lib
- SRC_DIR = $(BASE_DIR)/src
- BIN_DIR = $(BASE_DIR)/bin
-
- # Source file extension
- SRC_EXT = cc
-
- # Compiler choice
- CXX = g++
- CXXFLAGS = -fopenmp
- LDFLAGS = -O3 -w -fopenmp
- # Compilation command
- COMPILE = $(CXX) -I$(BASE_DIR)/include/ -L$(LIB_DIR)/ $(LDFLAGS)
-
- # Compiler choice and command (parallel case)
- MPICXX = mpicxx
- COMPILE_MPI = mpicxx -I$(BASE_DIR)/include/ -L$(LIB_DIR)/ $(LDFLAGS)
-
-
- # Enable finding all sources
- vpath %.$(SRC_EXT) $(wildcard $(SRC_DIR)/*)
- vpath %.h
-
- # List of all source files
- SOURCES_ALL = $(shell find $(SRC_DIR) -name '*.$(SRC_EXT)')
- # Those involving parallelism
- 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))
- # Executables
- SOURCES_EXECS_ALL = $(shell find $(SRC_DIR)/EXECS -name '*.$(SRC_EXT)')
- # Executables (parallel)
- 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))
- SOURCES_EXECS = $(filter-out $(SOURCES_EXECS_PAR), $(SOURCES_EXECS_ALL))
- # ... leaving the basic sources
- SOURCES = $(filter-out $(SOURCES_PAR) $(SOURCES_EXECS), $(SOURCES_ALL))
-
- # List of all header files
- HEADERS = $(notdir $(shell find $(HEAD_DIR) -name '*.h'))
-
- # Objects to go into library
- OBJECTS = $(patsubst %.$(SRC_EXT), $(OBJ_DIR)/%.o, $(notdir $(SOURCES)))
-
- # Executables
- EXECUTABLES = $(patsubst %.$(SRC_EXT), $(BIN_DIR)/%, $(notdir $(SOURCES_EXECS)))
-
- # Executables (parallel)
- EXECUTABLES_PAR = $(patsubst %.$(SRC_EXT), $(BIN_DIR)/%, $(notdir $(SOURCES_EXECS_PAR)))
-
-
- # Main target: all executables (and thus the library, and thus all objects)
- all: $(EXECUTABLES)
-
- # Build executables
- $(EXECUTABLES): $(BIN_DIR)/%: $(SRC_DIR)/EXECS/%.$(SRC_EXT) $(LIB_DIR)/lib$(VERSION).a
- $(COMPILE) $< -o $@ -l$(VERSION)
-
- # Compile all object files
- $(OBJ_DIR)/%.o: %.$(SRC_EXT)
- $(COMPILE) -c $< -o $@
-
- # Create the ABACUS library
- $(LIB_DIR)/lib$(VERSION).a : $(OBJECTS)
- ar -cr $(LIB_DIR)/lib$(VERSION).a $(OBJECTS)
-
-
- ###########################################
- # Parallel version
-
- .PHONY: parallel
- parallel : $(EXECUTABLES_PAR)
-
- $(EXECUTABLES_PAR): $(BIN_DIR)/%: $(SRC_DIR)/EXECS/%.$(SRC_EXT) $(LIB_DIR)/lib$(VERSION).a
- $(COMPILE_MPI) $< -o $@ -l$(VERSION)
-
-
- ###########################################
- # Cleanup
-
- .PHONY: clean
- clean :
- /bin/rm -f $(OBJECTS)
- /bin/rm -f $(LIB_DIR)/lib$(VERSION).a
- /bin/rm -f $(EXECUTABLES)
- /bin/rm -f $(EXECUTABLES_PAR)
-
-
- ###########################################
- # Documentation
-
- .PHONY: docs
- docs :
- doxygen ABACUS_Doxyfile && make -C docs/latex && cp docs/latex/refman.pdf docs/$(VERSION)_manual.pdf
|