Started makefile

This commit is contained in:
Adam Parler 2023-11-24 17:36:16 -05:00
parent 97f109d458
commit 41a835d68d

150
Makefile Normal file
View 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)