configure.in 13.2 KB
Newer Older
1
dnl **************************************************************
2
dnl DARSHAN AUTOCONF SCRIPT
3
4
5
6
7
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
Shane Snyder's avatar
Shane Snyder committed
8
AC_INIT([darshan-runtime], [3.1.4])
9
10
11
AC_CONFIG_SRCDIR([darshan.h])
AC_CONFIG_AUX_DIR(../maint/config)
AC_CONFIG_HEADER(darshan-runtime-config.h)
12
13
14

AC_PROG_INSTALL

15
16
17
18
19
20
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 <mpi.h>], [int ret = MPI_Init(0, (void*)0)],
    AC_MSG_RESULT(yes),
    AC_MSG_RESULT(no)
Philip Carns's avatar
Philip Carns committed
21
    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.)
22
23
)

24
dnl runtime libraries require zlib
25
CHECK_ZLIB
26

27
28
AC_ARG_ENABLE(ld-preload, 
[  --disable-ld-preload    Disables support for LD_PRELOAD library], 
29
[if test "x$enableval" = "xno" ; then
30
    DISABLE_LDPRELOAD="1"
31
32
33
fi]
,)

34
35
AC_ARG_ENABLE(cuserid, 
[  --disable-cuserid       Disables attempted use of cuserid() at run time], 
36
[if test "x$enableval" = "xno" ; then
37
    AC_DEFINE(__DARSHAN_DISABLE_CUSERID, 1, Define if cuserid() should be disabled)
38
39
40
fi]
,)

41
AC_ARG_ENABLE(group-readable-logs, 
42
43
[  --enable-group-readable-logs
                          Set log files to be group readable], 
44
[if test "x$enableval" = "xyes" ; then
45
    AC_DEFINE(__DARSHAN_GROUP_READABLE_LOGS, 1, Define if Darshan should set log files to be group readable)
46
47
48
fi]
,)

49
AC_ARG_ENABLE(
50
    [bgq-mod],
51
52
53
54
55
    [  --disable-bgq-mod       Disables compilation and use of BG/Q module (for BG/Q systems)],
    [],
    [enable_bgq_mod=check]
)

56
57
58
59
60
61
62
AC_ARG_ENABLE(
    [lustre-mod],
    [  --disable-lustre-mod    Disables compilation and use of the Lustre module],
    [],
    [enable_lustre_mod=check]
)

63
AC_ARG_ENABLE(mmap-logs,
Glenn K. Lockwood's avatar
Glenn K. Lockwood committed
64
[  --enable-mmap-logs      Enables ability to mmap I/O data to log file],
65
66
[if test "x$enableval" = "xyes" ; then
    AC_DEFINE(__DARSHAN_ENABLE_MMAP_LOGS, 1, Define if Darshan should mmap data structures to log file)
67
68
    ENABLE_MMAP_LOGS=1
    AC_CONFIG_FILES(share/darshan-mmap-epilog.sh)
69
70
71
fi]
,)

72
73
74
75
76
AC_ARG_WITH(mem-align,
[  --with-mem-align=<num>  Memory alignment in bytes],
    if test x$withval = xyes; then
        AC_MSG_ERROR(--with-mem-align must be given a number in bytes)
    else
77
        AC_DEFINE_UNQUOTED(__DARSHAN_MEM_ALIGNMENT, ${withval}, Memory alignment in bytes)
78
79
80
81
        GOT_ALIGNMENT=1
    fi
)

82
AC_ARG_WITH(log-path-by-env,
83
84
85
[  --with-log-path-by-env=<env var list>
                          Comma separated list of environment variables to check for
                          log path location before --with-log-path path],
86
87
88
    if test x$withval = xyes; then
        AC_MSG_ERROR(--with-log-path-by-env must be given at least one variable name)
    else
89
90
        AC_DEFINE_UNQUOTED(__DARSHAN_LOG_ENV, "${withval}", Comma separated list of env. variables to use for log path)
        __DARSHAN_LOG_ENV="${withval}"
91
92
93
94
        GOT_LOG_PATH=1
    fi
)

