QMCPACK - General Improvements (#6958)

* No longer need to patch CMake. Using CMAKE_CXX_FLAGS to include BLAS/LAPACK/MKL header files properly.

* Backport two patches to QMCPACK versions prior to 3.3.0:   https://github.com/QMCPACK/qmcpack/pull/621, https://github.com/QMCPACK/qmcpack/pull/623

* Insufficient to include lapack_dir in CMAKE_CXX_FLAGS, CMAKE_C_FLAGS is also needed.

* Make patched Espresso a default variant instead of a hard dependency. This is easier on computer architectures where Espresso is hard to build.

* Fix patching with QE variant. Now using correct form of patch command.

* Add QMCPACK v3.4.0

* Backport patch to QMCPACK versions prior to 3.3.0: https://github.com/QMCPACK/qmcpack/pull/643
This commit is contained in:
Nichols A. Romero 2018-02-23 11:52:46 -06:00 committed by Todd Gamblin
parent c2a4751237
commit 7db35ff05c
2 changed files with 33 additions and 69 deletions

View File

@ -1,55 +0,0 @@
diff --git a/CMake/FindMKL.cmake b/CMake/FindMKL.cmake
index a457eaba0..66dc43ce6 100644
--- a/CMake/FindMKL.cmake
+++ b/CMake/FindMKL.cmake
@@ -7,21 +7,21 @@ FILE( WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src_mkl.cxx"
"#include <iostream>\n #include <mkl.h>\n int main() { return 0; }\n" )
try_compile(HAVE_MKL ${CMAKE_BINARY_DIR}
${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src_mkl.cxx
- CMAKE_FLAGS "${CMAKE_CXX_FLAGS} -mkl" )
+ CMAKE_FLAGS "${CMAKE_CXX_FLAGS} -mkl" "-DINCLUDE_DIRECTORIES=${LAPACK_INCLUDE_DIRS}")
# Check for mkl_vml_functions.h
FILE( WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src_mkl_vml.cxx"
"#include <iostream>\n #include <mkl_vml_functions.h>\n int main() { return 0; }\n" )
try_compile(HAVE_MKL_VML ${CMAKE_BINARY_DIR}
${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src_mkl_vml.cxx
- CMAKE_FLAGS "${CMAKE_CXX_FLAGS} -mkl" )
+ CMAKE_FLAGS "${CMAKE_CXX_FLAGS} -mkl" "-DINCLUDE_DIRECTORIES=${LAPACK_INCLUDE_DIRS}")
# Check for fftw3
FILE( WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src_mkl_fftw3.cxx"
"#include <iostream>\n #include <fftw/fftw3.h>\n int main() { return 0; }\n" )
try_compile(HAVE_MKL_FFTW3 ${CMAKE_BINARY_DIR}
${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src_mkl_fftw3.cxx
- CMAKE_FLAGS "${CMAKE_CXX_FLAGS} -mkl" )
+ CMAKE_FLAGS "${CMAKE_CXX_FLAGS} -mkl" "-DINCLUDE_DIRECTORIES=${LAPACK_INCLUDE_DIRS}")
IF ( HAVE_MKL )
SET( MKL_FOUND 1 )
diff --git a/CMake/FindVectorMath.cmake b/CMake/FindVectorMath.cmake
index c0c919746..f5c511253 100644
--- a/CMake/FindVectorMath.cmake
+++ b/CMake/FindVectorMath.cmake
@@ -19,7 +19,7 @@ IF ( NOT HAVE_VECTOR_MATH )
"#include <iostream>\n #include <mkl_vml_functions.h>\n int main() { return 0; }\n" )
try_compile(HAVE_MKL_VML ${CMAKE_BINARY_DIR}
${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src_mkl_vml.cxx
- CMAKE_FLAGS "${CMAKE_CXX_FLAGS}" )
+ CMAKE_FLAGS "${CMAKE_CXX_FLAGS}" "-DINCLUDE_DIRECTORIES=${LAPACK_INCLUDE_DIRS}")
IF (HAVE_MKL_VML)
# enable VML only when MKL libraries have been picked up
IF (MKL_FOUND)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 570d8a01f..56d939786 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -464,6 +464,8 @@ ELSE(CMAKE_TOOLCHAIN_FILE)
MESSAGE(STATUS "LAPACK libraries: ${LAPACK_LIBRARIES}")
MESSAGE(STATUS "LAPACK linker flags: ${LAPACK_LINKER_FLAGS}")
SET(LAPACK_LIBRARY ${LAPACK_LIBRARIES} ${LAPACK_LINKER_FLAGS})
+ MESSAGE(STATUS "LAPACK_INCLUDE_DIRS: ${LAPACK_INCLUDE_DIRS}")
+ INCLUDE_DIRECTORIES(${LAPACK_INCLUDE_DIRS})
ELSE()
MESSAGE(FATAL_ERROR "Could not find required libraries LAPACK &/or BLAS")
ENDIF()

