1dnl # -*- Autoconf -*- 2dnl # Process this file with autoconf to produce a configure script. 3 4AC_INIT([CP2K], [6.1.0], [mathieu.taillefumier@free.fr]) 5AC_PREREQ([2.52]) 6AC_CONFIG_MACRO_DIRS([m4]) 7AC_CONFIG_SRCDIR([configure.ac]) 8AC_CONFIG_HEADERS([config.h]) 9m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) 10AC_CANONICAL_BUILD 11AC_CANONICAL_HOST 12AC_ISC_POSIX 13AM_INIT_AUTOMAKE([1.6 dist-bzip2 silent-rules subdir-objects]) 14 15dnl Small macro to print out a nice, pretty section title. 16define(SECTION_TITLE, 17[ 18echo >& AS_MESSAGE_FD 19echo ' $1 ' | sed -e's/./-/g' >&AS_MESSAGE_FD 20echo ' $1' >& AS_MESSAGE_FD 21echo ' $1 ' | sed -e's/./-/g' >&AS_MESSAGE_FD 22]) 23 24LT_INIT([disable_shared]) 25AC_DISABLE_SHARED 26PKG_PROG_PKG_CONFIG([0.10]) 27 28dnl list of all possible modules 29all_options="mpi cuda openmp libint2 blas mkl smm xsmm spglib sirius libxc libvdwxc elpa scalapack superlu_dist ptscotch ParMETIS fftw3 gsl pexsi" 30 31dnl # Checks for programs. 32AC_PROG_CXX(g++ icc clang pgcc xlc++) 33AC_PROG_CC(gcc icc clang pgcc xlc) 34AC_PROG_CC_STDC 35AC_C_RESTRICT 36AC_TYPE_SIZE_T 37AC_PROG_CC_C99 38dnl # Checks for library functions. 39AC_FUNC_MALLOC 40 41SECTION_TITLE([Fortran]) 42AC_PROG_FC([gfortran ifort xlf pgf90]) 43 44AC_FC_FREEFORM([], []) 45 46AC_F77_LIBRARY_LDFLAGS 47SECTION_TITLE([multithreading]) 48dnl # check for pthreads. It is needed by almost all libraries 49AX_PTHREAD([options="$options thread" 50CC="$PTHREAD_CC"], []) 51 52SECTION_TITLE([OpenMP support]) 53dnl check openmp support 54AX_OPENMP([options="$options openmp" 55DFLAGS_SMP=""], []) 56AC_SUBST([OPENMP_CFLAGS]) 57AC_SUBST([OPENMP_CXXFLAGS]) 58AC_SUBST([OPENMP_FFLAGS]) 59AC_SUBST([OPENMP_LIBS]) 60AC_SUBST([OPENMP_LDFLAGS]) 61dnl optional modules to be compiled against 62DFLAGS="" 63 64SECTION_TITLE([Fortran compiler warnings options]) 65AC_LANG_PUSH([Fortran]) 66AX_CHECK_COMPILE_FLAG(-m64) 67AX_CHECK_COMPILE_FLAG("-Werror=aliasing", [WFLAGS+="-Werror=aliasing "]) 68AX_CHECK_COMPILE_FLAG("-Werror=ampersand", [WFLAGS+="-Werror=ampersand "]) 69AX_CHECK_COMPILE_FLAG("-Werror=c-binding-type", [WFLAGS+="-Werror=c-binding-type "]) 70AX_CHECK_COMPILE_FLAG("-Werror=intrinsic-shadow", [WFLAGS+="-Werror=intrinsic-shadow "]) 71AX_CHECK_COMPILE_FLAG("-Werror=intrinsics-std", [WFLAGS+="-Werror=intrinsics-std "]) 72AX_CHECK_COMPILE_FLAG("-Werror=line-truncation", [WFLAGS+="-Werror=line-truncation "]) 73AX_CHECK_COMPILE_FLAG("-Werror=tabs", [WFLAGS+="-Werror=tabs "]) 74AX_CHECK_COMPILE_FLAG("-Werror=target-lifetime", [WFLAGS="-Werror=target-lifetime "]) 75AX_CHECK_COMPILE_FLAG("-Werror=underflow", [WFLAGS+="-Werror=underflow "]) 76AX_CHECK_COMPILE_FLAG("-Werror=unused-but-set-variable", [WFLAGS+="-Werror=unused-but-set-variable "]) 77AX_CHECK_COMPILE_FLAG("-Werror=unused-variable", [WFLAGS+="-Werror=unused-variable "]) 78AX_CHECK_COMPILE_FLAG("-Werror=unused-dummy-argument", [WFLAGS+="-Werror=unused-dummy-argument "]) 79AX_CHECK_COMPILE_FLAG("-Werror=conversion", [WFLAGS+="-Werror=conversion "]) 80AX_CHECK_COMPILE_FLAG("-Werror=zerotrip", [WFLAGS+="-Werror=zerotrip "]) 81AX_CHECK_COMPILE_FLAG("-Werror=uninitialized", [WFLAGS+="-Werror=uninitialized "]) 82AX_CHECK_COMPILE_FLAG("-Wno-maybe-uninitialized", [WFLAGS+="-Wno-maybe-uninitialized "]) 83AX_CHECK_COMPILE_FLAG("-Wuse-without-only", [WFLAGS+="-Wuse-without-only "]) 84echo $WFLAGS 85AC_LANG_POP([Fortran]) 86AC_SUBST(WFLAGS) 87 88SECTION_TITLE(Compilation parameters) 89PSMP_CFLAGS="-O2 -mtune=native" 90SOPT_FLAGS="-g -O2" 91PSMP_FFLAGS="-O2 -mtune=native" 92AC_SUBST([PSMP_FFLAGS]) 93AC_SUBST([PSMP_CFLAGS]) 94AC_SUBST([SOPT_FLAGS]) 95 96SECTION_TITLE([mpi support]) 97 98AC_LANG_PUSH([Fortran]) 99LX_FIND_MPI([options="$options mpi"], [AC_MSG_ERROR([cp2k needs mpi])]) 100AC_LANG_POP([Fortran]) 101 102AC_LANG_PUSH([C++]) 103LX_FIND_MPI([], [AC_MSG_ERROR([cp2k needs C++ mpi support])]) 104AC_LANG_POP([C++]) 105 106AC_LANG_PUSH([C]) 107LX_FIND_MPI([], [AC_MSG_ERROR([cp2k needs C mpi support])]) 108AC_LANG_POP([C]) 109MPI_DFLAGS="-D__parallel" 110 111AC_SUBST([MPICC]) 112AC_SUBST([MPICXX]) 113AC_SUBST([MPIFC]) 114AC_SUBST([MPI_DFLAGS]) 115 116SECTION_TITLE([GPU support]) 117dnl check for cuda support 118CUDA_DFLAGS="" 119ACX_CUDA([options="$options cuda" 120 CUDA_DFLAGS="-D__ACC -D__DBCSR_ACC -D__PW_CUDA"], []) 121AC_SUBST(GPUVER) 122AC_SUBST(CUDA_DFLAGS) 123 124SECTION_TITLE([BLAS, LAPACK, MKL, etc...]) 125dnl check for mkl. Note that blas is checked only if mkl is not found 126 127MKL_DFLAGS="" 128ACX_MKL([AC_DEFINE([HAVE_BLAS], [1], [use blas]) 129 options="$options mkl" MKL_DFLAGS="-D__MKL"], [ACX_BLAS([options="$options blas"], [options="$options blas"], [AC_MSG_ERROR([a library implementing blas is required])])]) 130AC_SUBST(BLAS_CFLAGS) 131AC_SUBST(BLAS_LDFLAGS) 132AC_SUBST(BLAS_LIBS) 133AC_SUBST(BLAS_FFLAGS) 134AC_SUBST(MKL_DFLAGS) 135SECTION_TITLE([small matrix multiplication library]) 136dnl check for libsmm 137ACX_LIBXSMM([options="$options xsmm" 138 LIBXSMM_DFLAGS="-D__LIBXSMM"], []) 139 140ACX_LIBSMM([options="$options smm" 141 LIBSMM_DFLAGS="-D__SMM"], []) 142AC_SUBST(LIBSMM_DFLAGS) 143AC_SUBST(LIBXSMM_DFLAGS) 144 145SECTION_TITLE([SCALAPACK]) 146dnl check for scalapack 147ACX_SCALAPACK([options="$options scalapack"; SCALAPACK_DFLAGS="-D__SCALAPACK"], []) 148AC_SUBST(SCALAPACK_DFLAGS) 149 150SECTION_TITLE([elpa]) 151dnl check for elpa 152ACX_ELPA([options="$options elpa"; ELPA_DFLAGS="-D__ELPA=$elpa_version"], []) 153AC_SUBST(ELPA_DFLAGS) 154 155 156SECTION_TITLE([gsl library]) 157# detect the gsl if asked for 158AX_PATH_GSL([1.12], [GSL_DFLAGS="-D__GSL" 159 options="$options gsl"]) 160AC_SUBST(GSL_CFLAGS) 161AC_SUBST(GSL_LIBS) 162AC_SUBST(GSL_DFLAGS) 163 164 165SECTION_TITLE([FFTW3]) 166dnl check for fftw 167AC_ARG_ENABLE(fftw-mkl-wrapper, 168 [AC_HELP_STRING([--enable-fftw-mkl-wrapper], 169 [use the fftw wrappoer included in mkl]) 170 ], 171 [], 172 []) 173 174dnl if enabled check that we have MKL detected, otherwise fall back to searching fftw 175AS_IF([test "$have_mkl" = "no"], [enable_fftw_mkl_wrapper=no]) 176 177dnl fall back to fftw 178AS_IF([test $enable_fftw_mkl_wrapper=="no"], [ACX_FFTW([options="$options fftw3"], [])]) 179FFTW3_DFLAGS="-D__FFTW3" 180AC_SUBST(FFTW3_DFLAGS) 181 182SECTION_TITLE([HDF5]) 183dnl Check for serial HDF5 support 184AX_LIB_HDF5([serial], []) 185AS_IF([test "${HDF5_CC}yes" != "yes"], [HDF5_DFLAGS="-D__HDF5"]) 186dnl Check for parallel HDF5 support 187dnl AX_LIB_HDF5([parallel]) 188AC_SUBST(HDF5_DFLAGS) 189 190SECTION_TITLE([spglib]) 191dnl check for spglib 192ACX_SPGLIB([options="$options spglib"; SPGLIB_DFLAGS="-D__SPGLIB"], []) 193AC_SUBST(SPGLIB_DFLAGS) 194 195SECTION_TITLE([libint2]) 196dnl check for libint 197ACX_LIBINT([options="$options libint2"; LIBINT2_DFLAGS="-D__LIBINT"], []) 198AC_SUBST(LIBINT2_DFLAGS) 199 200SECTION_TITLE([libxc]) 201dnl check for libxc 202ACX_LIBXC([options="$options libxc"; LIBXC_DFLAGS="-D__LIBXC"], []) 203AC_SUBST(LIBXC_DFLAGS) 204 205SECTION_TITLE([libvdwxc (Van der Walls functionals)]) 206dnl check for libvdwxc 207ACX_LIBVDWXC([options="$options libvdwxc"; LIBVDWXC_DFLAGS="-D__LIBVDWXC"], []) 208AC_SUBST(LIBVDWXC_DFLAGS) 209 210SECTION_TITLE([ParMETIS, PTSCOTCH and SuperLU]) 211dnl check for parmetis 212ACX_PARMETIS([options="$options ParMETIS"; PARMETIS_DFLAGS="-D__PARMETIS"], []) 213AC_SUBST(PARMETIS_DFLAGS) 214 215dnl check for PTSCOTCH 216ACX_PTSCOTCH([options="$options ptscotch"; PTSCOTCH_DFLAGS="-D__PTSCOTCH"], []) 217AC_SUBST(PTSCOTCH_DFLAGS) 218 219dnl check for superlu 220ACX_SUPERLU([options="$options superlu_dist"; SUPERLU_DIST_DFLAGS="-D__SUPERLU_DIST"], []) 221AC_SUBST(SUPERLU_DIST_DFLAGS) 222 223SECTION_TITLE([PEXSI]) 224dnl check for pexsi 225ACX_PEXSI([options="$options pexsi"; PEXSI_DFLAGS="-D__LIBPEXSI"], []) 226AC_SUBST(PEXSI_DFLAGS) 227 228SECTION_TITLE([SIRIUS]) 229dnl check for sirius 230ACX_SIRIUS([options="$options sirius"; SIRIUS_DFLAGS="-D__SIRIUS"], []) 231AC_SUBST(SIRIUS_DFLAGS) 232 233SECTION_TITLE([Configuration results]) 234 235AC_SUBST(SOPT_CFLAGS) 236AC_SUBST(SOPT_FFLAGS) 237 238echo "Options:" >& AS_MESSAGE_FD 239echo "$options" >& AS_MESSAGE_FD 240echo >& AS_MESSAGE_FD 241 242echo "Missing options:" >& AS_MESSAGE_FD 243echo "$options" "$all_options" | tr ' ' '\n' | sort | uniq -u | tr '\n' ' ' >& AS_MESSAGE_FD 244 245 246echo -e "\n\n" >& AS_MESSAGE_FD 247echo "CXXFLAGS=$CXXFLAGS" >& AS_MESSAGE_FD 248echo "LDFLAGS=$LDFLAGS" >& AS_MESSAGE_FD 249echo "LIBS=$LIBS" >& AS_MESSAGE_FD 250 251AS_IF([test "$ac_have_cuda_" = "yes"], [AC_CONFIG_FILES([local_cuda.sopt local_cuda.psmp])]) 252AC_CONFIG_FILES([local.sopt local.psmp local.ssmp]) 253AC_OUTPUT() 254 255# src/Makefile 256# src/bin/Makefile 257# src/lib/Makefile], 258# [] 259# ) 260