1 #######################################################################
2 # Process this file wth autoconf to produce a configure script.
3 #######################################################################
6 AC_INIT(gromacs, 4.0.99-dev-20100305, [gmx-users@gromacs.org])
7 AC_CONFIG_SRCDIR(src/gmxlib/3dview.c)
8 AC_CONFIG_AUX_DIR(config)
11 AM_INIT_AUTOMAKE(tar-ustar)
12 AC_PREFIX_DEFAULT(/usr/local/gromacs)
14 AM_CONFIG_HEADER(src/config.h)
15 dnl This is the version info according to the libtool versioning system.
16 dnl It does *not* correspond to the release number.
17 SHARED_VERSION_INFO="5:0:0"
18 AC_SUBST(SHARED_VERSION_INFO)
23 #######################################################################
24 # Simple options and makefile variables
25 #######################################################################
27 # This is currently not defined by CMake, because it's tricky to generate
28 # version.h portably (the autoconf rules for it are in src/gmxlib/Makefile.am).
29 AC_DEFINE(USE_VERSION_H,,[Use the version string from generated version.h])
33 [AC_HELP_STRING([--disable-float],
34 [Use double instead of single precision])],, enable_float=yes)
37 [AC_HELP_STRING([--enable-double],
38 [Same effect as --disable-float])],, enable_double=no)
39 if test "$enable_double" = "yes"; then
42 if test "$enable_float" = "no"; then
43 AC_DEFINE(GMX_DOUBLE,,[Compile in double precision])
45 AM_CONDITIONAL([GMX_DOUBLE],[test "$enable_float" = "no"])
50 AC_ARG_ENABLE(fortran,
51 [AC_HELP_STRING([--enable-fortran],
52 [Use Fortran kernels])],,
53 [case "${host_cpu}-${host_os}" in
54 sparc*-solaris* | alpha*-* | rs6000*-aix* | powerpc*-aix* | mips*-irix*) enable_fortran=yes ;;
55 *) enable_fortran=no ;;
57 if test "$enable_fortran" = "yes"; then
58 AC_DEFINE(GMX_FORTRAN,,[Enable Fortran support])
60 # Generic fortran kernels will be turned off below if you enable power6-specific optimization!
61 # always use CC for linking:
62 AC_SUBST(F77LINK,"\$(LINK)")
70 [AC_HELP_STRING([--enable-mpi],
71 [Compile for parallel runs using MPI]
72 [(instead of threads)])],,enable_mpi=no)
76 AC_ARG_ENABLE(mpi-environment,
77 [AC_HELP_STRING([--enable-mpi-environment=VAR],
78 [Only start parallel runs when VAR is set])],,
79 [case "${host_cpu}" in
80 mips*-irix*) enable_mpi_environment="MPI_ENVIRONMENT" ;;
81 *) enable_mpi_environment=no ;;
83 if test "$enable_mpi_environment" != "no"; then
84 AC_DEFINE_UNQUOTED(GMX_CHECK_MPI_ENV,"$enable_mpi_environment",[If defined, only start MPI runs when this variable is set])
88 AC_ARG_ENABLE(mpi-in-place,
89 [AC_HELP_STRING([--disable-mpi-in-place],
90 [Disable MPI_IN_PLACE. For MPI implementations]
91 [that have broken support for it ]
92 [(some versions of MPICH, for example).])],, enable_mpi_in_place=yes)
97 [AC_HELP_STRING([--enable-debug],
98 [Add -g to other command line arguments])],,enable_debug=no)
100 ### IA32 assembly code
101 AC_ARG_ENABLE(ia32_sse,
102 [AC_HELP_STRING([--disable-ia32-sse],
103 [Don't build SSE/SSE2 assembly loops on ia32])],,enable_ia32_sse=yes)
105 case "${host_cpu}-${host_vendor}" in
107 *) enable_ia32_sse=no ;;
110 ### AMD64 assembly code
111 AC_ARG_ENABLE(x86_64_sse,
112 [AC_HELP_STRING([--disable-x86-64-sse],
113 [Don't build SSE assembly loops on X86_64])],,enable_x86_64_sse=yes)
114 case "${host_cpu}-${host_vendor}" in
115 x86_64-* | amd64-*) ;;
117 *) enable_x86_64_sse=no ;;
121 ### Altivec on powerpc (motorola)
122 AC_ARG_ENABLE(ppc_altivec,
123 [AC_HELP_STRING([--disable-ppc-altivec],
124 [Don't build Altivec loops on PowerPC])],,enable_ppc_altivec=undef)
125 # Power3/4/5 running AIX does not support altivec. We identify this with vendor=IBM.
126 # IBM powerpc 970 boxes run linux, and have vendor=unknown.
127 if test "$enable_ppc_altivec" = "undef"; then
128 case "${host_cpu}-${host_vendor}" in
129 ppc*-ibm* | powerpc*-ibm*) enable_ppc_altivec=no ;;
130 ppc*-* | powerpc*-*) enable_ppc_altivec=yes ;;
131 *) enable_ppc_altivec=no ;;
137 ### ia64 assembly code
138 AC_ARG_ENABLE(ia64_asm,
139 [AC_HELP_STRING([--disable-ia64-asm],
140 [Don't build assembly loops on ia64])],,enable_ia64_asm=yes)
141 case "${host_cpu}" in
143 *) enable_ia64_asm=no ;;
147 # IBM Power6-specific optimization
148 AC_ARG_ENABLE(power6,
149 [AC_HELP_STRING([--enable-power6],
150 [Use IBM Pwr6/PPC440/PPC450-specific F77 kernels])],,enable_power6=no)
151 # Turn off generic fortran loops if we are using power6-specific optimization
152 if test "$enable_power6" = "yes"; then
156 AC_ARG_ENABLE(bluegene,
157 [AC_HELP_STRING([--enable-bluegene],
158 [Build assembly intrinsics kernels on bluegene])],,enable_bluegene=no)
161 ### Optimize for host cpu version
162 AC_ARG_ENABLE(cpu-optimization,
163 [AC_HELP_STRING([--disable-cpu-optimization],
164 [No detection or tuning flags for cpu version])],, enable_cpu_optimization=yes)
167 ### Do software 1/sqrt(x)
168 AC_ARG_ENABLE(software-invsqrt,
169 [AC_HELP_STRING([--disable-software-invsqrt],
170 [No software 1/sqrt (disabled on sgi,ibm,ia64)])],,
171 [case "${host_cpu}-${host_os}" in
172 mips*-irix* | rs6000*-aix* | powerpc*-aix | ia64*-*) enable_software_invsqrt=no ;;
173 *) enable_software_invsqrt=yes ;;
175 if test "$enable_software_invsqrt" = "yes"; then
176 AC_DEFINE(GMX_SOFTWARE_INVSQRT,,[Use the GROMACS software 1/sqrt(x)])
178 AM_CONDITIONAL([GMX_SOFTWARE_INVSQRT],[test "$enable_software_invsqrt" = "yes"])
180 AC_ARG_ENABLE(fahcore,
181 [AC_HELP_STRING([--enable-fahcore],
182 [Create a library with mdrun functionality])],, enable_fahcore=no)
186 # The four options below used to improve code scheduling, but the newest CPUs can usually rearrange
187 # instructions dynamically at runtime, so they might not make much difference now:
190 AC_ARG_ENABLE(all-static,
191 [AC_HELP_STRING([--enable-all-static],
192 [Make completely static binaries])],, enable_all_static=no)
193 # Dont add the -all-static flag until after the compiler test.
196 # FFT libraries - only use one...
198 [AC_HELP_STRING([--with-fft=@<:@fftw3/fftw2/mkl(>=6.0)/fftpack@:>@],
199 [FFT library to use. fftw3 is default, fftpack built in.])],,
202 AC_ARG_ENABLE(fftw-measure,
203 [AC_HELP_STRING([--disable-fftw-measure],
204 [Dont optimize FFTs. This produces binary exactly]
205 [reproducible runs (as the -reprod flag to mdrun),]
206 [and if you are using FFTW on x86 and specified its]
207 [--enable-sse/sse2 flag (NOT default in FFTW!) the]
208 [kernels used are close-to-optimal anyway.])],,
209 enable_fftw_measure=yes)
212 AC_ARG_ENABLE(threads,
213 [AC_HELP_STRING([--disable-threads],
214 [Disable parallel runs using threads])],,enable_threads=yes)
217 ### Use external BLAS/LAPACK libraries if the user wants to.
219 AC_ARG_WITH(external_blas,
220 [AC_HELP_STRING([--with-external-blas],
221 [Use system BLAS library (add to LIBS). Automatic on OS X.])],,
223 # default action - check if we are on OS X
224 case "${host_vendor}-${host_os}" in
225 apple-darwin*) with_external_blas="yes" ; extra_LDFLAGS="-framework Accelerate" ;;
226 *) with_external_blas="no" ;;
229 AM_CONDITIONAL([GMX_EXTERNAL_BLAS], [test "$with_external_blas" = "yes"])
232 AC_ARG_WITH(external_lapack,
233 [AC_HELP_STRING([--with-external-lapack],
234 [Use system LAPACK library (add to LIBS). Automatic on OS X.])],,
236 # default action - check if we are on OS X
237 case "${host_vendor}-${host_os}" in
238 apple-darwin*) with_external_lapack="yes" ; extra_LDFLAGS="-framework Accelerate" ;;
239 *) with_external_lapack="no" ;;
242 AM_CONDITIONAL([GMX_EXTERNAL_LAPACK], [test "$with_external_lapack" = "yes"])
247 AC_ARG_WITH(qmmm_gaussian,
248 [AC_HELP_STRING([--without-qmmm-gaussian],
249 [Use modified Gaussian0x for QM-MM (see website)])],,with_qmmm_gaussian=yes)
250 if test "$with_qmmm_gaussian" = "yes"; then
251 AC_DEFINE(GMX_QMMM_GAUSSIAN,,[Use (modified) Gaussian0x for QM-MM calculations])
255 AC_ARG_WITH(qmmm_gamess,
256 [AC_HELP_STRING([--without-qmmm-gamess],
257 [Use modified Gamess-UK for QM-MM (see website)])],,with_qmmm_gamess=no)
258 if test "$with_qmmm_gamess" = "yes"; then
259 AC_DEFINE(GMX_QMMM_GAMESS,,[Use (modified) Gamess-UK for QM-MM calculations])
263 AC_ARG_WITH(qmmm_mopac,
264 [AC_HELP_STRING([--without-qmmm-mopac],
265 [Use modified Mopac 7 for QM-MM (see website)])],,with_qmmm_mopac=no)
266 if test "$with_qmmm_mopac" = "yes"; then
267 AC_DEFINE(GMX_QMMM_MOPAC,,[Use (modified) Mopac 7 for QM-MM calculations])
271 [AC_HELP_STRING([--without-dlopen],
272 [do not compile with dlopen, needed to read VMD]
273 [supported file formats])],,with_dlopen=yes)
279 ############################################################
280 # Add some debug info: Who is building, and on what machine?
281 ############################################################
282 AC_DEFINE_UNQUOTED([BUILD_TIME],["`date`"],[Date and time for build])
283 AC_DEFINE_UNQUOTED([BUILD_USER],["`whoami`@`hostname`"],[User doing build])
284 AC_DEFINE_UNQUOTED([BUILD_MACHINE],["`uname -srm`"],[Hardware and OS version for build host])
288 ############################################################
289 # Checks for programs
290 ############################################################
292 # normally we use the default compiler, but on alpha/linux we try the compaq ones first
293 case "${host_cpu}-${host_os}" in
295 cc_names="ccc cc gcc"
296 f77_names="fort f77 g77"
299 cc_names="cc icc xlc gcc"
300 f77_names="f77 ifort xlf xlf77 cf77 fl32 g77 fort77 f90 xlf90 pgf77 cf77 fort fort77 pgf90"
303 # the (non-mpi) c compiler, which is also used for programs executed during build stage
304 AC_PROG_CC( $cc_names )
305 # Check for environment variable CC_FOR_BUILD before overwriting it
306 if test -z "$CC_FOR_BUILD"; then
309 AC_SUBST(CC_FOR_BUILD)
311 if test "$enable_fortran" = "yes"; then
312 AC_PROG_F77( $f77_names )
313 if test -z "$F77"; then
314 AC_MSG_ERROR([No fortran compiler found])
320 # if we are using mpi, also get an MPICC. We cannot set that in the PROG_CC macro
321 # above, since autoconf checks that the created file can be executed. This would
322 # fail on platforms where MPI executables can only be run through a batchqueue.
324 if test "$enable_mpi" = "yes"; then
326 AC_CHECK_PROGS(MPICC, mpxlc mpicc mpcc hcc, $CC)
327 # now change the normal cc to the MPI one - see the comment above.
330 AC_MSG_CHECKING([whether the MPI cc command works]) # be paranoid
331 AC_TRY_LINK([#include <mpi.h>],[int argc; char **argv; MPI_Init(&argc,&argv);],
332 AC_MSG_RESULT([yes]),AC_MSG_ERROR([Cannot compile and link MPI code with $CC]))
333 AC_DEFINE(GMX_MPI,,[Make a parallel version of GROMACS using MPI])
334 AC_DEFINE(GMX_LIB_MPI,,[Use a real MPI library])
336 if test "$enable_mpi_in_place" = "yes"; then
337 # not all MPIs support MPI_IN_PLACE:
338 AC_MSG_CHECKING([for MPI_IN_PLACE in collective operations])
344 MPI_Allreduce(MPI_IN_PLACE, buf, 10, MPI_FLOAT, MPI_SUM, MPI_COMM_WORLD);
348 AC_DEFINE(MPI_IN_PLACE_EXISTS,[],[MPI_IN_PLACE available for collective operations])
354 # on the cray xt3 we have to tell autoconf that we
355 # are actually cross-compiling even if the architecture
356 # of host and target are the same. so we enforce
357 # cross-compilation if __QK_USER__ is defined
358 AC_MSG_CHECKING([for catamount])
360 #if defined __QK_USER__
367 AC_DEFINE(GMX_CRAY_XT3,[],[Enable special hacks for Cray XT3])
368 AC_DEFINE(GMX_NO_SYSTEM,[],[Ignore calls to system(3)])
369 AC_DEFINE(GMX_NO_NICE,[],[Ignore calls to nice(3)])
370 AC_DEFINE(GMX_BROKEN_CALLOC,[],[Don't use calloc(3)])
371 extra_LDFLAGS="$extra_LDFLAGS -lgmalloc -lacml"
375 # end of "$enable_mpi" = "yes"
379 AH_TEMPLATE([F77_OR_C_FUNC],
380 [Set to F77_FUNC(name,NAME) if Fortran used, otherwise 'name' for C.])
381 AH_TEMPLATE([F77_OR_C_FUNC_],
382 [Set to F77_FUNC_(name,NAME) if Fortran used, otherwise 'name' for C.])
386 if test "$enable_fortran" = "yes"; then
387 AC_F77_LIBRARY_LDFLAGS
389 AC_DEFINE([F77_OR_C_FUNC(name,NAME)],[F77_FUNC(name,NAME)])
390 AC_DEFINE([F77_OR_C_FUNC_(name,NAME)],[F77_FUNC_(name,NAME)])
392 AC_DEFINE([F77_OR_C_FUNC(name,NAME)],[name])
393 AC_DEFINE([F77_OR_C_FUNC_(name,NAME)],[name])
399 # Needed by libtool scripts?
402 if test "$enable_cpu_optimization" = "yes"; then
410 # We've postponed the threads check because we need to check with the right
412 if test "$enable_threads" = "yes"; then
413 if test "$enable_mpi" = "yes"; then
414 AC_MSG_ERROR([Cannot use both threads and MPI - yet.])
416 if test "$with_fft" = "fftw2"; then
417 AC_MSG_ERROR([fftw2 can't be used with threads. Use fftw3 or mkl.])
419 # for now we just assume pthreads
420 ACX_PTHREAD(,AC_MSG_ERROR([Cannot find POSIX threads - required for thread support using configure!]))
421 LIBS="$PTHREAD_LIBS $LIBS"
422 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
423 CXXFLAGS="$CXXFLAGS $PTHREAD_CFLAGS"
425 AC_DEFINE(THREAD_PTHREADS,,[Use pthreads for thread_mpi multithreading])
426 AC_DEFINE(GMX_THREADS,,[Use threads for parallelization])
427 AC_DEFINE(GMX_MPI,,[Make a parallel version of GROMACS using MPI])
428 AM_CONDITIONAL(THREAD_PARALLEL,true)
430 AM_CONDITIONAL(THREAD_PARALLEL,false)
436 # Check integer endian
438 AC_C_BIGENDIAN([AC_DEFINE([GMX_INTEGER_BIG_ENDIAN],,[Integer byte order is big endian.])],[],[
439 AC_MSG_ERROR([Cannot determine endian in compiled output])])
440 # Little endian implied if GMX_INTEGER_BIG_ENDIAN not defined in source.
443 # Make sure size_t can hold pointers.
444 # On some Nec machines, you reportedly need to specify a flag for size_t to be 64 bits wide.
446 AC_MSG_CHECKING([that size_t can hold pointers])
450 ],[int chk[sizeof(size_t)-sizeof(int *)+1];],AC_MSG_RESULT([yes]),[
451 AC_MSG_ERROR([size_t is smaller than int*. Check if your compiler needs a flag to make it 64 bit.])])
455 # Check that SIGUSR1 is defined
457 AC_MSG_CHECKING([for SIGUSR1])
458 AC_TRY_COMPILE([#include <signal.h>],[int i=SIGUSR1;],[
460 AC_DEFINE(HAVE_SIGUSR1,,[SIGUSR1 supported and defined])
461 ],AC_MSG_RESULT([no]))
464 # Check if pipes are supported
466 AC_MSG_CHECKING([for pipes])
467 AC_TRY_COMPILE([#include <stdio.h>],[
468 FILE *pipe=popen("/tmp/pipe","r");
471 AC_DEFINE(HAVE_PIPES,,[Pipes (popen/pclose) supported])
472 ],AC_MSG_RESULT([no]))
477 # Check floating-point format and endian
489 # Use our own version of AC_FUNC_FSEEKO from autoconf 2.63 instead
490 # of the broken one we might get from autoconf 2.61.
491 ACX_FUNC_FSEEKO_FIXED
496 ############################################################################
497 # Checks for libraries.
498 ############################################################################
500 # Don't add math library for intel compilers
501 if $CC -V 2>&1 | grep 'Intel Corporation' > /dev/null 2>&1; then
502 AC_MSG_NOTICE([Using built-in math library with intel compiler])
504 AC_CHECK_LIB(m,sqrt,,AC_MSG_ERROR([No math library found]))
508 # Disable MASS support for now.
514 if test "$enable_float" = "yes"; then
519 ACX_CHECK_FFTW2(fftw,$sizeof_real)
520 ACX_CHECK_FFTW2(rfftw,$sizeof_real)
522 case ${ac_fftw_savedprefix} in
523 d) AC_DEFINE(FFTW2_NAME_DFFTW,,[Use the d prefix on fftw2 includes]) ;;
524 s) AC_DEFINE(FFTW2_NAME_SFFTW,,[Use the s prefix on fftw2 includes]) ;;
525 *) AC_DEFINE(FFTW2_NAME_FFTW,,[Dont use any prefix on fftw2 includes]) ;;
528 AC_DEFINE(GMX_FFT_FFTW2,,[Use FFTW2 FFT library])
530 ;; # end of fftw2 check
532 fftw3) # Much simpler check than fftw2
533 # Check for header <fftw3.h> AC_CHECK_HEADERS doesnt work, since we must
534 # use mpicc to get includes - cpp isnt always the same compiler.
535 AC_MSG_CHECKING([for fftw3.h])
536 AC_TRY_COMPILE([#include<fftw3.h>],,[
537 # ok, look for library file too
539 if test "$enable_float" = "yes"; then
540 AC_CHECK_LIB([fftw3f],main,,AC_MSG_ERROR([Cannot find fftw3f library]))
543 AC_CHECK_LIB([fftw3],main,,AC_MSG_ERROR([Cannot find fftw3 library]))
546 AC_DEFINE(GMX_FFT_FFTW3,,[Use FFTW3 FFT library])
548 # not ok, echo a warning
550 [Cannot find the default external FFT library (fftw3).
551 Other alternatives are 'fftw2', or 'mkl' for Intel MKL.
552 You are STRONGLY recommended to use one of these - fftw is free.
554 Use CPPFLAGS and LDFLAGS if the library is installed in a
555 non-standard location. (see FAQ at http://www.gromacs.org)
557 If you dont care about performance you can also specify 'fftpack'
558 to use a slower set of FFTs built into Gromacs.
559 (Just install FFTW3 unless you really know what you are doing).
567 # Intel Math Kernel Library version 6 and later.
569 AC_MSG_CHECKING([for mkl_dfti.h])
570 AC_TRY_COMPILE([#include<mkl_dfti.h>],,AC_MSG_RESULT(yes),AC_MSG_ERROR([Cannot find mkl_dfti.h header from Intel Math Kernel Library>=6.0.]\
573 # AC_CHECK_LIB([guide],main,,AC_MSG_ERROR([Cannot find libguide (Intel MKL)]))
574 # AC_CHECK_LIB([mkl],DftiComputeForward,,
575 # AC_MSG_ERROR([Cannot find Intel Math Kernel Library >= 6.0]))
576 # first check for older MKLs
577 AC_CHECK_LIB([mkl],DftiComputeForward,,[have_mkl="no"])
578 if test "$have_mkl" == "no"; then
579 # we assume it's a new MKL
580 LIBS="$LIBS -liomp5 -lmkl_sequential -lmkl_core"
581 LMKL=" -liomp5 -lmkl_sequential -lmkl_core"
582 AC_CHECK_LIB([mkl_intel_lp64],DftiComputeForward,,[have_mkl10_64="no"])
583 if test "$have_mkl10_64" == "no"; then
584 AC_CHECK_LIB([mkl_intel],DftiComputeForward,,[have_mkl10_32="no"])
585 if test "$have_mkl10_32" == "no"; then
586 AC_MSG_ERROR([Cannot find Intel Math Kernel Library >= 6.0])
590 AC_DEFINE(GMX_FFT_MKL,,[Use Intel MKL FFT library])
595 AC_MSG_WARN([The built-in FFTPACK routines are slow.
596 Are you sure you don't want to use FFTW? It is free and much faster...])
597 AC_DEFINE(GMX_FFT_FFTPACK,,[Use Built-in FFTPACK FFT library])
600 AC_MSG_ERROR([Unknown FFT library])
605 if test "$enable_fftw_measure" != "yes"; then
606 AC_DEFINE(GMX_DISABLE_FFTW_MEASURE,,[Do not optimize FFTW setups (not needed with SSE FFT kernels)])
610 # check for xtc headers
612 cygwin* | mingw*) # use our own xdr stuff for cygwin/mingw
615 AC_CHECK_HEADERS([rpc/rpc.h])
616 AC_CHECK_HEADERS([rpc/xdr.h],,,
618 # include <rpc/rpc.h>
621 AC_CHECK_LIB(nsl,xdr_float)
626 #error NO rpc.h header
631 #error No xdr.h header
633 ],[ XDR *xd; float f; xdr_float(xd,&f);],[have_xdr="yes"])
635 if test "$have_xdr" != "yes"; then
636 AC_DEFINE(GMX_INTERNAL_XDR,,[Use our own instead of system XDR libraries])
637 AC_MSG_WARN([Couldn't find XDR headers and/or libraries - using our own])
643 ########################################################################
644 # Checks for header files and types
645 ########################################################################
647 AC_CHECK_HEADERS([limits.h unistd.h],,AC_MSG_ERROR([Include headers not found]))
648 AC_CHECK_HEADERS(unistd.h)
649 AC_CHECK_HEADERS(sys/types.h)
650 AC_CHECK_HEADERS(sys/time.h)
651 AC_CHECK_HEADERS(dirent.h)
652 AC_CHECK_HEADERS(regex.h,,[AC_MSG_WARN(
654 Regular expression matching in selections will be disabled.
655 Selections still work, but the default groups can differ from
656 those obtained with regular expressions enabled.
657 Consider installing the regular expression library from GNU libc.])])
660 # Checks for additional and/or optional functions or libraries.
667 AC_CHECK_FUNCS(strcasecmp)
668 AC_CHECK_FUNCS(strdup)
669 AC_CHECK_FUNCS(gettimeofday)
670 AC_CHECK_FUNCS(isnan)
671 AC_CHECK_FUNCS(_isnan)
672 AC_CHECK_FUNCS(isfinite)
673 AC_CHECK_FUNCS(_isfinite)
675 # check for bool (must come late, since CFLAGS/includes might affect it)
676 AC_CHECK_TYPES([bool])
683 # Check integer sizes, set to zero if e.g. long long is not supported.
684 # (Note: this must come *after* type checks for the corresponding types!)
687 AC_CHECK_SIZEOF(long int)
688 AC_CHECK_SIZEOF(long long int)
689 AC_CHECK_SIZEOF(off_t)
690 AC_CHECK_SIZEOF(void*)
694 # Apple OS X is a bit strange/braindead in that it always reports itself as i386, both for
695 # 32 and 64 bit builds (even with the 64 bit kernel!).
697 # To get the SSE support right we check for the size of void * that we detected above...
698 case "${host_vendor}-${host_os}" in
700 if test $ac_cv_sizeof_voidp = 8; then
703 enable_x86_64_sse=no;
715 if test "$no_x" != "yes"; then
716 LIBS="$X_LIBS $LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS"
717 INCLUDES="$INCLUDES $X_CFLAGS"
718 AM_CONDITIONAL(USE_X11,true)
720 AM_CONDITIONAL(USE_X11,false)
723 # GNU Scientific Library or not
725 [AC_HELP_STRING([--with-gsl],[Link to the GNU scientific library, ]
726 [enables extra functions in analysis])],,with_gsl=no)
729 if test "$with_gsl" = "yes"; then
730 ac_save_LDFLAGS="$LDFLAGS"
731 AC_CHECK_HEADERS([gsl/gsl_version.h],[
732 # header found, check for libraries
733 AC_CHECK_LIB(gslcblas,main,[
734 LDFLAGS="$ac_save_LDFLAGS -lgslcblas"
735 # gslcblas library found, check main lib
736 AC_CHECK_LIB(gsl,main)])])
743 # Use OpenMM libraries
746 [ --with-openmm Use the OpenMM libraries to run on GPUs],,with_openmm=no)
748 if test "$with_openmm" = "yes"; then
751 CPPFLAGS="$CPPFLAGS -I$OPENMM_INSTALL_DIR/include"
752 INCLUDES="$INCLUDES -I$OPENMM_INSTALL_DIR/include"
753 LDFLAGS="$LDFLAGS -L$OPENMM_INSTALL_DIR/lib -lOpenMM"
754 #AC_CHECK_HEADERS([OpenMM.h],AC_CHECK_LIB(OpenMM,main))
755 #AC_CHECK_HEADERS([OpenMM.h],,AC_MSG_ERROR([Cannot find OpenMM.h file. Please set OPENMM_INSTALL_DIR.]))
756 AC_DEFINE([USE_OPENMM],,[Use OpenMM libraries to run on GPUs])
758 # AS_CASE([${host_cpu}-${host_os}-${host_vendor}],
759 # [i?86-linux*], [OPENMM_HOST=linux32],
760 # [x86_64-linux*], [OPENMM_HOST=linux64],
761 # [amd64-linux*], [OPENMM_HOST=linux64],
762 # [i?86-darwin*-apple], [OPENMM_HOST=apple],
764 # AC_SUBST([OPENMM_HOST])
767 AM_CONDITIONAL([USE_OPENMM],[test "$with_openmm" = "yes"])
771 [AC_HELP_STRING([--without-xml],[do not link to the xml2 library,]
772 [disallows the use of certain file formats])],,with_xml=yes)
775 # Check for libxml2, but it is optional, so dont stop
777 if test "$with_xml" = "yes"; then
778 ac_save_CPPFLAGS="$CPPFLAGS"
779 CPPFLAGS="$ac_save_CPPFLAGS -I/usr/include/libxml2"
780 AC_CHECK_HEADERS([libxml/parser.h],AC_CHECK_LIB(xml2,main))
781 if test "$ac_cv_lib_xml2_main" = "yes"; then
782 INCLUDES="$INCLUDES -I/usr/include/libxml2"
784 PKG_XML2="libxml-2.0"
787 CPPFLAGS="$ac_save_CPPFLAGS"
791 # And collect the f77 libs to the linker - on Solaris, f77 stuff must go first,
792 # and we need -L/usr/ucblib to find libucb... (stupid OS)
793 # On e.g. ibm the mass libraries must come before -lm...
794 case "${host_cpu}-${host_os}" in
797 LDFLAGS="$LDFLAGS -L/usr/ucblib"
799 *) LIBS="$LIBS $FLIBS" ;;
803 # add the Accelerate framework if enabled above.
804 # LDFLAGS might have been set in the CPU optimization, so we cant assign it directly before that.
805 LDFLAGS="$LDFLAGS $extra_LDFLAGS"
813 # Checks for typedefs, structures, and compiler characteristics.
819 # AC_TYPE_UID_T is broken on Mac OS X, so use generic tests instead
820 AC_CHECK_TYPES([uid_t],[],[AC_DEFINE(uid_t, int, [Define to `int' if <sys/types.h> doesn't define.])],[[#include <sys/types.h>]])
821 AC_CHECK_TYPES([gid_t],[],[AC_DEFINE(gid_t, int, [Define to `int' if <sys/types.h> doesn't define.])],[[#include <sys/types.h>]])
823 AC_CHECK_TYPES([sig_atomic_t],[],[AC_DEFINE(sig_atomic_t, int, [Define to `int' (and hope it's atomic) if <signal.h> doesn't define it.])],[[#include <signal.h>]])
828 # Test stuff for ia32 and x86_64 assembly, and add objects/libraries.
829 if test "$enable_ia32_sse" = "yes" -o "$enable_x86_64_sse" = "yes"; then
830 AC_MSG_CHECKING([whether your compiler can handle assembly files (*.s)])
832 # Use 64-bit registers (rsp/rbp) on x86_64
834 if test "$enable_x86_64_sse" = "yes"; then
835 cat > conftestasm.s << EOF
841 cat > conftestasm.s << EOF
847 if AC_TRY_COMMAND($CC $CFLAGS -c conftestasm.s); then
848 if test -f conftestasm.o; then
852 AC_MSG_ERROR([Upgrade your compiler (or disable assembly loops).])
856 AC_MSG_ERROR([Upgrade your compiler (or disable assembly loops).])
859 # ok, cc understands assembly.
861 # If we are using double precision we need SSE2
862 if test "$enable_float" = "no"; then
864 if test "$enable_ia32_sse" = "yes"; then
865 AC_MSG_CHECKING([whether as fully supports ia32 SSE2])
866 cat > conftest.s << EOF
869 movapd 32(%esi,%edx,8),%xmm4
873 if AC_TRY_COMMAND($CC $CFLAGS -c conftest.s); then
877 AC_MSG_ERROR([Upgrade to a more recent binutils (or disable assembly loops).])
879 AC_DEFINE([GMX_IA32_SSE2],,[Double-precision SSE2 instructions on ia32])
881 # test SSE2 on X86_64:
882 if test "$enable_x86_64_sse" = "yes"; then
883 AC_MSG_CHECKING([whether as fully supports X86_64 SSE2])
884 cat > conftest.s << EOF
887 movapd 32(%rsi,%rdx,8),%xmm4
891 if AC_TRY_COMMAND($CC $CFLAGS -c conftest.s); then
895 AC_MSG_ERROR([Upgrade to a more recent binutils (or disable assembly loops).])
897 AC_DEFINE([GMX_X86_64_SSE2],,[Double-precision SSE2 instructions on X86_64])
900 # end of double precision testing, now do single.
901 if test "$enable_ia32_sse" = "yes"; then
902 AC_MSG_CHECKING([whether as fully supports ia32 SSE])
903 cat > conftest.s << EOF
906 movaps 32(%esi,%edx,8),%xmm4
910 if AC_TRY_COMMAND($CC $CFLAGS -c conftest.s); then
914 AC_MSG_ERROR([Upgrade to a more recent binutils (or disable assembly loops).])
916 AC_DEFINE([GMX_IA32_SSE],,[Single-precision SSE instructions on ia32])
918 # test SSE2 on X86_64:
919 if test "$enable_x86_64_sse" = "yes"; then
920 AC_MSG_CHECKING([whether as fully supports X86_64 SSE instructions])
921 cat > conftest.s << EOF
924 movaps 32(%rsi,%rdx,8),%xmm4
928 if AC_TRY_COMMAND($CC $CFLAGS -c conftest.s); then
932 AC_MSG_ERROR([Upgrade to a more recent binutils (or disable assembly loops).])
934 AC_DEFINE([GMX_X86_64_SSE],,[Single-precision SSE instructions on X86_64])
940 # Test stuff for ia64 assembly
942 # Nothing to test right now.
948 # Test altivec support.
950 if test "$enable_ppc_altivec" = "yes"; then
951 if test "$enable_float" = "no"; then
952 AC_MSG_WARN([PowerPC Altivec loops can only be used in single precision - disabling])
953 enable_ppc_altivec=no
955 # On FSF (vanilla) GCC we must include altivec.h, and on apple we
956 # should NOT do it after using -faltivec. Go figure...
959 # do nothing on Apple systems
962 AC_CHECK_HEADERS([altivec.h])
966 AC_MSG_CHECKING([whether the compiler supports altivec extensions])
973 AC_DEFINE([GMX_PPC_ALTIVEC],,[Use PowerPC Altivec inner loops])],[
975 AC_MSG_WARN([no altivec support found - On recent PowerPC CPUs]
976 [you can get a huge performance gain by using an altivec-enabled compiler.]
977 [On OS X, you need GCC>=3.3, or the IBM compilers. If you are using standard]
978 [GCC, you need at least version 4.0])
979 enable_ppc_altivec=no])
983 if test "$enable_ia64_asm" = "yes"; then
984 AC_DEFINE(GMX_IA64_ASM,,[Use ia64 assembly tuned for Itanium2])
985 AC_DEFINE(DISABLE_WATER_NLIST,,[Turn off all water neighborlist optimization])
986 AC_DEFINE(DISABLE_WATERWATER_NLIST,,[Turn off water-water neighborlist optimization only])
989 if test "$enable_bluegene" = "yes"; then
990 AC_DEFINE(GMX_BLUEGENE,,[Use assembly intrinsics kernels for BlueGene])
994 # Add the appropriate assembly loops
996 AM_CONDITIONAL([GMX_IA32_SSE],[test "$enable_ia32_sse" = "yes" -a "$enable_float" = "yes"])
997 AM_CONDITIONAL([GMX_IA32_SSE2],[test "$enable_ia32_sse" = "yes" -a "$enable_float" = "no"])
998 AM_CONDITIONAL([GMX_X86_64_SSE],[test "$enable_x86_64_sse" = "yes" -a "$enable_float" = "yes"])
999 AM_CONDITIONAL([GMX_X86_64_SSE2],[test "$enable_x86_64_sse" = "yes" -a "$enable_float" = "no"])
1000 AM_CONDITIONAL([GMX_FORTRAN],[test "$enable_fortran" = "yes"])
1001 AM_CONDITIONAL([GMX_PPC_ALTIVEC],[test "$enable_ppc_altivec" = "yes" -a "$enable_float" = "yes"])
1002 AM_CONDITIONAL([GMX_IA64_ASM],[test "$enable_ia64_asm" = "yes"])
1003 AM_CONDITIONAL([GMX_BLUEGENE],[test "$enable_bluegene" = "yes"])
1004 AM_CONDITIONAL([GMX_POWER6],[test "$enable_power6" = "yes"])
1008 # Check integer endian
1010 AC_C_BIGENDIAN([AC_DEFINE([GMX_INTEGER_BIG_ENDIAN],,[Integer byte order is big endian.])],[],[
1011 AC_MSG_ERROR([Cannot determine endian in compiled output])])
1012 # Little endian implied if GMX_INTEGER_BIG_ENDIAN not defined in source.
1016 case "${host_cpu}" in
1018 # Check if inline assembly works
1019 AC_MSG_CHECKING(if the compiler supports gcc inline assembly)
1020 AC_TRY_LINK([],[float f;int i; asm("fld %1\nfistpl %0\n" : "=m" (*&i) : "f" (f));],[AC_MSG_RESULT(yes)
1021 AC_DEFINE(GMX_X86_GCC_INLINE_ASM,,[Enable x86 gcc inline assembly])],[AC_MSG_RESULT(no)])
1022 # Check for MSVC inline assembly
1023 AC_MSG_CHECKING(if the compiler supports MSVC inline assembly)
1024 AC_TRY_LINK([],[float f;int i; _asm { fld f } ; _asm { fistpl i };],[AC_MSG_RESULT(yes)
1025 AC_DEFINE(GMX_X86_MSVC_INLINE_ASM,,[Enable x86 MSVC inline assembly])],[AC_MSG_RESULT(no)])
1034 if test "$with_dlopen" = "yes"; then
1035 AC_MSG_CHECKING(if dlopen supported)
1037 #LDFLAGS="$lt_cv_dlopen_libs $LDFLAGS" #can't make the macro, which is getting lt_cv_dlopen_libs, to work
1038 LDFLAGS_RET=$LDFLAGS
1039 if test "$enable_all_static" = "yes"; then #make sure we test also whether it works static
1040 LDFLAGS="$LDFLAGS -static"
1042 CFLAGS="-I$srcdir/include -DGMX_DLOPEN $CFLAGS"
1043 AC_TRY_LINK([#include "$srcdir/src/gmxlib/vmddlopen.c"],,[AC_MSG_RESULT([yes])\
1044 AC_DEFINE(GMX_DLOPEN,,[Compile with dlopen])],AC_MSG_RESULT([no]))
1046 LDFLAGS=$LDFLAGS_RET
1052 ########################################################################
1053 # Final output stage
1054 ########################################################################
1058 AC_SUBST(INCLUDES) # should be automatic, but doesnt seem to be?
1060 # To tell libraries apart, we use four versions of the name. For instance, libgmx:
1061 # libgmx single prec, no mpi.
1062 # libgmx_d double prec, no mpi.
1063 # libgmx_mpi single prec, mpi.
1064 # libgmx_mpi_d double prec, mpi.
1065 # However, the non-suffixed names are linked to the _mpi and/or _d suffixed
1066 # ones upon installation if that is the only version available.
1068 if test "$enable_mpi" = "yes"; then
1071 if test "$enable_float" = "no"; then
1072 LIBSUFFIX="${LIBSUFFIX}_d"
1076 # Unless the user has explicitly requested a prefix/suffix/transform, we
1077 # use _d on double precision files. Don't add anything for mpi, but at the
1078 # end we tell the user it is possible and smart to do in some cases!
1079 if test "$program_transform_name" = "s,x,x,"; then
1080 name_transform_provided=no;
1081 if test "$enable_float" = "no"; then
1082 program_transform_name="s,\$\$,_d,"
1085 name_transform_provided=yes;
1089 # Use a variable for RPM - this way it can be
1090 # overridden with make RPM=rpm3 rpm
1094 if test "$enable_fahcore" = "yes"; then
1095 CPPFLAGS="$CPPFLAGS -I\$(top_srcdir)/../corewrap -include swindirect.h -DFULLINDIRECT -DUSE_FAH_XDR"
1096 if test "$enable_mpi" = "yes"; then
1097 CFLAGS="$CFLAGS -DMPI"
1100 AM_CONDITIONAL([GMX_FAHCORE],[test "$enable_fahcore" = "yes"])
1103 if test "$enable_all_static" = "yes"; then
1104 LDFLAGS="$LDFLAGS -all-static"
1107 # we have asm source, so this is necessary for automake 1.6
1114 AC_CONFIG_FILES([ Makefile ])
1115 AC_CONFIG_FILES([ src/Makefile ])
1116 AC_CONFIG_FILES([ src/gmxlib/Makefile ])
1117 AC_CONFIG_FILES([ src/gmxlib/libgmx${LIBSUFFIX}.pc:src/gmxlib/libgmx.pc.in ])
1118 AC_CONFIG_FILES([ src/gmxlib/gmx_blas/Makefile ])
1119 AC_CONFIG_FILES([ src/gmxlib/gmx_lapack/Makefile ])
1120 AC_CONFIG_FILES([ src/gmxlib/selection/Makefile ])
1121 AC_CONFIG_FILES([ src/gmxlib/statistics/Makefile ])
1122 AC_CONFIG_FILES([ src/gmxlib/trajana/Makefile ])
1123 AC_CONFIG_FILES([ src/gmxlib/thread_mpi/Makefile ])
1124 AC_CONFIG_FILES([ src/gmxlib/nonbonded/Makefile ])
1125 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_c/Makefile ])
1126 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_ia32_sse/Makefile ])
1127 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_ia32_sse2/Makefile ])
1128 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_x86_64_sse/Makefile ])
1129 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_x86_64_sse2/Makefile ])
1130 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_ppc_altivec/Makefile ])
1131 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_ia64_single/Makefile ])
1132 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_ia64_double/Makefile ])
1133 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_bluegene/Makefile ])
1134 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_power6/Makefile ])
1135 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_f77_single/Makefile ])
1136 AC_CONFIG_FILES([ src/gmxlib/nonbonded/nb_kernel_f77_double/Makefile ])
1137 AC_CONFIG_FILES([ include/Makefile ])
1138 AC_CONFIG_FILES([ include/types/Makefile ])
1139 AC_CONFIG_FILES([ include/thread_mpi/Makefile ])
1140 AC_CONFIG_FILES([ include/thread_mpi/atomic/Makefile ])
1141 AC_CONFIG_FILES([ src/mdlib/Makefile ])
1142 AC_CONFIG_FILES([ src/mdlib/libmd${LIBSUFFIX}.pc:src/mdlib/libmd.pc.in ])
1143 AC_CONFIG_FILES([ src/kernel/Makefile ])
1144 AC_CONFIG_FILES([ src/kernel/libgmxpreprocess${LIBSUFFIX}.pc:src/kernel/libgmxpreprocess.pc.in ])
1145 AC_CONFIG_FILES([ src/tools/Makefile ])
1146 AC_CONFIG_FILES([ src/tools/libgmxana${LIBSUFFIX}.pc:src/tools/libgmxana.pc.in ])
1147 AC_CONFIG_FILES([ src/ngmx/Makefile ])
1148 AC_CONFIG_FILES([ src/contrib/Makefile ])
1149 AC_CONFIG_FILES([ scripts/Makefile ])
1150 AC_CONFIG_FILES([ admin/Makefile ])
1151 AC_CONFIG_FILES([ share/Makefile ])
1152 AC_CONFIG_FILES([ share/tutor/Makefile ])
1153 AC_CONFIG_FILES([ share/tutor/gmxdemo/Makefile ])
1154 AC_CONFIG_FILES([ share/tutor/nmr1/Makefile ])
1155 AC_CONFIG_FILES([ share/tutor/nmr2/Makefile ])
1156 AC_CONFIG_FILES([ share/tutor/water/Makefile ])
1157 AC_CONFIG_FILES([ share/tutor/mixed/Makefile ])
1158 AC_CONFIG_FILES([ share/tutor/methanol/Makefile ])
1159 AC_CONFIG_FILES([ share/tutor/speptide/Makefile ])
1160 AC_CONFIG_FILES([ share/template/Makefile ])
1161 AC_CONFIG_FILES([ share/top/Makefile ])
1162 AC_CONFIG_FILES([ share/top/gmx.ff/Makefile ])
1163 AC_CONFIG_FILES([ share/top/gmx2.ff/Makefile ])
1164 AC_CONFIG_FILES([ share/top/encadv.ff/Makefile ])
1165 AC_CONFIG_FILES([ share/top/encads.ff/Makefile ])
1166 AC_CONFIG_FILES([ share/top/oplsaa.ff/Makefile ])
1167 AC_CONFIG_FILES([ share/top/gromos43a1.ff/Makefile ])
1168 AC_CONFIG_FILES([ share/top/gromos43a2.ff/Makefile ])
1169 AC_CONFIG_FILES([ share/top/gromos45a3.ff/Makefile ])
1170 AC_CONFIG_FILES([ share/top/gromos53a5.ff/Makefile ])
1171 AC_CONFIG_FILES([ share/top/gromos53a6.ff/Makefile ])
1172 AC_CONFIG_FILES([ share/html/Makefile ])
1173 AC_CONFIG_FILES([ share/html/images/Makefile ])
1174 AC_CONFIG_FILES([ share/html/online/Makefile ])
1175 AC_CONFIG_FILES([ man/Makefile man/man1/Makefile man/man7/Makefile ])
1176 AC_CONFIG_FILES([ Doxyfile ])
1185 #########################################################
1186 # Echo some important info, to avoid stupid mistakes
1189 if test "$enable_float" = "no" -a "$name_transform_provided" = "no"; then
1191 echo "* You are compiling a double precision version of Gromacs -"
1192 echo " program names will be suffixed with _d to avoid overwriting single"
1193 echo " precision files. You can override it with --program-suffix"
1196 if test "$name_transform_provided" = "no" -a "$enable_mpi" = "yes"; then
1198 echo "* Seems you are compiling with MPI support. You can install the MPI-"
1199 echo " enabled programs with suffixed names to have both MPI and non-MPI"
1200 echo " versions. This is useful e.g. on supercomputers where you usually"
1201 echo " cannot run MPI-linked programs on the login node."
1202 echo " Set a suffix with e.g. --program-suffix=_mpi (or _mpi_d for double)."
1203 echo " You only need MPI for mdrun, so if you already have non-MPI stuff"
1204 echo " installed you can issue make mdrun; make install-mdrun."
1207 if test "$enable_shared" = "no"; then
1209 echo "* On most platforms you can save 10X space with dynamic libraries, although"
1210 echo " the binaries might be less portable. Why not try --enable-shared ?"