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