mirror of https://github.com/abinit/abinit.git
1289 lines
36 KiB
Plaintext
1289 lines
36 KiB
Plaintext
# -*- Autoconf -*-
|
|
#
|
|
# Copyright (C) 2005-2024 ABINIT Group (Yann Pouillon)
|
|
#
|
|
# This file is part of the ABINIT software package. For license information,
|
|
# please see the COPYING file in the top-level directory of the ABINIT source
|
|
# distribution.
|
|
#
|
|
|
|
# ---------------------------------------------------------------------------- #
|
|
|
|
#
|
|
# IMPORTANT NOTE
|
|
#
|
|
# Please DO NOT EDIT this file unless you REALLY know what you are doing.
|
|
# Everything is important, in particular the order of the various commands
|
|
# executed here. YOU HAVE BEEN WARNED !
|
|
#
|
|
|
|
# ---------------------------------------------------------------------------- #
|
|
|
|
|
|
#
|
|
# Autoconf & Automake startup
|
|
#
|
|
|
|
# Enhance help message
|
|
m4_divert_text([HELP_END], [
|
|
In order to facilitate the configuration of Abinit, you can save the options
|
|
you regularly use into a file. For full instructions, please consult the
|
|
doc/build/config-template.ac9 file in this directory tree.
|
|
|
|
A lot more documentation on how to build and run Abinit is available on the
|
|
Abinit Wiki. Please consult it at https://wiki.abinit.org/ whenever needed.
|
|
Examples of configuration files for clusters are available at
|
|
https://github.com/abinit/abiconfig.
|
|
])
|
|
|
|
# Initialize Autoconf
|
|
AC_PREREQ(2.59)
|
|
AC_INIT([ABINIT],
|
|
[m4_esyscmd([config/scripts/git-version-gen .tarball-version])],
|
|
[https://bugs.launchpad.net/abinit/],
|
|
[abinit])
|
|
AC_REVISION([Autotools support for ABINIT 9])
|
|
AC_CONFIG_AUX_DIR([config/gnu])
|
|
AC_CONFIG_MACRO_DIR([config/m4])
|
|
AC_CONFIG_SRCDIR([src/98_main/abinit.F90])
|
|
AC_CONFIG_HEADERS([config.h])
|
|
|
|
# ---------------------------------------------------------------------------- #
|
|
|
|
#
|
|
# Startup
|
|
#
|
|
|
|
ABI_MSG_SECTION([Basic initialization])
|
|
|
|
# Initial setup
|
|
AC_CANONICAL_TARGET
|
|
|
|
# Disable pax to initialise Automake because it causes 'make dist' to fail
|
|
alias pax='/bin/false'
|
|
AM_INIT_AUTOMAKE([1.10 tar-ustar])
|
|
unalias pax
|
|
|
|
# Early Abinit setup - the order is important!
|
|
ABI_INIT_DIRS
|
|
ABI_INIT_VERSION
|
|
ABI_INIT_CPU_INFO
|
|
ABI_INIT_OS_INFO
|
|
ABI_INIT_HEADER
|
|
ABI_INIT_ARCH
|
|
|
|
# Check for common programs
|
|
AC_PROG_MAKE_SET
|
|
AC_PROG_INSTALL
|
|
AC_PROG_LN_S
|
|
AC_PROG_SED
|
|
AC_PROG_AWK
|
|
AC_PROG_GREP
|
|
AC_PATH_PROG(BOURNE_SHELL, sh, /bin/sh)
|
|
AC_PATH_PROG(MV, mv, /bin/false)
|
|
AC_PATH_PROG(PERL, perl, /bin/false)
|
|
AC_PATH_PROG(RM, rm, /bin/false)
|
|
AC_CHECK_PROGS(PATCH, [patch gpatch])
|
|
AC_CHECK_PROGS(TAR, [tar gtar star])
|
|
|
|
# Workaround for the "grep -e" issue on Solaris systems
|
|
AC_PROG_EGREP
|
|
|
|
# Workaround for the wrong path to install-sh on Mac systems
|
|
ABI_PROG_MKDIR_P
|
|
|
|
# Look for a command that provide absolute paths
|
|
AC_CHECK_PROGS(REALPATH, [realpath readlink], [/bin/true])
|
|
test "${REALPATH}" = "readlink" && REALPATH="${REALPATH} -f"
|
|
|
|
# We might need a Python interpreter early on
|
|
ABI_PROG_PYTHON
|
|
|
|
# Define command-line arguments
|
|
ABI_OPTIONS_DEFINE
|
|
|
|
# Read config file and ensure that priorities are respected
|
|
ABI_ENV_BACKUP
|
|
ABI_OPTIONS_BACKUP
|
|
ABI_LOAD_OPTIONS
|
|
ABI_OPTIONS_CFG_TRANSFER
|
|
ABI_OPTIONS_RECALL
|
|
ABI_ENV_RECALL
|
|
|
|
# Set still undefined options
|
|
ABI_OPTIONS_SETUP
|
|
|
|
# Initialize environment, taking options into account
|
|
ABI_ENV_INIT
|
|
|
|
AC_SUBST(CC_LDFLAGS)
|
|
AC_SUBST(CC_LIBS)
|
|
AC_SUBST(CXX_LDFLAGS)
|
|
AC_SUBST(CXX_LIBS)
|
|
AC_SUBST(FC_LDFLAGS)
|
|
AC_SUBST(FC_LIBS)
|
|
|
|
# Initialize install dirs (requires version and config options to be set)
|
|
ABI_INIT_INSTALL_DIRS
|
|
|
|
# Disable wrapping of Fortran compiler by default
|
|
abi_fc_wrap="no"
|
|
|
|
# Save user-defined CPP
|
|
abi_cpp_user="${CPP}"
|
|
|
|
# Set-up required information for core libraries
|
|
ABI_CORELIBS_INIT
|
|
|
|
# ---------------------------------------------------------------------------- #
|
|
|
|
#
|
|
# Build-system information
|
|
#
|
|
|
|
ABI_MSG_SECTION([Build-system information])
|
|
|
|
# Display ABINIT version
|
|
AC_MSG_NOTICE([ABINIT version ${ABINIT_VERSION}])
|
|
AC_MSG_NOTICE([])
|
|
|
|
# Display Autotools version information
|
|
ABI_INFO_AUTOTOOLS
|
|
|
|
# Display UI changes
|
|
ABI_INFO_OPTIONS_CHANGED
|
|
|
|
# Display changes in feature triggers
|
|
ABI_INFO_TRIGGERS_CHANGED
|
|
|
|
# ---------------------------------------------------------------------------- #
|
|
|
|
#
|
|
# Check option consistency
|
|
#
|
|
|
|
# NOTE: please hack this section with EXTREME CARE
|
|
|
|
ABI_MSG_SECTION([Option consistency checking])
|
|
|
|
# --------- #
|
|
# Libraries #
|
|
# --------- #
|
|
|
|
abi_optchk_ok="yes"
|
|
|
|
AC_MSG_NOTICE([checking consistency of command-line options])
|
|
|
|
# C-CLOCK requires the building of 02_clib
|
|
if test "${abi_cclock_enable}" = "yes"; then
|
|
if test "${abi_clib_enable}" = "" -o "${abi_clib_enable}" = "no"; then
|
|
AC_MSG_NOTICE([|---> enabling CLib (required by CClock, experimental!)])
|
|
abi_clib_enable="yes"
|
|
abi_optchk_ok="no"
|
|
fi
|
|
fi
|
|
|
|
# Only one of MPI I/O and NetCDF I/O can be the default
|
|
if test "${abi_netcdf_default_enable}" = "yes" -a \
|
|
"${abi_mpi_io_default_enable}" = "yes"; then
|
|
AC_MSG_ERROR([MPI I/O and NetCDF are mutually exclusive default I/O modes
|
|
These maintainer options should only be used for testing
|
|
purposes. Please do not use them unless you really know
|
|
what you are doing.])
|
|
fi
|
|
|
|
# Closing remarks
|
|
if test "${abi_optchk_ok}" = "yes"; then
|
|
AC_MSG_NOTICE([|---> all OK])
|
|
fi
|
|
AC_MSG_NOTICE([])
|
|
|
|
# ------------------- #
|
|
# Final step: parsing #
|
|
# ------------------- #
|
|
|
|
ABI_OPTIONS_PARSE
|
|
AC_MSG_NOTICE([|---> all OK])
|
|
|
|
# ---------------------------------------------------------------------------- #
|
|
|
|
#
|
|
# Feature triggers startup
|
|
#
|
|
|
|
ABI_MSG_SECTION([Feature triggers and architecture startup])
|
|
|
|
# Init Steredeg core features
|
|
SD_CORE_INIT
|
|
|
|
# Do we want to use fallbacks? (must be first)
|
|
ABI_FALLBACKS_INIT
|
|
|
|
# ------------------------------------ #
|
|
|
|
# Prepare MPI support
|
|
ABI_MPI_INIT
|
|
|
|
# Prepare GPU support (requires MPI)
|
|
# Note: must be done after MPI
|
|
ABI_GPU_INIT
|
|
if test "${abi_gpu_enable}" = "yes" -a "${abi_mpi_enable}" != "yes"; then
|
|
AC_MSG_ERROR([GPU support requires MPI])
|
|
fi
|
|
|
|
# ------------------------------------ #
|
|
|
|
# Init triggers parameters (must be call after we know about fallbacks)
|
|
# Note: MPI and GPU must be initialized after feature triggers
|
|
ABI_TRIGGERS_INIT
|
|
|
|
# ---------------------------------------------------------------------------- #
|
|
|
|
#
|
|
# C support
|
|
#
|
|
|
|
ABI_MSG_SECTION([C support])
|
|
|
|
# Set basic Abinit C parameters
|
|
# Note: advanced fetaures are set later on
|
|
ABI_PROG_CC
|
|
|
|
# ---------------------------------------------------------------------------- #
|
|
|
|
#
|
|
# C++ support
|
|
#
|
|
|
|
ABI_MSG_SECTION([C++ support])
|
|
|
|
# Set basic Abinit C++ parameters
|
|
# Note: advanced fetaures are set later on
|
|
ABI_PROG_CXX
|
|
|
|
# ---------------------------------------------------------------------------- #
|
|
|
|
#
|
|
# Fortran support
|
|
#
|
|
|
|
ABI_MSG_SECTION([Fortran support])
|
|
|
|
# Set basic Abinit Fortran parameters
|
|
# Note: advanced fetaures are set later on
|
|
ABI_PROG_FC
|
|
|
|
# Set default file extensions
|
|
ABI_FC_EXTENSIONS
|
|
|
|
# Get module file case
|
|
ABI_FC_MOD_CASE
|
|
|
|
# The IBM Fortran compiler crashes if the mpi module is included
|
|
# more than once
|
|
if test "${abi_fc_vendor}" = "ibm" -a "${abi_mpi_enable}" = "yes"; then
|
|
AC_MSG_NOTICE([activating MPI workaround for the IBM Fortran compiler])
|
|
AC_DEFINE([HAVE_MPI_INCLUDED_ONCE], 1,
|
|
[Define to 1 if you are using XLF.])
|
|
fi
|
|
|
|
# Wrap Fortran compiler calls if needed or requested
|
|
# Note: must be the last step of basic Fortran configuration
|
|
if test "${abi_fc_wrapper_enable}" = "yes"; then
|
|
abi_fc_wrap="yes"
|
|
fi
|
|
|
|
# FIXME: obsolete mechanism
|
|
AC_SUBST(fc_mod_fcflags)
|
|
|
|
# ---------------------------------------------------------------------------- #
|
|
|
|
#
|
|
# Hints
|
|
#
|
|
|
|
ABI_MSG_SECTION([Hints for the build flags])
|
|
|
|
# Look for a true C preprocessor
|
|
if test "${TRUE_CPP}" = ""; then
|
|
AC_CHECK_PROGS([TRUE_CPP],[cpp])
|
|
fi
|
|
if test "${TRUE_CPP}" = ""; then
|
|
AC_PATH_PROG([TRUE_CPP],[cpp])
|
|
fi
|
|
if test "${TRUE_CPP}" = ""; then
|
|
if test -x "/lib/cpp"; then
|
|
TRUE_CPP="/lib/cpp"
|
|
fi
|
|
fi
|
|
AC_MSG_CHECKING([for a true C preprocessor])
|
|
if test "${TRUE_CPP}" = ""; then
|
|
AC_MSG_RESULT([none])
|
|
else
|
|
AC_MSG_RESULT([${TRUE_CPP}])
|
|
fi
|
|
|
|
# Set Fortran preprocessor when needed
|
|
if test "${abi_fc_wrap}" = "yes"; then
|
|
AC_MSG_CHECKING([for a Fortran-compatible C preprocessor])
|
|
if test "${FPP}" = ""; then
|
|
if test "${abi_cpp_user}" != ""; then
|
|
FPP="${abi_cpp_user}"
|
|
else
|
|
if test "${TRUE_CPP}" != ""; then
|
|
FPP="${TRUE_CPP}"
|
|
else
|
|
FPP="${CPP}"
|
|
fi
|
|
fi
|
|
fi
|
|
AC_MSG_RESULT([${FPP}])
|
|
fi
|
|
|
|
# FIXME: set CPP vendor
|
|
case "${target_os}" in
|
|
aix*)
|
|
abi_cpp_vendor="ibm"
|
|
abi_xpp_vendor="ibm"
|
|
abi_fpp_vendor="ibm"
|
|
;;
|
|
*)
|
|
abi_cpp_vendor="default"
|
|
abi_xpp_vendor="default"
|
|
abi_fpp_vendor="default"
|
|
;;
|
|
esac
|
|
case "${abi_fc_vendor}" in
|
|
ibm)
|
|
abi_fpp_vendor="ibm"
|
|
;;
|
|
esac
|
|
AC_MSG_NOTICE([setting C preprocessor vendor to '${abi_cpp_vendor}'])
|
|
AC_MSG_NOTICE([setting C++ preprocessor vendor to '${abi_xpp_vendor}'])
|
|
AC_MSG_NOTICE([setting Fortran preprocessor vendor to '${abi_fpp_vendor}'])
|
|
|
|
# Preset flags to have the source building properly
|
|
if test "${abi_hints_enable}" = "yes"; then
|
|
|
|
# C support
|
|
ABI_CPP_HINTS
|
|
ABI_CC_HINTS
|
|
|
|
# C++ support
|
|
ABI_XPP_HINTS
|
|
ABI_CXX_HINTS
|
|
|
|
# Fortran support
|
|
ABI_FPP_HINTS
|
|
ABI_FC_HINTS
|
|
|
|
# Library archiver support
|
|
#ABI_AR_HINTS
|
|
|
|
fi
|
|
|
|
# Set Fortran flags according to openMP options
|
|
_ABI_OMP_SET_FCFLAGS
|
|
|
|
# Set Fortran preprocessing flags
|
|
if test "${abi_fc_wrap}" = "yes"; then
|
|
test "${FPPFLAGS}" = "" && FPPFLAGS="${FPPFLAGS_HINTS_EXT}"
|
|
fi
|
|
|
|
# Display Fortran preprocessing parameters
|
|
AC_MSG_CHECKING([which Fortran preprocessor to use])
|
|
if test "${FPP}" = ""; then
|
|
AC_MSG_RESULT([none])
|
|
else
|
|
AC_MSG_RESULT([${FPP}])
|
|
fi
|
|
AC_MSG_CHECKING([which Fortran preprocessor flags to apply])
|
|
if test "${FPPFLAGS}" = ""; then
|
|
AC_MSG_RESULT([none])
|
|
else
|
|
AC_MSG_RESULT([${FPPFLAGS}])
|
|
fi
|
|
|
|
# Display Fortran compiler wrapper status
|
|
AC_MSG_CHECKING([whether to wrap Fortran compiler calls])
|
|
AC_MSG_RESULT([${abi_fc_wrap}])
|
|
|
|
# Export true CPPFLAGS (required by LibXC)
|
|
AC_SUBST(CPPFLAGS_HINTS_EXT)
|
|
|
|
# ---------------------------------------------------------------------------- #
|
|
|
|
#
|
|
# Debugging
|
|
#
|
|
# NOTE:
|
|
#
|
|
# * Please do not try to set-up the *FLAGS_DEBUG variables manually,
|
|
# as they will systematically be overwritten. These flags should be
|
|
# modified by the --with-*-dbgflags options only, and --enable-debug
|
|
# set to "yes" in this case.
|
|
#
|
|
|
|
ABI_MSG_SECTION([Debugging])
|
|
|
|
# Init debug flags
|
|
ABI_DEBUG_INIT([${abi_debug_flavor}])
|
|
|
|
# Activate "design-by-contract" debugging tests when paranoid
|
|
AC_MSG_CHECKING([whether to activate design-by-contract debugging])
|
|
if test "${abi_debug_flavor}" = "paranoid"; then
|
|
AC_DEFINE([DEBUG_CONTRACT], 1,
|
|
[Define to 1 if you want to activate design-by-contract debugging tests.])
|
|
AC_MSG_RESULT([yes])
|
|
else
|
|
AC_MSG_RESULT([no])
|
|
fi
|
|
AM_CONDITIONAL(DO_BUILD_32_CONTRACT,
|
|
[test "${abi_debug_flavor}" = "paranoid"])
|
|
|
|
# ---------------------------------------------------------------------------- #
|
|
|
|
#
|
|
# Optimizations
|
|
#
|
|
# NOTE: The optimizations will be taken from *FLAGS_OPTIM environment
|
|
# variables if with_optim_flavor is set to yes, or set to predefined values
|
|
# for other optimization profiles.
|
|
#
|
|
|
|
ABI_MSG_SECTION([Optimizations])
|
|
|
|
# Disable optimizations if debug mode is activated in source files
|
|
if test "${abi_debug_source}" = "yes"; then
|
|
if test "${abi_optim_flavor}" != "none"; then
|
|
AC_MSG_WARN([disabling optimizations])
|
|
fi
|
|
abi_optim_flavor="none"
|
|
fi
|
|
|
|
# Init optimization flags
|
|
# Note: must be done only once debugging is configured
|
|
ABI_OPTIM_INIT([${abi_optim_flavor}])
|
|
|
|
# FIXME: 20_datashare does not support optimizations
|
|
AC_MSG_NOTICE([disabling optimizations for src/20_datashare/])
|
|
fcflags_opt_20_datashare="-O0"
|
|
AC_MSG_NOTICE([disabling optimizations for src/43_ptgroups/])
|
|
fcflags_opt_43_ptgroups="-O0"
|
|
|
|
# FIXME: AMD LLVM fork for OpenMP GPU (aka AOMP) has a sensitive OpenMP GPU implementation, so we enable it where needed.
|
|
# Checked with version 16.0.0 shipped with ROCm 5.6.0 (July 2023).
|
|
if test "${abi_fc_vendor}" == "llvm" -a "${abi_gpu_flavor}" == "hip-double"; then
|
|
if test "${abi_openmp_offload_enable}" = "yes"; then
|
|
fcflags_opt_28_numeric_noabirule="${amd_openmp_flags}"
|
|
fcflags_opt_45_xgTools="${amd_openmp_flags}"
|
|
fcflags_opt_46_ghc_omp="${amd_openmp_flags}"
|
|
fcflags_opt_66_nonlocal="${amd_openmp_flags}"
|
|
fcflags_opt_66_wfs="${amd_openmp_flags}"
|
|
fcflags_opt_67_common="${amd_openmp_flags}"
|
|
fcflags_opt_79_seqpar_mpi="${amd_openmp_flags}"
|
|
fcflags_opt_98_main="${amd_openmp_flags}"
|
|
fi
|
|
fi
|
|
|
|
# Set per-directory Fortran optimizations
|
|
# Note: must be done only once FCFLAGS_OPTIM is set
|
|
ABI_OPTFLAGS_DIRS([${FCFLAGS_OPTIM}])
|
|
|
|
# ---------------------------------------------------------------------------- #
|
|
# ---------------------------------------------------------------------------- #
|
|
|
|
#
|
|
# Save configuration
|
|
#
|
|
|
|
ABI_MSG_SECTION([Build flags])
|
|
|
|
# Set-up target and binary package names
|
|
# Note: requires knowledge of Fortran compiler
|
|
ABI_INIT_TARGET
|
|
ABINIT_BINARY_PACKAGE="${PACKAGE}-${VERSION}_${ABINIT_TARGET}"
|
|
AC_SUBST(ABINIT_BINARY_PACKAGE)
|
|
|
|
# Preserve environment
|
|
ABI_ENV_BACKUP
|
|
|
|
# Look for archiver
|
|
if test "${AR}" = ""; then
|
|
AC_CHECK_PROGS(AR,[ar xiar])
|
|
fi
|
|
|
|
# Set archiver command flag
|
|
test "${ARFLAGS_CMD}" = "" && ARFLAGS_CMD="rc"
|
|
AC_SUBST(ARFLAGS_CMD)
|
|
|
|
# Look for ranlib
|
|
AC_PROG_RANLIB
|
|
|
|
# Restore back compile flags
|
|
CFLAGS="${abi_env_CFLAGS}"
|
|
CXXFLAGS="${abi_env_CXXFLAGS}"
|
|
FCFLAGS="${abi_env_FCFLAGS}"
|
|
|
|
# We want to be able access the archiver from anywhere
|
|
AC_SUBST(AR)
|
|
AC_SUBST(ARFLAGS)
|
|
|
|
# Report the use of libtool-related options
|
|
AC_SUBST(enable_shared)
|
|
AC_SUBST(enable_static)
|
|
AC_SUBST(with_gnu_ld)
|
|
|
|
# Final adjustments for library archiver
|
|
test "${ARFLAGS}" = "" && \
|
|
ARFLAGS="${ARFLAGS_DEBUG} ${ARFLAGS_OPTIM} ${ARFLAGS_HINTS} ${ARFLAGS_EXTRA} ${ARFLAGS_CMD}"
|
|
|
|
# Final adjustments for C
|
|
test "${CFLAGS}" = "" && \
|
|
CFLAGS="${CFLAGS_DEBUG} ${CFLAGS_OPTIM} ${CFLAGS_HINTS} ${CFLAGS_EXTRA}"
|
|
test "${CC_LDFLAGS}" = "" && \
|
|
CC_LDFLAGS="${CC_LDFLAGS_DEBUG} ${CC_LDFLAGS_OPTIM} ${CC_LDFLAGS_HINTS} ${CC_LDFLAGS_EXTRA}"
|
|
test "${CC_LIBS}" = "" && \
|
|
CC_LIBS="${CC_LIBS_DEBUG} ${CC_LIBS_OPTIM} ${CC_LIBS_HINTS} ${CC_LIBS_EXTRA}"
|
|
|
|
# Final adjustments for C++
|
|
test "${CXXFLAGS}" = "" && \
|
|
CXXFLAGS="${CXXFLAGS_DEBUG} ${CXXFLAGS_OPTIM} ${CXXFLAGS_HINTS} ${CXXFLAGS_EXTRA}"
|
|
test "${CXX_LDFLAGS}" = "" && \
|
|
CXX_LDFLAGS="${CXX_LDFLAGS_DEBUG} ${CXX_LDFLAGS_OPTIM} ${CXX_LDFLAGS_HINTS} ${CXX_LDFLAGS_EXTRA}"
|
|
test "${CXX_LIBS}" = "" && \
|
|
CXX_LIBS="${CXX_LIBS_DEBUG} ${CXX_LIBS_OPTIM} ${CXX_LIBS_HINTS} ${CXX_LIBS_EXTRA}"
|
|
|
|
# Final adjustments for Fortran
|
|
# Note: FCFLAGS_OPTIM must not be included (per-directory optimizations)
|
|
test "${FCFLAGS}" = "" && \
|
|
FCFLAGS="${FCFLAGS_DEBUG} ${FCFLAGS_HINTS} ${FCFLAGS_OPENMP} ${FCFLAGS_OPENMP_OFFLOAD} ${FCFLAGS_EXTRA}"
|
|
test "${FC_LDFLAGS}" = "" && \
|
|
FC_LDFLAGS="${FC_LDFLAGS_DEBUG} ${FC_LDFLAGS_OPTIM} ${FC_LDFLAGS_HINTS} ${FC_LDFLAGS_EXTRA}"
|
|
test "${FC_LIBS}" = "" && \
|
|
FC_LIBS="${FC_LIBS_DEBUG} ${FC_LIBS_OPTIM} ${FC_LIBS_HINTS} ${FC_LIBS_EXTRA}"
|
|
|
|
# Final adjustments for preprocessors
|
|
test "${CPPFLAGS}" = "" && \
|
|
CPPFLAGS="${CPPFLAGS_DEBUG} ${CPPFLAGS_OPTIM} ${CPPFLAGS_HINTS} ${CPPFLAGS_EXTRA}"
|
|
test "${XPPFLAGS}" = "" && \
|
|
XPPFLAGS="${XPPFLAGS_DEBUG} ${XPPFLAGS_OPTIM} ${XPPFLAGS_HINTS} ${XPPFLAGS_EXTRA}"
|
|
test "${FPPFLAGS}" = "" -a "${abi_fc_wrap}" = "no" && \
|
|
FPPFLAGS="${FPPFLAGS_DEBUG} ${FPPFLAGS_OPTIM} ${FPPFLAGS_HINTS} ${FPPFLAGS_EXTRA}"
|
|
|
|
# Determine Fortran link flags (FCLIBS)
|
|
# This is needed after FCFLAGS has been set as some compilers have extra
|
|
# libraries linked due to optimizations levels or OpenMP
|
|
# This step would be performed inside AC_FC_WRAPPERS but it fails due to a mischievous
|
|
# double-quote in FCLIBS when using Cray compiler, so we trim it out in that specific case.
|
|
AC_FC_LIBRARY_LDFLAGS
|
|
|
|
if test "${abi_fc_vendor}" = "cray"; then
|
|
FCLIBS=`echo ${FCLIBS} | tr '"' ' '`
|
|
fi
|
|
|
|
# Determine Fortran-C name mangling scheme
|
|
AC_FC_WRAPPERS
|
|
|
|
# FIXME: temporary workaround for Macs
|
|
if test "${abi_cpu_platform}" = "apple"; then
|
|
AC_MSG_WARN([${abi_cpu_platform} is not able to handle full link information])
|
|
AC_MSG_WARN([static builds will fail])
|
|
else
|
|
AC_MSG_NOTICE([static builds may be performed])
|
|
FC_LIBS="${FC_LIBS} ${FCLIBS}"
|
|
fi
|
|
|
|
# ---------------------------------------------------------------------------- #
|
|
# ---------------------------------------------------------------------------- #
|
|
|
|
#
|
|
# Advanced language features
|
|
#
|
|
|
|
# Note: these tests have to be performed after the flags have been
|
|
# saved.
|
|
|
|
ABI_MSG_SECTION([Advanced language features])
|
|
|
|
# Look for desired C features
|
|
ABI_CC_FEATURES
|
|
|
|
# Look for desired Fortran features
|
|
ABI_FC_FEATURES
|
|
|
|
# Look for desired Python features
|
|
ABI_PY_FEATURES
|
|
|
|
# ---------------------------------------------------------------------------- #
|
|
# ---------------------------------------------------------------------------- #
|
|
|
|
#
|
|
# Platform-specific libraries
|
|
#
|
|
|
|
# Note: these tests have to be performed after the flags have been
|
|
# saved.
|
|
|
|
ABI_MSG_SECTION([Platform-specific libraries])
|
|
|
|
AC_MSG_CHECKING([which operating system we have])
|
|
AC_MSG_RESULT([${target_os}])
|
|
|
|
# Basic mathematical functions
|
|
AC_LANG_PUSH([C])
|
|
AC_SEARCH_LIBS([expl], [m ml],
|
|
[abi_math_expl_ok="yes"], [abi_math_expl_ok="no"])
|
|
AC_SEARCH_LIBS([logl], [m ml],
|
|
[abi_math_logl_ok="yes"], [abi_math_logl_ok="no"])
|
|
AC_LANG_POP([C])
|
|
|
|
# ---------------------------------------------------------------------------- #
|
|
# ---------------------------------------------------------------------------- #
|
|
|
|
#
|
|
# Multicore architecture support
|
|
|
|
# Note: the following settings will be used by the connectors.
|
|
|
|
ABI_MSG_SECTION([Multicore architecture support])
|
|
|
|
# MPI support
|
|
ABI_MPI_DETECT
|
|
if test "${abi_mpi_enable}" = "yes"; then
|
|
ABI_MPI_DUMP
|
|
fi
|
|
|
|
# OpenMP support
|
|
# Note: OPENMP_INIT has to be done after openMP Fortran flags have been set
|
|
ABI_OPENMP_INIT
|
|
ABI_OPENMP_DETECT
|
|
|
|
# GPU support
|
|
ABI_GPU_DETECT
|
|
|
|
# ---------------------------------------------------------------------------- #
|
|
# ---------------------------------------------------------------------------- #
|
|
|
|
#
|
|
# Optional features - Initialization
|
|
#
|
|
|
|
ABI_MSG_SECTION([Initialization of optional features])
|
|
|
|
# Init HDF5
|
|
#SD_HDF5_INIT([optional fail no-fortran])
|
|
#SD_HDF5_INIT([optional warn no-fortran])
|
|
SD_HDF5_INIT([required no-fortran warn])
|
|
|
|
# Init FFTW3
|
|
SD_FFTW3_INIT([optional skip])
|
|
|
|
# Init Levmar
|
|
SD_LEVMAR_INIT([optional fail])
|
|
|
|
# Init LibPSML
|
|
#SD_LIBPSML_INIT([optional fail])
|
|
SD_LIBPSML_INIT([optional warn])
|
|
|
|
# Init LibXC
|
|
#SD_LIBXC_INIT([no-fortran optional fail])
|
|
SD_LIBXC_INIT([required no-fortran warn])
|
|
|
|
# Init NetCDF
|
|
#SD_NETCDF_INIT([optional fail])
|
|
SD_NETCDF_INIT([required warn])
|
|
|
|
# Init NetCDF-Fortran
|
|
#SD_NETCDF_FORTRAN_INIT([optional fail])
|
|
SD_NETCDF_FORTRAN_INIT([required warn])
|
|
|
|
# Init PAPI
|
|
SD_PAPI_INIT([optional fail])
|
|
|
|
# Init PFFT
|
|
SD_PFFT_INIT([optional skip])
|
|
|
|
# Init TRIQS
|
|
SD_TRIQS_INIT([optional fail])
|
|
|
|
# Init Wannier90
|
|
#SD_WANNIER90_INIT([optional fail], [-lwannier90])
|
|
SD_WANNIER90_INIT([optional warn], [-lwannier90])
|
|
|
|
# Init XMLF90
|
|
#SD_XMLF90_INIT([optional fail])
|
|
SD_XMLF90_INIT([optional warn])
|
|
|
|
# Init KOKKOS
|
|
SD_KOKKOS_INIT([optional fail])
|
|
#SD_KOKKOS_INIT([optional warn])
|
|
|
|
# Init YAKL
|
|
SD_YAKL_INIT([optional fail])
|
|
#SD_YAKL_INIT([optional warn])
|
|
|
|
# ---------------------------------------------------------------------------- #
|
|
# ---------------------------------------------------------------------------- #
|
|
|
|
#
|
|
# Linear algebra support
|
|
#
|
|
|
|
ABI_MSG_SECTION([Linear algebra support])
|
|
|
|
#SD_LINALG_INIT([required warn]) # This is called by ABI_LINALG_INIT now
|
|
#SD_LINALG_INIT_FLAVOR # This is called by ABI_LINALG_INIT now
|
|
|
|
ABI_LINALG_INIT
|
|
|
|
ABI_LINALG_DETECT
|
|
|
|
# the minimum needed to declare linalg working...
|
|
sd_linalg_ok="no"
|
|
test "${sd_linalg_has_blas}" = "yes" -a "${sd_linalg_has_lapack}" = "yes" && sd_linalg_ok="yes"
|
|
|
|
# ---------------------------------------------------------------------------- #
|
|
# ---------------------------------------------------------------------------- #
|
|
|
|
#
|
|
# Optimized FFT support (must be done after linear algebra is fully configured)
|
|
#
|
|
|
|
ABI_MSG_SECTION([Optimized FFT support])
|
|
|
|
if test "${sd_linalg_enable}" = "yes"; then
|
|
SD_FFT_INIT
|
|
|
|
SD_FFT_DETECT
|
|
else
|
|
echo "Skip FFT setting : linalg not enabled..."
|
|
fi
|
|
|
|
# ---------------------------------------------------------------------------- #
|
|
# ---------------------------------------------------------------------------- #
|
|
|
|
#
|
|
# Profiling and performance analysis
|
|
#
|
|
|
|
#ABI_MSG_SECTION([Profiling and performance analysis])
|
|
|
|
# ---------------------------------------------------------------------------- #
|
|
|
|
#
|
|
# Feature triggers (optional features)
|
|
#
|
|
|
|
ABI_MSG_SECTION([Feature triggers])
|
|
|
|
# VERY IMPORTANT: THE ORDER IS CRITICAL - DO NOT CHANGE IT!
|
|
|
|
# Note: some of the following packages are mandatory to run Abinit with
|
|
# full capabilities, although internal implementations may provide
|
|
# limited functionality in some cases
|
|
|
|
# ------------------------------ #
|
|
|
|
# PAPI library support
|
|
SD_PAPI_DETECT
|
|
AC_MSG_CHECKING([whether to enable the internal Abinit timer])
|
|
AC_MSG_RESULT([${abi_timer_enable}])
|
|
if test "${sd_papi_ok}" != "yes"; then
|
|
if test "${abi_timer_enable}" = "yes"; then
|
|
AC_DEFINE([HAVE_TIMER_ABINIT], 1,
|
|
[Define to 1 if you want to use the Abinit timer.])
|
|
fi
|
|
fi
|
|
|
|
# ------------------------------ #
|
|
|
|
# HDF5 library support
|
|
SD_HDF5_DETECT
|
|
|
|
AC_MSG_NOTICE([])
|
|
AC_MSG_NOTICE([dumping HDF5 parameters for diagnostics])
|
|
AC_MSG_NOTICE([---------------------------------------])
|
|
AC_MSG_NOTICE([])
|
|
AC_MSG_NOTICE([ * sd_hdf5_enable = ${sd_hdf5_enable}])
|
|
AC_MSG_NOTICE([ * sd_hdf5_status = ${sd_hdf5_status}])
|
|
AC_MSG_NOTICE([ * sd_hdf5_h5cc = ${sd_hdf5_h5cc}])
|
|
AC_MSG_NOTICE([ * sd_hdf5_has_mpi = ${sd_hdf5_has_mpi}])
|
|
AC_MSG_NOTICE([])
|
|
|
|
## Parallel NetCDF requires a few conditions to work
|
|
# TODO abi_netcdf_mpi_enable not defined
|
|
#if test "${abi_netcdf_mpi_enable}" = "yes"; then
|
|
# if test "${sd_mpi_ok}" != "yes"; then
|
|
# AC_MSG_ERROR([parallel NetCDF requested but MPI is not available])
|
|
# fi
|
|
# if test "${abi_mpi_io_enable}" != "yes"; then
|
|
# AC_MSG_ERROR([parallel NetCDF requested but MPI I/O is disabled])
|
|
# fi
|
|
# if test "${sd_hdf5_mpi_ok}" != "yes"; then
|
|
# AC_MSG_ERROR([parallel NetCDF requested but parallel HDF5 is not available])
|
|
# fi
|
|
#fi
|
|
|
|
# NetCDF library support (must be done after HDF5)
|
|
SD_NETCDF_DETECT
|
|
|
|
AC_MSG_NOTICE([])
|
|
AC_MSG_NOTICE([dumping NetCDF parameters for diagnostics])
|
|
AC_MSG_NOTICE([-----------------------------------------])
|
|
AC_MSG_NOTICE([])
|
|
AC_MSG_NOTICE([ * sd_netcdf_ok = ${sd_netcdf_ok}])
|
|
AC_MSG_NOTICE([ * sd_netcdf_mpi_ok = ${sd_netcdf_mpi_ok}])
|
|
AC_MSG_NOTICE([ * sd_netcdf_enable = ${sd_netcdf_enable}])
|
|
AC_MSG_NOTICE([ * sd_netcdf_prefix = ${sd_netcdf_prefix}])
|
|
AC_MSG_NOTICE([])
|
|
|
|
|
|
# NetCDF library support (must be done after HDF5)
|
|
SD_NETCDF_FORTRAN_DETECT
|
|
|
|
AC_MSG_NOTICE([])
|
|
AC_MSG_NOTICE([dumping NetCDFF parameters for diagnostics])
|
|
AC_MSG_NOTICE([------------------------------------------])
|
|
AC_MSG_NOTICE([])
|
|
AC_MSG_NOTICE([ * sd_netcdf_fortran_ok = ${sd_netcdf_fortran_ok}])
|
|
AC_MSG_NOTICE([ * sd_netcdf_fortran_mpi_ok = ${sd_netcdf_fortran_mpi_ok}])
|
|
AC_MSG_NOTICE([ * sd_netcdf_fortran_enable = ${sd_netcdf_fortran_enable}])
|
|
AC_MSG_NOTICE([ * sd_netcdf_fortran_prefix = ${sd_netcdf_fortran_prefix}])
|
|
AC_MSG_NOTICE([])
|
|
|
|
|
|
# XMLF90 library support
|
|
SD_XMLF90_DETECT
|
|
|
|
# LibPSML library support
|
|
if test "${sd_xmlf90_ok}" = "yes"; then
|
|
SD_LIBPSML_DETECT
|
|
else
|
|
if test "${sd_libpsml_enable}" = "auto"; then
|
|
sd_libpsml_enable="no"
|
|
else
|
|
if test "${sd_libpsml_enable}" != "no"; then
|
|
#AC_MSG_ERROR([LibPSML support has been requested but XMLF90 does not work
|
|
AC_MSG_WARN([LibPSML support has been requested but XMLF90 does not work
|
|
Please point the configuration to a working XMLF90
|
|
installation or disable LibPSML support])
|
|
fi
|
|
fi
|
|
fi
|
|
AM_CONDITIONAL([DO_BUILD_PSML],
|
|
[test "${sd_libpsml_enable}" = "yes " -a "${sd_libpsml_ok}" = "yes"])
|
|
|
|
# ------------------------------ #
|
|
|
|
# Levmar library support
|
|
SD_LEVMAR_DETECT
|
|
|
|
# ------------------------------ #
|
|
|
|
# LibXC library support
|
|
#ABI_LIBXC_DETECT(2, 2)
|
|
SD_LIBXC_DETECT
|
|
AM_CONDITIONAL([DO_BUILD_01_LIBXC_EXT],
|
|
[test "${sd_libxc_ok}" = "yes"])
|
|
|
|
# TRIQS support
|
|
SD_TRIQS_DETECT
|
|
AM_CONDITIONAL([DO_BUILD_67_TRIQS_EXT],
|
|
[test "${sd_triqs_enable}" = "yes" -a "${sd_triqs_ok}" = "yes"])
|
|
|
|
# Wannier90 library support
|
|
SD_WANNIER90_DETECT
|
|
|
|
# AtomPAW integration support
|
|
ABI_CHECK_ATOMPAW_BINS
|
|
|
|
# KOKKOS library support
|
|
SD_KOKKOS_DETECT
|
|
|
|
# YAKL library support
|
|
SD_YAKL_DETECT
|
|
|
|
# ---------------------------------------------------------------------------- #
|
|
# ---------------------------------------------------------------------------- #
|
|
|
|
#
|
|
# Build workflow
|
|
#
|
|
|
|
ABI_MSG_SECTION([Build workflow])
|
|
|
|
# Initialize the low-level routines of ABINIT as an external component
|
|
SD_ABINIT_COMMON_INIT([optional skip])
|
|
|
|
SD_ABINIT_COMMON_DETECT
|
|
|
|
# Initialize the LibPAW routines as an external component
|
|
SD_LIBPAW_INIT([optional skip])
|
|
|
|
SD_LIBPAW_DETECT
|
|
|
|
# ------------------------------ #
|
|
|
|
# Init BigDFT (requires knowledge about ABINIT Common and LibPAW)
|
|
if test "${sd_libxc_enable}" = "yes" -a "${sd_linalg_enable}" = "yes"; then
|
|
#SD_BIGDFT_INIT([optional fail])
|
|
SD_BIGDFT_INIT([optional warn])
|
|
|
|
# BigDFT library support (requires linear algebra and LibXC)
|
|
SD_BIGDFT_DETECT
|
|
else
|
|
echo "Skip BIGDFT setting : libxc not enabled..."
|
|
fi
|
|
|
|
# ------------------------------ #
|
|
|
|
AC_MSG_CHECKING([how to build the components of ABINIT])
|
|
abi_build_steps=""
|
|
if test "${sd_abinit_common_ok}" = "yes"; then
|
|
test "${abi_build_steps}" = "" || abi_build_steps="${abi_build_steps}+"
|
|
abi_build_steps="${abi_build_steps}common"
|
|
fi
|
|
if test "${sd_libpaw_ok}" = "yes"; then
|
|
test "${abi_build_steps}" = "" || abi_build_steps="${abi_build_steps}+"
|
|
abi_build_steps="${abi_build_steps}libpaw"
|
|
fi
|
|
if test "${sd_bigdft_ok}" = "yes"; then
|
|
test "${abi_build_steps}" = "" || abi_build_steps="${abi_build_steps}+"
|
|
abi_build_steps="${abi_build_steps}bigdft"
|
|
fi
|
|
if test "${abi_build_steps}" = ""; then
|
|
abi_build_steps="monolith"
|
|
else
|
|
abi_build_steps="${abi_build_steps}+core"
|
|
fi
|
|
AC_MSG_RESULT([${abi_build_steps}])
|
|
|
|
# Allow the separate build of ABINIT Common
|
|
AM_CONDITIONAL([DO_BUILD_SHARED_COMMON],
|
|
[test "{sd_abinit_common_ok}" != "yes"])
|
|
|
|
# Allow the separate build of LibPAW
|
|
AM_CONDITIONAL([DO_BUILD_SHARED_LIBPAW],
|
|
[test "{sd_libpaw_ok}" != "yes"])
|
|
|
|
# FIXME: Let LibPAW know it is embedded in ABINIT
|
|
AC_DEFINE([HAVE_LIBPAW_ABINIT], 1,
|
|
[Must be defined to 1 to have LibPAW properly working.])
|
|
|
|
# Warn the user if support for wavelets is ill-configured
|
|
if test "${abi_build_steps}" = "monolith" -a "${abi_bigdft_enable}" = "yes"; then
|
|
AC_MSG_WARN([BigDFT will soon require the separate installation of ABINIT Common and LibPAW])
|
|
fi
|
|
|
|
# ---------------------------------------------------------------------------- #
|
|
# ---------------------------------------------------------------------------- #
|
|
|
|
#
|
|
# Final check of feature triggers
|
|
#
|
|
|
|
ABI_MSG_SECTION([Feature triggers summary])
|
|
|
|
# Display summary table
|
|
ABI_TRIGGERS_SUMMARY
|
|
|
|
#------------------------ START JMB --------------------------------------#
|
|
# Check status of mandatory fallbacks
|
|
|
|
status=""
|
|
mandatory=""
|
|
|
|
# Check linalg
|
|
if test "${sd_linalg_flavor_req}" != "auto"; then
|
|
if test "${sd_linalg_flavor}" != "${sd_linalg_flavor_req}"; then
|
|
ABI_MSG_NOTICE_L([linalg-flavor],[__INFO__ : the linalg flavor is not the one requested!])
|
|
fi
|
|
fi
|
|
|
|
if test "${sd_linalg_enable}" != "yes"; then
|
|
ABI_MSG_NOTICE_L([linalg-mandatory],[__CAUTION__ : linalg is __MANDATORY__ !])
|
|
mandatory="#"
|
|
fi
|
|
|
|
# Check HDF5 serial
|
|
if test "${sd_hdf5_enable}" = "no"; then
|
|
ABI_MSG_NOTICE_L([hdf5-mandatory],[__CAUTION__ : HDF5 is __MANDATORY__ !])
|
|
mandatory="#"
|
|
else
|
|
if test "${sd_hdf5_ok}" != "yes";then
|
|
ABI_MSG_NOTICE_L([hdf5-nw],[__WARNING__ : HDF5 is not __WORKING__ !])
|
|
status="#"
|
|
fi
|
|
fi
|
|
|
|
if test "${sd_hdf5_ok}" = "yes";then
|
|
# Check NetCDF
|
|
if test "${sd_netcdf_enable}" = "no"; then
|
|
ABI_MSG_NOTICE_L([netcdf-mandatory],[__CAUTION__ : NetCDF is __MANDATORY__ !])
|
|
mandatory="#"
|
|
else
|
|
if test "${sd_netcdf_ok}" != "yes";then
|
|
ABI_MSG_NOTICE_L([netcdf-nw],[__WARNING__ : NetCDF is not __WORKING__ !])
|
|
status="#"
|
|
fi
|
|
fi
|
|
|
|
# Check NetCDF_fortran
|
|
if test "${sd_netcdf_fortran_enable}" = "no"; then
|
|
ABI_MSG_NOTICE_L([netcdf_fortran-mandatory],[__CAUTION__ : NetCDF Fortran is __MANDATORY__ !])
|
|
mandatory="#"
|
|
else
|
|
if test "${sd_netcdf_fortran_ok}" != "yes";then
|
|
ABI_MSG_NOTICE_L([netcdf_fortran-nw],[__WARNING__ : NetCDF Fortran is not __WORKING__ !])
|
|
status="#"
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
# Check LibXC
|
|
if test "${sd_libxc_enable}" = "no"; then
|
|
ABI_MSG_NOTICE_L([libxc-mandatory],[__CAUTION__ : LibXC is __MANDATORY__ !])
|
|
mandatory="#"
|
|
else
|
|
if test "${sd_libxc_ok}" != "yes";then
|
|
ABI_MSG_NOTICE_L([libxc-nw],[__WARNING__ : LibXC is not __WORKING__ !])
|
|
status="#"
|
|
fi
|
|
fi
|
|
|
|
# Check Wannier90
|
|
if test "${sd_wannier90_enable}" = "yes"; then
|
|
if test "${sd_wannier90_ok}" != "yes"; then
|
|
ABI_MSG_NOTICE_S([__CAUTION__ : Wannier90 is not __WORKING__ !],
|
|
[ Action : check your Wannier90 installation])
|
|
status="#"
|
|
fi
|
|
fi
|
|
|
|
# Check libPSML
|
|
if test "${sd_libpsml_enable}" = "yes"; then
|
|
if test "${sd_libpsml_ok}" != "yes"; then
|
|
ABI_MSG_NOTICE_S([__CAUTION__ : libPSML is not __WORKING__ !],
|
|
[ Action : check your libPSML installation])
|
|
status="#"
|
|
fi
|
|
fi
|
|
|
|
# Check xmlf90
|
|
if test "${sd_xmlf90_enable}" = "yes"; then
|
|
if test "${sd_xmlf90_ok}" != "yes"; then
|
|
ABI_MSG_NOTICE_S([__CAUTION__ : xmlf90 is not __WORKING__ !],
|
|
[ Action : check your xmlf90 installation])
|
|
status="#"
|
|
fi
|
|
fi
|
|
|
|
# Help to produce libraires
|
|
if test ! -z "${mandatory}"; then
|
|
ABI_MSG_NOTICE_L([help-fb],[We can __help__ you !])
|
|
fi
|
|
|
|
if test ! -z "${status}" -o ! -z "${mandatory}"; then
|
|
ABI_MSG_NOTICE_S([ __Problems must be solved before continuing__ ])
|
|
fi
|
|
|
|
# Always generate a build script for required fallbacks
|
|
#AC_CONFIG_FILES([fallbacks/INSTALL fallbacks/README])
|
|
# AC_CONFIG_FILES([fallbacks/build-abinit-fallbacks.sh])
|
|
#AC_CONFIG_COMMANDS([chmod +x fallbacks/build-abinit-fallbacks.sh])
|
|
#AC_OUTPUT
|
|
# Old formulation: AC_OUTPUT([fallbacks/INSTALL fallbacks/README fallbacks/build-abinit-fallbacks.sh],[chmod +x fallbacks/build-abinit-fallbacks.sh])
|
|
AC_OUTPUT([fallbacks/INSTALL fallbacks/README fallbacks/build-abinit-fallbacks.sh],[chmod +x fallbacks/build-abinit-fallbacks.sh])
|
|
|
|
# Check that we have all required fallbacks
|
|
ABI_FALLBACKS_VALIDATE([${abi_fbk_required}])
|
|
|
|
|
|
# Report situation
|
|
#if test "${abi_fbk_required}" = ""; then
|
|
# AC_MSG_NOTICE([no fallback required - you may run production calculations])
|
|
#else
|
|
# AC_MSG_NOTICE([fallbacks required - you should not run production calculations])
|
|
#fi
|
|
|
|
# Check exit
|
|
if test ! -z "${status}" -o ! -z "${mandatory}"; then
|
|
exit 2
|
|
fi
|
|
|
|
|
|
#-------------------- END JMB --------------------------------------------#
|
|
|
|
# FIXME: copying linear algebra tarball for now,
|
|
# ensuring ~/.abinit/tarballs/ exists
|
|
if test "${abi_fbk_linalg}" = "yes"; then
|
|
tmp_abinit_tardir="${HOME}/.abinit/tarballs"
|
|
tmp_linalg_tarball="lapack-abinit_6.10.tar.gz"
|
|
if test ! -s "${tmp_abinit_tardir}/${tmp_linalg_tarball}"; then
|
|
AC_MSG_NOTICE([using tarball repository ${tmp_abinit_tardir}])
|
|
if test ! -e "${tmp_abinit_tardir}"; then
|
|
AC_MSG_NOTICE([creating '${tmp_abinit_tardir}'])
|
|
${INSTALL} -d -m 755 "${tmp_abinit_tardir}"
|
|
elif test ! -d "${tmp_abinit_tardir}"; then
|
|
AC_MSG_ERROR(['${tmp_abinit_tardir}' is not a directory
|
|
please move away the current file and reconfigure Abinit])
|
|
fi
|
|
|
|
AC_MSG_NOTICE([installing linear algebra fallback tarball to '${tmp_abinit_tardir}'])
|
|
${INSTALL} -m 644 "${abinit_srcdir}/fallbacks/${tmp_linalg_tarball}" \
|
|
"${tmp_abinit_tardir}"
|
|
fi
|
|
fi
|
|
|
|
# Check that all triggers or their fallbacks are working
|
|
# FIXME: triggers must not fall back if with_* options are provided
|
|
for pkg in ${abi_trig_packages}; do
|
|
tmp_trig_errors=""
|
|
eval tmp_pkg_ok=\"\$\{abi_${pkg}_ok\}\"
|
|
eval tmp_fbk_ok=\"\$\{abi_fbk_${pkg}_ok\}\"
|
|
if test "${tmp_pkg_ok}" = "no" -a "${tmp_fbk_ok}" != "yes"; then
|
|
tmp_trig_errors="${tmp_trig_errors} ${pkg}"
|
|
fi
|
|
done
|
|
if test "${tmp_trig_errors}" != ""; then
|
|
for pkg in ${tmp_trig_errors}; do
|
|
tmp_fbk_error=`echo "${abi_fbk_packages}" | grep "${pkg}"`
|
|
AC_MSG_WARN([${pkg} support is unavailable or broken])
|
|
if test "${tmp_fbk_error}" != ""; then
|
|
AC_MSG_WARN([${pkg} fallback is unavailable])
|
|
fi
|
|
done
|
|
AC_MSG_ERROR([some optional features were not found on this system
|
|
(see messages above)
|
|
Please correct the options of configure to match your
|
|
actual situation])
|
|
fi
|
|
|
|
# ---------------------------------------------------------------------------- #
|
|
# ---------------------------------------------------------------------------- #
|
|
|
|
#
|
|
# Optional source code
|
|
#
|
|
|
|
ABI_MSG_SECTION([Optional source code])
|
|
|
|
# Defines and conditionals for CPP options
|
|
# (see config/specs/options.conf for details)
|
|
ABI_OPTIONS_CPP_DEFINES
|
|
|
|
|
|
AM_CONDITIONAL([DO_BUILD_67_PYTHON_INVOCATION_EXT], [test "${enable_python_invocation}" = "yes"])
|
|
# ---------------------------------------------------------------------------- #
|
|
# ---------------------------------------------------------------------------- #
|
|
|
|
#
|
|
# Buggy Fortran compilers
|
|
#
|
|
|
|
# NOTE: must be done at the end because the wrapper is built by configure
|
|
|
|
# Wrap buggy Fortran compilers
|
|
FC_NOWRAP="${FC}"
|
|
if test "${abi_fc_wrap}" = "yes"; then
|
|
FC="${abinit_builddir}/config/wrappers/wrap-fc"
|
|
fi
|
|
AC_SUBST(FC_NOWRAP)
|
|
|
|
# Force F77 and F90 environment variables (keep always last)
|
|
F77="${FC}"
|
|
FFLAGS="${FCFLAGS}"
|
|
F90="${FC}"
|
|
F90FLAGS="${FCFLAGS}"
|
|
|
|
# The following is required for oldish fixed-form Fortran libraries
|
|
AC_SUBST(F77)
|
|
AC_SUBST(FFLAGS)
|
|
|
|
# Void CPPFLAGS to allow for C/Fortran mixing
|
|
ABI_CPPFLAGS="${CPPFLAGS}"
|
|
CPPFLAGS=""
|
|
|
|
# ---------------------------------------------------------------------------- #
|
|
# ---------------------------------------------------------------------------- #
|
|
|
|
# FIXME: Temporary options to remove
|
|
case "${ABINIT_LEGACY_OPTION}" in
|
|
mpi1)
|
|
AC_DEFINE([HAVE_MPI1], 1,
|
|
[Define to 1 if you have a MPI-1 implementation (obsolete, broken).])
|
|
;;
|
|
wannier90_v1)
|
|
AC_DEFINE([HAVE_WANNIER90_V1], 1,
|
|
[Define to 1 if you want to use Wanner90 1.x (awfully obsolete).])
|
|
;;
|
|
esac
|
|
|
|
# FIXME: temporary translation of XML status
|
|
if test "${abi_libxml2_enable}" = "yes"; then
|
|
AC_DEFINE([HAVE_XML], 1,
|
|
[Define to 1 if you want to use LibXML2-based XML I/O.])
|
|
fi
|
|
|
|
# ---------------------------------------------------------------------------- #
|
|
# ---------------------------------------------------------------------------- #
|
|
|
|
#
|
|
# Output configuration
|
|
#
|
|
|
|
ABI_MSG_SECTION([Output])
|
|
|
|
# Output files
|
|
# Note: later, add tests/atconfig and tests/atlocal for test suite
|
|
ABI_OUTPUT
|
|
|
|
# FIXME: Generate fake makefile for the fallbacks until the test farm is
|
|
# updated
|
|
test -e "fallbacks" || ${INSTALL} -d -m 755 "fallbacks"
|
|
${INSTALL} -m 644 "${abinit_srcdir}/config/makefiles/fallbacks.mf" \
|
|
"fallbacks/Makefile"
|
|
|
|
# Call CMake to generate Makefile for Kokkos sources directories
|
|
if test "${sd_kokkos_enable}" = "yes"; then
|
|
rm ${abinit_builddir}/src/16_kokkos_toolbox/Makefile
|
|
cd ${abinit_builddir}/src/16_kokkos_toolbox && \
|
|
cmake ${abinit_srcdir}/shared/common/src/16_kokkos_toolbox/. -Wno-dev \
|
|
-DUSE_AUTOTOOLS_BUILD_COMPAT=ON -DABINIT_SRC_DIR=${abinit_srcdir} \
|
|
-DCMAKE_C_FLAGS="${CFLAGS}" -DCMAKE_Fortran_FLAGS="${FCFLAGS}" \
|
|
-DCMAKE_CXX_FLAGS="-O2" -DCMAKE_C_COMPILER=${CC} -DCMAKE_CXX_COMPILER=${CXX} \
|
|
-DCMAKE_Fortran_COMPILER=${FC} && \
|
|
cd -
|
|
rm ${abinit_builddir}/src/44_manage_kokkos/Makefile
|
|
cd ${abinit_builddir}/src/44_manage_kokkos && \
|
|
cmake ${abinit_srcdir}/src/44_manage_kokkos/. -Wno-dev \
|
|
-DUSE_AUTOTOOLS_BUILD_COMPAT=ON -DABINIT_SRC_DIR=${abinit_srcdir} \
|
|
-DCMAKE_C_FLAGS="${CFLAGS}" -DCMAKE_Fortran_FLAGS="${FCFLAGS}" \
|
|
-DCMAKE_CXX_FLAGS="-O2" -DCMAKE_C_COMPILER=${CC} -DCMAKE_CXX_COMPILER=${CXX} \
|
|
-DCMAKE_Fortran_COMPILER=${FC} && \
|
|
cd -
|
|
fi
|
|
|
|
# ---------------------------------------------------------------------------- #
|
|
# ---------------------------------------------------------------------------- #
|
|
|
|
ABI_MSG_SECTION([Final remarks])
|
|
|
|
# The end
|
|
if test "${sd_linalg_flavor}" = "netlib-fallback"; then
|
|
ABI_MSG_NOTICE([linalg-abinit],
|
|
[Suboptimal linear algebra configuration])
|
|
fi
|
|
if test "${sd_libxc_kxc_ok}" = "no"; then
|
|
ABI_MSG_NOTICE([libxc-kxc],
|
|
[Suboptimal libxc configuration])
|
|
fi
|
|
# GPU 2024 implementation : deactivate this warning
|
|
#if test "${abi_gpu_enable}" = "yes" -a "${sd_linalg_chk_gpu}" != "magma"; then
|
|
# ABI_MSG_NOTICE([gpu-without-magma],
|
|
# [Suboptimal GPU configuration])
|
|
#fi
|
|
ABI_MSG_FC_BUGGY(${abi_fc_vendor})
|
|
ABI_MSG_END
|