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.h) AC_CONFIG_AUX_DIR(maint/config) AC_CONFIG_HEADER(darshan-config.h) AC_PROG_INSTALL CHECK_ZLIB AC_ARG_WITH(mpi, [ --with-mpi= Location of the MPI installation], if test x$withval = xyes; then AC_MSG_ERROR(--with-mpi must be given a pathname) else MPICC="${withval}/bin/mpicc" HAVE_MPICC="yes" fi ) if test x$HAVE_MPICC != xyes; then AC_CHECK_PROG(HAVE_MPICC, mpicc, yes, no) if test x$HAVE_MPICC = xyes; then MPICC=mpicc fi fi AC_SUBST(MPICC) 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(__CP_MEM_ALIGNMENT, ${withval}, Memory alignment in bytes) GOT_ALIGNMENT=1 fi ) AC_ARG_WITH(zlib-for-mpi, [ --with-zlib-for-mpi= base dir for zlib to use on mpi processes], if test x$withval = xyes; then AC_MSG_ERROR(--with-zlib-for-mpi must be given a path argument) else __CP_ZLIB_LINK_FLAGS="-L${withval}/lib" __CP_ZLIB_INCLUDE_FLAGS="-I ${withval}/include" 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(__CP_LOG_PATH, "${withval}", Location to store log files at run time) __CP_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(CP_JOBID, "${withval}", Name of the environment variable that stores the jobid) CP_JOBID="${withval}" GOT_JOBID=1 fi ) if test x$HAVE_MPICC != "xyes"; then AC_MSG_ERROR(must provide --with-mpi= argument to configure if mpicc is not in path.) 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= argument to configure.) fi if test x$GOT_JOBID != x1; then AC_MSG_ERROR(must provide --with-jobid-env= argument to configure.) fi # ===================================================================== # all tests executed with CC=MPICC from this point on saveCC="$CC" CC="$MPICC" # redo printf int64 test for mpi compiler AC_MSG_CHECKING(if int64 can be printed as lld without cast) old_cflags="$CFLAGS" CFLAGS="$CFLAGS -Wall -Werror" AC_TRY_COMPILE( [ #include #include ], [ int64_t test = 0; printf("%lld\n", test); ], AC_MSG_RESULT(yes) , AC_MSG_RESULT(no) AC_DEFINE(PRINTF_CAST_INT64_LLD, 1, Define if int64 should be cast to long long for printf) ) CFLAGS="$old_cflags" 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) ) 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 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) # libc functions wrapped by darshan CP_WRAPPERS="-Wl,-u,MPI_Wtime,-wrap,write,-wrap,open,-wrap,creat,-wrap,creat64,-wrap,open64,-wrap,close,-wrap,read,-wrap,lseek,-wrap,lseek64,-wrap,pread,-wrap,pwrite,-wrap,readv,-wrap,writev,-wrap,__xstat,-wrap,__lxstat,-wrap,__fxstat,-wrap,__xstat64,-wrap,__lxstat64,-wrap,__fxstat64,-wrap,mmap,-wrap,mmap64,-wrap,fopen,-wrap,fclose,-wrap,fread,-wrap,fwrite,-wrap,fseek,-wrap,fopen64,-wrap,pread64,-wrap,pwrite64,-wrap,fsync,-wrap,fdatasync,-wrap,ncmpi_create,-wrap,ncmpi_open,-wrap,ncmpi_close,-wrap,H5Fcreate,-wrap,H5Fopen,-wrap,H5Fclose" # ,-u,__wrap___fxstat64,-u,pthread_mutex_lock,-u,pthread_mutex_unlock # 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_bin_path=$bindir 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) ) AC_MSG_CHECKING(for generalized requests in MPI-IO) old_cflags="$CFLAGS" CFLAGS="$CFLAGS -Wall -Werror" AC_TRY_COMPILE( [ #include #include ], [ int ret = 0; MPI_Request req; ret = MPI_File_iread_at(MPI_FILE_NULL, 0, NULL, 0, MPI_BYTE, &req); ], AC_MSG_RESULT(yes) AC_DEFINE_UNQUOTED(__D_MPI_REQUEST, MPI_Request, Generalized request type for MPI-IO) , AC_MSG_RESULT(no) AC_MSG_CHECKING(for MPIO_Request in MPI-IO) AC_TRY_COMPILE( [ #include #include ], [ int ret = 0; MPIO_Request req; ret = MPI_File_iread_at(MPI_FILE_NULL, 0, NULL, 0, MPI_BYTE, &req); ], AC_MSG_RESULT(yes) AC_DEFINE_UNQUOTED(__D_MPI_REQUEST, MPIO_Request, Generalized request type for MPI-IO) , AC_MSG_RESULT(no) AC_MSG_ERROR(Unable to find valid request type for MPI-IO) ) ) CFLAGS="$old_cflags" AC_SUBST(darshan_lib_path) AC_SUBST(darshan_bin_path) AC_SUBST(__CP_LOG_PATH) AC_SUBST(__CP_ZLIB_LINK_FLAGS) AC_SUBST(__CP_ZLIB_INCLUDE_FLAGS) AC_SUBST(CP_WRAPPERS) AC_OUTPUT(Makefile darshan-mk-log-dirs.pl darshan-gen-cc.pl darshan-gen-cxx.pl darshan-gen-fortran.pl util/bin/darshan-job-summary.pl )