# This file is part of SWIFT. # Copyright (C) 2012 pedro.gonnet@durham.ac.uk. # 2016 p.w.draper@durham.ac.uk. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Init the project. AC_INIT([SWIFT],[2025.01],[https://gitlab.cosma.dur.ac.uk/swift/swiftsim]) swift_config_flags="$*" AC_COPYRIGHT AC_CONFIG_SRCDIR([src/space.c]) AC_CONFIG_AUX_DIR([.]) AM_INIT_AUTOMAKE([subdir-objects]) # Add local macro collection. AC_CONFIG_MACRO_DIR([m4]) # Stop default CFLAGS from anyone except the environment. : ${CFLAGS=""} # Generate header file. AC_CONFIG_HEADERS([config.h]) # Find and test the compiler. AX_CHECK_ENABLE_DEBUG # Enable POSIX and platform extension preprocessor macros. AC_USE_SYSTEM_EXTENSIONS AC_PROG_CC AM_PROG_CC_C_O # We need this for compilation hints and possibly FFTW. AX_OPENMP # If debug is selected then we also define SWIFT_DEVELOP_MODE to control # any developer code options. if test "x$ax_enable_debug" != "xno"; then AC_DEFINE([SWIFT_DEVELOP_MODE],1,[Enable developer code options]) fi # C++ in GCC 6 and above has an issue with undefined the min() and max() # macros. This hack works around that. AC_DEFINE([_GLIBCXX_INCLUDE_NEXT_C_HEADERS],1,[Hack for min() and max() using g++ 6+]) # Enable POSIX and platform extension preprocessor macros. AC_USE_SYSTEM_EXTENSIONS # Check for C compiler version and vendor. AX_COMPILER_VENDOR AX_COMPILER_VERSION # Check whether we have a recent enough GCC if test "$ax_cv_c_compiler_vendor" = "gnu"; then AX_COMPARE_VERSION([$ax_cv_c_compiler_version], [ge], [8.1.0], [gcc_handles_avx512="yes"], [gcc_handles_avx512="no"]) fi # Restrict support. AC_C_RESTRICT # CSDS AC_ARG_ENABLE([csds], [AS_HELP_STRING([--enable-csds], [enable the Continuous Simulation Data Stream] )], [with_csds="${enableval}"], [with_csds="no"] ) if test "$with_csds" = "yes"; then AC_DEFINE([WITH_CSDS], 1, [csds enabled]) # Ensure that the submodule is initialized ${srcdir}/tools/update-modules csds # The csds requires that long long is a 64bit type, let's # check that. AC_CHECK_SIZEOF([long long int]) if test "$ac_cv_sizeof_long_long_int" != "8"; then AC_MSG_ERROR([The CSDS requires that 'long long int' has size 8 bytes]) fi AC_CONFIG_SUBDIRS([csds]) CFLAGS="$CFLAGS $OPENMP_CFLAGS" fi AM_CONDITIONAL([HAVECSDS],[test $with_csds = "yes"]) # Use best known optimization for the current architecture. Actual optimization # happens later so we can avoid any issues it introduces with the compiler, # but we need to know if that will happen now. AC_ARG_ENABLE([optimization], [AS_HELP_STRING([--enable-optimization], [Enable compile time optimization flags for host @<:@yes/no@:>@] )], [enable_opt="$enableval"], [enable_opt="yes"] ) # Interprocedural optimization support. Can need special handling for linking # and archiving as well as compilation. Needs to be done before libtool is # configured so we use the correct LD. It can give good improvements for # clang based compilers, so the default is enabled, but we make that # disabled when not optimizing or debugging support is enabled. enable_ipo_default="yes"; if test "x$ax_enable_debug" = "xyes" -o "x$enable_opt" != "xyes"; then enable_ipo_default="no"; AC_MSG_WARN([Interprocedural optimization support default is changed to false]) fi AC_ARG_ENABLE([ipo], [AS_HELP_STRING([--enable-ipo], [Enable interprocedural optimization [default=yes unless debugging]] )], [enable_ipo="$enableval"], [enable_ipo="$enable_ipo_default"] ) if test "$enable_ipo" = "yes"; then if test "$ax_cv_c_compiler_vendor" = "intel"; then CFLAGS="$CFLAGS -ip -ipo" LDFLAGS="$LDFLAGS -ipo" AC_CHECK_PROGS([AR], [xiar]) AC_CHECK_PROGS([LD], [xild]) AC_MSG_RESULT([added Intel interprocedural optimization support]) elif test "$ax_cv_c_compiler_vendor" = "oneapi"; then CFLAGS="$CFLAGS -ipo" LDFLAGS="$LDFLAGS -ipo" AC_CHECK_PROGS([AR], [xiar]) AC_CHECK_PROGS([RANLIB], [llvm-ranlib]) AC_MSG_RESULT([added oneapi interprocedural optimization support]) elif test "$ax_cv_c_compiler_vendor" = "gnu"; then CFLAGS="$CFLAGS -flto" LDFLAGS="$LDFLAGS -flto" AX_COMPARE_VERSION($ax_cv_c_compiler_version, [ge], [5.0.0], [ AC_CHECK_PROGS([AR], [gcc-ar]) AC_CHECK_PROGS([RANLIB], [gcc-ranlib]) ], [:] ) AC_MSG_RESULT([added GCC interprocedural optimization support]) elif test "$ax_cv_c_compiler_vendor" = "clang"; then CFLAGS="$CFLAGS -flto" LDFLAGS="$LDFLAGS -flto" AC_CHECK_PROGS([RANLIB], [llvm-ranlib]) AC_MSG_RESULT([added LLVM interprocedural optimization support]) else AC_MSG_WARN([Compiler does not support interprocedural optimization]) fi fi # Check for MPI. Need to do this before characterising the compiler (C99 mode), # as this changes the compiler. # We should consider using AX_PROG_CC_MPI to replace AC_PROG_CC when compiling # whole applications. There are issues with mixing compilers when using this # macro. See # http://lists.gnu.org/archive/html/autoconf-archive-maintainers/2011-05/msg00004.html. AC_ARG_ENABLE([mpi], [AS_HELP_STRING([--enable-mpi], [Compile with functionality for distributed-memory parallelism using MPI @<:@yes/no@:>@] )], [enable_mpi="$enableval"], [enable_mpi="yes"] ) # Use extra flags set by AC_PROG_CC as part of $CC. Currently undocumented as ac_cv_prog_cc_stdc, # so could change. good_mpi="yes" if test "$enable_mpi" = "yes"; then AX_MPI([CC="$MPICC $ac_cv_prog_cc_stdc" AC_DEFINE(HAVE_MPI, 1, [Define if you have the MPI library.]) ], [enable_mpi="no"]) MPI_LIBRARY="Unknown MPI" # Various MPI implementations require additional libraries when also using # threads. Use mpirun (on PATH) as that seems to be only command with # version flag, allow MPIRUN to override for systems that insist on # a non-standard name (PRACE). : ${MPIRUN='mpirun'} if test "$MPIRUN" = "mpirun"; then AC_PATH_PROG([MPIRUN],[mpirun],[notfound]) fi if test "$MPIRUN" = "notfound"; then # This may not be fatal (some systems do not allow mpirun on # development nodes)., so push on. AC_MSG_WARN([Cannot find mpirun command on PATH, thread support may not be correct]) else # Special options we know about. # Intel: -mt_mpi # PLATFORM: -lmtmpi # OpenMPI: nothing, but library should be built correctly. # Set MPI_THREAD_LIBS and add to linker commands as necessary. AC_MSG_CHECKING([MPI threads options]) version=`$MPIRUN -version 2>&1` case "$version" in *Intel*MPI*) MPI_THREAD_LIBS="-mt_mpi" MPI_LIBRARY="Intel MPI" AC_MSG_RESULT([Intel MPI]) ;; *Platform*) MPI_THREAD_LIBS="-lmtmpi" MPI_LIBRARY="PLATFORM MPI" AC_MSG_RESULT([PLATFORM MPI]) ;; *"Open MPI"*) MPI_THREAD_LIBS="" MPI_LIBRARY="Open MPI" AC_MSG_RESULT([Open MPI]) # OpenMPI should be 1.8.6 or later, if not complain. # Version is last word on first line of -version output. revision=`mpirun -version 2>&1 | grep "Open MPI" | awk '{print $NF}'` AX_COMPARE_VERSION( $revision, [ge], [1.8.6],,[good_mpi="no"] ) if test "$good_mpi" = "no"; then AC_MSG_WARN([ Open MPI version should be at least 1.8.6 (is $revision)]) enable_mpi="yes (but with warning)" fi ;; *) MPI_THREAD_LIBS="" AC_MSG_RESULT([unknown]) ;; esac AC_SUBST([MPI_THREAD_LIBS]) fi AC_DEFINE_UNQUOTED([SWIFT_MPI_LIBRARY], ["$MPI_LIBRARY"], [The MPI library name, if known.]) fi AM_CONDITIONAL([HAVEMPI],[test $enable_mpi = "yes"]) # Indicate that MPIRUN can be modified by an environment variable AC_ARG_VAR(MPIRUN, Path to the mpirun command if non-standard) # Add libtool support (now that CC is defined). Disable shared libraries by default. LT_INIT([disable-shared]) # Need C99 and inline support. Only for autoconfs to version 2.69. m4_version_prereq([2.71], [], [AC_PROG_CC_C99]) # Need inline support. AC_C_INLINE # If debugging try to show inlined functions. if test "x$ax_enable_debug" = "xyes"; then # Show inlined functions. if test "$ax_cv_c_compiler_vendor" = "gnu"; then # Would like to use -gdwarf and let the compiler pick a good version # but that doesn't always work. AX_CHECK_COMPILE_FLAG([-gdwarf -fvar-tracking-assignments], [inline_EXTRA_FLAGS="-gdwarf -fvar-tracking-assignments"], [inline_EXTRA_FLAGS="-gdwarf-2 -fvar-tracking-assignments"]) CFLAGS="$CFLAGS $inline_EXTRA_FLAGS" elif test "$ax_cv_c_compiler_vendor" = "intel"; then CFLAGS="$CFLAGS -debug inline-debug-info" elif test "$ax_cv_c_compiler_vendor" = "oneapi"; then CFLAGS="$CFLAGS -debug inline-debug-info" fi fi # Are we using the regular tasks (with atomics and no task conflicts) or # are we using the atomic-free task-conflicting (slower) version? AC_ARG_ENABLE([atomics-within-tasks], [AS_HELP_STRING([--disable-atomics-within-tasks], [Disable the use of atomic operations within tasks. This creates more task conflicts but allows for atomic-free and lock-free code within the tasks. This likely slows down the code @<:@yes/no@:>@] )], [enable_atomics_within_tasks="$enableval"], [enable_atomics_within_tasks="yes"] ) AS_IF([test "x$enable_atomics_within_tasks" != "xno"], , # Note: atomics are allowed by default, we define the macro if we don't want them. [AC_DEFINE([SWIFT_TASKS_WITHOUT_ATOMICS],1,[Makes SWIFT use atomic-free and lock-free tasks.]) ]) # Check if task debugging is on. AC_ARG_ENABLE([task-debugging], [AS_HELP_STRING([--enable-task-debugging], [Store extra information for generating task dump files @<:@yes/no@:>@] )], [enable_task_debugging="$enableval"], [enable_task_debugging="no"] ) if test "$enable_task_debugging" = "yes"; then AC_DEFINE([SWIFT_DEBUG_TASKS],1,[Enable task debugging]) fi # Check if threadpool debugging is on. AC_ARG_ENABLE([threadpool-debugging], [AS_HELP_STRING([--enable-threadpool-debugging], [Store threadpool mapper timing information and generate threadpool dump files @<:@yes/no@:>@] )], [enable_threadpool_debugging="$enableval"], [enable_threadpool_debugging="no"] ) if test "$enable_threadpool_debugging" = "yes"; then AC_DEFINE([SWIFT_DEBUG_THREADPOOL],1,[Enable threadpool debugging]) LDFLAGS="$LDFLAGS -rdynamic -ldl" fi # Check if the general timers are switched on. AC_ARG_ENABLE([timers], [AS_HELP_STRING([--enable-timers], [Activate the basic timers @<:@yes/no@:>@] )], [enable_timers="$enableval"], [enable_timers="no"] ) if test "$enable_timers" = "yes"; then AC_DEFINE([SWIFT_USE_TIMERS],1,[Enable individual timers]) fi # Check if expensive debugging is on. AC_ARG_ENABLE([debugging-checks], [AS_HELP_STRING([--enable-debugging-checks], [Activate expensive consistency checks @<:@yes/no@:>@] )], [enable_debugging_checks="$enableval"], [enable_debugging_checks="no"] ) if test "$enable_debugging_checks" = "yes"; then AC_DEFINE([SWIFT_DEBUG_CHECKS],1,[Enable expensive debugging]) fi # Check if cell graph is on. AC_ARG_ENABLE([cell-graph], [AS_HELP_STRING([--enable-cell-graph], [Activate the cell graph @<:@yes/no@:>@] )], [enable_cell_graph="$enableval"], [enable_cell_graph="no"] ) if test "$enable_cell_graph" = "yes"; then AC_DEFINE([SWIFT_CELL_GRAPH],1,[Enable cell graph]) fi # Check if using our custom icbrtf is enabled. AC_ARG_ENABLE([custom-icbrtf], [AS_HELP_STRING([--enable-custom-icbrtf], [Use SWIFT's custom icbrtf function instead of the system cbrtf @<:@yes/no@:>@] )], [enable_custom_icbrtf="$enableval"], [enable_custom_icbrtf="no"] ) if test "$enable_custom_icbrtf" = "yes"; then AC_DEFINE([WITH_ICBRTF],1,[Enable custom icbrtf]) fi # Check whether we want to default to naive cell interactions AC_ARG_ENABLE([naive-interactions], [AS_HELP_STRING([--enable-naive-interactions], [Activate use of naive cell interaction functions @<:@yes/no@:>@] )], [enable_naive_interactions="$enableval"], [enable_naive_interactions="no"] ) if test "$enable_naive_interactions" = "yes"; then AC_DEFINE([SWIFT_USE_NAIVE_INTERACTIONS],1,[Enable use of naive cell interaction functions]) fi # Check whether we want to default to naive cell interactions (stars) AC_ARG_ENABLE([naive-interactions-stars], [AS_HELP_STRING([--enable-naive-interactions-stars], [Activate use of naive cell interaction functions for stars @<:@yes/no@:>@] )], [enable_naive_interactions_stars="$enableval"], [enable_naive_interactions_stars="no"] ) if test "$enable_naive_interactions_stars" = "yes"; then AC_DEFINE([SWIFT_USE_NAIVE_INTERACTIONS_STARS],1,[Enable use of naive cell interaction functions for stars]) fi # Check whether we want to default to naive cell interactions (stars) AC_ARG_ENABLE([naive-interactions-rt], [AS_HELP_STRING([--enable-naive-interactions-rt], [Activate use of naive cell interaction functions for stars in RT tasks@<:@yes/no@:>@] )], [enable_naive_interactions_rt="$enableval"], [enable_naive_interactions_rt="no"] ) if test "$enable_naive_interactions_rt" = "yes"; then AC_DEFINE([SWIFT_USE_NAIVE_INTERACTIONS_RT],1,[Enable use of naive cell interaction functions for stars in RT tasks]) fi # Check if gravity force checks are on for some particles. AC_ARG_ENABLE([gravity-force-checks], [AS_HELP_STRING([--enable-gravity-force-checks=], [Activate expensive brute-force gravity checks for a fraction 1/N of all particles @<:@N@:>@] )], [gravity_force_checks="$enableval"], [gravity_force_checks="no"] ) if test "$gravity_force_checks" = "yes"; then AC_MSG_ERROR(Need to specify the fraction of particles to check when using --enable-gravity-force-checks!) elif test "$gravity_force_checks" != "no"; then AC_DEFINE_UNQUOTED([SWIFT_GRAVITY_FORCE_CHECKS], [$enableval] ,[Enable gravity brute-force checks]) fi # Check if hydro density checks are on for some particles. AC_ARG_ENABLE([hydro-density-checks], [AS_HELP_STRING([--enable-hydro-density-checks], [Activate expensive brute-force hydro density checks for a fraction 1/N of all particles @<:@N@:>@] )], [hydro_density_checks="$enableval"], [hydro_density_checks="no"] ) if test "$hydro_density_checks" = "yes"; then AC_MSG_ERROR(Need to specify the fraction of particles to check when using --enable-hydro-density-checks!) elif test "$hydro_density_checks" != "no"; then AC_DEFINE_UNQUOTED([SWIFT_HYDRO_DENSITY_CHECKS], [$enableval] ,[Enable hydro density brute-force checks]) fi # Check if stars density checks are on for some particles. AC_ARG_ENABLE([stars-density-checks], [AS_HELP_STRING([--enable-stars-density-checks], [Activate expensive brute-force stars density checks for a fraction 1/N of all particles @<:@N@:>@] )], [stars_density_checks="$enableval"], [stars_density_checks="no"] ) if test "$stars_density_checks" = "yes"; then AC_MSG_ERROR(Need to specify the fraction of particles to check when using --enable-stars-density-checks!) elif test "$stars_density_checks" != "no"; then AC_DEFINE_UNQUOTED([SWIFT_STARS_DENSITY_CHECKS], [$enableval] ,[Enable stars density brute-force checks]) fi # Check if sink density checks are on for some particles. AC_ARG_ENABLE([sink-density-checks], [AS_HELP_STRING([--enable-sink-density-checks], [Activate expensive brute-force sink density checks for a fraction 1/N of all particles @<:@N@:>@] )], [sink_density_checks="$enableval"], [sink_density_checks="no"] ) if test "$sink_density_checks" = "yes"; then AC_MSG_ERROR(Need to specify the fraction of particles to check when using --enable-sink-density-checks!) elif test "$sink_density_checks" != "no"; then AC_DEFINE_UNQUOTED([SWIFT_SINK_DENSITY_CHECKS], [$enableval] ,[Enable sink density brute-force checks]) fi # Check if ghost statistics are enabled AC_ARG_ENABLE([ghost-statistics], [AS_HELP_STRING([--enable-ghost-statistics], [Gather statistics about the ghost iterations for hydro, stars and black holes in N bins @<:@N@:>@] )], [ghost_stats="$enableval"], [ghost_stats="no"] ) if test "$ghost_stats" == "yes"; then AC_MSG_ERROR(Need to specify the number of bins when using --enable-ghost-statistics!) elif test "$ghost_stats" != "no"; then AC_DEFINE_UNQUOTED([SWIFT_GHOST_STATS], [$enableval] ,[Enable ghost statistics for hydro, stars and black holes]) fi # Check whether we want to switch on glass making AC_ARG_ENABLE([glass-making], [AS_HELP_STRING([--enable-glass-making], [Activate the glass-making procedure by reversing the sign of gravity @<:@yes/no@:>@] )], [gravity_glass_making="$enableval"], [gravity_glass_making="no"] ) if test "$gravity_glass_making" = "yes"; then AC_DEFINE([SWIFT_MAKE_GRAVITY_GLASS], 1, [Make the code run in a way to produce a glass file for gravity/cosmology]) fi # Check if we want to zero the gravity forces for all particles below some ID. AC_ARG_ENABLE([no-gravity-below-id], [AS_HELP_STRING([--enable-no-gravity-below-id=], [Zeros the gravitational acceleration of all particles with an ID smaller than @<:@N@:>@] )], [no_gravity_below_id="$enableval"], [no_gravity_below_id="no"] ) if test "$no_gravity_below_id" = "yes"; then AC_MSG_ERROR(Need to specify the ID below which particles get zero forces when using --enable-no-gravity-below-id!) elif test "$no_gravity_below_id" != "no"; then AC_DEFINE_UNQUOTED([SWIFT_NO_GRAVITY_BELOW_ID], [$enableval] ,[Particles with smaller ID than this will have zero gravity forces]) fi # Check if we want to use boundary particles. AC_ARG_ENABLE([boundary-particles], [AS_HELP_STRING([--enable-boundary-particles=], [Set all particles with an ID smaller than @<:@N@:>@ as boundary particles (i.e. receive zero gravity + hydro forces).] )], [boundary_particles="$enableval"], [boundary_particles="no"] ) if test "$boundary_particles" = "yes"; then AC_MSG_ERROR(Need to specify the ID below which particles get zero forces when using --enable-boundary-particles!) elif test "$boundary_particles" != "no"; then AC_DEFINE_UNQUOTED([SWIFT_NO_GRAVITY_BELOW_ID], [$enableval] ,[Particles with smaller ID than this will have zero gravity forces]) AC_DEFINE_UNQUOTED([SWIFT_BOUNDARY_PARTICLES], [$enableval] ,[Particles with smaller ID than this will be considered as boundaries.]) fi # Check if we want to use fixed boundary particles. AC_ARG_ENABLE([fixed-boundary-particles], [AS_HELP_STRING([--enable-fixed-boundary-particles=], [Set all particles with an ID smaller than @<:@N@:>@ as fixed boundary particles (i.e. receive zero gravity + hydro forces + zero velocity), this mode enables also --enable-boundary-particles and --enable-no-gravity-below-id.] )], [fixed_boundary_particles="$enableval"], [fixed_boundary_particles="no"] ) if test "$fixed_boundary_particles" = "yes"; then AC_MSG_ERROR(Need to specify the ID below which particles get zero forces when using --enable-boundary-particles!) elif test "$fixed_boundary_particles" != "no"; then AC_DEFINE_UNQUOTED([SWIFT_NO_GRAVITY_BELOW_ID], [$enableval] ,[Particles with smaller ID than this will have zero gravity forces]) AC_DEFINE_UNQUOTED([SWIFT_BOUNDARY_PARTICLES], [$enableval] ,[Particles with smaller ID than this will be considered as boundaries.]) AC_DEFINE_UNQUOTED([SWIFT_FIXED_BOUNDARY_PARTICLES], [$enableval] ,[Particles with smaller ID than this will be considered as boundaries.]) fi # Check if fixed entropy is on for settling planetary initial conditions AC_ARG_ENABLE([planetary-fixed-entropy], [AS_HELP_STRING([--enable-planetary-fixed-entropy], [Force entropies to stay fixed for settling planetary initial conditions @<:@yes/no@:>@] )], [planetary_fixed_entropy="$enableval"], [planetary_fixed_entropy="no"] ) if test "$planetary_fixed_entropy" = "yes"; then AC_DEFINE([PLANETARY_FIXED_ENTROPY],1,[Enable planetary fixed entropy]) fi # Check whether we have any of the ARM v8.1 tick timers AX_ASM_ARM_PMCCNTR AX_ASM_ARM_CNTVCT # See if we want memuse reporting. AC_ARG_ENABLE([memuse-reports], [AS_HELP_STRING([--enable-memuse-reports], [Output reports about significant memory allocations@<:@yes/no@:>@] )], [enable_memuse_reports="$enableval"], [enable_memuse_reports="no"] ) if test "$enable_memuse_reports" = "yes"; then AC_DEFINE([SWIFT_MEMUSE_REPORTS],1,[Enable memory usage reports]) fi # The system memory report depends on the presence of /proc/self/statm, i.e. # a linux OS, check for that. if test -f "/proc/self/statm"; then AC_DEFINE([SWIFT_MEMUSE_STATM],1,[Have /proc/self/statm capability]) fi # Check if we want to make the dumper thread active. AC_ARG_ENABLE([dumper], [AS_HELP_STRING([--enable-dumper], [Dump active tasks and memory use (if configured)@<:@yes/no@:>@] )], [enable_dumper="$enableval"], [enable_dumper="no"] ) if test "$enable_dumper" = "yes"; then AC_DEFINE([SWIFT_DUMPER_THREAD],1,[Enable dumper thread]) fi # See if we want mpi reporting. AC_ARG_ENABLE([mpiuse-reports], [AS_HELP_STRING([--enable-mpiuse-reports], [Output reports about MPI tasks requests@<:@yes/no@:>@] )], [enable_mpiuse_reports="$enableval"], [enable_mpiuse_reports="no"] ) if test "$enable_mpiuse_reports" = "yes"; then AC_DEFINE([SWIFT_MPIUSE_REPORTS],1,[Enable MPI task reports]) fi # Define HAVE_POSIX_MEMALIGN if it works. AX_FUNC_POSIX_MEMALIGN # Disable vectorisation for known compilers. This switches off optimizations # that could be enabled above, so in general should be appended. Slightly odd # implementation as want to describe as --disable-vec, but macro is enable # (there is no enable action). AC_ARG_ENABLE([vec], [AS_HELP_STRING([--disable-vec], [Disable vectorization] )], [enable_vec="$enableval"], [enable_vec="yes"] ) # Disable hand written vectorisation. Slightly odd implementation as want # to describe as --disable-hand-vec, but macro is enable (there is no enable action). AC_ARG_ENABLE([hand-vec], [AS_HELP_STRING([--disable-hand-vec], [Disable intrinsic vectorization] )], [enable_hand_vec="$enableval"], [enable_hand_vec="yes"] ) HAVEVECTORIZATION=0 # Only optimize if allowed, otherwise assume user will set CFLAGS as # appropriate. Note argument check is done earlier so we can configure # other options related to optimization. if test "$enable_opt" = "yes" ; then # Choose the best flags for this compiler and architecture ac_test_CFLAGS="no" AX_CC_MAXOPT ac_test_CFLAGS="yes" # Choose the best flags for the gravity sub-library on this compiler and # architecture. Note we use OpenMP as a compiler hints for loop vectorization. GRAVITY_CFLAGS="$GRAVITY_CFLAGS $OPENMP_CFLAGS" if test "$ax_cv_c_compiler_vendor" = "intel"; then case "$icc_flags" in *CORE-AVX512*) GRAVITY_CFLAGS="$GRAVITY_CFLAGS -qopt-zmm-usage=high" ;; *) AC_MSG_NOTICE([No additional flags needed for gravity on this platform]) ;; esac elif test "$ax_cv_c_compiler_vendor" = "oneapi"; then case "$icc_flags" in *CORE-AVX512*) GRAVITY_CFLAGS="$GRAVITY_CFLAGS -qopt-zmm-usage=high" ;; *) AC_MSG_NOTICE([No additional flags needed for gravity on this platform]) ;; esac elif test "$ax_cv_c_compiler_vendor" = "gnu"; then if test "$gcc_handles_avx512" = "yes"; then case "$ax_cv_gcc_archflag" in *skylake-avx512*) GRAVITY_CFLAGS="$GRAVITY_CFLAGS -mprefer-vector-width=512" ;; *) AC_MSG_NOTICE([No additional flags needed for gravity on this platform]) ;; esac else AC_MSG_NOTICE([No additional flags needed for gravity on this platform]) fi elif test "$ax_cv_c_compiler_vendor" = "clang"; then # Could be a number of compilers. Check for aocc specific flags we want # to use. AX_CHECK_COMPILE_FLAG("-zopt", [GRAVITY_CFLAGS="$GRAVITY_CFLAGS -fvectorize -zopt"]) case "$ax_cv_gcc_archflag" in *skylake-avx512*) GRAVITY_CFLAGS="$GRAVITY_CFLAGS -mprefer-vector-width=512" ;; *znver[[4-9]]) GRAVITY_CFLAGS="$GRAVITY_CFLAGS -mprefer-vector-width=512" ;; *) : ;; esac else AC_MSG_WARN([Do not know what best gravity vectorization flags to choose for this compiler]) fi AC_ARG_VAR([GRAVITY_CFLAGS], [C compiler flags added to the basic CFLAGS to compile the gravity-related files.]) # Check SSE & AVX support (some overlap with AX_CC_MAXOPT). # Don't use the SIMD_FLAGS result with Intel compilers. The -x # value from AX_CC_MAXOPT should be sufficient. AX_EXT if test "$SIMD_FLAGS" != ""; then if test "$ax_cv_c_compiler_vendor" != "intel"; then CFLAGS="$CFLAGS $SIMD_FLAGS" fi fi if test "$enable_vec" = "no"; then if test "$ax_cv_c_compiler_vendor" = "intel"; then CFLAGS="$CFLAGS -no-vec -no-simd" AC_MSG_RESULT([disabled Intel vectorization]) elif test "$ax_cv_c_compiler_vendor" = "oneapi"; then CFLAGS="$CFLAGS -no-vec" AC_MSG_RESULT([disabled oneAPI vectorization]) elif test "$ax_cv_c_compiler_vendor" = "gnu"; then CFLAGS="$CFLAGS -fno-tree-vectorize" AC_MSG_RESULT([disabled GCC vectorization]) elif test "$ax_cv_c_compiler_vendor" = "clang"; then CFLAGS="$CFLAGS -fno-vectorize -fno-slp-vectorize" AC_MSG_RESULT([disabled clang vectorization]) else AC_MSG_WARN([Do not know how to disable vectorization for this compiler]) fi elif test "$enable_hand_vec" = "yes"; then AC_DEFINE([WITH_VECTORIZATION],1,[Enable hand-written vectorization]) HAVEVECTORIZATION=1 fi fi AM_CONDITIONAL([HAVEVECTORIZATION],[test -n "$HAVEVECTORIZATION"]) # Add address sanitizer options to flags, if requested. Only useful for GCC # version 4.8 and later and clang. AC_ARG_ENABLE([sanitizer], [AS_HELP_STRING([--enable-sanitizer], [Enable memory error detection using address sanitizer @<:@no/yes@:>@] )], [enable_san="$enableval"], [enable_san="no"] ) if test "$enable_san" = "yes"; then if test "$ax_cv_c_compiler_vendor" = "gnu"; then AX_COMPARE_VERSION( $ax_cv_c_compiler_version, [ge], [4.8.0], [enable_san="yes"], [enable_san="no"] ) elif test "$ax_cv_c_compiler_vendor" = "clang"; then AX_COMPARE_VERSION( $ax_cv_c_compiler_version, [ge], [3.2.0], [enable_san="yes"], [enable_san="no"] ) fi if test "$enable_san" = "yes"; then CFLAGS="$CFLAGS -fsanitize=address -fno-omit-frame-pointer" AC_MSG_RESULT([Adding address sanitizer support... yes]) # Check if we have access to the __lsan_ignore_object() call for # marking memory allocations as deliberately leaked. AC_LINK_IFELSE([AC_LANG_SOURCE([[ #include #include int main(int argc, char *argv[]) { void *p = malloc(1); __lsan_ignore_object(p); return 0; }]])], [AC_DEFINE(HAVE_LSAN_IGNORE_OBJECT, 1, [Have __lsan_ignore_object() call])], [AC_MSG_WARN([Sanitizer enabled but no __lsan_ignore_object()])]) else AC_MSG_WARN([Compiler does not support address sanitizer option]) fi fi # Add the undefined sanitizer option to flags. Only useful for GCC # version 4.9 and later and clang to detected undefined code behaviour # such as integer overflow and memory alignment issues. AC_ARG_ENABLE([undefined-sanitizer], [AS_HELP_STRING([--enable-undefined-sanitizer], [Enable detection of code that causes undefined behaviour @<:@no/yes@:>@] )], [enable_ubsan="$enableval"], [enable_ubsan="no"] ) if test "$enable_ubsan" = "yes"; then if test "$ax_cv_c_compiler_vendor" = "gnu"; then AX_COMPARE_VERSION( $ax_cv_c_compiler_version, [ge], [4.9.0], [enable_ubsan="yes"], [enable_ubsan="no"] ) elif test "$ax_cv_c_compiler_vendor" = "clang"; then AX_COMPARE_VERSION( $ax_cv_c_compiler_version, [ge], [3.7.0], [enable_ubsan="yes"], [enable_ubsan="no"] ) fi if test "$enable_ubsan" = "yes"; then CFLAGS="$CFLAGS -fsanitize=undefined" AC_MSG_RESULT([added undefined sanitizer support]) else AC_MSG_WARN([Compiler does not support undefined sanitizer option]) fi fi # MPI mesh gravity AC_ARG_ENABLE([mpi-mesh-gravity], [AS_HELP_STRING([--enable-mpi-mesh-gravity], [enable parallel mesh gravity (requires FFTW MPI library) @<:@no/yes@:>@] )], [with_mpi_mesh_gravity="${enableval}"], [with_mpi_mesh_gravity="no"] ) # Autoconf stuff. AC_PROG_INSTALL AC_PROG_MAKE_SET AC_PROG_EGREP # Check for the libraries we will need. AC_CHECK_LIB(m,sqrt,,AC_MSG_ERROR(something is wrong with the math library!)) # Check for GSL. We test for this in the standard directories by default, # and only disable if using --with-gsl=no or --without-gsl. When a value # is given GSL must be found. have_gsl="no" AC_ARG_WITH([gsl], [AS_HELP_STRING([--with-gsl=PATH], [root directory where GSL is installed @<:@yes/no@:>@] )], [with_gsl="$withval"], [with_gsl="test"] ) if test "x$with_gsl" != "xno"; then if test "x$with_gsl" != "xyes" -a "x$with_gsl" != "xtest" -a "x$with_gsl" != "x"; then GSL_LIBS="-L$with_gsl/lib -lgsl -lgslcblas" GSL_INCS="-I$with_gsl/include" else GSL_LIBS="-lgsl -lgslcblas" GSL_INCS="" fi # GSL is not specified, so just check if we have it. if test "x$with_gsl" = "xtest"; then AC_CHECK_LIB([gslcblas],[cblas_dgemm],[have_gsl="yes"],[have_gsl="no"],$GSL_LIBS) if test "x$have_gsl" != "xno"; then AC_DEFINE([HAVE_LIBGSLCBLAS],1,[The GSL CBLAS library appears to be present.]) AC_CHECK_LIB([gsl],[gsl_integration_qag], AC_DEFINE([HAVE_LIBGSL],1,[The GSL library appears to be present.]), [have_gsl="no"],$GSL_LIBS) fi else AC_CHECK_LIB([gslcblas],[cblas_dgemm], AC_DEFINE([HAVE_LIBGSLCBLAS],1,[The GSL CBLAS library appears to be present.]), AC_MSG_ERROR(something is wrong with the GSL CBLAS library!), $GSL_LIBS) AC_CHECK_LIB([gsl],[gsl_integration_qag], AC_DEFINE([HAVE_LIBGSL],1,[The GSL library appears to be present.]), AC_MSG_ERROR(something is wrong with the GSL library!), $GSL_LIBS) have_gsl="yes" fi if test "$have_gsl" = "no"; then GSL_LIBS="" GSL_INCS="" fi fi AC_SUBST([GSL_LIBS]) AC_SUBST([GSL_INCS]) AM_CONDITIONAL([HAVEGSL],[test -n "$GSL_LIBS"]) # Check for GMP. We test for this in the standard directories by default, # and only disable if using --with-gmp=no or --without-gmp. When a value # is given GMP must be found. have_gmp="no" AC_ARG_WITH([gmp], [AS_HELP_STRING([--with-gmp=PATH], [root directory where GMP is installed @<:@yes/no@:>@] )], [with_gmp="$withval"], [with_gmp="test"] ) if test "x$with_gmp" != "xno"; then if test "x$with_gmp" != "xyes" -a "x$with_gmp" != "xtest" -a "x$with_gmp" != "x"; then GMP_LIBS="-L$with_gmp/lib -lgmp" else GMP_LIBS="-lgmp" fi # GMP is not specified, so just check if we have it. if test "x$with_gmp" = "xtest"; then AC_CHECK_LIB([gmp],[__gmpz_inits],[have_gmp="yes"],[have_gmp="no"],$GMP_LIBS) if test "x$have_gmp" != "xno"; then AC_DEFINE([HAVE_LIBGMP],1,[The GMP library appears to be present.]) fi else AC_CHECK_LIB([gmp],[__gmpz_inits], AC_DEFINE([HAVE_LIBGMP],1,[The GMP library appears to be present.]), AC_MSG_ERROR(something is wrong with the GMP library!), $GMP_LIBS) have_gmp="yes" fi if test "$have_gmp" = "no"; then GMP_LIBS="" fi fi AC_SUBST([GMP_LIBS]) AM_CONDITIONAL([HAVEGMP],[test -n "$GMP_LIBS"]) # Check for pthreads. AX_PTHREAD([LIBS="$PTHREAD_LIBS $LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" CC="$PTHREAD_CC" LDFLAGS="$LDFLAGS $PTHREAD_LIBS $LIBS"], AC_MSG_ERROR([Could not find a working version of the pthread library. Make sure you have the library and header files installed or use CPPFLAGS and LDFLAGS if the library is installed in a non-standard location.])) # Check whether POSIX thread barriers are implemented (e.g. OSX does not have them) have_pthread_barrier="no" AC_CHECK_LIB(pthread, pthread_barrier_init, have_pthread_barrier="yes", AC_MSG_WARN(POSIX implementation does not have barriers. SWIFT will use home-made ones.)) if test "x$have_pthread_barrier" = "xyes"; then AC_DEFINE([HAVE_PTHREAD_BARRIERS], [1], [The posix library implements barriers]) fi # Check whether POSIX file allocation functions exist (e.g. OSX does not have them) AC_CHECK_LIB(pthread, posix_fallocate, AC_DEFINE([HAVE_POSIX_FALLOCATE], [1], [The posix library implements file allocation functions.]), AC_MSG_WARN(POSIX implementation does not have file allocation functions.)) # Check for METIS. have_metis="no" AC_ARG_WITH([metis], [AS_HELP_STRING([--with-metis=PATH], [root directory where METIS is installed @<:@yes/no@:>@] )], [with_metis="$withval"], [with_metis="no"] ) METIS_LIBS="" if test "x$with_metis" != "xno"; then # Check if we have METIS. if test "x$with_metis" != "xyes" -a "x$with_metis" != "x"; then METIS_LIBS="-L$with_metis/lib -lmetis" METIS_INCS="-I$with_metis/include" else METIS_LIBS="-lmetis" METIS_INCS="" fi AC_CHECK_LIB([metis],[METIS_PartGraphKway], [have_metis="yes"], [have_metis="no"], $METIS_LIBS) # Recent METIS releases have an external GKlib, test for that before # giving up. Assume sane and in the same directories. if test "x$have_metis" = "xno"; then if test "x$with_metis" != "xyes" -a "x$with_metis" != "x"; then METIS_LIBS="-L$with_metis/lib -lmetis -lGKlib" METIS_INCS="-I$with_metis/include" else METIS_LIBS="-lmetis -lGKlib" METIS_INCS="" fi AC_CHECK_LIB([metis],[METIS_PartGraphRecursive], [have_metis="yes"], [have_metis="no"], $METIS_LIBS) fi if test "$have_metis" = "yes"; then AC_DEFINE([HAVE_METIS],1,[The METIS library is present.]) else AC_MSG_ERROR("Failed to find a METIS library") fi fi AC_SUBST([METIS_LIBS]) AC_SUBST([METIS_INCS]) AM_CONDITIONAL([HAVEMETIS],[test -n "$METIS_LIBS"]) # Check for ParMETIS note we can have both as ParMETIS uses METIS. have_parmetis="no" AC_ARG_WITH([parmetis], [AS_HELP_STRING([--with-parmetis=PATH], [root directory where ParMETIS is installed @<:@yes/no@:>@] )], [with_parmetis="$withval"], [with_parmetis="no"] ) if test "x$with_parmetis" != "xno"; then # Check if we have ParMETIS. if test "x$with_parmetis" != "xyes" -a "x$with_parmetis" != "x"; then PARMETIS_LIBS="-L$with_parmetis/lib -lparmetis" PARMETIS_INCS="-I$with_parmetis/include" else PARMETIS_LIBS="-lparmetis" PARMETIS_INCS="" fi AC_CHECK_LIB([parmetis],[ParMETIS_V3_RefineKway], [have_parmetis="yes"], [have_parmetis="no"], $PARMETIS_LIBS) # A build may use an external METIS library, check for that. if test "$have_parmetis" = "no"; then if test "x$with_parmetis" != "xyes" -a "x$with_parmetis" != "x"; then PARMETIS_LIBS="-L$with_parmetis/lib -lparmetis -lmetis" PARMETIS_INCS="-I$with_parmetis/include" else PARMETIS_LIBS="-lparmetis -lmetis" PARMETIS_INCS="" fi # Note use different function to avoid caching of first check. AC_CHECK_LIB([parmetis],[ParMETIS_V3_PartKway], [have_parmetis="yes"], [have_parmetis="no"], [$METIS_LIBS $PARMETIS_LIBS]) fi # A build may use an external GKlib in later releases... if test "$have_parmetis" = "no"; then if test "x$with_parmetis" != "xyes" -a "x$with_parmetis" != "x"; then PARMETIS_LIBS="-L$with_parmetis/lib -lparmetis -lGKlib" PARMETIS_INCS="-I$with_parmetis/include" else PARMETIS_LIBS="-lparmetis -lGKlib" PARMETIS_INCS="" fi # Note use different function to avoid caching of first check. AC_CHECK_LIB([parmetis],[ParMETIS_V3_PartGeom], [have_parmetis="yes"], [have_parmetis="no"], [$METIS_LIBS $PARMETIS_LIBS]) fi if test "$have_parmetis" = "yes"; then AC_DEFINE([HAVE_PARMETIS],1,[The ParMETIS library is present.]) else AC_MSG_ERROR("Failed to find a ParMETIS library") fi fi AC_SUBST([PARMETIS_LIBS]) AC_SUBST([PARMETIS_INCS]) AM_CONDITIONAL([HAVEPARMETIS],[test -n "$PARMETIS_LIBS"]) # METIS fixed width integer printing can require this, so define. Only needed # for some non C99 compilers, i.e. C++ pre C++11. AH_VERBATIM([__STDC_FORMAT_MACROS], [/* Needed to get PRIxxx macros from stdint.h when not using C99 */ #ifndef __STDC_FORMAT_MACROS #define __STDC_FORMAT_MACROS 1 #endif]) # Check for FFTW. We test for this in the standard directories by default, # and only disable if using --with-fftw=no or --without-fftw. When a value # is given FFTW must be found. # If FFTW is found, we check whether this is the threaded or openmp version. have_fftw="no" have_mpi_fftw="no" have_threaded_fftw="no" have_openmp_fftw="no" AC_ARG_WITH([fftw], [AS_HELP_STRING([--with-fftw=PATH], [root directory where fftw is installed @<:@yes/no@:>@] )], [with_fftw="$withval"], [with_fftw="test"] ) if test "x$with_fftw" != "xno"; then # Was FFTW's location specifically given? if test "x$with_fftw" != "xyes" -a "x$with_fftw" != "xtest" -a "x$with_fftw" != "x"; then FFTW_LIBS="-L$with_fftw/lib -lfftw3" FFTW_INCS="-I$with_fftw/include" else FFTW_LIBS="-lfftw3" FFTW_INCS="" fi # FFTW is not specified, so just check if we have it. if test "x$with_fftw" = "xtest"; then AC_CHECK_LIB([fftw3],[fftw_malloc],[have_fftw="yes"],[have_fftw="no"],$FFTW_LIBS) if test "x$have_fftw" != "xno"; then AC_DEFINE([HAVE_FFTW],1,[The FFTW library appears to be present.]) fi # FFTW was specified, check that it was a valid location. else AC_CHECK_LIB([fftw3],[fftw_malloc], AC_DEFINE([HAVE_FFTW],1,[The FFTW library appears to be present.]), AC_MSG_ERROR(something is wrong with the FFTW library!), $FFTW_LIBS) have_fftw="yes" fi # FFTW was requested not to be used. if test "$have_fftw" = "no"; then FFTW_LIBS="" FFTW_INCS="" fi # Now, check whether we have the threaded version of FFTW if test "x$have_fftw" = "xyes"; then # Was FFTW's location specifically given? if test "x$with_fftw" != "xyes" -a "x$with_fftw" != "xtest" -a "x$with_fftw" != "x"; then FFTW_THREADED_LIBS="-L$with_fftw/lib -lfftw3_threads -lfftw3" FFTW_THREADED_INCS="-I$with_fftw/include" else FFTW_THREADED_LIBS="-lfftw3_threads -lfftw3" FFTW_THREADED_INCS="" fi # Verify that the library is threaded AC_CHECK_LIB([fftw3],[fftw_init_threads],[have_threaded_fftw="yes"], [have_threaded_fftw="no"], $FFTW_THREADED_LIBS) # If found, update things if test "x$have_threaded_fftw" = "xyes"; then AC_DEFINE([HAVE_THREADED_FFTW],1,[The threaded FFTW library appears to be present.]) FFTW_LIBS=$FFTW_THREADED_LIBS FFTW_INCS=$FFTW_THREADED_INCS else # Same checks for OpenMP if preferred threaded failed. if test "x$with_fftw" != "xyes" -a "x$with_fftw" != "xtest" -a "x$with_fftw" != "x"; then FFTW_OPENMP_LIBS="-L$with_fftw/lib -lfftw3_omp -lfftw3" FFTW_OPENMP_INCS="-I$with_fftw/include" else FFTW_OPENMP_LIBS="-lfftw3_omp -lfftw3" FFTW_OPENMP_INCS="" fi # Verify that the library works. Note requires AX_OPENMP called above. old_CFLAGS=$CFLAGS CFLAGS="$CFLAGS $OPENMP_CFLAGS" AC_CHECK_LIB([fftw3],[fftw_init_threads],[have_openmp_fftw="yes"], [have_openmp_fftw="no"], $FFTW_OPENMP_LIBS) # If found, update things if test "x$have_openmp_fftw" = "xyes"; then # Note OpenMP and pthreads use mostly the same calls, so define both. AC_DEFINE([HAVE_THREADED_FFTW],1,[The threaded OpenMP FFTW library appears to be present.]) AC_DEFINE([HAVE_OPENMP_FFTW],1,[The OpenMP FFTW library appears to be present.]) FFTW_LIBS=$FFTW_OPENMP_LIBS FFTW_INCS=$FFTW_OPENMP_INCS else # Put CFLAGS back. CFLAGS=$old_CFLAGS fi fi fi # If MPI mesh gravity is not disabled, check whether we have the MPI version of FFTW if test "x$enable_mpi" = "xyes" -a "x$with_mpi_mesh_gravity" != "xno"; then # Was FFTW's location specifically given? if test "x$with_fftw" != "xyes" -a "x$with_fftw" != "xtest" -a "x$with_fftw" != "x"; then FFTW_MPI_LIBS="-L$with_fftw/lib -lfftw3_mpi -lfftw3" FFTW_MPI_INCS="-I$with_fftw/include" else FFTW_MPI_LIBS="-lfftw3_mpi -lfftw3" FFTW_MPI_INCS="" fi # Verify that the library has MPI support AC_CHECK_LIB([fftw3],[fftw_mpi_init],[have_mpi_fftw="yes"], [have_mpi_fftw="no"], $FFTW_MPI_LIBS) # If found, update things. Don't add MPI flags to FFTW_*_LIBS etc because # we don't want to link the MPI library into the non-MPI swift executable. if test "x$have_mpi_fftw" = "xyes"; then AC_DEFINE([HAVE_MPI_FFTW],1,[The MPI FFTW library appears to be present.]) else if test "x$with_mpi_mesh_gravity" = "xyes" ; then AC_MSG_ERROR("Unable to find FFTW MPI library for MPI mesh gravity") fi fi fi fi AC_ARG_WITH([arm-fftw], [AS_HELP_STRING([--with-arm-fftw=PATH], [root directory where arm fft library is installed @<:@yes/no@:>@] )], [with_arm_fftw="$withval"], [with_arm_fftw=no] ) have_arm_fftw="no" if test "x$with_arm_fftw" != "xno"; then # Was FFTW's location specifically given? if test "x$with_arm_fftw" != "xyes" -a "x$with_arm_fftw" != "xtest" -a "x$with_arm_fftw" != "x"; then FFTW_LIBS="-L$with_arm_fftw/lib -larmpl_lp64" FFTW_INCS="-I$with_arm_fftw/include" else FFTW_LIBS="-larmpl_lp64" FFTW_INCS="" fi # FFTW is not specified, so just check if we have it. if test "x$with_arm_fftw" = "xtest"; then AC_CHECK_LIB([armpl_lp64],[fftw_malloc],[have_fftw="yes"],[have_fftw="no"],$FFTW_LIBS) if test "x$have_arm_fftw" != "xno"; then AC_DEFINE([HAVE_FFTW],1,[The FFTW library appears to be present.]) fi # FFTW was specified, check that it was a valid location. else AC_CHECK_LIB([armpl_lp64],[fftw_malloc], AC_DEFINE([HAVE_FFTW],1,[The FFTW library appears to be present.]), AC_MSG_ERROR(something is wrong with the FFTW library!), $FFTW_LIBS) fi # FFTW was requested not to be used. if test "$have_arm_fftw" = "no"; then FFTW_LIBS="" FFTW_INCS="" fi # Now, check whether we have the threaded version of FFTW if test "x$have_arm_fftw" = "xyes"; then # Was FFTW's location specifically given? if test "x$with_arm_fftw" != "xyes" -a "x$with_arm_fftw" != "xtest" -a "x$with_arm_fftw" != "x"; then FFTW_THREADED_LIBS="-L$with_arm_fftw/lib -larmpl_lp64_threads -larmpl_lp64" FFTW_THREADED_INCS="-I$with_arm_fftw/include" else FFTW_THREADED_LIBS="-larmpl_lp64_threads -larmpl_lp64" FFTW_THREADED_INCS="" fi # Verify that the library is threaded AC_CHECK_LIB([armpl_lp64],[fftw_init_threads],[have_threaded_fftw="yes"], [have_threaded_fftw="no"], $FFTW_THREADED_LIBS) # If found, update things if test "x$have_threaded_fftw" = "xyes"; then AC_DEFINE([HAVE_THREADED_FFTW],1,[The threaded FFTW library appears to be present.]) FFTW_LIBS=$FFTW_THREADED_LIBS FFTW_INCS=$FFTW_THREADED_INCS have_fftw="yes - ARM - threaded" fi fi fi AC_SUBST([FFTW_LIBS]) AC_SUBST([FFTW_INCS]) AM_CONDITIONAL([HAVEFFTW],[test -n "$FFTW_LIBS"]) AC_SUBST([FFTW_MPI_LIBS]) AC_SUBST([FFTW_MPI_INCS]) AM_CONDITIONAL([HAVEMPIFFTW],[test -n "$FFTW_MPI_LIBS"]) # Check for -lprofiler usually part of the gperftools along with tcmalloc. have_profiler="no" AC_ARG_WITH([profiler], [AS_HELP_STRING([--with-profiler=PATH], [use cpu profiler library or specify the directory with lib @<:@yes/no@:>@] )], [with_profiler="$withval"], [with_profiler="no"] ) if test "x$with_profiler" != "xno"; then if test "x$with_profiler" != "xyes" -a "x$with_profiler" != "x"; then proflibs="-L$with_profiler -lprofiler" else proflibs="-lprofiler" fi AC_CHECK_LIB([profiler],[ProfilerFlush], [have_profiler="yes" AC_DEFINE([WITH_PROFILER],1,[Link against the gperftools profiling library.])], [have_profiler="no"], $proflibs) if test "$have_profiler" = "yes"; then PROFILER_LIBS="$proflibs" else PROFILER_LIBS="" fi fi AC_SUBST([PROFILER_LIBS]) AM_CONDITIONAL([HAVEPROFILER],[test -n "$PROFILER_LIBS"]) # Check for special allocators have_special_allocator="no" # Check for tcmalloc a fast malloc that is part of the gperftools. have_tcmalloc="no" AC_ARG_WITH([tcmalloc], [AS_HELP_STRING([--with-tcmalloc=PATH], [use tcmalloc library or specify the directory with lib @<:@yes/no@:>@] )], [with_tcmalloc="$withval"], [with_tcmalloc="no"] ) if test "x$with_tcmalloc" != "xno" -a "x$have_special_allocator" != "xno"; then AC_MSG_ERROR("Cannot activate more than one alternative malloc library") fi if test "x$with_tcmalloc" != "xno"; then if test "x$with_tcmalloc" != "xyes" -a "x$with_tcmalloc" != "x"; then tclibs="-L$with_tcmalloc -ltcmalloc" else tclibs="-ltcmalloc" fi AC_CHECK_LIB([tcmalloc],[tc_cfree],[have_tcmalloc="yes"],[have_tcmalloc="no"], $tclibs) # Could just have the minimal version. if test "$have_tcmalloc" = "no"; then if test "x$with_tcmalloc" != "xyes" -a "x$with_tcmalloc" != "x"; then tclibs="-L$with_tcmalloc -ltcmalloc_minimal" else tclibs="-ltcmalloc_minimal" fi AC_CHECK_LIB([tcmalloc],[tc_cfree],[have_tcmalloc="yes"],[have_tcmalloc="no"], $tclibs) fi if test "$have_tcmalloc" = "yes"; then TCMALLOC_LIBS="$tclibs" AC_DEFINE([HAVE_TCMALLOC],1,[The tcmalloc library appears to be present.]) have_special_allocator="tcmalloc" # Prevent compilers that replace the calls with built-ins (GNU 99) from doing so. case "$ax_cv_c_compiler_vendor" in intel | gnu | clang | oneapi) CFLAGS="$CFLAGS -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free" ;; esac else TCMALLOC_LIBS="" fi fi AC_SUBST([TCMALLOC_LIBS]) AM_CONDITIONAL([HAVETCMALLOC],[test -n "$TCMALLOC_LIBS"]) # Check for jemalloc another fast malloc that is good with contention. have_jemalloc="no" AC_ARG_WITH([jemalloc], [AS_HELP_STRING([--with-jemalloc=PATH], [use jemalloc library or specify the directory with lib @<:@yes/no@:>@] )], [with_jemalloc="$withval"], [with_jemalloc="no"] ) if test "x$with_jemalloc" != "xno" -a "x$have_special_allocator" != "xno"; then AC_MSG_ERROR("Cannot activate more than one alternative malloc library") fi if test "x$with_jemalloc" != "xno"; then if test "x$with_jemalloc" != "xyes" -a "x$with_jemalloc" != "x"; then jelibs="-L$with_jemalloc -ljemalloc" else jelibs="-ljemalloc" fi AC_CHECK_LIB([jemalloc],[malloc_usable_size],[have_jemalloc="yes"],[have_jemalloc="no"], $jelibs) if test "$have_jemalloc" = "yes"; then JEMALLOC_LIBS="$jelibs" AC_DEFINE([HAVE_JEMALLOC],1,[The jemalloc library appears to be present.]) have_special_allocator="jemalloc" # Prevent compilers that replace the regular calls with built-ins (GNU 99) from doing so. case "$ax_cv_c_compiler_vendor" in intel | gnu | clang | oneapi) CFLAGS="$CFLAGS -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free" ;; esac else JEMALLOC_LIBS="" fi fi AC_SUBST([JEMALLOC_LIBS]) AM_CONDITIONAL([HAVEJEMALLOC],[test -n "$JEMALLOC_LIBS"]) # Check for tbbmalloc, Intel's fast and parallel allocator have_tbbmalloc="no" AC_ARG_WITH([tbbmalloc], [AS_HELP_STRING([--with-tbbmalloc=PATH], [use tbbmalloc library or specify the directory with lib @<:@yes/no@:>@] )], [with_tbbmalloc="$withval"], [with_tbbmalloc="no"] ) if test "x$with_tbbmalloc" != "xno" -a "x$have_special_allocator" != "xno"; then AC_MSG_ERROR("Cannot activate more than one alternative malloc library") fi if test "x$with_tbbmalloc" != "xno"; then if test "x$with_tbbmalloc" != "xyes" -a "x$with_tbbmalloc" != "x"; then tbblibs="-L$with_tbbmalloc -ltbbmalloc_proxy -ltbbmalloc" else tbblibs="-ltbbmalloc_proxy -ltbbmalloc" fi AC_CHECK_LIB([tbbmalloc],[scalable_malloc],[have_tbbmalloc="yes"],[have_tbbmalloc="no"], $tbblibs) if test "$have_tbbmalloc" = "yes"; then TBBMALLOC_LIBS="$tbblibs" AC_DEFINE([HAVE_TBBMALLOC],1,[The TBBmalloc library appears to be present.]) have_special_allocator="TBBmalloc" # Prevent compilers that replace the calls with built-ins (GNU 99) from doing so. case "$ax_cv_c_compiler_vendor" in intel | gnu | clang | oneapi) CFLAGS="$CFLAGS -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free" ;; esac else TBBMALLOC_LIBS="" fi fi AC_SUBST([TBBMALLOC_LIBS]) AM_CONDITIONAL([HAVETBBMALLOC],[test -n "$TBBMALLOC_LIBS"]) # check for a random seed AC_ARG_WITH([random-seed], [AS_HELP_STRING([--with-random-seed=SHORT INT], [Set the random seed.] )], [with_random_seed="$withval"], [with_random_seed="0"] ) AC_DEFINE_UNQUOTED([SWIFT_RANDOM_SEED_XOR], [$with_random_seed],[Value of the random seed.]) # Check for HDF5. This is required. AX_LIB_HDF5 if test "$with_hdf5" != "yes"; then AC_MSG_ERROR([Could not find a working HDF5 library]) fi # We want to know if this HDF5 supports MPI and whether we should use it. # The default is to use MPI support if it is available, i.e. this is # a parallel HDF5. have_parallel_hdf5="no" if test "$with_hdf5" = "yes"; then AC_ARG_ENABLE([parallel-hdf5], [AS_HELP_STRING([--enable-parallel-hdf5], [Enable parallel HDF5 library MPI functions if available. @<:@yes/no@:>@] )], [enable_parallel_hdf5="$enableval"], [enable_parallel_hdf5="yes"] ) if test "$enable_parallel_hdf5" = "yes"; then AC_MSG_CHECKING([for HDF5 parallel support]) # Check if the library is capable, the header should define H5_HAVE_PARALLEL. old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $HDF5_CPPFLAGS" AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ #include "hdf5.h" #ifndef H5_HAVE_PARALLEL # error macro not defined #endif ]])], [parallel="yes"], [parallel="no"]) if test "$parallel" = "yes"; then have_parallel_hdf5="yes" AC_DEFINE([HAVE_PARALLEL_HDF5],1,[HDF5 library supports parallel access]) fi AC_MSG_RESULT($parallel) CPPFLAGS="$old_CPPFLAGS" fi fi AM_CONDITIONAL([HAVEPARALLELHDF5],[test "$have_parallel_hdf5" = "yes"]) # Check for grackle. have_grackle="no" AC_ARG_WITH([grackle], [AS_HELP_STRING([--with-grackle=PATH], [root directory where grackle is installed @<:@yes/no@:>@] )], [with_grackle="$withval"], [with_grackle="no"] ) if test "x$with_grackle" != "xno"; then AC_PROG_FC AC_FC_LIBRARY_LDFLAGS if test "x$with_grackle" != "xyes" -a "x$with_grackle" != "x"; then GRACKLE_LIBS="-L$with_grackle/lib -lgrackle" GRACKLE_INCS="-I$with_grackle/include" else GRACKLE_LIBS="-lgrackle" GRACKLE_INCS="" fi have_grackle="yes" AS_VAR_APPEND([GRACKLE_LIBS], ["$FCLIBS"]) AC_CHECK_LIB( [grackle], [initialize_chemistry_data], [AC_DEFINE([HAVE_GRACKLE],1,[The GRACKLE library appears to be present.]) AC_DEFINE([CONFIG_BFLOAT_8],1,[Use doubles in grackle]) ], [AC_MSG_ERROR(Cannot find grackle library! Please consult the documentation for specific version required.)], [$GRACKLE_LIBS]) AC_CHECK_LIB( [grackle], [set_velocity_units], [ : ], # : means do nothing. Leaving this argument empty triggers AC default behaviour, which breaks stuff down the line. [AC_MSG_ERROR(Wrong grackle library version. Please consult the documentation for specifics.)], [$GRACKLE_LIBS]) AC_CHECK_LIB( [grackle], [get_grackle_version], [ : ], # : means do nothing [AC_MSG_ERROR(Wrong grackle library version. Please consult the documentation for specifics.)], [$GRACKLE_LIBS]) fi AC_SUBST([GRACKLE_LIBS]) AC_SUBST([GRACKLE_INCS]) AM_CONDITIONAL([HAVEGRACKLE],[test -n "$GRACKLE_LIBS"]) # Check for VELOCIraptor, non-MPI. have_velociraptor="no" AC_ARG_WITH([velociraptor], [AS_HELP_STRING([--with-velociraptor=PATH], [Directory where velociraptor library exists @<:@yes/no@:>@] )], [with_velociraptor="$withval"], [with_velociraptor="no"] ) if test "x$with_velociraptor" != "xno"; then if test "x$with_velociraptor" != "xyes" -a "x$with_velociraptor" != "x"; then VELOCIRAPTOR_LIBS="-L$with_velociraptor -lvelociraptor -lstdc++ -lhdf5" CFLAGS="$CFLAGS $OPENMP_CFLAGS" else VELOCIRAPTOR_LIBS="" fi have_velociraptor="yes" AS_VAR_APPEND([VELOCIRAPTOR_LIBS], ["$FCLIBS"]) AC_CHECK_LIB( [velociraptor], [InitVelociraptor], [AC_DEFINE([HAVE_VELOCIRAPTOR],1,[The non-MPI VELOCIraptor library appears to be present.])], [AC_MSG_ERROR(Cannot find non-MPI VELOCIraptor library at $with_velociraptor or incompatible HDF5 library loaded.)], [$VELOCIRAPTOR_LIBS $HDF5_LDFLAGS $HDF5_LIBS $GSL_LIBS] ) fi AC_SUBST([VELOCIRAPTOR_LIBS]) AM_CONDITIONAL([HAVEVELOCIRAPTOR],[test -n "$VELOCIRAPTOR_LIBS"]) # Now that we found VELOCIraptor, let's check how it was compiled. if test "$have_velociraptor" = "yes"; then AC_CHECK_LIB( [velociraptor], [VR_NOMASS], [AC_DEFINE([HAVE_VELOCIRAPTOR_WITH_NOMASS],1,[The VELOCIraptor library has been compiled with the NOMASS option. Only useful if running a uniform box.])], [AC_MSG_RESULT(VELOCIraptor not compiled to so as to *not* store masses per particle.)], [$VELOCIRAPTOR_LIBS $HDF5_LDFLAGS $HDF5_LIBS $GSL_LIBS] ) fi # Check for MPI VELOCIraptor, same as above. have_mpi_velociraptor="no" AC_ARG_WITH([velociraptor-mpi], [AS_HELP_STRING([--with-velociraptor-mpi=PATH], [Directory where MPI version of velociraptor library exists @<:@yes/no@:>@] )], [with_mpi_velociraptor="$withval"], [with_mpi_velociraptor="no"] ) if test "x$with_mpi_velociraptor" != "xno"; then if test "x$with_mpi_velociraptor" != "xyes" -a "x$with_mpi_velociraptor" != "x"; then VELOCIRAPTOR_MPI_LIBS="-L$with_mpi_velociraptor -lvelociraptor -lmpi -lstdc++ -lhdf5" CFLAGS="$CFLAGS -fopenmp" else VELOCIRAPTOR_MPI_LIBS="" fi have_mpi_velociraptor="yes" AS_VAR_APPEND([VELOCIRAPTOR_MPI_LIBS], ["$FCLIBS"]) AC_CHECK_LIB( [velociraptor], [InitVelociraptor], [AC_DEFINE([HAVE_MPI_VELOCIRAPTOR],1,[The MPI VELOCIraptor library appears to be present.])], [AC_MSG_ERROR(Cannot find MPI VELOCIraptor library at $with_mpi_velociraptor or incompatible HDF5 library loaded.)], [$VELOCIRAPTOR_MPI_LIBS $HDF5_LDFLAGS $HDF5_LIBS $GSL_LIBS] ) fi AC_SUBST([VELOCIRAPTOR_MPI_LIBS]) AM_CONDITIONAL([HAVEVELOCIRAPTOR],[test -n "$VELOCIRAPTOR_MPI_LIBS"]) # Let's check how this one was compiled. if test "$have_mpi_velociraptor" = "yes"; then AC_CHECK_LIB( [velociraptor], [VR_NOMASS], [AC_DEFINE([HAVE_VELOCIRAPTOR_WITH_NOMASS],1,[The MPI VELOCIraptor library has been compiled with the NOMASS option. Only useful if running a uniform box.])], [AC_MSG_RESULT(VELOCIraptor not compiled to so as to *not* store masses per particle.)], [$VELOCIRAPTOR_MPI_LIBS $HDF5_LDFLAGS $HDF5_LIBS $GSL_LIBS] ) fi # If we have one library, but not the other then use that for both. if test "$have_mpi_velociraptor" = "yes" -a "$have_velociraptor" != "yes"; then VELOCIRAPTOR_LIBS="$VELOCIRAPTOR_MPI_LIBS" AC_SUBST([VELOCIRAPTOR_LIBS]) elif test "$have_velociraptor" = "yes" -a "$have_mpi_velociraptor" != "yes"; then VELOCIRAPTOR_MPI_LIBS="$VELOCIRAPTOR_LIBS" AC_SUBST([VELOCIRAPTOR_MPI_LIBS]) fi # Check for dummy VELOCIraptor. AC_ARG_ENABLE([dummy-velociraptor], [AS_HELP_STRING([--enable-dummy-velociraptor], [Enable dummy velociraptor compilation @<:@yes/no@:>@] )], [enable_dummy_velociraptor="$enableval"], [enable_dummy_velociraptor="no"] ) if test "$enable_dummy_velociraptor" = "yes"; then have_velociraptor="yes" AC_DEFINE(HAVE_VELOCIRAPTOR,1,[The VELOCIraptor library appears to be present.]) AC_DEFINE(HAVE_DUMMY_VELOCIRAPTOR,1,[The dummy VELOCIraptor library is present.]) fi # Check if we should be writing out most bound "orphan" particles from Velociraptor AC_ARG_ENABLE([velociraptor-orphans], [AS_HELP_STRING([--enable-velociraptor-orphans], [Enable output of orphan particles @<:@yes/no@:>@] )], [enable_velociraptor_orphans="$enableval"], [enable_velociraptor_orphans="no"] ) if test "$enable_velociraptor_orphans" = "yes"; then AC_DEFINE([HAVE_VELOCIRAPTOR_ORPHANS], 1, [Orphan particles should be written out]) fi # Check if lightcone output is on. AC_ARG_ENABLE([lightcone], [AS_HELP_STRING([--enable-lightcone], [Activate lightcone outputs.], )], [enable_lightcone="$enableval"], [enable_lightcone="no"] ) if test "$enable_lightcone" = "yes"; then # Check for healpix for lightcone maps. May require cfitsio # This sets CHEALPIX_LIBS and CHEALPIX_CFLAGS and #defines HAVE_CHEALPIX. # It also adds a --with-cfitsio flag in case cfitsio is installed in a # different location from healpix. GV_FIND_LIBRARY([cfitsio], [CFITSIO], [cfitsio], [cfitsio], [ffclos]) TMP_LIBS=${LIBS} LIBS="${CFITSIO_LIBS} ${LIBS}" GV_FIND_LIBRARY([chealpix], [CHEALPIX], [chealpix], [chealpix], [ang2vec]) LIBS=${TMP_LIBS} have_chealpix=${USE_CHEALPIX} CHEALPIX_LIBS="${CHEALPIX_LIBS} ${CFITSIO_LIBS}" AC_DEFINE([WITH_LIGHTCONE], 1, [Enable lightcone outputs]) if test "$have_chealpix" != "yes"; then AC_MSG_ERROR([Lightcone output requires the HEALPix C API. Please configure with --with-chealpix.]) fi # Also need to make sure we have GSL if we're making lightcones if test "$have_gsl" != "yes"; then AC_MSG_ERROR([Lightcone output requires GSL. Please configure with --with-gsl.]) fi else have_chealpix="no" fi # Check for floating-point exception trapping support. # # We do not allow this to be enabled when optimizing as compilers do operations # which are unsafe for speed. This can result in FPEs on valid vector # operations when additional padding is used. This has been seen on clang and # GCC based compilers. if test "$enable_opt" != "yes"; then if test "$ax_cv_c_compiler_vendor" != "oneapi"; then AC_CHECK_FUNC(feenableexcept, AC_DEFINE([HAVE_FE_ENABLE_EXCEPT],[1], [Defined if floating-point exceptions can be trapped.])) else # Default optimization for Intel is too high , -O2, so we also need # to have debugging enabled which uses -O0 as well. if test "$ax_enable_debug" != "no"; then AC_CHECK_FUNC(feenableexcept, AC_DEFINE([HAVE_FE_ENABLE_EXCEPT],[1], [Defined if floating-point exceptions can be trapped.])) fi fi fi # Check for setaffinity. AC_CHECK_FUNC(pthread_setaffinity_np, AC_DEFINE([HAVE_SETAFFINITY],[1], [Defined if pthread_setaffinity_np exists.]) ) AM_CONDITIONAL(HAVESETAFFINITY, [test "$ac_cv_func_pthread_setaffinity_np" = "yes"]) # If available check for NUMA as well. There is a problem with the headers of # this library, mainly that they do not pass the strict prototypes check when # installed outside of the system directories. So we actually do this check # in two phases. The basic ones first (before strict-prototypes is added to CFLAGS). have_numa="no" AC_ARG_WITH([numa], [AS_HELP_STRING([--with-numa=PATH], [Directory where the NUMA library exists @<:@yes/no@:>@] )], [with_numa="$withval"], [with_numa="yes"] ) if test "$ac_cv_func_pthread_setaffinity_np" = "yes" -a "x$with_numa" != "xno"; then if test "x$with_numa" != "xyes" -a "x$with_numa" != "x"; then NUMA_LIBS="-L$with_numa/lib -lnuma" NUMA_INCS="-I$with_numa/include" else NUMA_LIBS="-lnuma" NUMA_INCS="" fi # Test for header file. old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $NUMA_INCS" AC_CHECK_HEADER([numa.h]) CPPFLAGS="$old_CPPFLAGS" if test "$ac_cv_header_numa_h" = "yes"; then # If NUMA location is specified check if we have it. if test "x$with_numa" != "xyes" -a "x$with_numa" != "x"; then AC_CHECK_LIB([numa],[numa_available], AC_DEFINE([HAVE_LIBNUMA],1,[The NUMA library appears to be present.]), AC_MSG_ERROR(something is wrong with the NUMA library!), $NUMA_LIBS) have_numa="yes" else AC_CHECK_LIB([numa],[numa_available],[have_numa="yes"],[have_numa="no"],$NUMA_LIBS) if test "x$have_numa" != "xno"; then AC_DEFINE([HAVE_LIBNUMA],1,[The NUMA library appears to be present.]) fi fi fi # We can live without this. if test "$have_numa" = "no"; then NUMA_LIBS="" fi fi AC_SUBST([NUMA_LIBS]) # Check for Sundials (required for the SPHM1RT library). # There is a problems with the headers of this library # as they do not pass the strict prototypes check when # installed outside of the system directories. So we # need to do this check in two phases. have_sundials="no" SUNDIALS_LIBS="" SUNDIALS_INCS="" AC_ARG_WITH([sundials], [AS_HELP_STRING([--with-sundials=PATH], [root directory where sundials is installed @<:@yes/no@:>@] )], [with_sundials="$withval"], [with_sundials="no"] ) if test "x$with_sundials" != "xno"; then AC_PROG_FC AC_FC_LIBRARY_LDFLAGS if test "x$with_sundials" != "xyes" -a "x$with_sundials" != "x"; then SUNDIALS_LIBS="-L$with_sundials/lib -lsundials_cvode -lsundials_nvecserial -lsundials_sunlinsoldense -lsundials_sunmatrixdense" SUNDIALS_INCS="-I$with_sundials/include" else SUNDIALS_LIBS="-lsundials_cvode -lsundials_nvecserial -lsundials_sunlinsoldense -lsundials_sunmatrixdense" SUNDIALS_INCS="" fi AC_CHECK_LIB([sundials_cvode], [CVode], [have_sundials="yes"], [have_sundials="no"], $SUNDIALS_LIBS) if test "$have_sundials" == "yes"; then AC_DEFINE([HAVE_SUNDIALS],1,[The SUNDIALS library is present.]) else if test "x$with_sundials" != "xyes" -a "x$with_sundials" != "x"; then # It might be that the libraries are in # /lib64 rather than /lib SUNDIALS_LIBS="-L$with_sundials/lib64 -lsundials_cvode -lsundials_nvecserial -lsundials_sunlinsoldense -lsundials_sunmatrixdense" # unset cached result of previous AC_CHECK_LIB unset ac_cv_lib_sundials_cvode_CVode AC_CHECK_LIB([sundials_cvode], [CVode], [have_sundials="yes"], [have_sundials="no"], $SUNDIALS_LIBS) if test "$have_sundials" == "yes"; then AC_DEFINE([HAVE_SUNDIALS],1,[The SUNDIALS library is present.]) else AC_MSG_ERROR("Failed to find a SUNDIALS library") fi else AC_MSG_ERROR("Failed to find a SUNDIALS library") fi fi fi AC_SUBST([SUNDIALS_LIBS]) # Check for Intel and PowerPC intrinsics header optionally used by vector.h. AC_CHECK_HEADERS([immintrin.h], [], [], [#ifdef HAVE_IMMINTRIN_H # include #endif ]) AC_CHECK_HEADERS([altivec.h], [], [], [#ifdef HAVE_ALTIVEC_H # include #endif ]) # Check for timing functions needed by cycle.h. AC_CHECK_HEADERS_ONCE([sys/time.h]) if test $ac_cv_header_sys_time_h = yes; then AC_DEFINE([TIME_WITH_SYS_TIME],[1],[Define to 1 if you can safely include both and . This macro is obsolete.]) fi AC_CHECK_HEADERS([sys/time.h], [], [], [#ifdef HAVE_SYS_TIME_H # include #endif ]) AC_CHECK_HEADERS([c_asm.h], [], [], [#ifdef HAVE_C_ASM_H # include #endif ]) AC_CHECK_HEADERS([intrinsics.h], [], [], [#ifdef HAVE_INTRINSICS_H # include #endif ]) AC_CHECK_HEADERS([mach/mach_time.h], [], [], [#ifdef HAVE_MACH_MACH_TIME_H # include #endif ]) AC_CHECK_TYPE([hrtime_t],[AC_DEFINE(HAVE_HRTIME_T, 1, [Define to 1 if hrtime_t is defined in ])],, [#if HAVE_SYS_TIME_H #include #endif]) AC_CHECK_FUNCS([gethrtime read_real_time time_base_to_time clock_gettime mach_absolute_time]) AC_MSG_CHECKING([for _rtc intrinsic]) rtc_ok=yes AC_LINK_IFELSE([AC_LANG_PROGRAM( [[#ifdef HAVE_INTRINSICS_H #include #endif]], [[_rtc()]])], [AC_DEFINE(HAVE__RTC,1,[Define if you have the UNICOS _rtc() intrinsic.])],[rtc_ok=no]) AC_MSG_RESULT($rtc_ok) # Special timers for the ARM v7 platforms (taken from FFTW-3 to match their cycle.h) AC_ARG_ENABLE(armv7a-cntvct, [AS_HELP_STRING([--enable-armv7a-cntvct],[enable the cycle counter on Armv7a via the CNTVCT register])], have_armv7acntvct=$enableval) if test "$have_armv7acntvct"x = "yes"x; then AC_DEFINE(HAVE_ARMV7A_CNTVCT,1,[Define if you have enabled the CNTVCT cycle counter on ARMv7a]) fi AC_ARG_ENABLE(armv7a-pmccntr, [AS_HELP_STRING([--enable-armv7a-pmccntr],[enable the cycle counter on Armv7a via the PMCCNTR register])], have_armv7apmccntr=$enableval) if test "$have_armv7apmccntr"x = "yes"x; then AC_DEFINE(HAVE_ARMV7A_PMCCNTR,1,[Define if you have enabled the PMCCNTR cycle counter on ARMv7a]) fi # Check if we have native exp10 and exp10f functions. If not fallback to our # implementations. On Apple/CLANG we have __exp10, so also check for that # if the compiler is clang. AC_CHECK_LIB([m],[exp10], [AC_DEFINE([HAVE_EXP10],1,[The exp10 function is present.])]) AC_CHECK_LIB([m],[exp10f], [AC_DEFINE([HAVE_EXP10F],1,[The exp10f function is present.])]) if test "$ax_cv_c_compiler_vendor" = "clang"; then AC_CHECK_LIB([m],[__exp10], [AC_DEFINE([HAVE___EXP10],1,[The __exp10 function is present.])]) AC_CHECK_LIB([m],[__exp10f], [AC_DEFINE([HAVE___EXP10F],1,[The __exp10f function is present.])]) fi # Check if we have native sincos and sincosf functions. If not fallback to our # implementations. On Apple/CLANG we have __sincos, so also check for that # if the compiler is clang. AC_CHECK_LIB([m],[sincos], [AC_DEFINE([HAVE_SINCOS],1,[The sincos function is present.])]) AC_CHECK_LIB([m],[sincosf], [AC_DEFINE([HAVE_SINCOSF],1,[The sincosf function is present.])]) if test "$ax_cv_c_compiler_vendor" = "clang"; then AC_CHECK_LIB([m],[__sincos], [AC_DEFINE([HAVE___SINCOS],1,[The __sincos function is present.])]) AC_CHECK_LIB([m],[__sincosf], [AC_DEFINE([HAVE___SINCOSF],1,[The __sincosf function is present.])]) fi # The aocc compiler has optimized maths libraries that we should use. Check # any clang for this support. Note do this after the basic check for maths # as we need to make sure -lm follows. Also note needs -Ofast or -ffast-math # so only when optimizing. if test "$enable_opt" = "yes" -a "$ax_cv_c_compiler_vendor" = "clang"; then have_almfast="yes" AC_CHECK_LIB([almfast],[amd_fastexp],[LIBS="-fveclib=AMDLIBM -fsclrlib=AMDLIBM -lalmfast -lamdlibm $LIBS"],[have_almfast="no"],[-lamdlibm -lm]) if test "$have_almfast" = "no"; then # Less optimized version. AC_CHECK_LIB([amdlibm],[sqrt],,,[-lm]) fi fi # Check for glibc extension backtrace(). AC_CHECK_FUNCS([backtrace backtrace_symbols]) # Add warning flags by default, if these can be used. Option =error adds # -Werror to GCC, clang and Intel. Note do this last as compiler tests may # become errors, if that's an issue don't use CFLAGS for these, use an AC_SUBST(). AC_ARG_ENABLE([compiler-warnings], [AS_HELP_STRING([--enable-compiler-warnings], [Enable compile time warning flags, if compiler is known @<:@error/no/yes)@:>@] )], [enable_warn="$enableval"], [enable_warn="error"] ) if test "$enable_warn" != "no"; then # AX_CFLAGS_WARN_ALL does not give good warning flags for the Intel compiler # We will do this by hand instead and only default to the macro for unknown compilers case "$ax_cv_c_compiler_vendor" in gnu | clang | oneapi) CFLAGS="$CFLAGS -Wall -Wextra -Wno-unused-parameter -Wshadow" ;; intel) CFLAGS="$CFLAGS -w2 -Wunused-variable -Wshadow" ;; *) AX_CFLAGS_WARN_ALL ;; esac # Add a "choke on warning" flag if it exists if test "$enable_warn" = "error"; then case "$ax_cv_c_compiler_vendor" in intel | clang | oneapi) CFLAGS="$CFLAGS -Werror" ;; gnu) # Fix for issue with IPO and GCC 14 CFLAGS="$CFLAGS -Werror -Wno-alloc-size-larger-than" ;; esac fi # We want strict-prototypes, but this must still work even if warnings # are an error. AX_CHECK_COMPILE_FLAG([-Wstrict-prototypes],[CFLAGS="$CFLAGS -Wstrict-prototypes"], [CFLAGS="$CFLAGS"],[$CFLAGS],[AC_LANG_SOURCE([int main(void){return 0;}])]) fi # Second part of the NUMA library checks. We now decide if we need to use # -isystem to get around the strict-prototypes problem. Assumes isystem # is available when strict-prototypes is. if test "$have_numa" != "no"; then if test "x$with_numa" != "xyes" -a "x$with_numa" != "x"; then case "$CFLAGS" in *strict-prototypes*) NUMA_INCS="-isystem$with_numa/include" # This may still fail if CPATH is used, so we check if the # headers are usable. AS_UNSET(ac_cv_header_numa_h) old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $NUMA_INCS" numa_failed="no" AC_CHECK_HEADER([numa.h],[numa_failed="no"], [numa_failed="yes"]) if test "$numa_failed" = "yes"; then AC_MSG_ERROR([Failed to compile the numa.h header file: you may need to set --enable-compiler-warnings to yes or no]) fi CPPFLAGS="$old_CPPFLAGS" ;; *) NUMA_INCS="-I$with_numa/include" ;; esac fi fi AC_SUBST([NUMA_INCS]) # Second part of the Sundials library checks. # We now decide if we need to use -isystem to # get around the strict-prototypes problem. Assumes # isystem is available when strict-prototypes is. if test "x$with_sundials" != "xno"; then if test "x$with_sundials" != "xyes" -a "x$with_sundials" != "x"; then case "$CFLAGS" in *strict-prototypes*) SUNDIALS_INCS="-isystem$with_sundials/include" ;; *) SUNDIALS_INCS="-I$with_sundials/include" ;; esac fi fi AC_SUBST([SUNDIALS_INCS]) # Various package configuration options. # Master subgrid options # If you add a restriction (e.g. no cooling, chemistry or hydro) # you will need to check for overwrite after reading the additional options. # As an example for this, see the call to AC_ARG_WITH for cooling. AC_ARG_WITH([subgrid], [AS_HELP_STRING([--with-subgrid=], [Master switch for subgrid methods. Inexperienced user should start here. Options are: @<:@none, GEAR, GEAR-G3, AGORA, QLA, QLA-EAGLE, EAGLE, EAGLE-XL, SPIN_JET_EAGLE default: none@:>@] )], [with_subgrid="$withval"], [with_subgrid=none] ) # Default values with_subgrid_cooling=none with_subgrid_chemistry=none with_subgrid_tracers=none with_subgrid_entropy_floor=none with_subgrid_pressure_floor=none with_subgrid_stars=none with_subgrid_star_formation=none with_subgrid_feedback=none with_subgrid_sink=none with_subgrid_extra_io=none case "$with_subgrid" in yes) AC_MSG_ERROR([Invalid option. A subgrid model must be chosen.]) ;; none) ;; GEAR) with_subgrid_cooling=grackle_0 with_subgrid_chemistry=GEAR_10 with_subgrid_pressure_floor=GEAR with_subgrid_stars=GEAR with_subgrid_star_formation=GEAR with_subgrid_feedback=GEAR with_subgrid_black_holes=none with_subgrid_sink=GEAR with_subgrid_extra_io=none enable_fof=no ;; GEAR-G3) with_subgrid_cooling=grackle_3 with_subgrid_chemistry=GEAR_10 with_subgrid_pressure_floor=none with_subgrid_stars=GEAR with_subgrid_star_formation=GEAR with_subgrid_feedback=GEAR with_subgrid_black_holes=none with_subgrid_sink=GEAR with_subgrid_extra_io=none enable_fof=no ;; AGORA) with_subgrid_cooling=grackle_0 with_subgrid_chemistry=AGORA with_subgrid_pressure_floor=GEAR with_subgrid_stars=GEAR with_subgrid_star_formation=GEAR with_subgrid_feedback=AGORA with_subgrid_black_holes=none with_subgrid_sink=none with_subgrid_extra_io=none enable_fof=no ;; QLA) with_subgrid_cooling=QLA with_subgrid_chemistry=QLA with_subgrid_tracers=none with_subgrid_entropy_floor=QLA with_subgrid_stars=basic with_subgrid_star_formation=QLA with_subgrid_feedback=none with_subgrid_black_holes=none with_subgrid_sink=none with_subgrid_extra_io=none enable_fof=no ;; QLA-EAGLE) with_subgrid_cooling=QLA-EAGLE with_subgrid_chemistry=QLA with_subgrid_tracers=none with_subgrid_entropy_floor=QLA with_subgrid_stars=basic with_subgrid_star_formation=QLA with_subgrid_feedback=none with_subgrid_black_holes=none with_subgrid_sink=none enable_fof=no ;; EAGLE) with_subgrid_cooling=EAGLE with_subgrid_chemistry=EAGLE with_subgrid_tracers=EAGLE with_subgrid_entropy_floor=EAGLE with_subgrid_stars=EAGLE with_subgrid_star_formation=EAGLE with_subgrid_feedback=EAGLE with_subgrid_black_holes=EAGLE with_subgrid_sink=none with_subgrid_extra_io=none enable_fof=yes ;; EAGLE-XL) with_subgrid_cooling=PS2020 with_subgrid_chemistry=EAGLE with_subgrid_tracers=EAGLE with_subgrid_entropy_floor=EAGLE with_subgrid_stars=EAGLE with_subgrid_star_formation=EAGLE with_subgrid_feedback=EAGLE with_subgrid_black_holes=EAGLE with_subgrid_sink=none with_subgrid_extra_io=none enable_fof=yes ;; SPIN_JET_EAGLE) with_subgrid_cooling=EAGLE with_subgrid_chemistry=EAGLE with_subgrid_tracers=EAGLE with_subgrid_entropy_floor=EAGLE with_subgrid_stars=EAGLE with_subgrid_star_formation=EAGLE with_subgrid_feedback=EAGLE with_subgrid_black_holes=SPIN_JET with_subgrid_sink=none with_subgrid_extra_io=none enable_fof=yes ;; SPIN_JET_EAGLE-XL) with_subgrid_cooling=PS2020 with_subgrid_chemistry=EAGLE with_subgrid_tracers=EAGLE with_subgrid_entropy_floor=EAGLE with_subgrid_stars=EAGLE with_subgrid_star_formation=EAGLE with_subgrid_feedback=EAGLE with_subgrid_black_holes=SPIN_JET with_subgrid_sink=none with_subgrid_extra_io=none enable_fof=yes ;; *) AC_MSG_ERROR([Unknown subgrid choice: $with_subgrid]) ;; esac # Check if FoF is on. AC_ARG_ENABLE([fof], [AS_HELP_STRING([--enable-fof], [Activate the friends-of-friends (FoF) code.], )], [enable_fof="$enableval"], [enable_fof="no"] ) if test "$enable_fof" = "yes"; then AC_DEFINE([WITH_FOF], 1, [Enable FoF]) fi # Check if stand-alone FoF is on. AC_ARG_ENABLE([stand-alone-fof], [AS_HELP_STRING([--enable-stand-alone-fof], [Activate the compilation of the stand-alone friends-of-friends (FoF) post-processing tool.], )], [enable_standalone_fof="$enableval"], [enable_standalone_fof="no"] ) if test "$enable_standalone_fof" = "yes"; then enable_fof="yes + stand-alone tool" AC_DEFINE([WITH_FOF], 1, [Enable FoF]) AC_DEFINE([WITH_STAND_ALONE_FOF], 1, [Enable stand-alone FoF]) fi AM_CONDITIONAL([HAVESTANDALONEFOF],[test $enable_standalone_fof = "yes"]) # Gravity scheme. AC_ARG_WITH([gravity], [AS_HELP_STRING([--with-gravity=], [Gravity scheme to use @<:@basic, with-multi-softening default: with-multi-softening@:>@] )], [with_gravity="$withval"], [with_gravity="with-multi-softening"] ) case "$with_gravity" in with-potential) AC_MSG_ERROR([The gravity 'with-potential' scheme does not exist anymore. Please use the basic scheme which now contains potentials.]) ;; with-multi-softening) AC_DEFINE([MULTI_SOFTENING_GRAVITY], [1], [Gravity scheme with per-particle type softening value and background particles]) ;; basic) AC_DEFINE([DEFAULT_GRAVITY], [1], [Basic gravity scheme]) ;; *) AC_MSG_ERROR([Unknown gravity scheme: $with_gravity]) ;; esac AC_ARG_ENABLE([gravitational-potential], [AS_HELP_STRING([--disable-gravitational-potential], [Disable calculation of the gravitational potential.] )], [enable_gravitational_potential="$enableval"], [enable_gravitational_potential="yes"] ) if test "$enable_gravitational_potential" = "no"; then AC_DEFINE([SWIFT_GRAVITY_NO_POTENTIAL],1,[Disable calculation of the gravitational potential]) fi # Hydro scheme. AC_ARG_WITH([hydro], [AS_HELP_STRING([--with-hydro=], [Hydro dynamics to use @<:@gadget2, minimal, pressure-entropy, pressure-energy, pressure-energy-monaghan, phantom, gizmo-mfv, gizmo-mfm, shadowswift, planetary, sphenix, gasoline, anarchy-pu default: sphenix@:>@] )], [with_hydro="$withval"], [with_hydro="sphenix"] ) case "$with_hydro" in none) AC_DEFINE([NONE_SPH], [1], [No hydro]) ;; gadget2) AC_DEFINE([GADGET2_SPH], [1], [Gadget-2 SPH]) ;; minimal) AC_DEFINE([MINIMAL_SPH], [1], [Minimal SPH]) ;; pressure-entropy) AC_DEFINE([HOPKINS_PE_SPH], [1], [Pressure-Entropy SPH]) ;; pressure-energy) AC_DEFINE([HOPKINS_PU_SPH], [1], [Pressure-Energy SPH]) ;; pressure-energy-monaghan) AC_DEFINE([HOPKINS_PU_SPH_MONAGHAN], [1], [Pressure-Energy SPH with M&M Variable A.V.]) ;; phantom) AC_DEFINE([PHANTOM_SPH], [1], [Phantom SPH]) ;; gizmo-mfv) AC_DEFINE([GIZMO_MFV_SPH], [1], [GIZMO MFV SPH]) need_riemann_solver=yes hydro_does_mass_flux=yes ;; gizmo-mfm) AC_DEFINE([GIZMO_MFM_SPH], [1], [GIZMO MFM SPH]) need_riemann_solver=yes ;; shadowswift) AC_DEFINE([SHADOWSWIFT], [1], [ShadowSWIFT hydrodynamics]) AC_DEFINE([MOVING_MESH_HYDRO], [1], [Moving mesh hydrodynamics]) need_moving_mesh=yes need_riemann_solver=yes hydro_does_mass_flux=yes ;; planetary) AC_DEFINE([PLANETARY_SPH], [1], [Planetary SPH]) ;; sphenix) AC_DEFINE([SPHENIX_SPH], [1], [SPHENIX SPH]) ;; gasoline) AC_DEFINE([GASOLINE_SPH], [1], [Gasoline SPH]) ;; anarchy-du) AC_DEFINE([SPHENIX_SPH], [1], [SPHENIX SPH]) ;; anarchy-pu) AC_DEFINE([ANARCHY_PU_SPH], [1], [ANARCHY (PU) SPH]) ;; *) AC_MSG_ERROR([Unknown hydrodynamics scheme: $with_hydro]) ;; esac # SPMHD scheme. AC_ARG_WITH([spmhd], [AS_HELP_STRING([--with-spmhd=], [Magneto Hydro Dynamics SPH scheme to use @<:@none, direct-induction, direct-induction-fede, vector-potential default:none@:>@] )], [with_spmhd="$withval"], [with_spmhd="none"] ) case "$with_spmhd" in none) AC_DEFINE([NONE_MHD], [1], [No mhd]) ;; *) AC_MSG_ERROR([Unknown magneto-hydrodynamics scheme: $with_spmhd]) ;; esac if test "$with_hydro" = "gizmo-mfm" -a "$with_spmhd" != "none"; then AC_MSG_ERROR([Cannot use an SPMHD scheme alongside a gizmo hydro solver!"]) fi if test "$with_hydro" = "gizmo-mfv" -a "$with_spmhd" != "none"; then AC_MSG_ERROR([Cannot use an SPMHD scheme alongside a gizmo hydro solver!"]) fi if test "$with_hydro" = "shadowswift" -a "$with_spmhd" != "none"; then AC_MSG_ERROR([Cannot use an SPMHD scheme alongside a moving mesh hydro solver!"]) fi # Check if debugging interactions stars is switched on. AC_ARG_ENABLE([debug-interactions-stars], [AS_HELP_STRING([--enable-debug-interactions-stars], [Activate interaction debugging for stars, logging a maximum of @<:@N@:>@ neighbours. Defaults to 256 if no value set.] )], [enable_debug_interactions_stars="$enableval"], [enable_debug_interactions_stars="no"] ) if test "$enable_debug_interactions_stars" != "no"; then AC_DEFINE([DEBUG_INTERACTIONS_STARS],1,[Enable interaction debugging for stars]) if test "$enable_debug_interactions_stars" = "yes"; then AC_DEFINE([MAX_NUM_OF_NEIGHBOURS_STARS],256,[The maximum number of particle neighbours to be logged for stars]) [enable_debug_interactions_stars="yes (Logging up to 256 neighbours)"] else AC_DEFINE_UNQUOTED([MAX_NUM_OF_NEIGHBOURS_STARS], [$enableval] ,[The maximum number of particle neighbours to be logged for stars]) [enable_debug_interactions_stars="yes (Logging up to $enableval neighbours)"] fi fi # Check if debugging interactions is switched on. AC_ARG_ENABLE([debug-interactions], [AS_HELP_STRING([--enable-debug-interactions], [Activate interaction debugging, logging a maximum of @<:@N@:>@ neighbours. Defaults to 256 if no value set.] )], [enable_debug_interactions="$enableval"], [enable_debug_interactions="no"] ) if test "$enable_debug_interactions" != "no"; then if test "$with_hydro" = "gadget2"; then AC_DEFINE([DEBUG_INTERACTIONS_SPH],1,[Enable interaction debugging]) if test "$enable_debug_interactions" = "yes"; then AC_DEFINE([MAX_NUM_OF_NEIGHBOURS],256,[The maximum number of particle neighbours to be logged]) [enable_debug_interactions="yes (Logging up to 256 neighbours)"] else AC_DEFINE_UNQUOTED([MAX_NUM_OF_NEIGHBOURS], [$enableval] ,[The maximum number of particle neighbours to be logged]) [enable_debug_interactions="yes (Logging up to $enableval neighbours)"] fi else [enable_debug_interactions="no (only available for gadget2 hydro scheme)"] fi fi # Check if debugging interactions sinks is switched on. AC_ARG_ENABLE([debug-interactions-sinks], [AS_HELP_STRING([--enable-debug-interactions-sinks], [Activate interaction debugging for sinks, logging a maximum of @<:@N@:>@ neighbours. Defaults to 256 if no value set.] )], [enable_debug_interactions_sinks="$enableval"], [enable_debug_interactions_sinks="no"] ) if test "$enable_debug_interactions_sinks" != "no"; then AC_DEFINE([DEBUG_INTERACTIONS_SINKS],1,[Enable interaction debugging for sinks]) if test "$enable_debug_interactions_sinks" = "yes"; then AC_DEFINE([MAX_NUM_OF_NEIGHBOURS_SINKS],256,[The maximum number of particle neighbours to be logged for sinks]) [enable_debug_interactions_sinks="yes (Logging up to 256 neighbours)"] else AC_DEFINE_UNQUOTED([MAX_NUM_OF_NEIGHBOURS_SINKS], [$enableval] ,[The maximum number of particle neighbours to be logged for sinks]) [enable_debug_interactions_sinks="yes (Logging up to $enableval neighbours)"] fi fi # SPH Kernel function AC_ARG_WITH([kernel], [AS_HELP_STRING([--with-kernel=], [Kernel function to use @<:@cubic-spline, quartic-spline, quintic-spline, wendland-C2, wendland-C4, wendland-C6 default: cubic-spline@:>@] )], [with_kernel="$withval"], [with_kernel="cubic-spline"] ) case "$with_kernel" in cubic-spline) AC_DEFINE([CUBIC_SPLINE_KERNEL], [1], [Cubic spline kernel]) ;; quartic-spline) AC_DEFINE([QUARTIC_SPLINE_KERNEL], [1], [Quartic spline kernel]) ;; quintic-spline) AC_DEFINE([QUINTIC_SPLINE_KERNEL], [1], [Quintic spline kernel]) ;; wendland-C2) AC_DEFINE([WENDLAND_C2_KERNEL], [1], [Wendland-C2 kernel]) ;; wendland-C4) AC_DEFINE([WENDLAND_C4_KERNEL], [1], [Wendland-C4 kernel]) ;; wendland-C6) AC_DEFINE([WENDLAND_C6_KERNEL], [1], [Wendland-C6 kernel]) ;; *) AC_MSG_ERROR([Unknown kernel function: $with_kernel]) ;; esac # Dimensionality of the hydro scheme. AC_ARG_WITH([hydro-dimension], [AS_HELP_STRING([--with-hydro-dimension=], [dimensionality of problem @<:@3/2/1 default: 3@:>@] )], [with_dimension="$withval"], [with_dimension="3"] ) case "$with_dimension" in 1) AC_DEFINE([HYDRO_DIMENSION_1D], [1], [1D solver]) ;; 2) AC_DEFINE([HYDRO_DIMENSION_2D], [2], [2D solver]) ;; 3) AC_DEFINE([HYDRO_DIMENSION_3D], [3], [3D solver]) ;; *) AC_MSG_ERROR([Dimensionality must be 1, 2 or 3]) ;; esac # Equation of state AC_ARG_WITH([equation-of-state], [AS_HELP_STRING([--with-equation-of-state=], [equation of state @<:@ideal-gas, isothermal-gas, barotropic-gas, planetary default: ideal-gas@:>@] )], [with_eos="$withval"], [with_eos="ideal-gas"] ) case "$with_eos" in ideal-gas) AC_DEFINE([EOS_IDEAL_GAS], [1], [Ideal gas equation of state]) ;; isothermal-gas) AC_DEFINE([EOS_ISOTHERMAL_GAS], [1], [Isothermal gas equation of state]) ;; barotropic-gas) AC_DEFINE([EOS_BAROTROPIC_GAS], [1], [Barotropic gas equation of state]) ;; planetary) AC_DEFINE([EOS_PLANETARY], [1], [All planetary equations of state]) ;; *) AC_MSG_ERROR([Unknown equation of state: $with_eos]) ;; esac # Adiabatic index AC_ARG_WITH([adiabatic-index], [AS_HELP_STRING([--with-adiabatic-index=], [adiabatic index @<:@5/3, 7/5, 4/3, 2 default: 5/3@:>@] )], [with_gamma="$withval"], [with_gamma="5/3"] ) case "$with_gamma" in 5/3) AC_DEFINE([HYDRO_GAMMA_5_3], [5./3.], [Adiabatic index is 5/3]) ;; 7/5) AC_DEFINE([HYDRO_GAMMA_7_5], [7./5.], [Adiabatic index is 7/5]) ;; 4/3) AC_DEFINE([HYDRO_GAMMA_4_3], [4./3.], [Adiabatic index is 4/3]) ;; 2) AC_DEFINE([HYDRO_GAMMA_2_1], [2.], [Adiabatic index is 2]) ;; *) AC_MSG_ERROR([Unknown adiabatic index: $with_gamma]) ;; esac # Adaptive softening AC_ARG_WITH([adaptive-softening], [AS_HELP_STRING([--with-adaptive-softening=], [Adaptive softening @<:@no, yes, default: no@:>@] )], [with_adaptive_softening="$withval"], [with_adaptive_softening="no"] ) case "$with_adaptive_softening" in no) AC_DEFINE([FIXED_SOFTENING], [1], [No adaptive softening]) ;; yes) AC_DEFINE([ADAPTIVE_SOFTENING], [1], [Adaptive softening]) ;; *) AC_MSG_ERROR([Unknown adaptive softening: $with_adaptive_softening]) ;; esac # Verify that the configuration is allowed if test "x$with_adaptive_softening" = "xyes" -a "$with_kernel" != "wendland-C2"; then AC_MSG_ERROR([Adaptive softening scheme requires the usage of the Wendland-C2 kernel!]) fi if test "x$with_adaptive_softening" = "xyes" -a "$with_gravity" != "with-multi-softening"; then AC_MSG_ERROR([Adaptive softening scheme requires the usage of the multi-softening gravity scheme!]) fi # Riemann solver AC_ARG_WITH([riemann-solver], [AS_HELP_STRING([--with-riemann-solver=], [riemann solver (gizmo-sph only) @<:@none, exact, trrs, hllc, default: none@:>@] )], [with_riemann="$withval"], [with_riemann="none"] ) case "$with_riemann" in none) AC_DEFINE([RIEMANN_SOLVER_NONE], [1], [No Riemann solver]) ;; exact) AC_DEFINE([RIEMANN_SOLVER_EXACT], [1], [Exact Riemann solver]) ;; trrs) AC_DEFINE([RIEMANN_SOLVER_TRRS], [1], [Two Rarefaction Riemann Solver]) ;; hllc) AC_DEFINE([RIEMANN_SOLVER_HLLC], [1], [Harten-Lax-van Leer-Contact Riemann solver]) ;; *) AC_MSG_ERROR([Unknown Riemann solver: $with_riemann]) ;; esac if test "x$need_riemann_solver" = "xyes" -a "$with_riemann" = "none"; then AC_MSG_ERROR([Hydro scheme $with_hydro requires selection of a Riemann solver!]) fi # Moving mesh AC_ARG_ENABLE([moving-mesh], [AS_HELP_STRING([--enable-moving-mesh], [enable the moving mesh computation] )], [enable_moving_mesh="${enableval}"], [enable_moving_mesh="no"] ) if test "x$need_moving_mesh" = "xyes"; then enable_moving_mesh="yes" fi if test "$enable_moving_mesh" = "yes"; then if test "$have_gmp" = "no"; then AC_MSG_ERROR([GMP is required when using moving mesh!]) fi if test "$have_gsl" = "no"; then AC_MSG_ERROR([GSL is required when using moving mesh!]) fi AC_DEFINE([MOVING_MESH], [1], [Unstructured Voronoi mesh]) fi # Hydro does mass flux? if test "x$hydro_does_mass_flux" = "xyes"; then AC_DEFINE([HYDRO_DOES_MASS_FLUX], [1], [Hydro scheme with mass fluxes]) fi # chemistry function AC_ARG_WITH([chemistry], [AS_HELP_STRING([--with-chemistry=], [chemistry function @<:@none, GEAR_*, AGORA, QLA, EAGLE default: none@:>@ For GEAR, you need to provide the number of elements (e.g. GEAR_10)] )], [with_chemistry="$withval"], [with_chemistry="none"] ) if test "$with_subgrid" != "none"; then if test "$with_chemistry" != "none"; then AC_MSG_ERROR([Cannot provide with-subgrid and with-chemistry together]) else with_chemistry="$with_subgrid_chemistry" fi fi with_chemistry_name="none" case "$with_chemistry" in none) AC_DEFINE([CHEMISTRY_NONE], [1], [No chemistry function]) ;; GEAR_*) AC_DEFINE([CHEMISTRY_GEAR], [1], [Chemistry taken from the GEAR model]) number_element=${with_chemistry#*_} AC_DEFINE_UNQUOTED([GEAR_CHEMISTRY_ELEMENT_COUNT], [$number_element], [Number of element to follow]) with_chemistry_name="GEAR (with $number_element elements)" with_chemistry="GEAR" ;; AGORA) AC_DEFINE([CHEMISTRY_AGORA], [1], [Chemistry taken from the AGORA model]) with_chemistry_name="AGORA" ;; QLA) AC_DEFINE([CHEMISTRY_QLA], [1], [Chemistry taken from the Quick-Lyman-alpha model]) with_chemistry_name="QLA" ;; EAGLE) AC_DEFINE([CHEMISTRY_EAGLE], [1], [Chemistry taken from the EAGLE model]) with_chemistry_name="EAGLE (9 elements + smoothing)" ;; *) AC_MSG_ERROR([Unknown chemistry function: $with_chemistry]) ;; esac if test "$with_chemistry" != "none"; then if test "$enable_hand_vec" = "yes"; then if test "$enable_vec" = "yes"; then if test "$with_hydro" = "gadget2"; then AC_MSG_ERROR([Cannot run with hand vectorisation and chemistry yet. Please use --disable-hand-vec]) fi fi fi fi # Cooling function AC_ARG_WITH([cooling], [AS_HELP_STRING([--with-cooling=], [cooling function @<:@none, const-du, const-lambda, QLA, EAGLE, PS2020, Wiersma, grackle_* default: none@:>@. For Grackle, you need to provide the primordial chemistry parameter (e.g. grackle_0)] )], [with_cooling="$withval"], [with_cooling="none"] ) if test "$with_subgrid" != "none"; then if test "$with_cooling" != "none"; then AC_MSG_ERROR([Cannot provide with-subgrid and with-cooling together]) else with_cooling="$with_subgrid_cooling" fi fi with_cooling_name="none" case "$with_cooling" in none) AC_DEFINE([COOLING_NONE], [1], [No cooling function]) ;; const-du) AC_DEFINE([COOLING_CONST_DU], [1], [Const du/dt cooling function]) with_cooling_name=$with_cooling ;; const-lambda) AC_DEFINE([COOLING_CONST_LAMBDA], [1], [Const Lambda cooling function]) with_cooling_name=$with_cooling ;; grackle_*) if test "$have_grackle" != "yes"; then AC_MSG_ERROR([Grackle cooling: You need the grackle library for Grackle cooling. (--with-grackle=PATH)]) fi AC_DEFINE([COOLING_GRACKLE], [1], [Cooling via the grackle library]) primordial_chemistry=${with_cooling#*_} AC_DEFINE_UNQUOTED([COOLING_GRACKLE_MODE], [$primordial_chemistry], [Grackle chemistry network]) with_cooling_name="Grackle $primordial_chemistry" with_cooling="grackle" ;; QLA) AC_DEFINE([COOLING_QLA], [1], [Cooling following the Quick-Lyman-alpha model]) with_cooling_name="QLA (Ploeckinger+20 tables) with constant primordial Z" ;; QLA-EAGLE) AC_DEFINE([COOLING_QLA_EAGLE], [1], [Cooling following the Quick-Lyman-alpha model]) with_cooling_name="QLA (Wiersma+09 tables) with constant primordial Z" ;; EAGLE) AC_DEFINE([COOLING_EAGLE], [1], [Cooling following the EAGLE model (Wiersma+09 tables)]) with_cooling_name="EAGLE (Wiersma+09 tables)" ;; Wiersma) AC_DEFINE([COOLING_EAGLE], [1], [Cooling following the EAGLE model (Wiersma+09 tables)]) with_cooling_name="EAGLE (Wiersma+09 tables)" ;; PS2020) AC_DEFINE([COOLING_PS2020], [1], [Cooling following the PS2020 model (Ploeckinger+20 tables)]) with_cooling_name="PS2020 (Ploeckinger+20 tables)" ;; COLIBRE) AC_MSG_ERROR([This cooling model changed name. Please use 'PS2020'.]) ;; *) AC_MSG_ERROR([Unknown cooling function: $with_cooling]) ;; esac if test "$with_cooling" = "EAGLE" || test "$with_cooling" = "PS2020"; then if test "$with_chemistry" = "none"; then AC_MSG_ERROR([Cannot run with EAGLE or PS2020 cooling without chemistry. Please pick a chemistry model]) fi fi # Particle tracers AC_ARG_WITH([tracers], [AS_HELP_STRING([--with-tracers=], [chemistry function @<:@none, EAGLE default: none@:>@] )], [with_tracers="$withval"], [with_tracers="none"] ) if test "$with_subgrid" != "none"; then if test "$with_tracers" != "none"; then AC_MSG_ERROR([Cannot provide with-subgrid and with-tracers together]) else with_tracers="$with_subgrid_tracers" fi fi case "$with_tracers" in none) AC_DEFINE([TRACERS_NONE], [1], [No tracers function]) ;; EAGLE) AC_DEFINE([TRACERS_EAGLE], [1], [Tracers taken from the EAGLE model]) ;; *) AC_MSG_ERROR([Unknown tracers choice: $with_tracers]) ;; esac # Extra fields added to snapshots at i/o time AC_ARG_WITH([extra_io], [AS_HELP_STRING([--with-extra-io=], [Extra i/o field: @<:@none, EAGLE default: none@:>@] )], [with_extra_io="$withval"], [with_extra_io="none"] ) if test "$with_subgrid" != "none"; then if test "$with_extra_io" != "none"; then AC_MSG_ERROR([Cannot provide with-subgrid and with-extra_io together]) else with_extra_io="$with_subgrid_extra_io" fi fi case "$with_extra_io" in none) AC_DEFINE([EXTRA_IO_NONE], [1], [No extra_io function]) ;; EAGLE) AC_DEFINE([EXTRA_IO_EAGLE], [1], [Extra i/o fields taken from the EAGLE model]) ;; *) AC_MSG_ERROR([Unknown extra-io choice: $with_extra_io]) ;; esac # Stellar model. AC_ARG_WITH([stars], [AS_HELP_STRING([--with-stars=], [Stellar model to use @<:@none, basic, EAGLE, GEAR, default: basic@:>@] )], [with_stars="$withval"], [with_stars="basic"] ) if test "$with_subgrid" != "none"; then if test "$with_stars" != "basic"; then AC_MSG_ERROR([Cannot provide with-subgrid and with-stars together]) else with_stars="$with_subgrid_stars" fi fi case "$with_stars" in EAGLE) AC_DEFINE([STARS_EAGLE], [1], [EAGLE stellar model]) ;; GEAR) AC_DEFINE([STARS_GEAR], [1], [GEAR stellar model]) ;; basic) AC_DEFINE([STARS_BASIC], [1], [Basic stellar model]) ;; none) AC_DEFINE([STARS_NONE], [1], [No stellar model]) ;; *) AC_MSG_ERROR([Unknown stellar model: $with_stars]) ;; esac # Feedback model AC_ARG_WITH([feedback], [AS_HELP_STRING([--with-feedback=], [Feedback model to use @<:@none, EAGLE, EAGLE-thermal, EAGLE-kinetic, GEAR, AGORA default: none@:>@] )], [with_feedback="$withval"], [with_feedback="none"] ) if test "$with_subgrid" != "none"; then if test "$with_feedback" != "none"; then AC_MSG_ERROR([Cannot provide with-subgrid and with-feedback together]) else with_feedback="$with_subgrid_feedback" fi fi with_feedback_name="none" case "$with_feedback" in EAGLE-kinetic) AC_DEFINE([FEEDBACK_EAGLE_KINETIC], [1], [EAGLE kinetic stellar feedback and evolution model]) with_feedback_name="EAGLE kinetic stellar feedback and evolution model" ;; EAGLE-thermal) AC_DEFINE([FEEDBACK_EAGLE_THERMAL], [1], [EAGLE thermal stellar feedback and evolution model]) with_feedback_name="EAGLE thermal stellar feedback and evolution model" ;; EAGLE) AC_DEFINE([FEEDBACK_EAGLE_THERMAL], [1], [EAGLE thermal stellar feedback and evolution model]) with_feedback_name="EAGLE thermal stellar feedback and evolution model" ;; GEAR) AC_DEFINE([FEEDBACK_GEAR], [1], [GEAR stellar feedback and evolution model]) with_feedback_name="GEAR" ;; AGORA) AC_DEFINE([FEEDBACK_AGORA], [1], [AGORA stellar feedback and evolution model]) with_feedback_name="AGORA" ;; none) AC_DEFINE([FEEDBACK_NONE], [1], [No feedback]) ;; *) AC_MSG_ERROR([Unknown feedback model: $with_feedback]) ;; esac # For models using ray-based feedback, let the users set different numbers of rays AC_ARG_WITH([number-of-SNII-rays], [AS_HELP_STRING([--with-number-of-SNII-rays], [Number of rays to use for the SNII feedback (default: 1)])], [with_number_of_SNII_rays="$withval"], [with_number_of_SNII_rays="1"]) AC_DEFINE_UNQUOTED([FEEDBACK_NR_RAYS_SNII], [$with_number_of_SNII_rays], [Number of rays to use for the SNII feedback]) AC_ARG_WITH([number-of-SNIa-rays], [AS_HELP_STRING([--with-number-of-SNIa-rays], [Number of rays to use for the SNIa feedback (default: 1)])], [with_number_of_SNIa_rays="$withval"], [with_number_of_SNIa_rays="1"]) AC_DEFINE_UNQUOTED([FEEDBACK_NR_RAYS_SNIa], [$with_number_of_SNIa_rays], [Number of rays to use for the SNIa feedback]) AC_ARG_WITH([number-of-AGN-rays], [AS_HELP_STRING([--with-number-of-AGN-rays], [Number of rays to use for the AGN feedback (default: 50)])], [with_number_of_AGN_rays="$withval"], [with_number_of_AGN_rays="50"]) AC_DEFINE_UNQUOTED([FEEDBACK_NR_RAYS_AGN], [$with_number_of_AGN_rays], [Number of rays to use for the AGN feedback]) # Black hole model. AC_ARG_WITH([black-holes], [AS_HELP_STRING([--with-black-holes=], [Black holes model to use @<:@none, EAGLE, SPIN_JET default: none@:>@] )], [with_black_holes="$withval"], [with_black_holes="none"] ) if test "$with_subgrid" != "none"; then if test "$with_black_holes" != "none"; then AC_MSG_ERROR([Cannot provide with-subgrid and with-black-holes together]) else with_black_holes="$with_subgrid_black_holes" fi fi case "$with_black_holes" in none) AC_DEFINE([BLACK_HOLES_NONE], [1], [No black hole model]) ;; EAGLE) AC_DEFINE([BLACK_HOLES_EAGLE], [1], [EAGLE black hole model]) ;; SPIN_JET) AC_DEFINE([BLACK_HOLES_SPIN_JET], [1], [Spin and jet black hole model]) with_black_holes="SPIN_JETS (Husko+22)" ;; *) AC_MSG_ERROR([Unknown black-hole model: $with_black_holes]) ;; esac # Sink model. AC_ARG_WITH([sink], [AS_HELP_STRING([--with-sink=], [Sink particle model to use @<:@none, GEAR, default: none@:>@] )], [with_sink="$withval"], [with_sink="none"] ) if test "$with_subgrid" != "none"; then if test "$with_sink" != "none"; then AC_MSG_ERROR([Cannot provide with-subgrid and with-sink together]) else with_sink="$with_subgrid_sink" fi fi case "$with_sink" in none) AC_DEFINE([SINK_NONE], [1], [No sink particle model]) ;; Basic) AC_DEFINE([SINK_BASIC], [1], [Simple, self-contained sink model with only Bondi-Hoyle accretion and no SF.]) ;; GEAR) AC_DEFINE([SINK_GEAR], [1], [GEAR sink particle model]) ;; *) AC_MSG_ERROR([Unknown sink particle model model: $with_sink]) ;; esac # Forcing terms AC_ARG_WITH([forcing], [AS_HELP_STRING([--with-forcing=], [Hydrodynamics forcing terms @<:@none, roberts-flow, roberts-flow-acceleration , abc-flowdefault: none@:>@] )], [with_forcing="$withval"], [with_forcing="none"] ) case "$with_forcing" in none) AC_DEFINE([FORCING_NONE], [1], [No external forcing terms]) ;; roberts-flow) AC_DEFINE([FORCING_ROBERTS_FLOW], [1], [Roberts' flow external forcing terms]) ;; roberts-flow-acceleration) AC_DEFINE([FORCING_ROBERTS_FLOW_ACCELERATION], [1], [Roberts' flow external forcing terms entering the equations as an acceleration term]) ;; abc-flow) AC_DEFINE([FORCING_ABC_FLOW], [1], [ABC flow external forcing terms]) ;; *) AC_MSG_ERROR([Unknown external forcing term: $with_forcing]) ;; esac # External potential AC_ARG_WITH([ext-potential], [AS_HELP_STRING([--with-ext-potential=], [external potential @<:@none, point-mass, point-mass-softened, isothermal, nfw, nfw-mn, hernquist, hernquist-sdmh05, disc-patch, sine-wave, MWPotential2014, constant, default: none@:>@] )], [with_potential="$withval"], [with_potential="none"] ) case "$with_potential" in none) AC_DEFINE([EXTERNAL_POTENTIAL_NONE], [1], [No external potential]) ;; point-mass) AC_DEFINE([EXTERNAL_POTENTIAL_POINTMASS], [1], [Point-mass external potential]) ;; isothermal) AC_DEFINE([EXTERNAL_POTENTIAL_ISOTHERMAL], [1], [Isothermal external potential]) ;; hernquist) AC_DEFINE([EXTERNAL_POTENTIAL_HERNQUIST], [1], [Hernquist external potential]) ;; hernquist-sdmh05) AC_DEFINE([EXTERNAL_POTENTIAL_HERNQUIST_SDMH05], [1], [Hernquist external potential following Springel, Di Matteo & Hernquist 2005]) ;; nfw) AC_DEFINE([EXTERNAL_POTENTIAL_NFW], [1], [Navarro-Frenk-White external potential]) ;; nfw-mn) AC_DEFINE([EXTERNAL_POTENTIAL_NFW_MN], [1], [Navarro-Frenk-White + Miyamoto-Nagai disk external potential]) ;; disc-patch) AC_DEFINE([EXTERNAL_POTENTIAL_DISC_PATCH], [1], [Disc-patch external potential]) ;; sine-wave) AC_DEFINE([EXTERNAL_POTENTIAL_SINE_WAVE], [1], [Sine wave external potential in 1D]) ;; point-mass-softened) AC_DEFINE([EXTERNAL_POTENTIAL_POINTMASS_SOFT], [1], [Softened point-mass potential with form 1/(r^2 + softening^2).]) ;; MWPotential2014) AC_DEFINE([EXTERNAL_POTENTIAL_MWPotential2014], [1], [Milky-Way like potential composed of a Navarro-Frenk-White + Miyamoto-Nagai disk + Power spherical cuttoff external potential.]) ;; constant) AC_DEFINE([EXTERNAL_POTENTIAL_CONSTANT], [1], [Constant gravitational acceleration.]) ;; *) AC_MSG_ERROR([Unknown external potential: $with_potential]) ;; esac # Entropy floor AC_ARG_WITH([entropy-floor], [AS_HELP_STRING([--with-entropy-floor=], [entropy floor @<:@none, QLA, EAGLE, default: none@:>@] )], [with_entropy_floor="$withval"], [with_entropy_floor="none"] ) if test "$with_subgrid" != "none"; then if test "$with_entropy_floor" != "none"; then AC_MSG_ERROR([Cannot provide with-subgrid and with-entropy-floor together]) else with_entropy_floor="$with_subgrid_entropy_floor" fi fi case "$with_entropy_floor" in none) AC_DEFINE([ENTROPY_FLOOR_NONE], [1], [No entropy floor]) ;; QLA) AC_DEFINE([ENTROPY_FLOOR_QLA], [1], [Quick Lyman-alpha entropy floor]) ;; EAGLE) AC_DEFINE([ENTROPY_FLOOR_EAGLE], [1], [EAGLE entropy floor]) ;; *) AC_MSG_ERROR([Unknown entropy floor model]) ;; esac # Pressure floor AC_ARG_WITH([pressure-floor], [AS_HELP_STRING([--with-pressure-floor=], [pressure floor @<:@none, GEAR, default: none@:>@ The hydro model needs to be compatible.] )], [with_pressure_floor="$withval"], [with_pressure_floor="none"] ) if test "$with_subgrid" != "none"; then if test "$with_pressure_floor" != "none"; then AC_MSG_ERROR([Cannot provide with-subgrid and with-pressure-floor together]) else with_pressure_floor="$with_subgrid_pressure_floor" fi fi case "$with_pressure_floor" in none) AC_DEFINE([PRESSURE_FLOOR_NONE], [1], [No pressure floor]) ;; GEAR) AC_DEFINE([PRESSURE_FLOOR_GEAR], [1], [GEAR pressure floor]) ;; *) AC_MSG_ERROR([Unknown pressure floor model]) ;; esac # Star formation AC_ARG_WITH([star-formation], [AS_HELP_STRING([--with-star-formation=], [star formation @<:@none, QLA, EAGLE, GEAR, default: none@:>@] )], [with_star_formation="$withval"], [with_star_formation="none"] ) if test "$with_subgrid" != "none"; then if test "$with_star_formation" != "none"; then AC_MSG_ERROR([Cannot provide with-subgrid and with-star-formation together]) else with_star_formation="$with_subgrid_star_formation" fi fi case "$with_star_formation" in none) AC_DEFINE([STAR_FORMATION_NONE], [1], [No star formation]) ;; QLA) AC_DEFINE([STAR_FORMATION_QLA], [1], [Quick Lyman-alpha star formation model)]) ;; EAGLE) AC_DEFINE([STAR_FORMATION_EAGLE], [1], [EAGLE star formation model (Schaye and Dalla Vecchia (2008))]) ;; GEAR) AC_DEFINE([STAR_FORMATION_GEAR], [1], [GEAR star formation model (Revaz and Jablonka (2018))]) ;; *) AC_MSG_ERROR([Unknown star formation model]) ;; esac AC_ARG_WITH([gadget2-physical-constants], [AS_HELP_STRING([--with-gadget2-physical-constants], [Use the same physical constants (G, Msun, Mpc) as the Gadget-2 code rather than more up-to-date values.] )], [with_gadget2_physical_constants="$withval"], [with_gadget2_physical_constants="no"] ) if test "$with_gadget2_physical_constants" = "yes"; then AC_DEFINE([SWIFT_USE_GADGET2_PHYSICAL_CONSTANTS],1,[Use the same physical constants as Gadget-2]) fi # Gravity multipole order AC_ARG_WITH([multipole-order], [AS_HELP_STRING([--with-multipole-order=], [order of the multipole and gravitational field expansion @<:@ default: 4@:>@] )], [with_multipole_order="$withval"], [with_multipole_order="4"] ) AC_DEFINE_UNQUOTED([SELF_GRAVITY_MULTIPOLE_ORDER], [$with_multipole_order], [Multipole order]) # Radiative transfer scheme AC_ARG_WITH([rt], [AS_HELP_STRING([--with-rt=], [Radiative transfer scheme to use @<:@none, GEAR_*, SPHM1RT_*, debug default: none@:>@. For GEAR and SPHM1RT, the number of photon groups (e.g. GEAR_4) needs to be provided.] )], [with_rt="$withval"], [with_rt="none"] ) # For GEAR-RT scheme: Select a RT Riemann solver AC_ARG_WITH([rt-riemann-solver], [AS_HELP_STRING([--with-rt-riemann-solver=], [Riemann solver for the moments of the ratiadiative transfer equation with the M1 closure to use @<:@none, HLL, GLF, default: none@:>@. For the GEAR RT scheme, you need to select one Riemann solver.] )], [with_rt_riemann_solver="$withval"], [with_rt_riemann_solver="none"] ) case "$with_rt_riemann_solver" in none) AC_DEFINE([RT_RIEMANN_SOLVER_NONE], [1], [No RT riemann solver]) ;; HLL) AC_DEFINE([RT_RIEMANN_SOLVER_HLL], [1], [HLL RT riemann solver]) ;; GLF) AC_DEFINE([RT_RIEMANN_SOLVER_GLF], [1], [GLF RT riemann solver]) ;; *) AC_MSG_ERROR("Unknown RT Riemann solver: $with_rt_riemann_solver") ;; esac case "$with_rt" in none) AC_DEFINE([RT_NONE], [1], [No radiative transfer scheme]) ;; GEAR_*) AC_DEFINE([RT_GEAR], [1], [GEAR M1 closure scheme]) number_group=${with_rt#*_} AC_DEFINE_UNQUOTED([RT_NGROUPS], [$number_group], [Number of photon groups to follow]) AC_DEFINE([MPI_SYMMETRIC_FORCE_INTERACTION_RT], [1], [Do symmetric MPI interactions]) if test "$number_group" = "0"; then AC_MSG_ERROR([GEAR-RT: Cannot work with zero photon groups]) fi if ! test $number_group -eq $number_group; then # abuse -eq to check whether $number_group is an integer. -eq # only works with those. AC_MSG_ERROR([GEAR-RT: Cannot work with non-integer photon groups]) fi if test "$enable_debugging_checks" = "yes"; then AC_DEFINE([SWIFT_RT_DEBUG_CHECKS], [1], [additional debugging checks for RT]) fi case "$with_hydro" in "gizmo-mfv" | "sphenix") # allowed. ;; *) AC_MSG_ERROR([GEAR-RT: Cannot work without gizmo-mfv or sphenix hydro. Compile using --with-hydro=gizmo-mfv or --with-hydro=sphenix]) ;; esac if test "$with_rt_riemann_solver" = "none"; then AC_MSG_ERROR([GEAR-RT: You need to select an RT Riemann solver (--with-rt-riemann-solver=...)]) fi if test "$have_grackle" != "yes"; then AC_MSG_ERROR([GEAR-RT: You need the grackle library for GEAR-RT. (--with-grackle=PATH)]) fi ;; debug) AC_DEFINE([RT_DEBUG], [1], [debugging scheme]) AC_DEFINE([SWIFT_RT_DEBUG_CHECKS], [1], [additional debugging checks for RT]) ;; SPHM1RT_*) AC_DEFINE([RT_SPHM1RT], [1], [SPHM1RT radiative transfer scheme (Chan+21: 2102.08404)]) number_group=${with_rt#*_} AC_DEFINE_UNQUOTED([RT_NGROUPS], [$number_group], [Number of photon groups to follow]) if test "$number_group" -eq "0"; then AC_MSG_ERROR([SPHM1RT: Cannot work with zero photon groups]) fi if test $number_group -lt 4; then AC_MSG_ERROR([SPHM1RT: Cannot work with < four photon groups for now]) fi if ! test $number_group -eq $number_group; then # abuse -eq to check whether $number_group is an integer. -eq # only works with those. AC_MSG_ERROR([SPHM1RT: Cannot work with non-integer photon groups]) fi AC_MSG_CHECKING([for Sundials libraries]) AC_MSG_RESULT($have_sundials) if test "$have_sundials" != "yes"; then AC_MSG_ERROR([The Sundials library is not present. Sundials is required for the SPHM1RT module.]) fi ;; *) AC_MSG_ERROR([Unknown radiative transfer scheme: $with_rt]) ;; esac # Check for git, needed for revision stamps. AC_PATH_PROG([GIT_CMD], [git]) AC_SUBST([GIT_CMD]) # Make the documentation. Add conditional to handle disable option. DX_DOXYGEN_FEATURE(OFF) DX_INIT_DOXYGEN(SWIFT, doc/Doxyfile, doc/) AM_CONDITIONAL([HAVE_DOXYGEN], [test "$ac_cv_path_ac_pt_DX_DOXYGEN" != ""]) # Check if using EAGLE extra I/O AM_CONDITIONAL([HAVEEAGLEEXTRAIO], [test "${with_extra_io}" = "EAGLE"]) # Check if using QLA cooling AM_CONDITIONAL([HAVEQLACOOLING], [test "$with_cooling" = "QLA"]) AM_CONDITIONAL([HAVEQLAEAGLECOOLING], [test "$with_cooling" = "QLA-EAGLE"]) # Check if using EAGLE cooling AM_CONDITIONAL([HAVEEAGLECOOLING], [test "$with_cooling" = "EAGLE"]) # Check if using PS2020 cooling AM_CONDITIONAL([HAVEPS2020COOLING], [test "$with_cooling" = "PS2020"]) # Check if using EAGLE feedback AM_CONDITIONAL([HAVEEAGLETHERMALFEEDBACK], [test "${with_feedback%-thermal}" = "EAGLE"]) AM_CONDITIONAL([HAVEEAGLEKINETICFEEDBACK], [test "$with_feedback" = "EAGLE-kinetic"]) # check if using grackle cooling AM_CONDITIONAL([HAVEGRACKLECOOLING], [test "$with_cooling" = "grackle"]) # check if using EAGLE floor AM_CONDITIONAL([HAVEEAGLEFLOOR], [test "$with_entropy_floor" = "EAGLE"]) # check if using gear feedback AM_CONDITIONAL([HAVEGEARFEEDBACK], [test "$with_feedback" = "GEAR"]) # check if using gear feedback AM_CONDITIONAL([HAVEAGORAFEEDBACK], [test "$with_feedback" = "AGORA"]) # check if using SPHENIX AM_CONDITIONAL([HAVE_SPHENIX], [test "$with_hydro" = "sphenix"]) # check if using GADGET2 SPH AM_CONDITIONAL([HAVE_GADGET2], [test "$with_hydro" = "gadget2"]) # check if using none chemistry AM_CONDITIONAL([HAVE_CHEMISTRY_NONE], [test "$with_chemistry" = "none"]) # check if using GEAR chemistry AM_CONDITIONAL([HAVE_CHEMISTRY_GEAR], [test "$with_chemistry" = "GEAR" || test "$with_chemistry" = "GEAR_DIFFUSION"]) # check if using AGORA chemistry AM_CONDITIONAL([HAVE_CHEMISTRY_AGORA], [test "$with_chemistry" = "AGORA" || test "$with_chemistry" = "GEAR_DIFFUSION"]) # check if using default stars AM_CONDITIONAL([HAVE_STARS_BASIC], [test "$with_stars" = "basic"]) # check if using GEAR stars AM_CONDITIONAL([HAVE_STARS_GEAR], [test "$with_stars" = "GEAR"]) # check if using default star formation AM_CONDITIONAL([HAVE_STAR_FORMATION_DEFAULT], [test "$with_star_formation" = "none"]) # check if using GEAR star formation AM_CONDITIONAL([HAVE_STAR_FORMATION_GEAR], [test "$with_star_formation" = "GEAR"]) # check if using multi softening gravity AM_CONDITIONAL([HAVE_GRAVITY_MULTISOFTENING], [test "$with_gravity" = "with-multi-softening"]) # Check if using SPHM1RT radiative transfer AM_CONDITIONAL([HAVESPHM1RTRT], [test "${with_rt:0:7}" = "SPHM1RT"]) # Check if using GEAR-RT radiative transfer AM_CONDITIONAL([HAVEGEARRT], [test "${with_rt:0:4}" = "GEAR"]) # Check if using Moving mesh AM_CONDITIONAL([HAVE_MOVING_MESH], [test "$enable_moving_mesh" = "yes"]) # Handle .in files. AC_CONFIG_FILES([Makefile src/Makefile examples/Makefile examples/Cooling/CoolingRates/Makefile doc/Makefile doc/Doxyfile tests/Makefile]) AC_CONFIG_FILES([argparse/Makefile tools/Makefile]) AC_CONFIG_FILES([tests/testReading.sh], [chmod +x tests/testReading.sh]) AC_CONFIG_FILES([tests/testActivePair.sh], [chmod +x tests/testActivePair.sh]) AC_CONFIG_FILES([tests/test27cells.sh], [chmod +x tests/test27cells.sh]) AC_CONFIG_FILES([tests/test27cellsPerturbed.sh], [chmod +x tests/test27cellsPerturbed.sh]) AC_CONFIG_FILES([tests/test27cellsStars.sh], [chmod +x tests/test27cellsStars.sh]) AC_CONFIG_FILES([tests/test27cellsStarsPerturbed.sh], [chmod +x tests/test27cellsStarsPerturbed.sh]) AC_CONFIG_FILES([tests/test125cells.sh], [chmod +x tests/test125cells.sh]) AC_CONFIG_FILES([tests/test125cellsPerturbed.sh], [chmod +x tests/test125cellsPerturbed.sh]) AC_CONFIG_FILES([tests/testPeriodicBC.sh], [chmod +x tests/testPeriodicBC.sh]) AC_CONFIG_FILES([tests/testPeriodicBCPerturbed.sh], [chmod +x tests/testPeriodicBCPerturbed.sh]) AC_CONFIG_FILES([tests/testInteractions.sh], [chmod +x tests/testInteractions.sh]) AC_CONFIG_FILES([tests/testParser.sh], [chmod +x tests/testParser.sh]) AC_CONFIG_FILES([tests/testSelectOutput.sh], [chmod +x tests/testSelectOutput.sh]) AC_CONFIG_FILES([tests/testFormat.sh], [chmod +x tests/testFormat.sh]) AC_CONFIG_FILES([tests/testNeutrinoCosmology.sh], [chmod +x tests/testNeutrinoCosmology.sh]) AC_CONFIG_FILES([tests/output_list_params.yml]) # Save the compilation options AC_DEFINE_UNQUOTED([SWIFT_CONFIG_FLAGS],["$swift_config_flags"],[Flags passed to configure]) # Make sure the latest git revision string gets included, when we are # working in a checked out repository. test -d ${srcdir}/.git && touch ${srcdir}/src/version.c # Need to define this, instead of using fifth argument of AC_INIT, until # 2.64. Defer until now as this redefines PACKAGE_URL, which can emit a # compilation error when testing with -Werror. AC_DEFINE([PACKAGE_URL],["www.swiftsim.com"], [Package web pages]) # Generate output. AC_OUTPUT # Report general configuration. AC_MSG_RESULT([ ------- Summary -------- $PACKAGE_NAME v.$PACKAGE_VERSION Compiler : $CC - vendor : $ax_cv_c_compiler_vendor - version : $ax_cv_c_compiler_version - flags : $CFLAGS MPI enabled : $enable_mpi HDF5 enabled : $with_hdf5 - parallel : $have_parallel_hdf5 METIS/ParMETIS : $have_metis / $have_parmetis FFTW3 enabled : $have_fftw - threaded/openmp : $have_threaded_fftw / $have_openmp_fftw - MPI : $have_mpi_fftw - ARM : $have_arm_fftw GSL enabled : $have_gsl GMP enabled : $have_gmp HEALPix C enabled : $have_chealpix libNUMA enabled : $have_numa GRACKLE enabled : $have_grackle Sundials enabled : $have_sundials Special allocators : $have_special_allocator CPU profiler : $have_profiler Pthread barriers : $have_pthread_barrier VELOCIraptor enabled : $have_velociraptor FoF activated: : $enable_fof Lightcones enabled : $enable_lightcone Moving-mesh enabled : $enable_moving_mesh Hydro scheme : $with_hydro Dimensionality : $with_dimension Kernel function : $with_kernel Equation of state : $with_eos Adiabatic index : $with_gamma Riemann solver : $with_riemann SPMHD scheme : $with_spmhd Adaptive softening : $with_adaptive_softening Gravity scheme : $with_gravity Multipole order : $with_multipole_order Compute potential : $enable_gravitational_potential No gravity below ID : $no_gravity_below_id Make gravity glass : $gravity_glass_making External potential : $with_potential Forcing terms : $with_forcing Pressure floor : $with_pressure_floor Entropy floor : $with_entropy_floor Cooling function : $with_cooling_name Chemistry : $with_chemistry_name Tracers : $with_tracers Stellar model : $with_stars Star formation model : $with_star_formation Star feedback model : $with_feedback_name Sink particle model : $with_sink Black holes model : $with_black_holes Radiative transfer : $with_rt Extra i/o : $with_extra_io Atomic operations in tasks : $enable_atomics_within_tasks Individual timers : $enable_timers Task debugging : $enable_task_debugging Threadpool debugging : $enable_threadpool_debugging Debugging checks : $enable_debugging_checks Interaction debugging : $enable_debug_interactions Stars interaction debugging : $enable_debug_interactions_stars Naive interactions : $enable_naive_interactions Naive stars interactions : $enable_naive_interactions_stars Gravity checks : $gravity_force_checks Custom icbrtf : $enable_custom_icbrtf Boundary particles : $boundary_particles Fixed boundary particles : $fixed_boundary_particles Planetary fixed entropy : $planetary_fixed_entropy Ghost statistics : $ghost_stats Continuous Sim. Data Stream : $with_csds ------------------------] ) # Report any unrecognised options loudly. if test "$ac_unrecognized_opts" != ""; then AC_MSG_RESULT([ *** WARNING: unrecognized options: $ac_unrecognized_opts *** ]) fi