mirror of https://gitlab.com/QEF/q-e.git
166 lines
5.5 KiB
Plaintext
166 lines
5.5 KiB
Plaintext
# Copyright (C) 2001-2016 Quantum ESPRESSO group
|
|
#
|
|
# This program is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU General Public License
|
|
# as published by the Free Software Foundation; either version 2
|
|
# of the License. See the file `License' in the root directory
|
|
# of the present distribution.
|
|
#
|
|
# Makefile for fundamental math and utility libraries
|
|
|
|
include ../make.inc
|
|
include install_utils
|
|
|
|
#.NOTPARALLEL: liblapack_internal
|
|
|
|
# NETLIB targets
|
|
#BLAS_NETLIB=blas-3.6.0.tgz
|
|
#BLAS_NETLIB_NAME=BLAS-3.6.0
|
|
#BLAS_NETLIB_URL=http://www.netlib.org/blas/${BLAS_NETLIB}
|
|
|
|
LAPACK_NETLIB=lapack-3.6.1.tgz
|
|
LAPACK_NETLIB_NAME=lapack-3.6.1
|
|
LAPACK_NETLIB_URL=http://www.netlib.org/lapack/${LAPACK_NETLIB}
|
|
|
|
# NVIDIA Eigensolver targets
|
|
EIGENSOLVER_VERSION=0.3.1
|
|
EIGENSOLVER_GPU=v${EIGENSOLVER_VERSION}.tar.gz
|
|
EIGENSOLVER_GPU_NAME=Eigensolver_gpu-${EIGENSOLVER_VERSION}
|
|
EIGENSOLVER_GPU_URL=https://github.com/NVIDIA/Eigensolver_gpu/archive/${EIGENSOLVER_GPU}
|
|
|
|
#
|
|
# MAIN target
|
|
#
|
|
all: libcuda
|
|
$(MAKE) libblas_$(BLAS_LIBS_SWITCH)
|
|
$(MAKE) liblapack_$(LAPACK_LIBS_SWITCH)
|
|
$(MAKE) libelpa_internal
|
|
$(MAKE) libiotk
|
|
|
|
libblas : libblas_$(BLAS_LIBS_SWITCH)
|
|
|
|
libblas_external : fake_blas_external
|
|
|
|
fake_blas_external :
|
|
touch fake_libblas.a
|
|
-rm fake_libblas.a
|
|
|
|
#libblas_internal:
|
|
# $(call download_and_unpack,$(BLAS_NETLIB_NAME),$(BLAS_NETLIB_URL),BLAS,BLAS)
|
|
# if test -e make_blas.inc; then \
|
|
# (cp make_blas.inc ../BLAS/make.inc; \
|
|
# cd ../BLAS; $(MAKE) ); else \
|
|
# (echo "no configuration file found for blas"; \
|
|
# echo "run configure from main QE dir"; exit); fi
|
|
|
|
liblapack : liblapack_$(LAPACK_LIBS_SWITCH)
|
|
|
|
liblapack_external : fake_lapack_external
|
|
|
|
fake_lapack_external :
|
|
touch fake_liblapack.a
|
|
-rm fake_liblapack.a
|
|
|
|
liblapack_internal:
|
|
$(call download_and_unpack,$(LAPACK_NETLIB_NAME),$(LAPACK_NETLIB_URL),LAPACK,LAPACK)
|
|
if test ! -e ../LAPACK/liblapack.a && test -e make_lapack.inc; then \
|
|
(cp make_lapack.inc ../LAPACK/make.inc; \
|
|
cd ../LAPACK; $(MAKE) blaslib lapacklib); else \
|
|
(echo "no configuration file found for lapack"; \
|
|
echo "run configure from main QE dir"; exit); fi
|
|
|
|
libiotk:
|
|
if test ! -d ../S3DE; then \
|
|
(gzip -dc ../archive/iotk-1.2.beta.tar.gz | (cd ../; tar -xvf -)) ; \
|
|
if test -e Makefile_iotk; then \
|
|
(cp Makefile_iotk ../S3DE/iotk/src/Makefile); fi; \
|
|
if test -e iotk_config.h; then \
|
|
(cp iotk_config.h ../S3DE/iotk/include/iotk_config.h); fi; fi
|
|
cd ../S3DE/iotk/src; $(MAKE) lib+util;
|
|
cd ../bin; ln -fs ../S3DE/iotk/tools/iotk .; \
|
|
ln -fs ../S3DE/iotk/src/iotk.x .; \
|
|
ln -fs ../S3DE/iotk/src/iotk_print_kinds.x .; \
|
|
# middle instruction needed for windows
|
|
cd ../; rm -rf iotk ; ln -fs S3DE/iotk iotk
|
|
|
|
libfox:
|
|
echo $(HOST)
|
|
if test ! -d ../FoX; then \
|
|
mkdir ../FoX; \
|
|
(gzip -dc ../archive/fox.tgz | (cd ../FoX; tar -xvf -)); \
|
|
cd ../FoX/fox/; export FC=$(F90); export FCFLAGS="$(FOX_FLAGS)"; \
|
|
./configure --prefix=$(TOPDIR)/FoX ;\
|
|
touch cp_test; \
|
|
if cp -p cp_test cp_test_1; then \
|
|
echo "cp -p works"; \
|
|
else \
|
|
find -type f | xargs sed -i 's/cp -p/cp/g'; \
|
|
fi; \
|
|
$(MAKE) install; cd ../; rm -fr fox;fi
|
|
# ELPA
|
|
libelpa : libelpa_$(ELPA_LIBS_SWITCH)
|
|
|
|
libelpa_ : fake_elpa_external
|
|
libelpa_disabled : fake_elpa_external
|
|
|
|
fake_elpa_external :
|
|
touch fake_libelpa.a
|
|
-rm fake_libelpa.a
|
|
|
|
libelpa_enabled:
|
|
if test ! -d ../ELPA; then \
|
|
( gzip -dc ../archive/ELPA-0.3.tar.gz |(cd ../; tar -xvf -)); fi
|
|
cd ../ELPA; $(MAKE)
|
|
|
|
# CUDA
|
|
libcuda : $(addprefix libcuda_,$(CUDA_EXTLIBS))
|
|
|
|
libcuda_eigensolver :
|
|
$(call download_and_unpack,$(EIGENSOLVER_GPU_NAME),$(EIGENSOLVER_GPU_URL),EIGENSOLVER_GPU,EIGENSOLVER_GPU)
|
|
if test ! -e ../EIGENSOLVER_GPU/lib_eigsolve/lib_eigsolve.a ; then \
|
|
(cp Makefile.lib_eigsolve ../EIGENSOLVER_GPU/lib_eigsolve/Makefile; \
|
|
cd ../EIGENSOLVER_GPU/lib_eigsolve/; $(MAKE) ); else \
|
|
(echo "No configuration file found for GPU custom eigensolver"; exit); fi
|
|
|
|
###################################
|
|
# cleaning
|
|
###################################
|
|
# each lib independently
|
|
#blas_clean:
|
|
# if test -d ../BLAS; then (cd ../BLAS; $(MAKE) clean); fi
|
|
#blas_veryclean:
|
|
# if test -d ../BLAS; then (rm -R -f ../BLAS ../${BLAS_NETLIB_NAME}); fi
|
|
lapack_clean:
|
|
if test -d ../LAPACK; then (cd ../LAPACK; $(MAKE) clean); fi
|
|
lapack_veryclean:
|
|
if test -d ../LAPACK; then (rm -R -f ../LAPACK ../${LAPACK_NETLIB_NAME}); fi
|
|
elpa_clean:
|
|
if test -d ../ELPA; then (cd ../ELPA; $(MAKE) clean); fi
|
|
elpa_veryclean:
|
|
if test -d ../ELPA; then (rm -R -f ../ELPA); fi
|
|
fox_clean:
|
|
if test -d ../FoX; then (rm -R -f ../FoX); fi
|
|
iotk_clean:
|
|
if test -d ../S3DE; then (cd ../S3DE; $(MAKE) clean); fi
|
|
if test -d ../iotk; then (rm -R -f ../iotk); fi
|
|
if test -e ../S3DE/iotk/src/iotk.x; then \
|
|
rm -f ../S3DE/iotk/src/iotk.x; fi
|
|
(rm -f ../bin/iotk; \
|
|
rm -f ../bin/iotk.x; \
|
|
rm -f ../bin/iotk_print_kinds.x)
|
|
iotk_veryclean:
|
|
if test -d ../S3DE; then (rm -R -f ../S3DE); fi
|
|
if test -d ../iotk; then (rm -R -f ../iotk); fi
|
|
if test -e ../S3DE/iotk/src/iotk.x; then (rm -f ../S3DE/iotk/src/iotk.x); fi
|
|
rm -f ../bin/iotk; \
|
|
rm -f ../bin/iotk.x; \
|
|
rm -f ../bin/iotk_print_kinds.x; \
|
|
rm -f ../iotk
|
|
libcuda_eigensolver_clean:
|
|
if test -d ../EIGENSOLVER_GPU; then (cd ../EIGENSOLVER_GPU/lib_eigsolve ; $(MAKE) clean); fi
|
|
libcuda_eigensolver_veryclean:
|
|
if test -d ../EIGENSOLVER_GPU; then (rm -R -f ../EIGENSOLVER_GPU ../${EIGENSOLVER_GPU_NAME}); fi
|
|
# general cleaning
|
|
clean: lapack_clean elpa_clean iotk_clean fox_clean libcuda_eigensolver_clean
|
|
veryclean: lapack_veryclean elpa_veryclean iotk_veryclean fox_clean libcuda_eigensolver_veryclean
|