95
AC_ARG_WITH(log-hints,
96
97
[  --with-log-hints=<hint1=x;hint2=y>
                          Semicolon-separated list of MPI-IO hints for log file write],
98
99
100
    if test x$withval = xyes; then
        AC_MSG_ERROR(--with-log-hints must be given an argument)
    else
101
102
        AC_DEFINE_UNQUOTED(__DARSHAN_LOG_HINTS, "${withval}", Semicolon-separated list of MPI-IO hints for log file write)
        __DARSHAN_LOG_HINTS="${withval}"
103
104
105
106
        GOT_LOG_HINTS=1
    fi
)

107
108
109
110
111
AC_ARG_WITH(log-path,
[  --with-log-path=<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
112
113
        AC_DEFINE_UNQUOTED(__DARSHAN_LOG_PATH, "${withval}", Location to store log files at run time)
        __DARSHAN_LOG_PATH="${withval}"
114
115
116
117
        GOT_LOG_PATH=1
    fi
)

118
AC_ARG_WITH(jobid-env,
119
[  --with-jobid-env=<name> Name of environment variable that stores the jobid
120
121
                          (specify "NONE" if no appropriate environment variable
                          is available: Darshan will use rank 0's pid instead)],
122
123
124
    if test x$withval = xyes; then
        AC_MSG_ERROR(--with-jobid-env must be given a name)
    else
125
126
        AC_DEFINE_UNQUOTED(__DARSHAN_JOBID, "${withval}", Name of the environment variable that stores the jobid)
        __DARSHAN_JOBID="${withval}"
127
128
129
        GOT_JOBID=1
    fi
)
130

131
132
133
134
135
136
137
138
139
AC_ARG_WITH(mod-mem,
[  --with-mod-mem=<num>    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
)

140
# if bgq module not disabled, check to make sure BG/Q environment available
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
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

156
157
158
159
160
161
162
163
164
# if lustre module not disabled, check for needed Lustre module header
if test x$enable_lustre_mod != xno; then
    AC_CHECK_HEADER([lustre/lustre_user.h],
        DARSHAN_USE_LUSTRE=1,
        AS_IF([test "x$enable_lustre_mod" = xyes],
            AC_MSG_ERROR(Cannot find required headers for the Lustre module),
            []))
fi

165
166
167
168
if test x$GOT_ALIGNMENT != x1; then
    AC_MSG_ERROR(must provide --with-mem-align=<num> argument to configure.)
fi
if test x$GOT_LOG_PATH != x1; then
169
    AC_MSG_ERROR(must provide --with-log-path=<path> _or_ --with-log-path-by-env=<variable list> argument to configure.)
170
fi
171
172
173
if test x$GOT_JOBID != x1; then
    AC_MSG_ERROR(must provide --with-jobid-env=<name> argument to configure.)
fi
174
__DARSHAN_LOG_HINTS_DEFAULT="romio_no_indep_rw=true;cb_nodes=4"
175
176
if test x$GOT_LOG_HINTS != x1; then
dnl use default hints
177
    AC_DEFINE_UNQUOTED(__DARSHAN_LOG_HINTS, "$__DARSHAN_LOG_HINTS_DEFAULT", Comma-separated list of MPI-IO hints for log file write)
178
fi
179

180
181
# checks to see how we can print 64 bit values on this architecture
gt_INTTYPES_PRI
182
183
184
185
186
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
187
188
189
190

dnl Check byte ordering
AC_C_BIGENDIAN

191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
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 <aio.h>
    ],
    [ 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"

207
dnl temporarily set large file flags just for this test; we don't want
208
dnl it to propagate to the makefile because of zlib bugs
209
210
old_cflags="$CFLAGS"
CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE"
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
AC_MSG_CHECKING(for off64_t)
AC_TRY_COMPILE(
    [
    #include <stdio.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <stdarg.h>
    #include <string.h>
    #include <time.h>
    #include <stdlib.h>
    #include <errno.h>
    #include <sys/uio.h>
    #include <pthread.h>
    #include <sys/mman.h>
    #include <search.h>
    #include <assert.h>
    ],
    [ off64_t off; ],
    AC_MSG_RESULT(yes)
    AC_DEFINE(HAVE_OFF64_T, 1, Define if off64_t type is defined),
    AC_MSG_RESULT(no)
)
235
CFLAGS="$old_cflags"
236

237
AC_CHECK_HEADERS(mntent.h sys/mount.h)
238

239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
# 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
254
eval darshan_share_path=$datarootdir
255
256
257
prefix=$savePrefix
exec_prefix=$saveExecprefix

258
259
260
BUILD_HDF5_MODULE=
DARSHAN_HDF5_LD_OPTS=

261
262
263
# see if user explicitly enabled support for an HDF5 API
AC_ARG_ENABLE(HDF5-post-1.10,
[  --enable-HDF5-post-1.10
264
265
                          Enable HDF5 module for HDF5 version 1.10 or later],
[if test "x$enableval" = "xyes" ; then
266
    AC_DEFINE(__DARSHAN_ENABLE_HDF5110, 1, Set for compatibility with HDF5 1.10.x, breaks use with versions earlier than 1.10)
267
268
269
270
    if test "x$BUILD_HDF5_MODULE" = "x1"; then
        AC_MSG_ERROR([Cannot set both --enable-HDF5-post-1.10 and --enable-HDF5-pre-1.10])
    fi
    BUILD_HDF5_MODULE=1
271
    DARSHAN_HDF5_LD_OPTS="@${darshan_share_path}/ld-opts/darshan-hdf5-ld-opts"
272
273
274
275
fi]
,)
AC_ARG_ENABLE(HDF5-pre-1.10,
[  --enable-HDF5-pre-1.10
276
                          Enable HDF5 module for HDF5 versions earlier than 1.10],
277
278
279
280
[if test "x$enableval" = "xyes" ; then
    if test "x$BUILD_HDF5_MODULE" = "x1"; then
        AC_MSG_ERROR([Cannot set both --enable-HDF5-post-1.10 and --enable-HDF5-pre-1.10])
    fi
281
    BUILD_HDF5_MODULE=1
282
    DARSHAN_HDF5_LD_OPTS="@${darshan_share_path}/ld-opts/darshan-hdf5-ld-opts"
283
284
285
fi]
,)

286
287
288
289
290
291
292
293
294
295
296
297
298
299
# 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.h>], [
    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)
)

300
301
302
303
304
305
306
307
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
# 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 <mpi.h>
    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 <mpi.h>
        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)
    )
)

