1# Process this file with autoconf to produce a configure script.
2
3###############################################################################
4# Init autoconf
5###############################################################################
6AC_PREREQ([2.67])
7AC_INIT([Communication Runtime for Extreme Scale (comex)],
8        [1.1],
9        [hpctools@pnl.gov],
10        [comex],
11        [http://www.emsl.pnl.gov/docs/global/])
12AC_CONFIG_AUX_DIR([build-aux])
13AC_CONFIG_HEADER([config.h])
14AC_CONFIG_MACRO_DIR([m4])
15AC_CONFIG_SRCDIR([src-common/comex.h])
16
17###############################################################################
18# Init automake
19###############################################################################
20AM_INIT_AUTOMAKE([color-tests foreign parallel-tests silent-rules subdir-objects])
21
22# Don't emit "rebuild rules" for configure, Makefile.ins, etc.
23AM_MAINTAINER_MODE
24
25###############################################################################
26# Misc. information and package setup.
27###############################################################################
28COMEX_WITH_HELP
29
30COMEX_TOP_BUILDDIR="`pwd`"
31cd "$srcdir"
32COMEX_TOP_SRCDIR="`pwd`"
33cd "$COMEX_TOP_BUILDDIR"
34AS_IF([test "$COMEX_TOP_BUILDDIR" != "$COMEX_TOP_SRCDIR"],
35      [AC_MSG_NOTICE([Detected VPATH build])])
36
37# We use the MPI compiler wrappers instead of the standard compilers.
38COMEX_WITH_MPI
39
40# In case users don't care whether MPI actually works during configure.
41COMEX_DISABLE_MPI_TESTS
42
43# ARMCI profiling layer
44COMEX_ENABLE_PROFILING_ARMCI
45
46#########################################
47# C compiler
48########################################
49AC_MSG_NOTICE
50AC_MSG_NOTICE([C compiler])
51AC_MSG_NOTICE
52
53COMEX_PROG_MPICC
54AC_USE_SYSTEM_EXTENSIONS
55
56AS_IF([test x$with_mpi_wrappers = xyes],
57    [COMEX_MPI_UNWRAP],
58    [COMEX_ARG_PARSE([with_mpi], [MPI_LIBS], [MPI_LDFLAGS], [MPI_CPPFLAGS])])
59AS_CASE([$enable_mpi_tests],
60    [yes],[COMEX_MPICC_TEST_LINK],
61    [no], [COMEX_MPICC_TEST_COMPILE])
62
63AM_CONDITIONAL([CROSS_COMPILING], [test "x$cross_compiling" = xyes])
64
65# Establish the underlying network infrastructure (MPI, OFA, DMAPP, etc)
66COMEX_NETWORK_SETUP
67
68# Checks for C header files.
69AC_HEADER_ASSERT
70AC_HEADER_DIRENT
71AC_HEADER_STDBOOL
72AC_HEADER_STDC
73AC_HEADER_SYS_WAIT
74COMEX_CHECK_HEADERS([assert.h])
75COMEX_CHECK_HEADERS([errno.h])
76COMEX_CHECK_HEADERS([getopt.h])
77COMEX_CHECK_HEADERS([math.h])
78COMEX_CHECK_HEADERS([pthread.h])
79COMEX_CHECK_HEADERS([sched.h])
80COMEX_CHECK_HEADERS([semaphore.h])
81COMEX_CHECK_HEADERS([stdint.h])
82COMEX_CHECK_HEADERS([stdio.h])
83COMEX_CHECK_HEADERS([stdlib.h])
84COMEX_CHECK_HEADERS([string.h])
85COMEX_CHECK_HEADERS([strings.h])
86COMEX_CHECK_HEADERS([sys/time.h])
87COMEX_CHECK_HEADERS([sys/types.h])
88COMEX_CHECK_HEADERS([unistd.h])
89
90# Checks for C typedefs, structures, and compiler characteristics.
91AC_C_CONST
92AC_C_INLINE
93AC_C_RESTRICT
94AC_C_VOLATILE
95AC_TYPE_INT8_T
96AC_TYPE_INT16_T
97AC_TYPE_INT32_T
98AC_TYPE_INT64_T
99AC_TYPE_OFF_T
100AC_TYPE_PID_T
101AC_TYPE_SIZE_T
102AC_TYPE_UINT8_T
103AC_TYPE_UINT16_T
104AC_TYPE_UINT32_T
105AC_TYPE_UINT64_T
106AC_CHECK_TYPES([ptrdiff_t])
107COMEX_FUNCTION
108COMEX_DISABLE_SYS_WEAK_ALIAS
109COMEX_SYS_WEAK_ALIAS
110
111# Checks for C type sizes.
112comex_save_LIBS="$LIBS"; LIBS="$LIBS $MPI_LIBS"
113comex_save_LDFLAGS="$LDFLAGS"; LDFLAGS="$LDFLAGS $MPI_LDFLAGS"
114comex_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS $MPI_CPPFLAGS"
115AC_CHECK_SIZEOF([MPI_Aint], [], [[#include <mpi.h>]])
116LIBS="$comex_save_LIBS"
117LDFLAGS="$comex_save_LDFLAGS"
118CPPFLAGS="$comex_save_CPPFLAGS"
119AC_CHECK_SIZEOF([void*])
120AC_CHECK_SIZEOF([char])
121AC_CHECK_SIZEOF([short])
122AC_CHECK_SIZEOF([int])
123AC_CHECK_SIZEOF([long])
124AC_CHECK_SIZEOF([long long])
125AC_CHECK_SIZEOF([float])
126AC_CHECK_SIZEOF([double])
127
128# Checks for C library functions.
129AC_FUNC_MMAP
130COMEX_SEARCH_LIBS([sqrt], [m])
131COMEX_SEARCH_LIBS([sem_open], [rt pthread])
132COMEX_SEARCH_LIBS([shm_open], [rt])
133COMEX_SEARCH_LIBS([shm_unlink], [rt])
134COMEX_CHECK_FUNCS([bzero])
135COMEX_CHECK_FUNCS([gettimeofday])
136COMEX_CHECK_FUNCS([memset])
137COMEX_CHECK_FUNCS([munmap])
138COMEX_CHECK_FUNCS([pthread_setaffinity_np])
139COMEX_CHECK_FUNCS([sched_setaffinity])
140COMEX_CHECK_FUNCS([strchr])
141COMEX_CHECK_FUNCS([strdup])
142COMEX_CHECK_FUNCS([strncasecmp])
143COMEX_CHECK_FUNCS([strstr])
144
145# Checks for advanced MPI functions.
146comex_save_LIBS="$LIBS"; LIBS="$LIBS $MPI_LIBS"
147comex_save_LDFLAGS="$LDFLAGS"; LDFLAGS="$LDFLAGS $MPI_LDFLAGS"
148comex_save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS $MPI_CPPFLAGS"
149COMEX_CHECK_FUNCS([MPI_Ibarrier])
150COMEX_CHECK_FUNCS([MPIX_Ibarrier])
151LIBS="$comex_save_LIBS"
152LDFLAGS="$comex_save_LDFLAGS"
153CPPFLAGS="$comex_save_CPPFLAGS"
154
155# Checks for C libraries.
156COMEX_BLAS
157
158###############################################################################
159# Checks for programs.
160###############################################################################
161AC_MSG_NOTICE
162AC_MSG_NOTICE([Checks for additional programs])
163AC_MSG_NOTICE
164
165AC_PROG_GREP
166AC_PROG_SED
167
168###############################################################################
169# Libtool setup -- no compiler/linker tests after this
170###############################################################################
171AC_MSG_NOTICE
172AC_MSG_NOTICE([Libtool setup])
173AC_MSG_NOTICE
174# temporarily restore unwrapped compilers
175# this works around a bug where libtool sadly relies on matching compiler
176# names in order to determine features (Fortran only, I think)
177# libtool doesn't recognize MPI compiler names, nor should it
178AS_IF([test x$with_mpi_wrappers = xyes], [COMEX_MPI_UNWRAP_PUSH])
179COMEX_AR
180LT_INIT([disable-shared])
181# and now that that's over, put the MPI compilers back
182# also, the above hack incorrectly sets the base compiler as the linker
183AS_IF([test x$with_mpi_wrappers = xyes],
184    [COMEX_MPI_UNWRAP_POP
185     compiler="$CC"
186     LTCC="$CC"
187     lt_save_CC="$CC"
188     compiler_DEFAULT="$CC"])
189
190###############################################################################
191# Test suite setup
192###############################################################################
193AC_ARG_VAR([NPROCS], [number of procs to use for parallel tests (default 4)])
194AS_IF([test "x$NPROCS" = x], [NPROCS=4])
195AC_SUBST([NPROCS])
196AC_ARG_VAR([MPIEXEC],
197           [how to run parallel tests if built with MPI e.g. "mpiexec -np %NP%"])
198AS_IF([test "x$MPIEXEC" = x],
199    [AC_PATH_PROGS([MPIEXEC], [mpirun mpiexec])
200     MPIEXEC="$MPIEXEC -n %NP%"])
201AC_SUBST([MPIEXEC])
202
203###############################################################################
204# The End
205###############################################################################
206AC_CONFIG_FILES([Makefile])
207AC_CONFIG_FILES([tools/comex-config], [chmod +x tools/comex-config])
208AC_CONFIG_FILES([tools/armci-config], [chmod +x tools/armci-config])
209AC_OUTPUT
210
211# Report on what we found.
212AC_MSG_NOTICE([])
213AC_MSG_NOTICE([**************************************************************])
214AC_MSG_NOTICE([ $PACKAGE_NAME configured as follows:])
215AC_MSG_NOTICE([**************************************************************])
216AC_MSG_NOTICE([])
217AC_MSG_NOTICE([              MPI_LIBS=$MPI_LIBS])
218AC_MSG_NOTICE([           MPI_LDFLAGS=$MPI_LDFLAGS])
219AC_MSG_NOTICE([          MPI_CPPFLAGS=$MPI_CPPFLAGS])
220AC_MSG_NOTICE([         COMEX_NETWORK=$comex_network])
221AC_MSG_NOTICE([ COMEX_NETWORK_LDFLAGS=$COMEX_NETWORK_LDFLAGS])
222AC_MSG_NOTICE([    COMEX_NETWORK_LIBS=$COMEX_NETWORK_LIBS])
223AC_MSG_NOTICE([COMEX_NETWORK_CPPFLAGS=$COMEX_NETWORK_CPPFLAGS])
224AC_MSG_NOTICE([                    CC=$CC])
225AS_IF([test "x$with_mpi_wrappers" = xyes], [
226AC_MSG_NOTICE([          unwrapped CC=$comex_cv_mpic_naked])
227])
228AC_MSG_NOTICE([                CFLAGS=$CFLAGS])
229AC_MSG_NOTICE([                   CPP=$CPP])
230AC_MSG_NOTICE([              CPPFLAGS=$CPPFLAGS])
231AC_MSG_NOTICE([               LDFLAGS=$LDFLAGS])
232AC_MSG_NOTICE([                  LIBS=$LIBS])
233AC_MSG_NOTICE([                 FLIBS=$FLIBS])
234AC_MSG_NOTICE([                    AR=$AR])
235AC_MSG_NOTICE([              AR_FLAGS=$AR_FLAGS])
236AC_MSG_NOTICE([                  DEFS=$DEFS])
237AC_MSG_NOTICE([                 SHELL=$SHELL])
238AC_MSG_NOTICE([               MPIEXEC=$MPIEXEC])
239AC_MSG_NOTICE([                NPROCS=$NPROCS])
240AC_MSG_NOTICE([])
241