forked from comp-chem/cp2k-c
Started makefile
This commit is contained in:
parent
97f109d458
commit
41a835d68d
1 changed files with 150 additions and 0 deletions
150
Makefile
Normal file
150
Makefile
Normal file
|
|
@ -0,0 +1,150 @@
|
|||
.SUFFIXES: .dep .o .cu .c
|
||||
SHELL = /bin/sh
|
||||
|
||||
CP2KHOME := $(PWD)/..
|
||||
ARCH := $(shell $(CP2KHOME)/tools/get_arch_code)
|
||||
LIB1 = cp2k_base_lib
|
||||
LIB2 = cp2k_fft_lib
|
||||
LIBCP2K = cp2k_lib
|
||||
export VERSION=sopt
|
||||
export WHAT =_progr
|
||||
|
||||
### Dependent variables ###
|
||||
|
||||
ARCHDIR = $(CP2KHOME)/arch
|
||||
DOCDIR = $(CP2KHOME)/doc
|
||||
MAINEXEDIR = $(CP2KHOME)/exe
|
||||
MAINLIBDIR = $(CP2KHOME)/lib
|
||||
MAINOBJDIR = $(CP2KHOME)/obj
|
||||
PRETTYOBJDIR = $(CP2KHOME)/obj/prettified
|
||||
TOOLDIR = $(OBJDIR)/tools
|
||||
TOOLSRC = $(CP2KHOME)/tools
|
||||
SRCDIR = $(CP2KHOME)/src
|
||||
SRCDIRS = $(SRCDIR):$(SRCDIR)/lib:$(TOOLSRC)/metadyn:$(CP2KHOME)/cuda_tools
|
||||
MAKEFILE = $(CP2KHOME)/makefiles/Makefile
|
||||
MACHINEDEFS = $(ARCHDIR)/$(ARCH).$(VERSION)
|
||||
PROG = $(EXEDIR)/cp2k.$(VERSION)
|
||||
CP2KSHELL = $(EXEDIR)/cp2k_shell.$(VERSION)
|
||||
FES = $(EXEDIR)/fes.$(VERSION)
|
||||
EXEDIR = $(MAINEXEDIR)/$(ARCH)
|
||||
LIBDIR = $(MAINLIBDIR)/$(ARCH)
|
||||
OBJDIR = $(MAINOBJDIR)/$(ARCH)
|
||||
OBJECTDEFS = $(SRCDIR)/OBJECTDEFS
|
||||
LIBOBJECTDEFS= $(SRCDIR)/lib/OBJECTDEFS
|
||||
LIBNVOBJECTDEFS= $(CP2KHOME)/cuda_tools/NVOBJECTDEFS
|
||||
LIB1_ARCHIVE = $(LIBDIR)/$(VERSION)/lib$(LIB1).a
|
||||
LIB2_ARCHIVE = $(LIBDIR)/$(VERSION)/lib$(LIB2).a
|
||||
LIB_CP2K_ARCHIVE = $(LIBDIR)/$(VERSION)/lib$(LIBCP2K).a
|
||||
SRCENTRY = $(wildcard $(SRCDIR)/CVS/Entr*)
|
||||
FESOBJECTDEFS = $(TOOLSRC)/metadyn/OBJECTDEFS
|
||||
DOXYGENDIR = $(DOCDIR)/doxygen
|
||||
|
||||
### Definition of the multiple targets ###
|
||||
#
|
||||
VERSION_TARGETS = sopt sdbg popt pdbg ssmp psmp
|
||||
#
|
||||
# uses an ugly trick, these are disguised as file names, the directory (@D) part
|
||||
# is used as a version, the file (@F) part is used as the target.
|
||||
#
|
||||
LIB_TARGETS = $(addsuffix /lib ,$(VERSION_TARGETS))
|
||||
ALL_TARGETS = $(addsuffix /all ,$(VERSION_TARGETS))
|
||||
CLEAN_TARGETS = $(addsuffix /clean ,$(VERSION_TARGETS)) $(addsuffix /realclean
|
||||
,$(VERSION_TARGETS))
|
||||
|
||||
.PHONY : _all libs _progr _lib build clean realclean distclean $(CLEAN_TARGETS)\
|
||||
$(ALL_TARGETS) $(LIB_TARGETS) $(VERSION_TARGETS) fes dirs deptool
|
||||
|
||||
### Master rules ###
|
||||
build: dirs deptool
|
||||
$(MAKE) -C $(SRCDIR) -f $(MAKEFILE) all.dep
|
||||
$(MAKE) -C $(SRCDIR)/lib -f $(MAKEFILE) lib.dep
|
||||
$(MAKE) -C $(OBJDIR)/$(VERSION) -f $(MAKEFILE) $(WHAT)
|
||||
|
||||
fes: dirs deptool
|
||||
$(MAKE) -C $(TOOLSRC)/metadyn/ -f $(MAKEFILE) fes.dep
|
||||
$(MAKE) -C $(OBJDIR)/$(VERSION) -f $(MAKEFILE) VERSION=$(VERSION) $(FES)
|
||||
|
||||
dirs:
|
||||
@mkdir -p $(EXEDIR)
|
||||
@mkdir -p $(LIBDIR)/$(VERSION)
|
||||
@mkdir -p $(TOOLDIR)
|
||||
@mkdir -p $(OBJDIR)/$(VERSION)
|
||||
@mkdir -p $(PRETTYOBJDIR)
|
||||
|
||||
realpretty: prettyclean pretty
|
||||
|
||||
pretty: dirs
|
||||
$(MAKE) -C $(SRCDIR) -f $(MAKEFILE) _pretty
|
||||
|
||||
deptool: dirs
|
||||
$(MAKE) -C $(TOOLDIR) -f $(MAKEFILE) makedepf90
|
||||
|
||||
libs:
|
||||
$(MAKE) -f $(MAKEFILE) VERSION=$(VERSION) WHAT=_lib build
|
||||
all:
|
||||
$(MAKE) -f $(MAKEFILE) VERSION=$(VERSION) WHAT=_all build
|
||||
progr:
|
||||
$(MAKE) -f $(MAKEFILE) VERSION=$(VERSION) WHAT=_progr build
|
||||
cpshell:
|
||||
$(MAKE) -f $(MAKEFILE) VERSION=$(VERSION) WHAT=_cpshell build
|
||||
|
||||
#
|
||||
# on a parallel build only one task should go a build the deptool
|
||||
#
|
||||
$(VERSION_TARGETS): dirs deptool
|
||||
$(MAKE) -f $(MAKEFILE) VERSION=$@ build
|
||||
|
||||
$(CLEAN_TARGETS):
|
||||
$(MAKE) -f $(MAKEFILE) VERSION=$(@D) $(@F)
|
||||
|
||||
$(ALL_TARGETS) $(LIB_TARGETS):
|
||||
$(MAKE) -f $(MAKEFILE) VERSION=$(@D) WHAT=_$(@F) build
|
||||
#
|
||||
# here we try to include all the objects that might need considering
|
||||
#
|
||||
|
||||
include $(OBJECTDEFS)
|
||||
include $(LIBOBJECTDEFS)
|
||||
include $(FESOBJECTDEFS)
|
||||
include $(MACHINEDEFS)
|
||||
include $(LIBNVOBJECTDEFS)
|
||||
|
||||
OBJECTS = $(OBJECTS_GENERIC) $(OBJECTS_ARCHITECTURE)
|
||||
FESOBJS = $(FESOBJ) $(OBJECTS_ARCHITECTURE)
|
||||
|
||||
# Cuda specific instructions
|
||||
ifneq ($(NVCC),)
|
||||
LIBNV_ARCHIVE= $(LIBDIR)/$(VERSION)/libcp2k_cuda.a
|
||||
endif
|
||||
|
||||
# Define the whole bunch of libraries needed
|
||||
ALL_LIB = $(LIB_CP2K_ARCHIVE) $(LIB2_ARCHIVE) $(LIB1_ARCHIVE) $(LIBNV_ARCHIVE)
|
||||
|
||||
#
|
||||
# some practical variables for the build.
|
||||
# note that the last cvs entry is not necessarily the most recent
|
||||
#
|
||||
ifeq ($(CPPSHELL),)
|
||||
CPPSHELL := -D__COMPILE_ARCH="\"$(ARCH)\""\
|
||||
-D__COMPILE_DATE="\"$(shell date)\""\
|
||||
-D__COMPILE_HOST="\"$(shell hostname)\""\
|
||||
-D__COMPILE_LASTCVS="\"$(shell tail -n1 $(SRCDIR)/CVS/Entries)\""
|
||||
endif
|
||||
|
||||
ifneq ($(CPP),)
|
||||
#
|
||||
# always add the SRCDIR to the include path (-I here might not be portable)
|
||||
#
|
||||
CPPFLAGS += $(CPPSHELL) -I$(SRCDIR)
|
||||
else
|
||||
FCFLAGS += $(CPPSHELL)
|
||||
endif
|
||||
|
||||
|
||||
### Slave rules ###
|
||||
vpath %.h $(SRCDIRS)
|
||||
vpath %.c $(SRCDIRS)
|
||||
vpath %.cpp $(SRCDIRS)
|
||||
vpath %.dep $(OBJDIR)/$(VERSION)
|
||||
vpath %.pretty $(PRETTYOBJDIR)
|
||||
vpath %.cu $(SRCDIRS)
|
||||
Loading…
Add table
Add a link
Reference in a new issue