forked from pmodels/mpich
-
Notifications
You must be signed in to change notification settings - Fork 0
/
configure.ac
4276 lines (3870 loc) · 160 KB
/
configure.ac
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
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
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
##
## Copyright (C) by Argonne National Laboratory
## See COPYRIGHT in top-level directory
##
AC_PREREQ([2.69])
dnl Process this file with autoconf to produce a configure script.
dnl
dnl aclocal_cache.m4, included by sowing/confdb/aclocal.m4, fixes
dnl bugs in autoconf caching.
dnl
dnl This is a large configure script and it is important to keep it
dnl clearly organized. In addition, this script must coordinate with
dnl the other modules that can be used to construct MPICH, such as
dnl the communication device and the process manager. Each of these
dnl may have special features or limitations that other modules or
dnl this configure may need to take into account. To handle this, there
dnl are xx major steps in this configure script:
dnl
dnl 1. Identify major modules and source any prerequisite scripts
dnl 2. Determine compiler characteristics
dnl 3. Setup and configure the other modules
dnl 4. Determine MPI features and characteristics (such as datatype values)
dnl
dnl Each of these is described in more detail below.
dnl
dnl 1. Identify the modules (most are specified by
dnl --with-<modulename>=instance,
dnl for example, --with-pm=hydra or --with-device=ch3:nemesis).
dnl For each module, source the file mpichprereq if present (in the
dnl module's top-level directory). This
dnl must be a bourne (sh) shell script; it can access any of the variables
dnl in the configure script. In addition, there are a few variables that
dnl are defined and provided to allow the modules to communicate their
dnl needs or limitations to the other modules. These are:
dnl MPID_MAX_THREAD_LEVEL - thread level supported by device.
dnl if unset, is MPI_THREAD_FUNNELED
dnl MPID_NO_LONG_LONG - if yes, the device does not support the
dnl long long integer type
dnl MPID_NO_LONG_DOUBLE - if yes, the device does not support the
dnl long double type
dnl MPID_PM_NAMESERVER - if set, provides the name of the nameserver
dnl that the process manager supports.
dnl This name server will be used if the
dnl default name server is selected.
dnl MPID_NO_PM - If yes, the device does not require any
dnl PM implementation.
dnl MPID_MAX_PROCESSOR_NAME - The maximum number of character in a processor
dnl name. If not set, 128 will be used.
dnl MPID_MAX_ERROR_STRING - The maximum number of character in an error
dnl string. If not set, 1024 will be used.
dnl PM_REQUIRES_PMI - if set, provides the name of the PMI
dnl interface implementation. If not set,
dnl the "simple" PMI implementation is used.
dnl A process manager that needs a particular
dnl process manager should check that this is
dnl not set to an incompatible value.
dnl MPID_NO_SPAWN - if yes, the device does not support the
dnl dynamic process routines (spawn, connect
dnl attach, join, plus port and publish
dnl routines). The major effect of this
dnl is to let the test codes know that
dnl spawn is not implemented.
dnl MPID_NO_RMA - if yes, the device does not support the
dnl MPI RMA routines (MPI_Win_create and
dnl MPI_Put etc.). The major effect of this
dnl is to let the test codes know that
dnl RMA is not implemented.
dnl
dnl Note that the meanings of these variables are defined so that an
dnl undefined value gives the default. This makes it easy to expand
dnl the set of such variables, since only modules that need the new
dnl variable will need to be changed.
dnl
dnl 2. Determine compiler characteristics
dnl Here is where features of the compilers are determined, including
dnl support for shared libraries and sizes of the basic datatype types.
dnl
dnl 3. Setup and configure the other modules
dnl Before each module configure is executed, the script setup_<module>
dnl is run if present. This is a bourne (sh) shell script and may
dnl access configure variables. It should not make any changes to the
dnl compiler name or flags (e.g., do not add -D_XOPEN_SOURCE to CFLAGS here,
dnl because that may invalidate the determination of the compiler
dnl characteristics in the prior step).
dnl
dnl 4. Determine MPI features
dnl
dnl
dnl Special environment variables
dnl To let other scripts, e.g. configure in hydra and romio,
dnl know that they are being invoked from within the MPICH configure,
dnl the following environment variables are set and exported:
dnl FROM_MPICH
dnl
dnl Note that no executable statements are allowed (and any are silently
dnl dropped) before AC_INIT.
m4_define([MPICH_CONFIGURE], 1)
m4_include([maint/version.m4])
dnl 2nd arg is intentionally underquoted
AC_INIT([MPICH],
MPICH_VERSION_m4,
[mpich],
[http://www.mpich.org/])
if test "x$prefix" != "xNONE" && test -d "$prefix"; then
if test "x`(cd \"$prefix\"; echo \"$PWD\")`" = "x`(cd \"$srcdir\"; echo \"$PWD\")`" ||\
test "x`(cd \"$prefix\"; echo \"$PWD\")`" = "x$PWD" ; then
AC_MSG_ERROR([The install directory (--prefix=) cannot be the same as the build or src directory.])
fi
fi
CONFIGURE_ARGS_CLEAN=`echo $* | tr '"' ' '`
AC_SUBST(CONFIGURE_ARGS_CLEAN)
# these values come from the m4_include above
MPICH_VERSION=MPICH_VERSION_m4
AC_SUBST([MPICH_VERSION])
MPICH_RELEASE_DATE="MPICH_RELEASE_DATE_m4"
AC_SUBST([MPICH_RELEASE_DATE])
libmpi_so_version="libmpi_so_version_m4"
AC_SUBST([libmpi_so_version])
if test -z "$MPICH_VERSION" ; then
AC_MSG_ERROR([MPICH_VERSION is empty, check maint/version.m4 for errors])
fi
# Produce a numeric version assuming the following format:
# Version: [MAJ].[MIN].[REV][EXT][EXT_NUMBER]
# Example: 1.0.7rc1 has
# MAJ = 1
# MIN = 0
# REV = 7
# EXT = rc
# EXT_NUMBER = 1
#
# Converting to numeric version will convert EXT to a format number:
# ALPHA (a) = 0
# BETA (b) = 1
# RC (rc) = 2
# PATCH (p) = 3
# Regular releases are treated as patch 0
#
# Numeric version will have 1 digit for MAJ, 2 digits for MIN,
# 2 digits for REV, 1 digit for EXT and 2 digits for EXT_NUMBER.
changequote(<<,>>)
V1=`expr $MPICH_VERSION : '\([0-9]*\)\.[0-9]*\.*[0-9]*[a-zA-Z]*[0-9]*'`
V2=`expr $MPICH_VERSION : '[0-9]*\.\([0-9]*\)\.*[0-9]*[a-zA-Z]*[0-9]*'`
V3=`expr $MPICH_VERSION : '[0-9]*\.[0-9]*\.*\([0-9]*\)[a-zA-Z]*[0-9]*'`
V4=`expr $MPICH_VERSION : '[0-9]*\.[0-9]*\.*[0-9]*\([a-zA-Z]*\)[0-9]*'`
V5=`expr $MPICH_VERSION : '[0-9]*\.[0-9]*\.*[0-9]*[a-zA-Z]*\([0-9]*\)'`
changequote([,])
if test "$V2" -le 9 ; then V2=0$V2 ; fi
if test "$V3" = "" ; then V3=0; fi
if test "$V3" -le 9 ; then V3=0$V3 ; fi
if test "$V4" = "a" ; then
V4=0
elif test "$V4" = "b" ; then
V4=1
elif test "$V4" = "rc" ; then
V4=2
elif test "$V4" = "" ; then
V4=3
V5=0
elif test "$V4" = "p" ; then
V4=3
fi
if test "$V5" -le 9 ; then V5=0$V5 ; fi
MPICH_NUMVERSION=`expr $V1$V2$V3$V4$V5 + 0`
AC_SUBST(MPICH_NUMVERSION)
AC_ARG_WITH(custom-version-string,
AS_HELP_STRING([--with-custom-version-string], [Adds a user-specified value to the output of the mpichversion executable]),,with_custom_version_string="")
MPICH_CUSTOM_STRING=$with_custom_version_string
AC_SUBST(MPICH_CUSTOM_STRING)
# ABIVERSION is the name used by simplemake, so we reassign the
# libmpi_so_version number to it
ABIVERSION=${libmpi_so_version}
export ABIVERSION
export libmpi_so_version
AC_SUBST(ABIVERSION)
# Print out the configure options
CONFIGURE_ARGUMENTS="$ac_configure_args"
AC_SUBST(CONFIGURE_ARGUMENTS)
if test -n "$ac_configure_args" ; then
echo "Configuring MPICH version $MPICH_VERSION with $ac_configure_args"
else
echo "Configuring MPICH version $MPICH_VERSION"
fi
# Add the information on the system:
echo "Running on system: `uname -a`"
dnl Definitions will be placed in this file rather than in the DEFS variable
AC_CONFIG_HEADERS([src/include/mpichconf.h])
AH_TOP([/*
* Copyright (C) by Argonne National Laboratory
* See COPYRIGHT in top-level directory
*/
#ifndef MPICHCONF_H_INCLUDED
#define MPICHCONF_H_INCLUDED
])
# We use an #include strategy here because all of the alternative strategies for
# quashing these variables have various drawbacks. The alternatives are listed
# here to avoid rediscovery of these problems by someone else in the future:
#
# 1) Strategy: Rewrite mpichconf.h.in with sed at autogen.sh time.
# Problem: Automatic remaking of config.status and friends will re-run
# autoheader and blow away our sed changes without an opportunity to
# patch the resulting file again.
# 2) Strategy: Add literal "#undef PACKAGE" lines to the AH_BOTTOM text.
# Problem: These lines get rewritten by config.status to be "#define" lines,
# so the intended quashing never actually occurs.
# 3) Strategy: Use AC_CONFIG_COMMANDS to run a sed rewrite command on
# mpichconf.h at config.status time.
# Problem: Causes mpichconf.h to always be rewritten, first by the normal
# config.status commands and then by sed. This can cause
# unnecessary remaking of object files since nearly every C source
# file includes this header (see the Autoconf Manual, "Automatic
# Remaking")
#
# The only other plausible strategy would seem to be rewriting config.status
# itself via AC_CONFIG_COMMANDS_POST, but that seems error prone. The best
# solution would be to stop all subconfigures from including config.h headers
# from other packages. Then all of this nonsense can be eliminated.
# [goodell@ 2011-08-26]
AH_BOTTOM([
/* Include nopackage.h to undef autoconf-defined macros that cause conflicts in
* subpackages. This should not be necessary, but some packages are too
* tightly intertwined right now (such as ROMIO and the MPICH core) */
#include "nopackage.h"
#endif /* !defined(MPICHCONF_H_INCLUDED) */
])
dnl Set the directory that contains support scripts such as install-sh and
dnl config.guess
AC_CONFIG_AUX_DIR(confdb)
dnl our macro dir is the same as our aux dir
AC_CONFIG_MACRO_DIR([confdb])
# Set the FROM_MPICH variable to tell subconfigures that they are
# built from within MPICH
FROM_MPICH=yes
export FROM_MPICH
# WRAPPER_xFLAGS are used by mpicc and friends.
#
# WRAPPER_CFLAGS and other compile flags are used for compile options
# that are added by MPICH, but should be used by applications (such
# as include paths).
#
# All libraries that are detected by MPICH as needed for some of its
# functionality (such as -lpthread) should be added to WRAPPER_LIBS
# so executables built within MPICH use them. If inter-library
# dependencies are not supported on the platform, these libraries are
# added to the MPICH wrappers (mpicc and friends) as well.
PAC_PREFIX_ALL_FLAGS(WRAPPER)
# confdb routines are used in multiple components. Let the macros know
# whether WRAPPER FLAGS are used.
m4_define([use_wrapper_flags], [1])
# MPICH_MPIx_FLAGS are used by mpicc and friends. They are like
# WRAPPER flags, but these are provided by the user.
AC_SUBST(MPICH_MPICC_CPPFLAGS)
AC_SUBST(MPICH_MPICC_CFLAGS)
AC_SUBST(MPICH_MPICC_LDFLAGS)
AC_SUBST(MPICH_MPICC_LIBS)
AC_SUBST(MPICH_MPICXX_CPPFLAGS)
AC_SUBST(MPICH_MPICXX_CXXFLAGS)
AC_SUBST(MPICH_MPICXX_LDFLAGS)
AC_SUBST(MPICH_MPICXX_LIBS)
AC_SUBST(MPICH_MPIF77_CPPFLAGS)
AC_SUBST(MPICH_MPIF77_FFLAGS)
AC_SUBST(MPICH_MPIF77_LDFLAGS)
AC_SUBST(MPICH_MPIF77_LIBS)
AC_SUBST(MPICH_MPIFORT_CPPFLAGS)
AC_SUBST(MPICH_MPIFORT_FCFLAGS)
AC_SUBST(MPICH_MPIFORT_LDFLAGS)
AC_SUBST(MPICH_MPIFORT_LIBS)
# Add MPICHLIB_* to the appropriate flags
AC_ARG_VAR(MPICHLIB_CFLAGS,
[extra CFLAGS used in building MPICH libraries])
AC_ARG_VAR(MPICHLIB_CPPFLAGS,
[extra CPPFLAGS used in building MPICH libraries])
AC_ARG_VAR(MPICHLIB_CXXFLAGS,
[extra CXXFLAGS used in building MPICH libraries])
AC_ARG_VAR(MPICHLIB_FFLAGS,
[extra FFLAGS used in building MPICH libraries])
AC_ARG_VAR(MPICHLIB_FCFLAGS,
[extra FCFLAGS used in building MPICH libraries])
CFLAGS="$CFLAGS $MPICHLIB_CFLAGS"
CPPFLAGS="$CPPFLAGS $MPICHLIB_CPPFLAGS"
CXXFLAGS="$CXXFLAGS $MPICHLIB_CXXFLAGS"
FFLAGS="$FFLAGS $MPICHLIB_FFLAGS"
FCFLAGS="$FCFLAGS $MPICHLIB_FCFLAGS"
# Save a copy of precious flags as USER_* before any of these flags
# are being modified by configure tests.
PAC_PREFIX_ALL_FLAGS(USER)
dnl include all subsystem m4 fragments now that the core autoconf functionality
dnl has been setup. No fragment should do anything except define
dnl PAC_SUBCFG_{PREREQ,BODY} macros which will be expanded later as
dnl appropriate
# begin subsys includes
m4_include([subsys_include.m4])
# end subsys includes
dnl ----------------------------------------------------------------------------
dnl setup top-level argument handling
AC_ARG_ENABLE(echo,
AS_HELP_STRING([--enable-echo], [Turn on strong echoing. The default is enable=no.]),
set -x)
AC_ARG_ENABLE(error-checking,
[ --enable-error-checking=level
Control the amount of error checking.
no - no error checking
runtime - error checking controllable at runtime through environment
variables
all - error checking always enabled (default)
],,enable_error_checking=all)
AC_ARG_ENABLE(error-messages,
[ --enable-error-messages=level - Control the amount of detail in error messages.
all - Maximum amount of information
generic - Only generic messages (no information about the specific
instance)
class - One message per MPI error class
none - No messages
],,enable_error_messages=all)
AC_ARG_ENABLE(tag-error-bits,
[ --enable-tag-error-bits=yes|no - Control whether bits are taken from the user tag for error handling.
yes - Two bits are taken from the user tag to support error propagation.
no - No bits are taken from the user tag (this could cause deadlock if an error is detected during a collective).
],,enable_tag_error_bits=yes)
AC_ARG_ENABLE(extended-context-bits,
[ --enable-extended-context-bits=yes|no - Enable wider context id space. (experimental)
yes - 20 bits
no - 16 bits (default)
],,enable_extended_context_bits=no)
AC_ARG_ENABLE(timing,
[ --enable-timing=level - Control the amount of timing information
collected by the MPICH implementation.
none - Collect no data (default)
all - Collect lots of data
runtime - Runtime control of data collected
],,enable_timing=default)
AC_ARG_ENABLE(g,
[ --enable-g=option - Control the level of debugging support in the
MPICH implementation. "option" is a list of comma
separated names including. Default is "most".
none - No debugging
handle - Trace handle operations
handlealloc - Trace handle allocations
dbg - Add compiler flag, -g, to all internal
compiler flags, i.e. MPICHLIB_CFLAGS, MPICHLIB_CXXFLAGS,
MPICHLIB_FFLAGS, and MPICHLIB_FCFLAGS.
debug - Synonym for dbg
asan - Add compiler flag, -fsanitize=address, to all internal
compiler flags. It also includes other flags for nicer
stacktrace such as -g -O1 -fno-omit-frame-pointer.
ubsan - Add compiler flag, -fsanitize=undefined, to all internal
compiler flags.
mem - Memory usage tracing
meminit - Preinitialize memory associated structures and unions to
eliminate access warnings from programs like valgrind
memarena - Check for overwrite errors in memory allocation arena
mutex - Enable error checking on pthread mutexes
most - Most of the above options, excluding some with severe
performance impacts. Recommended for typical development.
yes - synonym for "most" (*not* "all")
all - All of the above choices
],,enable_g=none)
AC_ARG_ENABLE([mpit-pvars],
[ --enable-mpit-pvars=list - Selectively enable MPI_T performance variables in
modules. list is a comma-separated module names,
including (Default is "none"):
none - No performance info recorded
recvq - All message queue-related
nem - All nemesis-related
rma - All rma-related
multinic - All multinic-related
all - All variables above
],[],[enable_mpit_pvars=none])
AC_ARG_ENABLE([mpit-events],
[ --enable-mpit-events=yes|no - Enable MPI_T events. (Default is "no"):
yes - All available events
no - No events
],[],[enable_mpit_events=no])
dnl We may want to force MPI_Aint to be the same size as MPI_Offset,
dnl particularly on 32 bit systems with large (64 bit) file systems.
AC_ARG_WITH(aint-size,
AS_HELP_STRING([--with-aint-size], [Override the size of MPI_AINT (in bytes)]),,
with_aint_size=0)
AC_ARG_ENABLE(fast,
[ --enable-fast=option - Control the level of fast execution in the
MPICH implementation. option is a list of
comma separated names including
O<n> - Appends default optimization flags, -O<n>, to all internal
compiler flags, i.e. MPICHLIB_CFLAGS, MPICHLIB_CXXFLAGS,
MPICHLIB_FFLAGS, and MPICHLIB_FCFLAGS. (default is -O2)
ndebug - Appends -DNDEBUG to MPICHLIB_CFLAGS.
no-strict-alignment - relax strict alignment requirement
alwaysinline - Force compiler to always inline performance critical routines
all|yes - "O2", "ndebug", and "alwaysinline" are enabled
none - None of above options, i.e. --disable-fast
],,enable_fast=O2)
AC_ARG_ENABLE(interlib-deps,
[AS_HELP_STRING([--enable-interlib-deps - Enable interlibrary dependencies])],,enable_interlib_deps=yes)
AC_ARG_ENABLE(check-compiler-flags,
AS_HELP_STRING([--enable-check-compiler-flags], [enable the checks for all compiler
options, xxxFLAGS, MPICH_xxxFLAGS. Default is on.]),,
enable_check_compiler_flags=yes)
dnl Whether to disable the Fortran bindings. By default, we'll probe and build all supported
dnl interfaces including mpif.h, use mpi, and use_mpi_f08.
AC_ARG_ENABLE(fortran,
AS_HELP_STRING([--disable-fortran], [Whether to disable Fortran bindings]),,[enable_fortran=yes])
AC_ARG_ENABLE(f77,
AS_HELP_STRING([--disable-f77], [Whether to disable "include 'mpif.h'" interface]),,[enable_f77=yes])
AC_ARG_ENABLE(f90,
AS_HELP_STRING([--disable-f90], [Whether to disable "use mpi" interface]),,[enable_f90=yes])
AC_ARG_ENABLE(f08,
AS_HELP_STRING([--disable-f08], [Whether to disable "use mpi_f08" interface]),,[enable_f08=yes])
AC_ARG_ENABLE(cxx,
AS_HELP_STRING([--enable-cxx], [Enable C++ bindings]),,enable_cxx=yes)
AC_ARG_ENABLE(romio,
AS_HELP_STRING([--enable-romio], [Enable ROMIO MPI I/O implementation]),,
enable_romio=yes)
AC_ARG_ENABLE(debuginfo,
AS_HELP_STRING([--enable-debuginfo], [Enable support for debuggers]),,
enable_debuginfo=no)
## Enable creation of libtool-style versioning or no versioning
AC_ARG_ENABLE(versioning,
[AS_HELP_STRING([--enable-versioning],[Enable library versioning])],,
[enable_versioning=yes])
if test "$enable_versioning" = "yes" ; then
ABIVERSIONFLAGS="-version-info \$(ABIVERSION)"
else
ABIVERSIONFLAGS="-avoid-version"
fi
export ABIVERSIONFLAGS
AC_SUBST(ABIVERSIONFLAGS)
dnl The environment variable MPICH_DEBUGLIBNAME may be used to
dnl override the default name of the library that the debugger will
dnl load to access the MPICH internal data structures.
dnl "default" is a special device that allows MPICH to choose one
dnl based on the environment.
AC_ARG_WITH(device,
AS_HELP_STRING([--with-device=name], [Specify the communication device for MPICH]),,
with_device=ch4)
AC_ARG_ENABLE(threads,
[ --enable-threads=level - Control the level of thread support in the
MPICH implementation. The following levels
are supported.
single - No threads (MPI_THREAD_SINGLE)
funneled - Only the main thread calls MPI (MPI_THREAD_FUNNELED)
serialized - User serializes calls to MPI (MPI_THREAD_SERIALIZED)
multiple - Fully multi-threaded (MPI_THREAD_MULTIPLE)
runtime - Alias to "multiple"
See also the --enable-thread-cs option for controlling the granularity of
the concurrency inside of the library
],,enable_threads=default)
AC_ARG_ENABLE(thread-cs,
AS_HELP_STRING([--enable-thread-cs=type],
[Choose the method used for critical sections
and other atomic updates when multiple
threads are present. Values may be default, global,
per-vci, lock-free. Default is global for ch3 and per-vci for ch4.
]),,enable_thread_cs=default)
AC_ARG_ENABLE(refcount,
AS_HELP_STRING([--enable-refcount=type],
[Choose the method for ensuring atomic updates
to the reference counts for MPI objects.
Values may be lock-free or none. The
default depends on the thread-cs choice; for
global it is none (because none is required),
for per-vci, and lock-free, lock-free]),,
enable_refcount=default)
AC_ARG_ENABLE(mutex-timing,
AS_HELP_STRING([--enable-mutex-timing], [calculate the time spent waiting on mutexes]),
AC_DEFINE(MPIU_MUTEX_WAIT_TIME,1,[Define to enable timing mutexes]))
AC_ARG_ENABLE([predefined-refcount],
AS_HELP_STRING([--enable-predefined-refcount],
[control whether predefined objects like
MPI_COMM_WORLD are reference counted (default
depends on --enable-thread-cs choice)]),[],
[enable_predefined_refcount=default])
AC_ARG_ENABLE(weak-symbols,
AS_HELP_STRING([--enable-weak-symbols],
[Use weak symbols to implement PMPI routines (default)]),,
enable_weak_symbols=yes)
AC_ARG_ENABLE(qmpi,
AS_HELP_STRING([--enable-qmpi],
[Enable QMPI support (default)]),,
enable_qmpi=no)
if test "$enable_qmpi" = "yes" ; then
AC_DEFINE(ENABLE_QMPI,1,[Define if QMPI enabled])
ENABLE_QMPI=1
else
ENABLE_QMPI=0
fi
AC_SUBST(ENABLE_QMPI)
AC_ARG_ENABLE([two-level-namespace],
[AS_HELP_STRING([--disable-two-level-namespace],
[(Darwin only) Add `-Wl,-flat_namespace` to
mpicc/mpifort/etc. compiler wrappers.
This may fix some issues due to not resolving
MPI constants, such as MPI_IN_PLACE.
Try disable this option if you encounter these issues
on Mac OS.])],
[],
[enable_two_level_namespace=yes])
AC_ARG_ENABLE(multi-aliases,
AS_HELP_STRING([--enable-multi-aliases],
[Multiple aliasing to support multiple fortran compilers (default)]),,
enable_multi_aliases=yes)
AC_ARG_WITH([wrapper-dl-type],
[AS_HELP_STRING([--enable-wrapper-dl-type],
[Dynamic loading model for alternate MPI
libraries, used when programs are linked
by mpicc compiler wrappers. This only
applies when shared libraries are built.
The default is "runpath"; use
--with-wrapper-dl-type=rpath to force
rpath; use --with-wrapper-dl-type=none to
find shared libraries according to the
rules for your system (e.g., in
LD_LIBRARY_PATH)])],
[],[with_wrapper_dl_type=runpath])
AC_SUBST([with_wrapper_dl_type])
AC_ARG_ENABLE([long-double],
[AS_HELP_STRING([--disable-long-double],
[Pass --disable-long-double to prevent the MPI
library from supporting the C "long double" type,
even if the C compiler supports it. "long
double" support is enabled by default, provided
the compiler supports it.])],
[],
[enable_long_double=yes])
AC_ARG_WITH(cross,
AS_HELP_STRING([--with-cross=file],
[Specify the values of variables that configure cannot
determine in a cross-compilation environment]),,
with_cross=$MPID_DEFAULT_CROSS_FILE)
AC_ARG_WITH(namepublisher,
[ --with-namepublisher=name Choose the system that will support
MPI_PUBLISH_NAME and MPI_LOOKUP_NAME. Options
include
pmi (default)
file[:directory] (optional directory)
no (no service available)],,with_namepublisher=default)
AC_ARG_WITH(name-publisher,
[],
with_namepublisher=$with_name_publisher,)
AC_ARG_ENABLE(nolocal, AS_HELP_STRING([--enable-nolocal], [enables nolocal mode where shared-memory communication is disabled]),
AC_DEFINE(ENABLE_NO_LOCAL, 1, [Define to disable shared-memory communication]))
AC_CANONICAL_TARGET
# Find a C compiler.
# We also need to do this before the F77 and FC test to ensure that we
# find the C preprocessor reliably.
AC_PROG_CC
AC_PROG_CC_C99
AM_PROG_CC_C_O dnl needed for automake "silent-rules"
PAC_PUSH_FLAG([CFLAGS])
AC_PROG_CPP
# Bug in autoconf. Restore cross settings
if test "$pac_cross_compiling" = "yes" -a "$ac_cv_prog_cc_cross" = "no" ; then
AC_MSG_RESULT([Resetting cross compilation to yes])
cross_compiling=yes
ac_cv_prog_cc_cross=yes
ac_cv_prog_f77_cross=yes
ac_cv_prog_fc_cross=yes
ac_cv_prog_cxx_cross=yes
fi
PAC_POP_FLAG([CFLAGS])
AC_USE_SYSTEM_EXTENSIONS
PAC_C_NO_COMMON
dnl now that autoconf and core compilers are setup, init automake and libtool
dnl
dnl We would like to pass -Werror, but we are cheating in the "examples/"
dnl directory and overriding the user-flags like CFLAGS, which automake-1.12
dnl warns about. Long-term we may need to use a hand-written Makefile.in or
dnl something else in this special dir.
AM_INIT_AUTOMAKE([-Wall -Wno-portability-recursive foreign 1.12.3 silent-rules subdir-objects no-dist])
AM_MAINTAINER_MODE([enable])
AM_PROG_AR
LT_INIT()
# Non-verbose make by default
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
# Disable rpath/runpath-related linkflags in the compiler wrappers if
# shared libraries are disabled, since rpath/runpath makes no sense in
# the context of static libraries.
if test "X$enable_shared" = "Xno" ; then
with_wrapper_dl_type=no
fi
INTERLIB_DEPS=yes
# We conservatively disable interlibrary dependencies if the libtool
# support model is anything different from "pass_all"
if test "X$enable_shared" = "Xno" -o "$deplibs_check_method" != "pass_all" -o "$enable_interlib_deps" = "no" ; then
INTERLIB_DEPS=no
fi
export INTERLIB_DEPS
AC_SUBST(INTERLIB_DEPS)
dnl AC_PROG_{CXX,F77,FC} must come early in configure.ac in order to avoid some
dnl esoteric autoconf macro expansion errors
dnl
dnl Also, DO NOT attempt to place shell conditionals (either manually or via
dnl AS_IF) around these macros in an effort to save configure time. It will
dnl lead to weird AM_CONDITIONAL errors and potentially other problems.
# Before attempting to find valid compilers, set the corresponding precious
# shell variable to "no" for any languages that have been disabled by the user
# with "--disable-LANG". Libtool understands this as a request to disable
# support for this language. This should save a bit of configure time and also
# prevent user complaints like ticket #1570.
#
# NOTE: we are skipping overriding CXX as some modules (e.g. ucx) may depend on CXX
#
# suppress default "-g -O2" from AC_PROG_CXX
: ${CXXFLAGS=""}
AC_PROG_CXX
AC_CACHE_CHECK([whether the C++ compiler $CXX can build an executable],
pac_cv_cxx_builds_exe,[
AC_LANG_PUSH([C++])
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
class mytest {
int a;
public:
mytest(void) : a(1) {}
~mytest(void) {}
};
]],[[mytest a;]])],
pac_cv_cxx_builds_exe=yes, pac_cv_cxx_builds_exe=no)
AC_LANG_POP([C++])
])
if test "$pac_cv_cxx_builds_exe" = "no" ; then
# clear $CXX if C++ compiler does not work
CXX=
fi
if test "$enable_fortran" = "no" ; then
enable_f77=no
enable_f90=no
enable_f08=no
fi
# Python 3 is needed to generate Fortran bindings
PAC_CHECK_PYTHON
if test "$enable_fortran" != "no" ; then
# suppress default "-g -O2" from AC_PROG_FC
: ${FCFLAGS=""}
AC_PROG_FC
F77=$FC
FFLAGS=$FCFLAGS
AC_PROG_F77
fi
AM_CONDITIONAL([INSTALL_MPIF77],[false])
# compute canonical system types
AC_CANONICAL_BUILD
AC_CANONICAL_HOST
# TARGET not needed, MPICH isn't a compiler
# Enable better caching control
PAC_ARG_CACHING
# Set CFLAGS for enable strict if necessary. Do this *first* because
# it may influence the output of the other tests
PAC_ARG_STRICT
# To link C objects with Fortran main program may require -fPIE option
PAC_C_CHECK_fPIE_OK
# -----------------------------------------------------------------------------
# First check that we have a clean build if we are doing a VPATH build
PAC_VPATH_CHECK(src/include/mpi.h src/env/mpicc,lib)
# ----------------------------------------------------------------------------
# This test is complicated by the fact that top_srcdir is not set until
# the very end of configure. Instead, we get it ourselves
if test -z "$top_srcdir" ; then
use_top_srcdir=$srcdir
else
use_top_srcdir=$top_srcdir
fi
if test -z "$main_top_srcdir" ; then
# This needs to be an absolute pathname
case "$use_top_srcdir" in
/*) ;;
*)
use_top_srcdir=`(cd $use_top_srcdir && pwd)`
;;
esac
main_top_srcdir=$use_top_srcdir
fi
# Get the directory that we're running in...
if test -z "$main_top_builddir" ; then
main_top_builddir="`pwd`"
fi
AC_SUBST(main_top_builddir)
AC_SUBST(main_top_srcdir)
export main_top_builddir
export main_top_srcdir
if test -z "$with_cross"; then
if test -f "$main_top_srcdir/src/cross/$host_alias"; then
with_cross="$main_top_srcdir/src/cross/$host_alias"
else
with_cross=no
fi
fi
if test "$with_cross" != "no"; then
AC_MSG_NOTICE([Using cross file: $with_cross])
fi
# ----------------------------------------------------------------------------
dnl Export important "precious" variables so that any directories configured via
dnl PAC_CONFIG_SUBDIR will agree with the top-level configure about these
dnl critical variables (esp. compiler selection). These exports should come
dnl before any subconfigures in this script.
dnl
dnl This list is arguably incomplete, and should possibly be automatically
dnl generated from "$ac_precious_vars" using code similar to the implementation
dnl of PAC_CONFIG_SUBDIR.
dnl
dnl To be clear, without these exports any variable values determined by this
dnl configure script will not be seen by child scripts. Instead they will dnl
dnl receive the only the original inherited environment and configure args used
dnl when this configure script was invoked.
export CC
export CFLAGS
export CPPFLAGS
export CXX
export CXXFLAGS
export F77
export FC
export FCFLAGS
export FFLAGS
export LDFLAGS
export LIBS
export MPILIBNAME
export PMPILIBNAME
export OPALIBNAME
# ----------------------------------------------------------------------------
# with-device
#
# Extract the device name from any options
# Allow the device to specify a directory; if no directory, use the
# included directories
#
DEVICE=$with_device
AC_SUBST(DEVICE)
device_name=`echo $with_device | sed -e 's/:.*$//'`
changequote(<<,>>)
device_args=`echo $with_device | sed -e 's/^[^:]*//' -e 's/^://'`
changequote([,])
devicedir=$use_top_srcdir/src/mpid/$device_name
devicereldir=src/mpid/$device_name
export device_name
export device_args
export devicedir
if test "$device_name" = "ch4" ; then
AC_DEFINE([ENABLE_LOCAL_SESSION_INIT], 1, [Define to skip initializing builtin world comm during MPI_Session_init])
fi
# expand all of the prereq macros in the correct order
m4_map([PAC_SUBCFG_DO_PREREQ], [PAC_SUBCFG_MODULE_LIST])
# ----------------------------------------------------------------------------
# Set default library names if names haven't already been provided
AC_ARG_VAR([MPILIBNAME],[can be used to override the name of the MPI library (default: "mpi")])
AC_ARG_VAR([PMPILIBNAME],[can be used to override the name of the MPI profiling library (default: "p$MPILIBNAME")])
AC_ARG_VAR([MPICXXLIBNAME],[can be used to override the name of the MPI C++ library (default: "${MPILIBNAME}cxx")])
AC_ARG_VAR([MPIFCLIBNAME],[can be used to override the name of the MPI fortran library (default: "${MPILIBNAME}fort")])
MPILIBNAME=${MPILIBNAME:-"mpi"}
PMPILIBNAME_set=no
if test -n "$PMPILIBNAME" ; then
PMPILIBNAME_set=yes
fi
PMPILIBNAME=${PMPILIBNAME:-"p$MPILIBNAME"}
# Note that the name for this library may be updated after we check for
# enable_shmem
# Fortran names are set later.
# We use a different library for the C++ wrappers to avoid problems when
# creating shared libraries
if test -z "$MPICXXLIBNAME" ; then MPICXXLIBNAME="${MPILIBNAME}cxx" ; fi
if test -z "$MPIFCLIBNAME" ; then MPIFCLIBNAME="${MPILIBNAME}fort" ; fi
export MPICXXLIBNAME
export MPIFCLIBNAME
AC_SUBST(MPICXXLIBNAME)
AC_SUBST(MPIFCLIBNAME)
# We'll set FORTRAN_BINDING to 1 if we support Fortran
FORTRAN_BINDING=0
# enable-fast
# strip off multiple options, separated by commas
save_IFS="$IFS"
IFS=","
for option in $enable_fast ; do
case "$option" in
O*)
enable_fast_opts=$option
;;
ndebug)
enable_fast_ndebug=yes
;;
no-strict-alignment)
enable_fast_no_strict_alignment=yes
;;
alwaysinline) # No op in MPICH. See mpl/configure.ac
;;
avx)
enable_fast_avx_instr=yes
;;
all|yes)
enable_fast_ndebug=yes
enable_fast_opts=O2
;;
none|no)
enable_fast_ndebug=no
enable_fast_opts=O0
enable_fast_avx_instr=no
;;
*)
IFS="$save_IFS"
AC_MSG_WARN([Unknown value $option for --enable-fast])
IFS=","
;;
esac
done
IFS="$save_IFS"
if test -n "$enable_fast_opts" ; then
# Allows O<n> where <n> can be [0-9] or ' '.
opt_flags=`echo $enable_fast_opts | sed -e 's%\(O[0-9] \)%\1%g'`
if test -n "$opt_flags" ; then
MPI_DEFAULT_COPTS="-$enable_fast_opts"
MPI_DEFAULT_CXXOPTS="-$enable_fast_opts"
MPI_DEFAULT_FOPTS="-$enable_fast_opts"
MPI_DEFAULT_FCOPTS="-$enable_fast_opts"
else
AC_MSG_WARN([Unknown value $enable_fast_opts for --enable-fast])
fi
fi
if test "$enable_fast_ndebug" = "yes" ; then
CFLAGS="$CFLAGS -DNDEBUG -DNVALGRIND"
CXXFLAGS="$CXXFLAGS -DNDEBUG -DNVALGRIND"
# MPICH does NOT assume any preprocessing support from the Fortran compiler,
# so no Fortran files contain any preprocessing statements.
# Don't set FFLAGS or FCFLAGS with any -D.
fi
if test -z "$enable_fast_no_strict_alignment" ; then
# we need observe strict alignment to pass ubsan check
AC_DEFINE(NEEDS_STRICT_ALIGNMENT,1,[Define if strict alignment memory access is required])
fi
if test "$enable_fast_avx_instr" = "yes" ; then
AC_CACHE_CHECK([whether -mavx is supported], pac_cv_found_avx,
[PAC_C_CHECK_COMPILER_OPTION([-mavx],pac_cv_found_avx=yes,pac_cv_found_avx=no)],
pac_cv_found_avx=no,pac_cv_found_avx=yes)
if test "$pac_cv_found_avx" = "yes" ; then
PAC_APPEND_FLAG([-mavx],[CFLAGS])
AC_CACHE_CHECK([whether _mm256_stream_si256 is supported], pac_cv_found__mm256_stream_si256,[
AC_RUN_IFELSE([AC_LANG_SOURCE([[
#include <immintrin.h>
int main(int argc, char **argv) {
char source[1024], dest[1024];
for (int i = 0; i < 1024; i++) source[i] = 'a';
__m256i ymm0 = _mm256_loadu_si256((__m256i const *) source);
_mm256_stream_si256((__m256i *) dest, ymm0);
if (dest[0] == source[0]) return 0;
else return 1;
}
]])], pac_cv_found__mm256_stream_si256="yes",
pac_cv_found__mm256_stream_si256="no",
pac_cv_found__mm256_stream_si256="unknown")
])
fi
if test "$pac_cv_found__mm256_stream_si256" = "yes" ; then
AC_DEFINE(HAVE_MM256_STREAM_SI256,1,[Define if 256 bit streaming memcpy is available])
fi
fi
# error-checking
# Change default into the specific value of the default
if test "$enable_error_checking" = "yes" ; then
enable_error_checking=all
fi
# mpir_ext.h needs the variable HAVE_ERROR_CHECKING to have the value 0 or 1
HAVE_ERROR_CHECKING=0
case "$enable_error_checking" in
no)
# if error checking has been disabled, then automatically disable the error
# checking tests in the test suite
ac_configure_args="${ac_configure_args} --disable-checkerrors"
;;
all|runtime)
error_checking_kind=`echo $enable_error_checking | \
tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
error_checking_kind=MPID_ERROR_LEVEL_$error_checking_kind
AC_DEFINE_UNQUOTED(HAVE_ERROR_CHECKING,$error_checking_kind,[Define to enable error checking])
HAVE_ERROR_CHECKING=1
;;
*)
AC_MSG_WARN([Unknown value $enable_error_checking for enable-error-checking])
;;
esac
# permit @HAVE_ERROR_CHECKING@ substitution in mpir_ext.h
AC_SUBST([HAVE_ERROR_CHECKING])
# error-messages
case "$enable_error_messages" in
no|none)
error_message_kind="MPICH_ERROR_MSG__NONE"
;;
all|yes)
error_message_kind="MPICH_ERROR_MSG__ALL"
;;
generic)
error_message_kind="MPICH_ERROR_MSG__GENERIC"
;;