dnl ************************************************************** dnl DARSHAN AUTOCONF SCRIPT dnl dnl Process this file with autoconf to produce a configure script. dnl You may need to use autoheader as well if changing any DEFINEs dnl sanity checks, output header, location of scripts used here AC_INIT([darshan-runtime], [3.0.1]) AC_CONFIG_SRCDIR([darshan.h]) AC_CONFIG_AUX_DIR(../maint/config) AC_CONFIG_HEADER(darshan-runtime-config.h) AC_PROG_INSTALL dnl Check to see if CC is an MPI compiler dnl TODO: better error message here AC_MSG_CHECKING(whether the mpicc compiler works) AC_TRY_COMPILE([#include ], [int ret = MPI_Init(0, (void*)0)], AC_MSG_RESULT(yes), AC_MSG_RESULT(no) AC_MSG_ERROR(CC doesn't appear to be a valid MPI compiler. See INSTALL document or try adding CC=mpicc to your configure command line.) ) dnl runtime libraries require zlib CHECK_ZLIB AC_ARG_ENABLE(ld-preload, [ --disable-ld-preload Disables support for LD_PRELOAD library], [if test "x$enableval" = "xno" ; then DISABLE_LDPRELOAD="1" fi] ,) AC_ARG_ENABLE(cuserid, [ --disable-cuserid Disables attempted use of cuserid() at run time], [if test "x$enableval" = "xno" ; then AC_DEFINE(__DARSHAN_DISABLE_CUSERID, 1, Define if cuserid() should be disabled) fi] ,) AC_ARG_ENABLE(group-readable-logs, [ --enable-group-readable-logs Set log files to be group readable], [if test "x$enableval" = "xyes" ; then AC_DEFINE(__DARSHAN_GROUP_READABLE_LOGS, 1, Define if Darshan should set log files to be group readable) fi] ,) AC_ARG_ENABLE( [bgq_mod], [ --disable-bgq-mod Disables compilation and use of BG/Q module (for BG/Q systems)], [], [enable_bgq_mod=check] ) AC_ARG_ENABLE(mmap-logs, [ --enable-mmmap-logs Enables ability to mmap I/O data to log file], [if test "x$enableval" = "xyes" ; then AC_DEFINE(__DARSHAN_ENABLE_MMAP_LOGS, 1, Define if Darshan should mmap data structures to log file) ENABLE_MMAP_LOGS=1 AC_CONFIG_FILES(share/darshan-mmap-epilog.sh) fi] ,) AC_ARG_WITH(mem-align, [ --with-mem-align= Memory alignment in bytes], if test x$withval = xyes; then AC_MSG_ERROR(--with-mem-align must be given a number in bytes) else AC_DEFINE_UNQUOTED(__DARSHAN_MEM_ALIGNMENT, ${withval}, Memory alignment in bytes) GOT_ALIGNMENT=1 fi ) AC_ARG_WITH(log-path-by-env, [ --with-log-path-by-env= Comma separated list of environment variables to check for log path location before --with-log-path path], if test x$withval = xyes; then AC_MSG_ERROR(--with-log-path-by-env must be given at least one variable name) else AC_DEFINE_UNQUOTED(__DARSHAN_LOG_ENV, "${withval}", Comma separated list of env. variables to use for log path) __DARSHAN_LOG_ENV="${withval}" GOT_LOG_PATH=1 fi ) AC_ARG_WITH(log-hints, [ --with-log-hints= Semicolon-separated list of MPI-IO hints for log file write], if test x$withval = xyes; then AC_MSG_ERROR(--with-log-hints must be given an argument) else AC_DEFINE_UNQUOTED(__DARSHAN_LOG_HINTS, "${withval}", Semicolon-separated list of MPI-IO hints for log file write) __DARSHAN_LOG_HINTS="${withval}" GOT_LOG_HINTS=1 fi ) AC_ARG_WITH(log-path, [ --with-log-path= Location to store log files at run time], if test x$withval = xyes; then AC_MSG_ERROR(--with-log-path must be given a pathname) else AC_DEFINE_UNQUOTED(__DARSHAN_LOG_PATH, "${withval}", Location to store log files at run time) __DARSHAN_LOG_PATH="${withval}" GOT_LOG_PATH=1 fi ) AC_ARG_WITH(jobid-env, [ --with-jobid-env= Name of environment variable that stores the jobid (specify "NONE" if no appropriate environment variable is available: Darshan will use rank 0's pid instead)], if test x$withval = xyes; then AC_MSG_ERROR(--with-jobid-env must be given a name) else AC_DEFINE_UNQUOTED(__DARSHAN_JOBID, "${withval}", Name of the environment variable that stores the jobid) __DARSHAN_JOBID="${withval}" GOT_JOBID=1 fi ) AC_ARG_WITH(mod-mem, [ --with-mod-mem= Maximum amount of memory (in MiB) for each Darshan module], if test x$withval = xyes; then AC_MSG_ERROR(--with-mod-mem must be given a number) else AC_DEFINE_UNQUOTED(__DARSHAN_MOD_MEM_MAX, ${withval}, Maximum memory (in MiB) for each Darshan module) fi ) if test x$enable_bgq_mod != xno; then AC_MSG_CHECKING(for BG/Q environment) AC_TRY_COMPILE([ #ifndef __bgq__ #error __bgq__ not set #endif ], [], AC_MSG_RESULT(yes) DARSHAN_USE_BGQ=1, AC_MSG_RESULT(no) AS_IF([test "x$enable_bgq_mod" = xyes], AC_MSG_ERROR(BG/Q module enabled in non-BG/Q environment), [])) fi if test x$GOT_ALIGNMENT != x1; then AC_MSG_ERROR(must provide --with-mem-align= argument to configure.) fi if test x$GOT_LOG_PATH != x1; then AC_MSG_ERROR(must provide --with-log-path= _or_ --with-log-path-by-env= argument to configure.) fi if test x$GOT_JOBID != x1; then AC_MSG_ERROR(must provide --with-jobid-env= argument to configure.) fi __DARSHAN_LOG_HINTS_DEFAULT="romio_no_indep_rw=true;cb_nodes=4" if test x$GOT_LOG_HINTS != x1; then dnl use default hints AC_DEFINE_UNQUOTED(__DARSHAN_LOG_HINTS, "$__DARSHAN_LOG_HINTS_DEFAULT", Comma-separated list of MPI-IO hints for log file write) fi # checks to see how we can print 64 bit values on this architecture gt_INTTYPES_PRI if test x$PRI_MACROS_BROKEN == xyes; then AC_MSG_ERROR(PRI_xx macros are broken) else AC_CHECK_HEADERS(inttypes.h, , [AC_MSG_ERROR(Couldn't find inttypes.h)]) fi dnl Check byte ordering AC_C_BIGENDIAN dnl temporarily set large file flags just for this test; we don't want dnl it to propagate to the makefile because of zlib bugs old_cflags="$CFLAGS" CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE" AC_MSG_CHECKING(for struct aiocb64) AC_TRY_COMPILE( [ #include ], [ struct aiocb64 aiocb; ], AC_MSG_RESULT(yes) AC_DEFINE(HAVE_AIOCB64, 1, Define if struct aiocb64 type is defined), AC_MSG_RESULT(no) ) CFLAGS="$old_cflags" dnl temporarily set large file flags just for this test; we don't want dnl it to propagate to the makefile because of zlib bugs old_cflags="$CFLAGS" CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE" AC_MSG_CHECKING(for off64_t) AC_TRY_COMPILE( [ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include ], [ off64_t off; ], AC_MSG_RESULT(yes) AC_DEFINE(HAVE_OFF64_T, 1, Define if off64_t type is defined), AC_MSG_RESULT(no) ) CFLAGS="$old_cflags" AC_CHECK_HEADERS(mntent.h sys/mount.h) # We need to know the value of the $libdir and $bindir variables so that # we can reference the correct path in the darshan compiler wrappers. # Unfortunately, those two variables are not normally evaluated by autoconf. # They are evaluated at build time using Makefile variable substitutions. # # The following logic was copied from mpich2 1.3.1 to resolve the $libdir # variable at configure time. # # Temporarily replace the default NONE value for exec_prefix # and prefix with the actual, default values. savePrefix=$prefix saveExecprefix=$exec_prefix test "x$prefix" = xNONE && prefix=$ac_default_prefix test "x$exec_prefix" = xNONE && exec_prefix=$prefix eval darshan_lib_path=$libdir eval darshan_share_path=$datarootdir prefix=$savePrefix exec_prefix=$saveExecprefix # determine if the MPI library includes MPI-IO functions or not AC_MSG_CHECKING(for MPI-IO support in MPI) AC_TRY_LINK([#include ], [ MPI_Comm comm; char* filename; int amode; MPI_Info info; MPI_File fh; MPI_File_open(comm, filename, amode, info, &fh); ], AC_MSG_RESULT(yes), AC_MSG_ERROR(Darshan requires a version of MPI with MPI-IO support) ) # At some point MPI-IO converted most API functions to be const correct. We # need to test for this to determine how to define MPI-IO wrappers in # Darshan. First we try compiling without cost qualifiers. AC_MSG_CHECKING(for MPI-IO prototypes without const qualifier) AC_TRY_COMPILE( [ #include int MPI_File_open(MPI_Comm comm, char *filename, int amode, MPI_Info info, MPI_File *fh) {return 0;} ], [], AC_MSG_RESULT(yes), AC_MSG_RESULT(no) # unable to compile without const qualifiers. Let's try again with # const qualifiers. AC_MSG_CHECKING(for MPI-IO prototypes with const qualifier) AC_TRY_COMPILE( [ #include int MPI_File_open(MPI_Comm comm, const char *filename, int amode, MPI_Info info, MPI_File *fh) {return 0;} ], [], AC_MSG_RESULT(yes) AC_DEFINE(HAVE_MPIIO_CONST, 1, Define if MPI-IO prototypes use const qualifier), , AC_MSG_ERROR(Darshan is unable to find a compatible MPI_File_open prototype) ) ) # determine if mpicc can create shared libraries that use MPI functions old_cflags="$CFLAGS" CFLAGS="$CFLAGS -shared -fpic -DPIC" old_libs="$LIBS" LIBS="$LIBS -ldl" AC_MSG_CHECKING(for shared libraries in MPI) AC_TRY_LINK([#include ], [ int size; MPI_Comm_size(MPI_COMM_WORLD, &size); ], AC_MSG_RESULT(yes), AC_MSG_RESULT(no) AC_MSG_WARN(mpicc doesn't support shared objects; disabling LD_PRELOAD library) DISABLE_LDPRELOAD="1" ) CFLAGS="$old_cflags" LIBS="$old_libs" # if this version of mpi defines an MPIO_Request type, then we assume that # we should use it in the nonblocking MPI-IO functions. This is necessary # for MPI 1.x implementations that did not use generalized requests yet in # MPI-IO. Later MPI implementations might typedef MPIO_Request to MPI_Request # so there is no harm in using the former if it is available there. AC_CHECK_TYPE([MPIO_Request], AC_DEFINE(__D_MPI_REQUEST, MPIO_Request, Generalized request type for MPI-IO) , AC_DEFINE(__D_MPI_REQUEST, MPI_Request, Generalized request type for MPI-IO) ,[#include ]) # attempt to detect library naming convention in mpi compiler script AS_IF([$CC -show foo.c -o foo >& /dev/null], AC_MSG_CHECKING(for old (pre-3.1.1) style MPICH library naming convention) AS_IF([$CC -show foo.c -o foo |grep lmpich >& /dev/null], AC_MSG_RESULT(yes) MPICH_LIB_OLD=1, AC_MSG_RESULT(no) MPICH_LIB_OLD=0), MPICH_LIB_OLD=0) DARSHAN_VERSION="AC_PACKAGE_VERSION" AC_SUBST(darshan_lib_path) AC_SUBST(darshan_share_path) AC_SUBST(LDFLAGS) AC_SUBST(__DARSHAN_LOG_PATH) AC_SUBST(DISABLE_LDPRELOAD) AC_SUBST(ENABLE_MMAP_LOGS) AC_SUBST(DARSHAN_VERSION) AC_SUBST(MPICH_LIB_OLD) AC_SUBST(DARSHAN_USE_BGQ) AC_OUTPUT(Makefile darshan-mk-log-dirs.pl darshan-gen-cc.pl darshan-gen-cxx.pl darshan-gen-fortran.pl darshan-config share/craype-1.x/darshan-module share/craype-2.x/darshan-module lib/pkgconfig/darshan-runtime.pc share/mpi-profile/darshan-cc.conf share/mpi-profile/darshan-cxx.conf share/mpi-profile/darshan-f.conf share/mpi-profile/darshan-bg-cc.conf share/mpi-profile/darshan-bg-cxx.conf share/mpi-profile/darshan-bg-f.conf share/ld-opts/darshan-base-ld-opts )