333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
# 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 <mpi.h>], [
    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"

351
352
353
354
355
356
357
358
359
360
# 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 <mpi.h>])
361

362
363
364
365
366
367
368
369
370
# 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)
371

372
DARSHAN_VERSION="AC_PACKAGE_VERSION"
373
AC_SUBST(darshan_lib_path)
374
AC_SUBST(darshan_share_path)
375
AC_SUBST(LDFLAGS)
376
AC_SUBST(__DARSHAN_LOG_PATH)
377
AC_SUBST(DISABLE_LDPRELOAD)
378
AC_SUBST(ENABLE_MMAP_LOGS)
379
AC_SUBST(DARSHAN_VERSION)
380
AC_SUBST(MPICH_LIB_OLD)
381
AC_SUBST(DARSHAN_USE_BGQ)
382
AC_SUBST(DARSHAN_USE_LUSTRE)
383
384
AC_SUBST(BUILD_HDF5_MODULE)
AC_SUBST(DARSHAN_HDF5_LD_OPTS)
385
386
AC_OUTPUT(Makefile
darshan-mk-log-dirs.pl
387
darshan-gen-cc.pl
Philip Carns's avatar
Philip Carns committed
388
darshan-gen-cxx.pl
389
darshan-gen-fortran.pl
Philip Carns's avatar
Philip Carns committed
390
darshan-config
391
share/craype-1.x/darshan-module
392
share/craype-2.x/darshan-module
393
lib/pkgconfig/darshan-runtime.pc
394
395
396
share/mpi-profile/darshan-cc.conf
share/mpi-profile/darshan-cxx.conf
share/mpi-profile/darshan-f.conf
397
398
399
share/mpi-profile/darshan-bg-cc.conf
share/mpi-profile/darshan-bg-cxx.conf
share/mpi-profile/darshan-bg-f.conf
400
share/ld-opts/darshan-base-ld-opts
401
)