Newer
Older
[M4_HDF5_LIB],
[
cat > nptm_test_hdf5.cpp <<EOF
#include <hdf5.h>
int main(int argc, char **argv) {
hid_t file_id = 0;
herr_t status = H5Iis_valid(file_id);
return (int)status;
}
EOF
$CXX -o nptm_test_hdf5 nptm_test_hdf5.cpp -I$HDF5_INCLUDE -L$HDF5_LIB -lhdf5 > /dev/null 2>>error.log
export TEST_HDF5_LIB=$?
rm nptm_test_hdf5.cpp
if test "x$TEST_HDF5_LIB" = "x0"; then
rm nptm_test_hdf5
fi
]
)
m4_define(
[M4_DETECT_LAPACK],
[
export -p | grep MKL
MKL_DEF=$?
if test "x$MKL_DEF" = "x0"; then
export LAPACKFLAGS="-DUSE_LAPACK -DUSE_MKL -DLAPACK_ILP64 -DUSE_ILP64 -I{MKLROOT}/include"
export LAPACKLDFLAGS="-L${MKLROOT}/lib -Wl,--no-as-needed -lmkl_intel_ilp64 -lmkl_gnu_thread -lmkl_core -lgomp -lpthread -lm -ldl"
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
if test -f /usr/include/lapacke.h; then
export LAPACKFLAGS="-DUSE_LAPACK -DLAPACK_ILP64 -DUSE_ILP64"
export LAPACKLDFLAGS="-llapacke64"
fi
fi
]
)
m4_define(
[M4_DETECT_MAGMA],
[
if test "x$CUDA_LIB" = "x"; then
export -p | grep CUDA
CUDA_DEF=$?
if test "x$CUDA_DEF" = "x0"; then
CUDA_LIB=${CUDA_HOME}/targets/x86_64-linux/lib
else
CUDA_LIB=/usr/local/cuda/targets/x86_64-linux/lib
fi
fi
export -p | grep MAGMA
MAGMA_DEF=$?
if test "x$MAGMA_DEF" = "x0"; then
export MAGMAFLAGS="-DUSE_MAGMA -DMAGMA_ILP64 -I${MAGMA_INCLUDE}"
export MAGMALDFLAGS="-L${CUDA_LIB} -lcudart -L${MAGMA_LIB} -lmagma"
else
if test "x$MAGMA_INCLUDE" != "x"; then
export MAGMAFLAGS="-DUSE_MAGMA -DMAGMA_ILP64 -I${MAGMA_INCLUDE}"
else
if test -f /usr/include/magma_v2.h; then
export MAGMAFLAGS="-DUSE_MAGMA -DMAGMA_ILP64"
fi
fi
if test "x$MAGMA_LIB" != "x"; then
export MAGMALDFLAGS="-L${CUDA_LIB} -lcudart -L${MAGMA_LIB} -lmagma"
else
if test -f /usr/include/magma_v2.h; then
export MAGMALDFLAGS="-L${CUDA_LIB} -lcudart -lmagma"
fi
fi
m4_define(
[M4_TEST_MPI],
[
cat > np_test_mpi.cpp <<EOF
#ifndef MPI_VERSION
#include <mpi.h>
#endif
int main(int argc, char** argv) {
int ierr = MPI_Init(&argc, &argv);
MPI_Finalize();
return ierr;
}
EOF
$CXX -c np_test_mpi.cpp > /dev/null 2>&1
export CXX_IS_MPI=$?
rm np_test_mpi.cpp
if test "x$CXX_IS_MPI" = "x0"; then
rm np_test_mpi.o
fi
]
)
# END CAPABILITY TESTING MACROS
# autoconf setup initialization
AC_INIT([np_tmcode],[8.04],[giovanni.lamura@inaf.it])
# Folder structure safety check
AC_CONFIG_SRCDIR([../src/libnptm/TransitionMatrix.cpp])
AC_CONFIG_FILES([Makefile])
AC_CONFIG_AUX_DIR([build_aux])
AM_INIT_AUTOMAKE([-Wall -Werror foreign subdir-objects])
# Set the default library policy
AC_DISABLE_SHARED
AC_DISABLE_SHARED([])
AC_ENABLE_STATIC
AC_ENABLE_STATIC([])
# Compiler detection
AM_PROG_AR
[AS_HELP_STRING([--enable-mpi], [enable MPI compilation [default=auto]])],
if test "x$enableval" = "xno"; then
if test "x$CXX" = "x"; then
AC_PROG_CXX([g++ clang++])
else
AC_PROG_CXX([$CXX])
fi
AC_MSG_NOTICE([Using $CXX])
AC_SUBST([MPIFLAGS], [""])
elif test "x$enableval" = "xauto"; then
if test "x$CXX" = "x"; then
AC_PROG_CXX([mpicxx.openmpi mpicxx.mpich mpic++.openmpi mpiCC.openmpi])
if test "x$CXX" != "x"; then
AC_SUBST([MPIFLAGS], [-DUSE_MPI])
else
AC_PROG_CXX([g++ clang++])
AC_SUBST([MPIFLAGS], [""])
fi
# Test if given CXX defines mpi.h
M4_TEST_MPI
fi
elif test "x$enableval" = "xyes"; then
if test "x$CXX" = "x"; then
AC_PROG_CXX([mpicxx.openmpi mpicxx.mpich mpic++.openmpi mpiCC.openmpi])
if test "x$CXX" != "x"; then
AC_SUBST([MPIFLAGS], [-DUSE_MPI])
else
AC_MSG_ERROR([MPI was requested, but no MPI compiler detected!])
fi
# Test if given CXX defines mpi.h
M4_TEST_MPI
if test "x$CXX_IS_MPI" != "x0"; then
AC_MSG_ERROR([MPI was requested, but $CXX is not a MPI compiler!])
fi
if test "x$CXX" = "x"; then
AC_PROG_CXX([mpicxx.openmpi mpicxx.mpich mpic++.openmpi mpiCC.openmpi])
if test "x$CXX" != "x"; then
AC_SUBST([MPIFLAGS], [-DUSE_MPI])
else
AC_PROG_CXX([g++ clang++])
AC_SUBST([MPIFLAGS], [""])
AC_MSG_NOTICE([Using $CXX])
fi
AC_PROG_CXX([$CXX])
M4_TEST_MPI
if test "x$CXX_IS_MPI" = "x0"; then
AC_SUBST([MPIFLAGS], [-DUSE_MPI])
AC_SUBST([MPIFLAGS], [""])
fi
AC_PROG_CXX([$CXX])
# Check whether the compiler is clang++ (needs additional flags)
CXX_IS_CLANG=$($CXX --version | grep clang)
AS_IF(
[test "x$CXX_IS_CLANG" = "x0"],
[AC_SUBST([CLANGFLAGS], [-stdlib=libstdc++])],
[AC_SUBST([CLANGFLAGS], [""])]
)
# Libtool initialization
LT_INIT
# Environment setup
AS_IF(
[test "x$HDF5_INCLUDE" = "x"],
[AC_SUBST([HDF5_INCLUDE], ["/usr/include/hdf5/serial"])],
[AC_MSG_NOTICE([HDF5_INCLUDE=$(HDF5_INCLUDE)])]
[test "x$HDF5_LIB" = "x"],
[AC_SUBST([HDF5_LIB], ["/usr/lib/x86_64-linux-gnu/hdf5/serial"])],
[AC_MSG_NOTICE([HDF5_LIB=$(HDF5_LIB)])]
# Check for required headers
AC_CHECK_HEADER(
[$HDF5_INCLUDE/hdf5.h],
,
AC_MSG_ERROR(["Could not find HDF5 headers!]),
)
# Check for required libraries
M4_HDF5_LIB
AS_IF(
[test "x$TEST_HDF5_LIB" = "x0"],
[AC_SUBST([HDF5_LDFLAGS], ["-L${HDF5_LIB} -lhdf5"])],
[AC_MSG_ERROR(["HDF5 library not found!"])]
AC_ARG_ENABLE(
[openmp],
[AS_HELP_STRING([--enable-openmp], [enable OpneMP multi-threading [default=yes]])],
[
if test "x$enableval" != "xno"; then
AC_SUBST([OMPFLAGS], ["-fopenmp"])
fi
],
[
AC_SUBST([OMPFLAGS], ["-fopenmp"])
]
)
AC_ARG_WITH(
[lapack],
[AS_HELP_STRING([--with-lapack], [use LAPACK @<:@default=auto@:>@])],
[
if test "x$withval" = "xno"; then
AC_SUBST([LAPACKFLAGS], [""])
AC_SUBST([LAPACKLDFLAGS], [""])
else
M4_DETECT_LAPACK
AS_IF(
[test "x$LAPACKLDFLAGS" != "x"],
[AC_MSG_NOTICE([LAPACK detected.])],
[AC_MSG_NOTICE([No LAPACK found.])]
)
AC_SUBST([LAPACKFLAGS], [${LAPACKFLAGS}])
AC_SUBST([LAPACKLDFLAGS], [${LAPACKLDFLAGS}])
M4_DETECT_LAPACK
AS_IF(
[test "x$LAPACKLDFLAGS" != "x"],
[AC_MSG_NOTICE([LAPACK detected. Activating by default (use --without-lapack to disble).])],
[AC_MSG_NOTICE([No LAPACK found.])]
)
AC_SUBST([LAPACKFLAGS], [${LAPACKFLAGS}])
AC_SUBST([LAPACKLDFLAGS], [${LAPACKLDFLAGS}])
]
)
AC_ARG_WITH(
[magma],
[AS_HELP_STRING([--with-magma], [use MAGMA @<:@default=auto@:>@])],
[
if test "x$withval" = "xno"; then
AC_SUBST([MAGMAFLAGS], [""])
AC_SUBST([MAGMALDFLAGS], [""])
else
M4_DETECT_MAGMA
AS_IF(
[test "x$MAGMALDFLAGS" != "x"],
[AC_MSG_NOTICE([MAGMA detected.])],
[AC_MSG_NOTICE([MAGMA not found.])]
)
AC_SUBST([MAGMAFLAGS], [${MAGMAFLAGS}])
AC_SUBST([MAGMALDFLAGS], [${MAGMALDFLAGS}])
fi
],
[
M4_DETECT_MAGMA
AS_IF(
[test "x$MAGMALDFLAGS" != "x"],
[AC_MSG_NOTICE([MAGMA detected. Activating by default (use --without-magma to disable).])],
[AC_MSG_NOTICE([MAGMA not found.])]
)
AC_SUBST([MAGMAFLAGS], [${MAGMAFLAGS}])
AC_SUBST([MAGMALDFLAGS], [${MAGMALDFLAGS}])
]
AC_ARG_ENABLE(
[nvtx],
[AS_HELP_STRING([--enable-nvtx], [use NVTX profiling @<:@default=no@:>@])],
[
if test "x$enableval" = "xyes"; then
AC_SUBST([NVTXFLAGS], ["-DUSE_NVTX"])
fi
],
[
AC_SUBST([NVTXFLAGS], [""])
]
)
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
# Test for additional user configurations
# Test for specific include folders
AC_ARG_WITH(
[include],
[AS_HELP_STRING([--with-include], [additional include folders @<:@default=none@:>@])],
[
if test "x$with_val" != "x"; then
AC_SUBST([USER_INCLUDE], [$with_val])
fi
],
[AC_SUBST([USER_INCLUDE], [""])]
)
# Test for special FORTRAN compiler flags
AC_ARG_WITH(
[fflags],
[AS_HELP_STRING([--with-fflags=flags], [FORTRAN compiler flags @<:@default="-std=legacy -O3"@:>@])],
[
if test "x$with_val" != "x"; then
AC_SUBST([FFLAGS], [$with_val])
fi
],
[
AC_SUBST([FFLAGS], ["-std=legacy -O3"])
]
)
# Test for special linker flags
AC_ARG_WITH(
[ldflags],
[AS_HELP_STRING([--with-ldflags=flags], [custom linker flags @<:@default=none@:>@])],
[
if test "x$with_val" != "x"; then
AC_SUBST([USER_LDFLAGS], [$with_val])
fi
],
[
AC_SUBST([USER_LDFLAGS], [""])
]
)
CXXFLAGS="$CLANGFLAGS -O3 -ggdb $USER_INCLUDE -I$HDF5_INCLUDE $OMPFLAGS $MPIFLAGS $LAPACKFLAGS $MAGMAFLAGS $NVTXFLAGS"
SUBDIRS="cluster libnptm sphere testing trapping"
# Generate the output
AC_OUTPUT