configure.ac
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.59)
AC_INIT([ChaNGa], [3.3], [changa-users@u.washington.edu])
AC_DEFINE_UNQUOTED([NBODY_PACKAGE_VERSION], [$PACKAGE_VERSION])
AC_CONFIG_SRCDIR([Reductions.h])
AC_CONFIG_HEADER([config.h $srcdir/../utility/structures/config.h])
AC_ARG_VAR([CHARMC], "Charm compiler")
# Checks for programs.
AC_PATH_PROG([CHARMC], [charmc], [no], [$CHARM_DIR/bin:$PATH:../charm/bin:../../charm/bin])
if test "$CHARMC" = "no" ; then
AC_MSG_WARN([Cannnot locate charmc])
AC_MSG_WARN([Try setting your CHARM_DIR environment variable to point at the charm source directory])
exit
fi
CHARM_PATH=${CHARMC%/bin/charmc}
CONV_CONFIG=${CHARM_PATH}/tmp/conv-config.sh
CHARMINC=${CHARM_PATH}/include
AC_SUBST([CHARM_PATH])
. ${CONV_CONFIG}
CXX=${CMK_SEQ_CXX}
CC=${CMK_SEQ_CC}
LD=${CMK_SEQ_LD}
LDXX=${CMK_SEQ_LDXX}
AC_SUBST([AR], [${CMK_AR}])
CPPFLAGS="$CPPFLAGS -I.."
AC_CHECK_FILE(../libs, [LDFLAGS="$LDFLAGS -L../libs"])
AC_PROG_CXX($CHARMC)
# AC_PROG_CC($CHARMC)
# Checks for header files.
AC_HEADER_STDC
AC_CHECK_HEADERS([sys/bittypes.h endian.h limits.h malloc.h stddef.h stdint.h stdlib.h string.h sys/param.h unistd.h values.h])
AC_CHECK_HEADER(netinet/in.h,,[MISSING_NETINET=yes])
if test "${MISSING_NETINET}" = "yes" ; then
CPPFLAGS="$CPPFLAGS -I/usr/include"
fi
AC_CHECK_HEADERS([rpc/types.h])
AC_CHECK_HEADER([rpc/xdr.h],,[MISSING_XDR=yes],
[#ifdef HAVE_RPC_TYPES_H
#include <rpc/types.h>
#endif
])
AC_SEARCH_LIBS([xdr_float], [xdr],,[MISSING_XDR=yes])
if test "${MISSING_XDR}" = "yes" ; then
echo "XDR missing, attempting to use xdr with package"
if test -d ../xdr ; then
ln -s $PWD/../xdr ../rpc
else
echo "Try downloading the xdr package and place it in the parent directory."
echo "And do a make in ../xdr"
exit
fi
CPPFLAGS="$CPPFLAGS -I.."
LDFLAGS="$LDFLAGS -L../xdr"
fi
# Use single-precision for gravity calculations
AC_ARG_ENABLE([float],
[AS_HELP_STRING([--enable-float], [use single-precision for gravity calculations])],
[float=$enableval], [float=no])
if test "$float" = "yes" ; then
echo "float selected"
FLAG_FLOAT="-DCOSMO_FLOAT"
else
FLAG_FLOAT=""
fi
AC_SUBST([FLAG_FLOAT])
# SSE2 vector optimization for gravity
AC_ARG_ENABLE([sse2],
[AS_HELP_STRING([--enable-sse2], [enable sse2 gravity vectorization])],
[sse2=$enableval], [sse2=no])
if test "$sse2" = "yes" ; then
echo "SSE2 selected"
FLAG_SSE="-DCMK_USE_SSE2"
else
FLAG_SSE=""
fi
AC_SUBST([FLAG_SSE])
# AVX vector optimization for gravity
AC_ARG_ENABLE([avx],
[AS_HELP_STRING([--enable-avx], [enable avx gravity vectorization])],
[avx=$enableval], [avx=no])
if test "$avx" = "yes" ; then
echo "AVX selected"
FLAG_AVX="-DCMK_USE_AVX"
else
FLAG_AVX=""
fi
AC_SUBST([FLAG_AVX])
# physical softening in comoving coordinates:
AC_ARG_ENABLE([changesoft],
[AS_HELP_STRING([--enable-changesoft], [enable physical softening])],
[changesoft=$enableval], [changesoft=yes])
if test "$changesoft" = "yes" ; then
echo "CHANGESOFT selected"
FLAG_CHANGESOFT="-DCHANGESOFT"
else
FLAG_CHANGESOFT=""
fi
AC_SUBST([FLAG_CHANGESOFT])
# 128 bit keys:
AC_ARG_ENABLE([bigkeys],
[AS_HELP_STRING([--enable-bigkeys], [enable 128 bit hash keys])],
[bigkeys=$enableval], [bigkeys=no])
if test "$bigkeys" = "yes" ; then
echo "BIGKEYS selected"
FLAG_BIGKEYS="-DBIGKEYS"
else
FLAG_BIGKEYS=""
fi
AC_SUBST([FLAG_BIGKEYS])
# DTADJUST
AC_ARG_ENABLE([dtadjust],
[AS_HELP_STRING([--enable-dtadjust], [enable emergency timestep adjust])],
[dtadjust=$enableval], [dtadjust=yes])
if test "$dtadjust" = "yes" ; then
echo "DTADJUST selected"
FLAG_DTADJUST="-DDTADJUST"
else
FLAG_DTADJUST=""
fi
AC_SUBST([FLAG_DTADJUST])
# Select kernel
# Set defaults
KERNEL="m4kernel"
FLAG_M4KERNEL="-DM4KERNEL=0"
FLAG_WENDLAND="-DWENDLAND=0"
FLAG_M6KERNEL="-DM6KERNEL=0"
# Wendland C4 Kernel:
AC_ARG_ENABLE([wendland],
[AS_HELP_STRING([--enable-wendland], [enable Wendland C4 Kernel])],
[wendland=$enableval], [wendland=no])
if test "$wendland" = "yes" ; then
KERNEL="wendland"
fi
# M6 quintic spline kernel
AC_ARG_ENABLE([m6kernel],
[AS_HELP_STRING([--enable-m6kernel], [enable M6 cubic spline kernel])],
[m6kernel=$enableval], [m6kernel=no])
if test "$m6kernel" = "yes" ; then
KERNEL="m6kernel"
fi
# Now set up kernel flags
if test "$KERNEL" = "m4kernel" ; then
echo "M4KERNEL selected"
FLAG_M4KERNEL="-DM4KERNEL=1"
elif test "$KERNEL" = "wendland" ; then
echo "WENDLAND selected"
FLAG_WENDLAND="-DWENDLAND=1"
elif test "$KERNEL" = "m6kernel" ; then
echo "M6KERNEL selected"
FLAG_M6KERNEL="-DM6KERNEL=1"
fi
KERNEL_FLAGS="$FLAG_M4KERNEL $FLAG_WENDLAND $FLAG_M6KERNEL"
echo "$KERNEL_FLAGS"
AC_SUBST([KERNEL_FLAGS])
# Velocity damping
AC_ARG_ENABLE([damping],
[AS_HELP_STRING([--enable-damping], [enable velocity damping for glasses])],
[damping=$enableval], [damping=no])
if test "$damping" = "yes" ; then
echo "DAMPING selected"
FLAG_DAMPING="-DDAMPING"
else
FLAG_DAMPING=""
fi
AC_SUBST([FLAG_DAMPING])
# Cooling:
AC_ARG_ENABLE([cooling],
[AS_HELP_STRING([--enable-cooling], [enable gas cooling (planet, cosmo, grackle)])],
[cooling=$enableval], [cooling=no])
OBJECTS_COOLING=""
if test "$cooling" = "no" ; then
echo "Adiabatic SPH only selected"
FLAG_COOLING="-DCOOLING_NONE"
elif test "$cooling" = "planet" ; then
echo "Planet cooling selected"
FLAG_COOLING="-DCOOLING_PLANET"
OBJECTS_COOLING="cooling_planet.o stiff.o"
elif test "$cooling" = "cosmo" ; then
echo "Cosmo cooling selected"
FLAG_COOLING="-DCOOLING_COSMO"
OBJECTS_COOLING="cooling_cosmo.o stiff.o"
elif test "$cooling" = "grackle" ; then
echo "Grackle cooling selected"
FLAG_COOLING="-DCOOLING_GRACKLE"
OBJECTS_COOLING="cooling_grackle.o"
ac_cv_libhdf5="yes"
AC_CHECK_LIB([hdf5], [H5Fcreate], [], [ac_cv_libhdf5=no])
if test $ac_cv_libhdf5 = "no" ; then
AC_MSG_WARN([HDF5 library needed for Grackle, but not found]);
AC_MSG_WARN([Try setting LDFLAGS environment with -L<hd5libdir>]);
exit
fi
ac_cv_libgrackle="yes"
AC_CHECK_HEADER(grackle.h, [], [],
[[
#define CONFIG_BFLOAT_8
]])
if test "$ac_cv_header_grackle_h" == no
then
AC_MSG_WARN([grackle header needed for Grackle, but not found])
AC_MSG_WARN([Try setting CPPFLAGS environment with -I <grackledir>])
exit
fi
AC_CHECK_LIB([grackle], [initialize_chemistry_data], [], [ac_cv_libgrackle=no], [-lhdf5])
if test $ac_cv_libgrackle = "no" ; then
AC_MSG_WARN([grackle library needed for Grackle, but not found]);
AC_MSG_WARN([Try setting LDFLAGS environment with -L<gracklelibdir>]);
AC_MSG_WARN([Also remember to set LD_LIBRARY_PATH when running, if grackle and hdf5 are dynamic libraries]);
exit
fi
else
AC_MSG_WARN([Unknown cooling selected, using Adiabatic])
FLAG_COOLING="-DCOOLING_NONE"
cooling="no"
fi
AC_ARG_ENABLE([hexadecapole],
[AS_HELP_STRING([--disable-hexadecapole], [disable use of hexadecapole expansions])],
# Note that "$enableval" being "yes" means ENABLE hexadecapole -- the
# help string, as one would expect, only affects how we document
# the option.
[case "$enableval" in
yes | no ) hexadecapole="$enableval";;
*) AC_MSG_ERROR("$enableval: invalid argument to `--disable-hexadecapole'") ;;
esac],
[hexadecapole="yes"])
HEXADECAPOLE=""
if test "$hexadecapole" = "yes"; then
HEXADECAPOLE="-DHEXADECAPOLE"
else
HEXADECAPOLE=""
fi
AC_SUBST([FLAG_COOLING])
AC_SUBST([OBJECTS_COOLING])
AC_SUBST([HEXADECAPOLE])
# diffusion (thermal and metal)
AC_ARG_ENABLE([diffusion],
[AS_HELP_STRING([--enable-diffusion], [enable diffusion])],
[diffusion=$enableval], [diffusion=yes])
if test "$diffusion" = "yes" ; then
echo "DIFFUSION selected"
FLAG_DIFFUSION="-DDIFFUSION"
else
FLAG_DIFFUSION=""
fi
AC_SUBST([FLAG_DIFFUSION])
# Limit supernova feedback
# By default this also enables DIFFHARMONIC
AC_ARG_ENABLE([feedbacklimit],
[AS_HELP_STRING([--enable-feedbacklimit], [limit diffusion of feedback energy])],
[feedbacklimit=$enableval], [feedbacklimit=no])
if test "$feedbacklimit" = "yes" ; then
echo "FEEDBACKDIFFLIMIT selected"
FLAG_FEEDBACKDIFFLIMIT="-DFEEDBACKDIFFLIMIT"
echo "DIFFUSIONHARMONIC selected"
FLAG_DIFFHARMONIC="-DDIFFUSIONHARMONIC"
else
FLAG_FEEDBACKDIFFLIMIT=""
FLAG_DIFFHARMONIC=""
fi
AC_SUBST([FLAG_FEEDBACKDIFFLIMIT])
AC_SUBST([FLAG_DIFFHARMONIC])
# Calculate artificial viscosity from Cullen & Dehnen 2010
AC_ARG_ENABLE([cullenalpha],
[AS_HELP_STRING([--enable-cullenalpha], [enable Cullen Dehnen artificial viscosity])],
[cullenalpha=$enableval], [cullenalpha=no])
if test "$cullenalpha" = "yes" ; then
echo "CULLENALPHA selected"
FLAG_CULLENALPHA="-DCULLENALPHA"
else
FLAG_CULLENALPHA=""
fi
AC_SUBST([FLAG_CULLENALPHA])
# Use alternative calculation of viscosity term similar to Morris & Monahan (1997)
AC_ARG_ENABLE([vsigvisc],
[AS_HELP_STRING([--enable-vsigvisc], [enable alternative Monahan artificial viscosity])],
[vsigvisc=$enableval], [vsigvisc=yes])
if test "$vsigvisc" = "yes" ; then
echo "VSIGVISC selected"
FLAG_VSIGVISC="-DVSIGVISC"
else
FLAG_VSIGVISC=""
fi
AC_SUBST([FLAG_VSIGVISC])
# Richie-Thomas forces (Pressure SPH)
AC_ARG_ENABLE([rtforce],
[AS_HELP_STRING([--enable-rtforce], [enable Richie-Thomas forces])],
[rtforce=$enableval], [rtforce=yes])
if test "$rtforce" = "yes" ; then
echo "RTFORCE selected"
FLAG_RTFORCE="-DRTFORCE"
else
FLAG_RTFORCE=""
fi
AC_SUBST([FLAG_RTFORCE])
# Compiler flags
AC_ARG_ENABLE([opts],
[AS_HELP_STRING([--enable-opts="options"], [Set compiler flags (override defaults)])],
[opts=$enableval], [])
if test "$opts" = "yes" ; then
# The user called without arguments. Assume this is an empty string
opts=""
fi
# Test if 'opts' is defined
if test "${opts+x}" != "" ; then
OPTS="$opts"
else
# Default options
OPTS="-O3 -lpthread"
fi
echo "compiler options: $OPTS"
AC_SUBST([OPTS])
# Checks for typedefs, structures, and compiler characteristics.
AC_HEADER_STDBOOL
AC_C_CONST
AC_C_INLINE
AC_TYPE_SIZE_T
AC_CHECK_TYPES([u_int64_t, u_quad_t, int64_t, quad_t, quad])
# Checks for library functions.
AC_FUNC_MALLOC
AC_FUNC_REALLOC
AC_CHECK_FUNCS([floor memset pow sqrt strchr])
AC_CHECK_LIB([xdr], [xdr_hyper])
AC_CHECK_FUNCS([xdr_hyper])
####################### CUDA #######################
m4_include([cuda.ac])
##################### END CUDA #####################
AC_CONFIG_FILES([Makefile
$srcdir/../utility/structures/Makefile
])
AC_OUTPUT