View File

@ -38,6 +38,7 @@ class Qmcpack(CMakePackage):
# Spack manual. However, it is easier to maintain because github hashes
# can occasionally change.
# NOTE: 12/19/2017 QMCPACK 3.0.0 does not build properly with Spack.
version('3.4.0', git=url, tag='v3.4.0')
version('3.3.0', git=url, tag='v3.3.0')
version('3.2.0', git=url, tag='v3.2.0')
version('3.1.1', git=url, tag='v3.1.1')
@ -64,6 +65,8 @@ class Qmcpack(CMakePackage):
description='Install with support for basic data analysis tools')
variant('gui', default=False,
description='Install with Matplotlib (long installation time)')
variant('qe', default=True,
description='Install with patched Quantum Espresso 5.3.0')
# cuda variant implies mixed precision variant by default, but there is
# no way to express this in variant syntax, need something like
@ -105,16 +108,28 @@ class Qmcpack(CMakePackage):
patch_url = 'https://raw.githubusercontent.com/QMCPACK/qmcpack/develop/external_codes/quantum_espresso/add_pw2qmcpack_to_espresso-5.3.0.diff'
patch_checksum = '0d8d7ba805313ddd4c02ee32c96d2f12e7091e9e82e22671d3ad5a24247860c4'
depends_on('espresso@5.3.0~elpa',
patches=patch(patch_url, sha256=patch_checksum),
when='+mpi')
patches=patch(patch_url, sha256=patch_checksum, when='+qe'),
when='+qe+mpi')
depends_on('espresso@5.3.0~elpa~scalapack~mpi',
patches=patch(patch_url, sha256=patch_checksum),
when='~mpi')
patches=patch(patch_url, sha256=patch_checksum, when='+qe'),
when='+qe~mpi')
# This is Spack specific patch, we may need to enhance QMCPACK's CMake
# in the near future.
patch('cmake.diff')
# Backport several patches from recent versions of QMCPACK
# The test_numerics unit test is broken prior to QMCPACK 3.3.0
patch_url = 'https://patch-diff.githubusercontent.com/raw/QMCPACK/qmcpack/pull/621.patch'
patch_checksum = 'e2ff7a6f0f006856085d4aab6d31f32f16353e41f760a33a7ef75f3ecce6a5d6'
patch(patch_url, sha256=patch_checksum, when='@3.1.0:3.3.0')
# FindMKL.cmake has an issues prior to QMCPACK 3.3.0
patch_url = 'https://patch-diff.githubusercontent.com/raw/QMCPACK/qmcpack/pull/623.patch'
patch_checksum = '3eb9dec05fd1a544318ff84cd8b5926cfc6b46b375c7f3b012ccf0b50cf617b7'
patch(patch_url, sha256=patch_checksum, when='@3.1.0:3.3.0')
# git-rev files for not git builds issues prior to QMCPACK 3.3.0
patch_url = 'https://patch-diff.githubusercontent.com/raw/QMCPACK/qmcpack/pull/643.patch'
patch_checksum = 'c066c79901a612cf8848135e0d544efb114534cca70b90bfccc8ed989d3d9dde'
patch(patch_url, sha256=patch_checksum, when='@3.1.0:3.3.0')
def patch(self):
# FindLibxml2QMC.cmake doesn't check the environment by default
@ -207,14 +222,18 @@ def cmake_args(self):
# header files. Intel MKL requires special case due to differences in
# Darwin vs. Linux $MKLROOT naming schemes
if 'intel-mkl' in self.spec:
args.append(
'-DLAPACK_INCLUDE_DIRS=%s' %
format(join_path(env['MKLROOT'], 'include')))
lapack_dir = format(join_path(env['MKLROOT'], 'include'))
else:
args.append(
'-DLAPACK_INCLUDE_DIRS=%s;%s' % (
self.spec['lapack'].prefix.include,
self.spec['blas'].prefix.include))
lapack_dir = ':'.join((
spec['lapack'].prefix.include,
spec['blas'].prefix.include
))
args.extend([
'-DCMAKE_CXX_FLAGS=-I%s' % lapack_dir,
'-DCMAKE_C_FLAGS=-I%s' % lapack_dir
])
return args
def install(self, spec, prefix):