PROJECT(qmcpack) CMAKE_MINIMUM_REQUIRED(VERSION 2.4) ###################################################################### # Version ###################################################################### SET(QMCPLUSPLUS_VERSION_MAJOR 0) SET(QMCPLUSPLUS_VERSION_MINOR 5) SET(QMCPLUSPLUS_VERSION_PATCH 0) SET(QMCPLUSPLUS_RELEASE 0) SET(QMCPLUSPLUS_VERSION "${QMCPLUSPLUS_VERSION_MAJOR}.${QMCPLUSPLUS_VERSION_MINOR}.$(QMCPLUSPLUS_VERSION_PATH}") ###################################################################### #define the paths for library and executable for out-of-soruce compilation ###################################################################### SET (LIBRARY_OUTPUT_PATH ${qmcpack_BINARY_DIR}/lib CACHE PATH "Single output directory for building all libraries.") SET (EXECUTABLE_OUTPUT_PATH ${qmcpack_BINARY_DIR}/bin CACHE PATH "Single output directory for building all executables.") ###################################################################### # Set the compiler-time parameters # OHMMS_DIM = dimension of the problem # OHMMS_INDEXTYPE = type of index # OHMMS_PRECISION = base precision, float, double etc # QMC_COMPLEX = true if using complex wavefunctions # QMC_MPI = enable MPI # QMC_OMP = enable OMP # QMC_BITS = 32/64 bit ###################################################################### SET(OHMMS_DIM 3 CACHE INTEGER "Select physical dimension") SET(OHMMS_INDEXTYPE int) SET(OHMMS_PRECISION double) SET(APP_PRECISION double) SET(QMC_BUILD_COMPLETE 1 CACHE BOOL "Enable all the packages") SET(PRINT_DEBUG 0 CACHE BOOL "Enable/disable debug printing") SET(QMC_COMPLEX 0 CACHE INTEGER "Build for complex binary") SET(QMC_MPI 1 CACHE BOOL "Enable/disable MPI") SET(QMC_OMP 1 CACHE BOOL "Enable/disable OpenMP") SET(QMC_BITS 64 CACHE INTEGER "Select OS bit") ###################################################################### # Standard test ###################################################################### INCLUDE(${CMAKE_ROOT}/Modules/CheckFunctionExists.cmake) INCLUDE(${CMAKE_ROOT}/Modules/CheckIncludeFile.cmake) INCLUDE(${CMAKE_ROOT}/Modules/CheckTypeSize.cmake) CHECK_FUNCTION_EXISTS(sincos HAVE_SINCOS) CHECK_FUNCTION_EXISTS(round HAVE_STD_ROUND) ###################################################################### # add macros to compile einspline if necessary ###################################################################### CHECK_FUNCTION_EXISTS(floor HAVE_FLOOR) CHECK_FUNCTION_EXISTS(posix_memalign HAVE_POSIX_MEMALIGN) CHECK_FUNCTION_EXISTS(pow HAVE_POW) CHECK_FUNCTION_EXISTS(sqrt HAVE_SQRT) CHECK_INCLUDE_FILE(dlfcn.h HAVE_DLFCN_H) CHECK_INCLUDE_FILE(inttypes.h HAVE_INTTYPES_H) CHECK_INCLUDE_FILE(memory.h HAVE_MEMORY_H) CHECK_INCLUDE_FILE(pmmintrin.h HAVE_PMMINTRIN_H) CHECK_INCLUDE_FILE(emmintrin.h HAVE_EMMINTRIN_H) CHECK_INCLUDE_FILE(sys/stat.h HAVE_SYS_STAT_H) CHECK_INCLUDE_FILE(sys/time.h HAVE_SYS_TIME_H) CHECK_INCLUDE_FILE(sys/types.h HAVE_SYS_TYPES_H) CHECK_INCLUDE_FILE(unistd.h HAVE_UNISTD_H) SET(HAVE_SSE 0) SET(HAVE_SSE2 0) SET(HAVE_SSE3 0) SET(HAVE_SSSE3 0) SET(USE_PREFETCH 0) SET(PREFETCH_AHEAD 12) SET(HAVE_C_VARARRAYS 1) ###################################################################### # Build options # QMC_BUILD_STATIC build static/dynamic libraries # BUILD_QMCTOOLS build utility programs # BUILD_SANDBOX build test programs # MPIP_PROFILE profile mpi performance ###################################################################### SET(QMC_BUILD_STATIC 0 CACHE BOOL "Build static libraries and binary") SET(BUILD_QMCTOOLS 0 CACHE BOOL "Build tools for QMCPACK") SET(BUILD_SANDBOX 0 CACHE BOOL "Build snadbox for testing") SET(MPIP_PROFILE 0 CACHE BOOL "Build with mpip for mpi profile") ###################################################################### # Performance-related macros # QMC_SK_USE_RECURSIVE enable/disable recursive evalaution of SK ###################################################################### SET(QMC_SK_USE_RECURSIVE 0) IF(NOT $ENV{QMC_SK_RECURSIVE} MATCHES QMC_SK_USE_RECURSIVE) SET(QMC_SK_USE_RECURSIVE $ENV{QMC_SK_RECURSIVE}) ENDIF(NOT $ENV{QMC_SK_RECURSIVE} MATCHES QMC_SK_USE_RECURSIVE) ###################################################################### # Overwrite with environments if they differ from the set values ###################################################################### IF(NOT $ENV{QMC_MPI} MATCHES QMC_MPI) SET(QMC_MPI $ENV{QMC_MPI}) ENDIF(NOT $ENV{QMC_MPI} MATCHES QMC_MPI) IF(NOT $ENV{QMC_OMP} MATCHES QMC_OMP) SET(QMC_OMP $ENV{QMC_OMP}) ENDIF(NOT $ENV{QMC_OMP} MATCHES QMC_OMP) IF(NOT $ENV{QMC_BITS} MATCHES QMC_BITS) SET(QMC_BITS $ENV{QMC_BITS}) ENDIF(NOT $ENV{QMC_BITS} MATCHES QMC_BITS) IF(NOT $ENV{QMC_COMPLEX} MATCHES QMC_COMPLEX) SET(QMC_COMPLEX $ENV{QMC_COMPLEX}) ENDIF(NOT $ENV{QMC_COMPLEX} MATCHES QMC_COMPLEX) ###################################################################### # FIXED PARAMETERS for test and legacy reasons # DO NOT TOUCH THESE # QMC_ORTHO = 0 for general unit cell, 1 for orthogonal cells # QMC_FASTWALKER = true, when operation is faster for each walker ###################################################################### SET(QMC_FASTWALKER 1) SET(OHMMS_ORTHO 0) ###################################################################### #list of options to determine libraries. First, try to use libraries available ###################################################################### SET(INTEL_COMPILER 0) SET(ENABLE_OPENMP 0) SET(ENABLE_PHDF5 0 CACHE BOOL "Enable phdf5 for output") SET(HAVE_MPI 0) SET(HAVE_OOMPI 0) SET(HAVE_LIBXML2 1) SET(HAVE_LIBFFTW 0) SET(HAVE_LIBXMLPP 0) SET(HAVE_LIBHDF5 0) SET(HAVE_LIBSPRNG 0) SET(HAVE_LIBBLITZ 0) SET(HAVE_LIBGSL 0) SET(INTEL_COMPILER 0) SET(MAC_VECLIB 0) SET(ENABLE_GTK_GUI 0) SET(HAVE_EINSPLINE 0) SET(HAVE_EINSPLINE_EXT 0) SET(HAVE_MKL 0) SET(HAVE_ACML 0) set(ENABLE_TAU_PROFILE 0 CACHE BOOL "Enable tau for profiling") SET(TAU_HOME $ENV{TAU_HOME}) ###################################################### # Directory where customize cmake files reside ###################################################### SET (PROJECT_CMAKE ${qmcpack_SOURCE_DIR}/CMake) ###################################################### # Get the current SVN version ###################################################### SET(QMCPLUSPLUS_SVN_LAST_CHANGED "2008-05-12") FIND_PACKAGE(Subversion) IF(Subversion_FOUND) Subversion_WC_INFO(${PROJECT_SOURCE_DIR} Project) MESSAGE("-- Current revision : ${Project_WC_REVISION} modified on ${Project_WC_LAST_CHANGED_DATE}") SET(QMCPLUSPLUS_BRANCH ${Project_WC_REVISION}) SET(QMCPLUSPLUS_LAST_CHANGED_DATE ${Project_WC_LAST_CHANGED_DATE}) ENDIF(Subversion_FOUND) ###################################################### #COMPILER choose one of the cmake files to customize the compiler options #If nothing is chosen, default settings by cmake will be used. #If the automatic detection does not work, comment out everything #upto COMPILER MANUAL SELECTION and use one of the customized cmake file. ###################################################### SET(FOUND_CXXENV 0) INCLUDE(${CMAKE_ROOT}/Modules/TestCXXAcceptsFlag.cmake) INCLUDE(${CMAKE_ROOT}/Modules/CheckCCompilerFlag.cmake) IF(QMC_ENV) MESSAGE(STATUS "Using tested toolchain by qmcpack developers") INCLUDE(${PROJECT_SOURCE_DIR}/config/${QMC_ENV}.cmake) ELSE(QMC_ENV) ###################################################### # Try to identify CPU identity ###################################################### SET(CPU_IDENTITY "generic") INCLUDE(${PROJECT_CMAKE}/CheckProcessorID.cmake) #------------------------------------ # On Jaguar use CrayXT.cmake #------------------------------------ IF($ENV{HOST} MATCHES "jaguar") MESSAGE(" Working on jaguar. Using CMake/CrayXT.cmake") SET(CPU_IDENTITY "barcelona") INCLUDE(${PROJECT_CMAKE}/CrayXT.cmake) SET(FOUND_CXXENV 1) ENDIF($ENV{HOST} MATCHES "jaguar") #------------------------------------ # Check if using IBM compilers #------------------------------------ IF($ENV{CXX} MATCHES "xlC") INCLUDE(${PROJECT_CMAKE}/IBMCompilers.cmake) SET(FOUND_CXXENV 1) ENDIF($ENV{CXX} MATCHES "xlC") #------------------------------------ # Check if using Intel compilers #------------------------------------ IF($ENV{CXX} MATCHES "icpc") INCLUDE(${PROJECT_CMAKE}/IntelCompilers.cmake) SET(FOUND_CXXENV 1) ENDIF($ENV{CXX} MATCHES "icpc") #------------------------------------ # other compilers, e.g., mpicxx # most likely *unix with gnu or intel compilers # using "-restrict" option to find out if intel compilers are backend. #------------------------------------ IF(NOT FOUND_CXXENV) IF(CMAKE_COMPILER_IS_GNUCXX) INCLUDE(${PROJECT_CMAKE}/GNUCompilers.cmake) ELSE(CMAKE_COMPILER_IS_GNUCXX) SET(CMAKE_TRY_INTEL_CXX_FLAGS "-restrict") CHECK_CXX_ACCEPTS_FLAG(${CMAKE_TRY_INTEL_CXX_FLAGS} INTEL_CXX_FLAGS) IF(INTEL_CXX_FLAGS) INCLUDE(${PROJECT_CMAKE}/IntelCompilers.cmake) SET(FOUND_CXXENV 1) ENDIF(INTEL_CXX_FLAGS) ENDIF(CMAKE_COMPILER_IS_GNUCXX) ENDIF(NOT FOUND_CXXENV) #------------------------------------------------------------------- #COMPIELR MANUAL SELECTION #If automatic detection does not work, comment out above and select one #of these files #------------------------------------------------------------------- #INCLUDE(${PROJECT_CMAKE}/GNUCompilers.cmake) #INCLUDE(${PROJECT_CMAKE}/IntelCompilers.cmake) #INCLUDE(${PROJECT_CMAKE}/IBMCompilers.cmake) #INCLUDE(${PROJECT_CMAKE}/KCCCompilers.cmake) INCLUDE(${PROJECT_CMAKE}/FindLapack.cmake) ENDIF(QMC_ENV) MESSAGE("-- CXX compiler flags: ${CMAKE_CXX_FLAGS}") MESSAGE("-- CC compiler flags: ${CMAKE_C_FLAGS}") # ###################################################### # DO NOT MODIFY BELOW ###################################################### INCLUDE(${CMAKE_ROOT}/Modules/FindThreads.cmake) INCLUDE(${PROJECT_CMAKE}/FindLibxml2.cmake) INCLUDE(${PROJECT_CMAKE}/FindHDF5.cmake) INCLUDE(${PROJECT_CMAKE}/FindBoost.cmake) #INCLUDE(${PROJECT_CMAKE}/FindPkgConfig.cmake) INCLUDE(${PROJECT_CMAKE}/FindFFTW.cmake) if(ENABLE_TAU_PROFILE) INCLUDE(${PROJECT_CMAKE}/FindTau.cmake) endif(ENABLE_TAU_PROFILE) ###################################################### # Add optional macros ###################################################### IF(FOUND_TAU) INCLUDE_DIRECTORIES(${TAU_INCLUDE_DIR}) ADD_DEFINITIONS (-DPROFILING_ON -DTAU_STDCXXLIB -DTAU_DOT_H_LESS_HEADERS -DTAU_CALLPATH -DTAU_LARGEFILE64_SOURCE -DTAU_BFD ) if(ENABLE_OPENMP) ADD_DEFINITIONS(-DTAU_OPENMP) endif(ENABLE_OPENMP) ENDIF(FOUND_TAU) IF(QMC_MPI) #IF(MPIP_PROFILE) # LINK_LIBRARIES("/usr/apps/tools/mpip/lib/cmpi/libmpiP.a") # LINK_LIBRARIES("/usr/lib/libbfd.a") # LINK_LIBRARIES("/usr/lib/libiberty.a") #ENDIF(MPIP_PROFILE) include(FindMPI) IF(MPI_FOUND) SET(HAVE_MPI 1) SET(HAVE_OOMPI 1) LINK_LIBRARIES(${MPI_LIBRARY}) ENDIF(MPI_FOUND) ENDIF(QMC_MPI) if(HAVE_MPI) #do not use mpi c++ binding ADD_DEFINITIONS(-DMPICH_SKIP_MPICXX) #add tau stuff IF(FOUND_TAU) ADD_DEFINITIONS( -DTAU_MPI -DTAU_MPI_THREADED -DTAU_MPIGREQUEST -DTAU_MPIDATAREP -DTAU_MPIERRHANDLER -DTAU_MPIATTRFUNCTION -DTAU_MPITYPEEX -DTAU_MPIADDERROR ) #build libtau subdirs(src/tau) LINK_LIBRARIES(tau) ENDIF(FOUND_TAU) endif(HAVE_MPI) IF(FOUND_LIBXML2) INCLUDE_DIRECTORIES(${LIBXML2_INCLUDE_DIR}) LINK_LIBRARIES(${LIBXML2_LIBRARY}) SET(HAVE_LIBXML2 1) ENDIF(FOUND_LIBXML2) IF(FOUND_BOOST) SET(HAVE_LIBBOOST 1) INCLUDE_DIRECTORIES(${BOOST_INCLUDE_DIR}) ELSE(FOUND_BOOST) MESSAGE(FATAL_ERROR "Require boost 1.33.x or higher. Set BOOST_HOME") ENDIF(FOUND_BOOST) IF(FOUND_FFTW) SET(HAVE_LIBFFTW 1) INCLUDE_DIRECTORIES(${FFTW_INCLUDE_DIR}) LINK_LIBRARIES(${FFTW_LIBRARY}) ENDIF(FOUND_FFTW) IF(FOUND_HDF5) SET(HAVE_LIBHDF5 1) INCLUDE_DIRECTORIES(${HDF5_INCLUDE_DIR}) LINK_LIBRARIES(${HDF5_LIBRARY}) #zlib INCLUDE(${PROJECT_CMAKE}/FindZLIB.cmake) IF(ZLIB_FOUND) LINK_LIBRARIES(${ZLIB_LIBRARY}) ENDIF(ZLIB_FOUND) #szlib INCLUDE(${PROJECT_CMAKE}/FindSZLIB.cmake) IF(SZLIB_FOUND) LINK_LIBRARIES(${SZLIB_LIBRARY}) ENDIF(SZLIB_FOUND) ELSE(FOUND_HDF5) MESSAGE(FATAL_ERROR "Require hdf5 1.6.4 or higher. Set HDF5_HOME") ENDIF(FOUND_HDF5) ###################################################################### # Manage GTK+ and GTKMM packages for GUI # search headers and libraries # 1) -lXYZ-${XYZ_VERSION} # 2) -lXYZ # example: -lgtk-${GTK_VERSION} | -lgtk ###################################################################### SET(GTK_VERSION 2.0) SET(PANGO_VERSION 1.0) SET(GTKMM_VERSION 2.4) SET(PANGOMM_VERSION 1.4) SET(SIGCPP_VERSION 2.0) IF(ENABLE_GTK_GUI) INCLUDE(${PROJECT_CMAKE}/FindGTK.cmake) #THIS SHOULD GO TO the directory where GUI is built IF(GTKMM_FOUND) INCLUDE_DIRECTORIES(${GTKMM_INCLUDE_DIR}) LINK_LIBRARIES(${GTKMM_LIBRARIES}) ENDIF(GTKMM_FOUND) ENDIF(ENABLE_GTK_GUI) ###################################################################### # Manage Einspline library # - check if libeinspline can be found in $EINSPLINE_HOME/include and # $EINSPLINE_HOME/lib # - if not found, build it from the source directory in $EINSPLINE_HOME # - if everything fails, do not use it ###################################################################### INCLUDE(${PROJECT_CMAKE}/FindEinspline.cmake) IF(HAVE_EINSPLINE_EXT) INCLUDE_DIRECTORIES(${EINSPLINE_INCLUDE_DIR}) LINK_LIBRARIES(${EINSPLINE_LIBRARY}) ELSE(HAVE_EINSPLINE_EXT) IF(HAVE_EINSPLINE) SUBDIRS(src/einspline) ENDIF(HAVE_EINSPLINE) ENDIF(HAVE_EINSPLINE_EXT) #IF ( CMAKE_PKGCONFIG_EXECUTABLE ) # # Find all the librtk stuff with pkg-config # PKGCONFIG( "einspline >= 0.9" HAVE_EINSPLINE EINSPLINE_INCLUDE_DIRS EINSPLINE_DEFINES EINSPLINE_LINK_DIRS EINSPLINE_LIBS ) # CHECK_INCLUDE_FILE(${EINSPLINE_INCLUDE_DIRS}/config.h HAVE_EINSPLINE) # IF(HAVE_EINSPLINE) # FIND_LIBRARY(EINSPLINE_LIBRARY einspline ${EINSPLINE_LINK_DIRS}) # INCLUDE_DIRECTORIES(${EINSPLINE_INCLUDE_DIRS}) # ADD_DEFINITIONS (${EINSPLINE_DEFINES} -DHAVE_EINSPLINE) # SET(HAVE_EINSPLINE 1) # SET(HAVE_EINSPLINE_EXT 1) # LINK_LIBRARIES(${EINSPLINE_LIBRARY}) # MESSAGE("-- Einspline library found at ${EINSPLINE_LIBRARY}") # ELSE(HAVE_EINSPLINE) # MESSAGE("-- Checked PKG_CONFIG_PATH=$ENV{PKG_CONFIG_PATH}") # MESSAGE("-- Missing pre-built Einspline library.") # ENDIF(HAVE_EINSPLINE) #ENDIF ( CMAKE_PKGCONFIG_EXECUTABLE ) # #IF(NOT HAVE_EINSPLINE) # FIND_PATH(EINSPLINE_DIR src/bspline.h $ENV{EINSPLINE_HOME}) # IF(EINSPLINE_DIR) # MESSAGE("-- Try to build Einspline library. Source is found at ${EINSPLINE_DIR}.") # SET(HAVE_EINSPLINE 1) # SUBDIRS(src/einspline) # ELSE(EINSPLINE_DIR) # MESSAGE("-- EINSPLINE_HOME is not found. Disable Einspline library.") # MESSAGE("-- Download einspline library to utilize an optimized 3D-bspline library.") # ENDIF(EINSPLINE_DIR) #ENDIF(NOT HAVE_EINSPLINE) ################################################### # Done searching libraries. Start building qmcpack ################################################### MESSAGE("-- Ready to build qmcpack") INCLUDE_DIRECTORIES( ${qmcpack_SOURCE_DIR}/src ${qmcpack_BINARY_DIR}/src ) ADD_DEFINITIONS(-DHAVE_CONFIG_H -DH5_USE_16_API -DAPPNAMESPACE=qmcplusplus) #ADD_DEFINITIONS(-DDISABLE_WS_CELL) IF(BUILD_QMCTOOLS) SUBDIRS(boost) ENDIF(BUILD_QMCTOOLS) SUBDIRS(src)