root/ompi/tools/ompi_info/param.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. append
  2. ompi_info_do_config

   1 /*
   2  * Copyright (c) 2004-2010 The Trustees of Indiana University and Indiana
   3  *                         University Research and Technology
   4  *                         Corporation.  All rights reserved.
   5  * Copyright (c) 2004-2006 The University of Tennessee and The University
   6  *                         of Tennessee Research Foundation.  All rights
   7  *                         reserved.
   8  * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
   9  *                         University of Stuttgart.  All rights reserved.
  10  * Copyright (c) 2004-2005 The Regents of the University of California.
  11  *                         All rights reserved.
  12  * Copyright (c) 2007-2017 Cisco Systems, Inc.  All rights reserved
  13  * Copyright (c) 2009      Oak Ridge National Labs.  All rights reserved.
  14  * Copyright (c) 2014-2017 Research Organization for Information Science
  15  *                         and Technology (RIST). All rights reserved.
  16  * Copyright (c) 2015      Intel, Inc. All rights reserved
  17  * Copyright (c) 2018      Amazon.com, Inc. or its affiliates.  All Rights reserved.
  18  * Copyright (c) 2018      FUJITSU LIMITED.  All rights reserved.
  19  * Copyright (c) 2019      Triad National Security, LLC. All rights reserved.
  20  * $COPYRIGHT$
  21  *
  22  * Additional copyrights may follow
  23  *
  24  * $HEADER$
  25  */
  26 
  27 #include "ompi_config.h"
  28 #include "mpi.h"
  29 
  30 #include <string.h>
  31 #include <ctype.h>
  32 #ifdef HAVE_UNISTD_H
  33 #include <unistd.h>
  34 #endif
  35 #ifdef HAVE_SYS_PARAM_H
  36 #include <sys/param.h>
  37 #endif
  38 #ifdef HAVE_NETDB_H
  39 #include <netdb.h>
  40 #endif
  41 
  42 #include MCA_timer_IMPLEMENTATION_HEADER
  43 #include "opal/include/opal/version.h"
  44 #include "opal/class/opal_value_array.h"
  45 #include "opal/class/opal_pointer_array.h"
  46 #include "opal/util/printf.h"
  47 #include "opal/memoryhooks/memory.h"
  48 #include "opal/runtime/opal_info_support.h"
  49 
  50 #include "ompi/tools/ompi_info/ompi_info.h"
  51 #include "ompi/include/mpi_portable_platform.h"
  52 
  53 
  54 const char *ompi_info_deprecated_value = "deprecated-ompi-info-value";
  55 
  56 static void append(char *dest, size_t max, int *first, char *src)
  57 {
  58     size_t len;
  59 
  60     if (NULL == src) {
  61         return;
  62     }
  63 
  64     len = max - strlen(dest);
  65     if (!(*first)) {
  66         strncat(dest, ", ", len);
  67         len = max - strlen(dest);
  68     }
  69     strncat(dest, src, len);
  70     *first = 0;
  71 }
  72 
  73 
  74 /*
  75  * do_config
  76  * Accepts:
  77  *      - want_all: boolean flag; TRUE -> display all options
  78  *                                FALSE -> display selected options
  79  *
  80  * This function displays all the options with which the current
  81  * installation of ompi was configured. There are many options here
  82  * that are carried forward from OMPI-7 and are not mca parameters
  83  * in OMPI-10. I have to dig through the invalid options and replace
  84  * them with OMPI-10 options.
  85  */
  86 void ompi_info_do_config(bool want_all)
  87 {
  88     char *cxx;
  89     char *fortran_mpifh;
  90     char *fortran_usempi;
  91     char *fortran_usempif08;
  92     char *fortran_usempif08_compliance;
  93     char *fortran_have_ignore_tkr;
  94     char *fortran_have_f08_assumed_rank;
  95     char *fortran_build_f08_subarrays;
  96     char *fortran_have_optional_args;
  97     char *fortran_have_interface;
  98     char *fortran_have_iso_fortran_env;
  99     char *fortran_have_storage_size;
 100     char *fortran_have_bind_c;
 101     char *fortran_have_iso_c_binding;
 102     char *fortran_have_bind_c_sub;
 103     char *fortran_have_bind_c_type;
 104     char *fortran_have_bind_c_type_name;
 105     char *fortran_have_private;
 106     char *fortran_have_protected;
 107     char *fortran_have_abstract;
 108     char *fortran_have_asynchronous;
 109     char *fortran_have_procedure;
 110     char *fortran_have_use_only;
 111     char *fortran_have_c_funloc;
 112     char *fortran_08_using_wrappers_for_choice_buffer_functions;
 113     char *fortran_build_sizeof;
 114     char *java;
 115     char *heterogeneous;
 116     char *memprofile;
 117     char *memdebug;
 118     char *debug;
 119     char *mpi_interface_warning;
 120     char *cprofiling;
 121     char *cxxprofiling;
 122     char *fortran_mpifh_profiling;
 123     char *fortran_usempi_profiling;
 124     char *fortran_usempif08_profiling;
 125     char *cxxexceptions;
 126     char *threads;
 127     char *have_dl;
 128 #if OMPI_RTE_ORTE
 129     char *mpirun_prefix_by_default;
 130 #endif
 131     char *sparse_groups;
 132     char *wtime_support;
 133     char *symbol_visibility;
 134     char *ft_support;
 135     char *crdebug_support;
 136     char *topology_support;
 137     char *ipv6_support;
 138     char *mpi1_compat_support;
 139 
 140     /* Do a little preprocessor trickery here to figure opal_info_out the
 141      * tri-state of MPI_PARAM_CHECK (which will be either 0, 1, or
 142      * ompi_mpi_param_check).  The preprocessor will only allow
 143      * comparisons against constants, so you'll get a warning if you
 144      * check MPI_PARAM_CHECK against 0 or 1, but its real value is the
 145      * char *ompi_mpi_param_check.  So define ompi_mpi_param_check to
 146      * be a constant, and then all the preprocessor comparisons work
 147      * opal_info_out ok.  Note that we chose the preprocessor
 148      * comparison ropal_info_oute because it is not sufficient to
 149      * simply set the variable ompi_mpi_param_check to a non-0/non-1
 150      * value.  This is because the compiler will generate a warning
 151      * that that C variable is unused when MPI_PARAM_CHECK is
 152      * hard-coded to 0 or 1.
 153      */
 154     char *paramcheck;
 155 #define ompi_mpi_param_check 999
 156 #if 0 == MPI_PARAM_CHECK
 157     paramcheck = "never";
 158 #elif 1 == MPI_PARAM_CHECK
 159     paramcheck = "always";
 160 #else
 161     paramcheck = "runtime";
 162 #endif
 163 
 164     /* The current mpi_f08 implementation does not support Fortran
 165        subarrays.  However, someday it may/will.  Hence, I'm leaving
 166        in all the logic that checks to see whether subarrays are
 167        supported, but I'm just hard-coding
 168        OMPI_BUILD_FORTRAN_F08_SUBARRAYS to 0 (we used to have a
 169        prototype mpi_f08 module that implemented a handful of
 170        descriptor-based interfaces and supported subarrays, but that
 171        has been removed). */
 172     const int OMPI_BUILD_FORTRAN_F08_SUBARRAYS = 0;
 173 
 174     /* setup the strings that don't require allocations*/
 175     cxx = OMPI_BUILD_CXX_BINDINGS ? "yes" : "no";
 176     if (OMPI_BUILD_FORTRAN_BINDINGS >= OMPI_FORTRAN_USEMPI_BINDINGS) {
 177         if (OMPI_FORTRAN_HAVE_IGNORE_TKR) {
 178             fortran_usempi = "yes (full: ignore TKR)";
 179         } else {
 180             fortran_usempi = "yes (limited: overloading)";
 181         }
 182     } else {
 183         fortran_usempi = "no";
 184     }
 185     fortran_usempif08 = OMPI_BUILD_FORTRAN_BINDINGS >= OMPI_FORTRAN_USEMPIF08_BINDINGS ? "yes" : "no";
 186     fortran_have_f08_assumed_rank = OMPI_FORTRAN_HAVE_F08_ASSUMED_RANK ?
 187         "yes" : "no";
 188     fortran_build_f08_subarrays = OMPI_BUILD_FORTRAN_F08_SUBARRAYS ?
 189         "yes" : "no";
 190     fortran_have_optional_args = OMPI_FORTRAN_HAVE_OPTIONAL_ARGS ?
 191         "yes" : "no";
 192     fortran_have_interface = OMPI_FORTRAN_HAVE_INTERFACE ? "yes" : "no";
 193     fortran_have_iso_fortran_env = OMPI_FORTRAN_HAVE_ISO_FORTRAN_ENV ?
 194         "yes" : "no";
 195     fortran_have_storage_size = OMPI_FORTRAN_HAVE_STORAGE_SIZE ? "yes" : "no";
 196     fortran_have_bind_c = OMPI_FORTRAN_HAVE_BIND_C ? "yes" : "no";
 197     fortran_have_iso_c_binding = OMPI_FORTRAN_HAVE_ISO_C_BINDING ?
 198         "yes" : "no";
 199     fortran_have_bind_c_sub = OMPI_FORTRAN_HAVE_BIND_C_SUB ? "yes" : "no";
 200     fortran_have_bind_c_type = OMPI_FORTRAN_HAVE_BIND_C_TYPE ? "yes" : "no";
 201     fortran_have_bind_c_type_name = OMPI_FORTRAN_HAVE_BIND_C_TYPE_NAME ?
 202         "yes" : "no";
 203     fortran_have_private = OMPI_FORTRAN_HAVE_PRIVATE ? "yes" : "no";
 204     fortran_have_protected = OMPI_FORTRAN_HAVE_PROTECTED ? "yes" : "no";
 205     fortran_have_abstract = OMPI_FORTRAN_HAVE_ABSTRACT ? "yes" : "no";
 206     fortran_have_asynchronous = OMPI_FORTRAN_HAVE_ASYNCHRONOUS ? "yes" : "no";
 207     fortran_have_procedure = OMPI_FORTRAN_HAVE_PROCEDURE ? "yes" : "no";
 208     fortran_have_use_only = OMPI_FORTRAN_HAVE_USE_ONLY ? "yes" : "no";
 209     fortran_have_c_funloc = OMPI_FORTRAN_HAVE_C_FUNLOC ? "yes" : "no";
 210     fortran_08_using_wrappers_for_choice_buffer_functions =
 211         OMPI_FORTRAN_NEED_WRAPPER_ROUTINES ? "yes" : "no";
 212     fortran_build_sizeof = OMPI_FORTRAN_BUILD_SIZEOF ?
 213         "yes" : "no";
 214 
 215     /* Build a string describing what level of compliance the mpi_f08
 216        module has */
 217     char f08_msg[1024];
 218     if (OMPI_BUILD_FORTRAN_BINDINGS >= OMPI_FORTRAN_USEMPIF08_BINDINGS) {
 219 
 220         /* Do we have everything? (not including PROTECTED, which
 221            isn't *needed* for the mpi_f08 module compliance -- it's
 222            just *nice to have*) */
 223         if (OMPI_BUILD_FORTRAN_F08_SUBARRAYS &&
 224             OMPI_FORTRAN_HAVE_PRIVATE &&
 225             OMPI_FORTRAN_HAVE_ABSTRACT &&
 226             OMPI_FORTRAN_HAVE_ASYNCHRONOUS &&
 227             OMPI_FORTRAN_HAVE_PROCEDURE &&
 228             OMPI_FORTRAN_HAVE_USE_ONLY &&
 229             OMPI_FORTRAN_HAVE_C_FUNLOC &&
 230             OMPI_FORTRAN_NEED_WRAPPER_ROUTINES) {
 231             fortran_usempif08_compliance = "The mpi_f08 module is available, and is fully compliant.  w00t!";
 232         } else {
 233             int first = 1;
 234             snprintf(f08_msg, sizeof(f08_msg),
 235                      "The mpi_f08 module is available, but due to limitations in the %s compiler and/or Open MPI, does not support the following: ",
 236                      OMPI_FC);
 237             if (!OMPI_BUILD_FORTRAN_F08_SUBARRAYS) {
 238                 append(f08_msg, sizeof(f08_msg), &first, "array subsections");
 239             }
 240             if (!OMPI_FORTRAN_HAVE_PRIVATE) {
 241                 append(f08_msg, sizeof(f08_msg), &first,
 242                        "private MPI_Status members");
 243             }
 244             if (!OMPI_FORTRAN_HAVE_ABSTRACT) {
 245                 append(f08_msg, sizeof(f08_msg), &first,
 246                        "ABSTRACT INTERFACE function pointers");
 247             }
 248             if (!OMPI_FORTRAN_HAVE_ASYNCHRONOUS) {
 249                 append(f08_msg, sizeof(f08_msg), &first,
 250                        "Fortran '08-specified ASYNCHRONOUS behavior");
 251             }
 252             if (!OMPI_FORTRAN_HAVE_PROCEDURE) {
 253                 append(f08_msg, sizeof(f08_msg), &first, "PROCEDUREs");
 254             }
 255             if (!OMPI_FORTRAN_HAVE_USE_ONLY) {
 256                 append(f08_msg, sizeof(f08_msg), &first, "USE_ONLY");
 257             }
 258             if (!OMPI_FORTRAN_HAVE_C_FUNLOC) {
 259                 append(f08_msg, sizeof(f08_msg), &first, "C_FUNLOCs");
 260             }
 261             if (OMPI_FORTRAN_NEED_WRAPPER_ROUTINES) {
 262                 append(f08_msg, sizeof(f08_msg), &first,
 263                        "direct passthru (where possible) to underlying Open MPI's C functionality");
 264             }
 265             fortran_usempif08_compliance = f08_msg;
 266         }
 267     } else {
 268         fortran_usempif08_compliance = "The mpi_f08 module was not built";
 269     }
 270 
 271     java = OMPI_WANT_JAVA_BINDINGS ? "yes" : "no";
 272     heterogeneous = OPAL_ENABLE_HETEROGENEOUS_SUPPORT ? "yes" : "no";
 273     memprofile = OPAL_ENABLE_MEM_PROFILE ? "yes" : "no";
 274     memdebug = OPAL_ENABLE_MEM_DEBUG ? "yes" : "no";
 275     debug = OPAL_ENABLE_DEBUG ? "yes" : "no";
 276     mpi_interface_warning = OMPI_WANT_MPI_INTERFACE_WARNING ? "yes" : "no";
 277     cprofiling = "yes";
 278     cxxprofiling = OMPI_BUILD_CXX_BINDINGS ? "yes" : "no";
 279     cxxexceptions = (OMPI_BUILD_CXX_BINDINGS && OMPI_HAVE_CXX_EXCEPTION_SUPPORT) ? "yes" : "no";
 280     fortran_mpifh_profiling = (OMPI_BUILD_FORTRAN_BINDINGS >= OMPI_FORTRAN_MPIFH_BINDINGS) ? "yes" : "no";
 281     fortran_usempi_profiling = (OMPI_BUILD_FORTRAN_BINDINGS >= OMPI_FORTRAN_USEMPI_BINDINGS) ? "yes" : "no";
 282     fortran_usempif08_profiling = (OMPI_BUILD_FORTRAN_BINDINGS >= OMPI_FORTRAN_USEMPIF08_BINDINGS) ? "yes" : "no";
 283     have_dl = OPAL_HAVE_DL_SUPPORT ? "yes" : "no";
 284 #if OMPI_RTE_ORTE
 285     mpirun_prefix_by_default = ORTE_WANT_ORTERUN_PREFIX_BY_DEFAULT ? "yes" : "no";
 286 #endif
 287     sparse_groups = OMPI_GROUP_SPARSE ? "yes" : "no";
 288     wtime_support = OPAL_TIMER_USEC_NATIVE ? "native" : "gettimeofday";
 289     symbol_visibility = OPAL_C_HAVE_VISIBILITY ? "yes" : "no";
 290     topology_support = "yes";
 291     ipv6_support = OPAL_ENABLE_IPV6 ? "yes" : "no";
 292     /*
 293      * hardwire to no since we don't have MPI1 compat post v4.0.x
 294      */
 295     mpi1_compat_support = "no";
 296 
 297     /* setup strings that require allocation */
 298     if (OMPI_BUILD_FORTRAN_BINDINGS >= OMPI_FORTRAN_MPIFH_BINDINGS) {
 299         (void)opal_asprintf(&fortran_mpifh, "yes (%s)",
 300                        (OPAL_HAVE_WEAK_SYMBOLS ? "all" :
 301                         (OMPI_FORTRAN_CAPS ? "caps" :
 302                          (OMPI_FORTRAN_PLAIN ? "lower case" :
 303                           (OMPI_FORTRAN_SINGLE_UNDERSCORE ? "single underscore" : "double underscore")))));
 304     } else {
 305         fortran_mpifh = strdup("no");
 306     }
 307 
 308     if (OMPI_FORTRAN_HAVE_IGNORE_TKR) {
 309         /* OMPI_FORTRAN_IGNORE_TKR_PREDECL is already in quotes; it
 310            didn't work consistently to put it in _STRINGIFY because
 311            sometimes the compiler would actually interpret the pragma
 312            in there before stringify-ing it. */
 313         (void)opal_asprintf(&fortran_have_ignore_tkr, "yes (%s)",
 314                        OMPI_FORTRAN_IGNORE_TKR_PREDECL);
 315     } else {
 316         fortran_have_ignore_tkr = strdup("no");
 317     }
 318 
 319 #if OMPI_RTE_ORTE
 320     (void)opal_asprintf(&threads, "%s (MPI_THREAD_MULTIPLE: yes, OPAL support: yes, OMPI progress: %s, ORTE progress: yes, Event lib: yes)",
 321                    "posix", OPAL_ENABLE_PROGRESS_THREADS ? "yes" : "no");
 322 #else
 323     (void)opal_asprintf(&threads, "%s (MPI_THREAD_MULTIPLE: yes, OPAL support: yes, OMPI progress: %s, Event lib: yes)",
 324                    "posix", OPAL_ENABLE_PROGRESS_THREADS ? "yes" : "no");
 325 #endif
 326 
 327     (void)opal_asprintf(&ft_support, "%s (checkpoint thread: %s)",
 328                    OPAL_ENABLE_FT ? "yes" : "no", OPAL_ENABLE_FT_THREAD ? "yes" : "no");
 329 
 330     (void)opal_asprintf(&crdebug_support, "%s",
 331                    OPAL_ENABLE_CRDEBUG ? "yes" : "no");
 332 
 333     /* output values */
 334     opal_info_out("Configured by", "config:user", OPAL_CONFIGURE_USER);
 335     opal_info_out("Configured on", "config:timestamp", OPAL_CONFIGURE_DATE);
 336     opal_info_out("Configure host", "config:host", OPAL_CONFIGURE_HOST);
 337     opal_info_out("Configure command line", "config:cli", OPAL_CONFIGURE_CLI);
 338 
 339     opal_info_out("Built by", "build:user", OMPI_BUILD_USER);
 340     opal_info_out("Built on", "build:timestamp", OMPI_BUILD_DATE);
 341     opal_info_out("Built host", "build:host", OMPI_BUILD_HOST);
 342 
 343     opal_info_out("C bindings", "bindings:c", "yes");
 344     opal_info_out("C++ bindings", "bindings:cxx", cxx);
 345     opal_info_out("Fort mpif.h", "bindings:mpif.h", fortran_mpifh);
 346     free(fortran_mpifh);
 347     opal_info_out("Fort use mpi", "bindings:use_mpi",
 348                   fortran_usempi);
 349     opal_info_out("Fort use mpi size", "bindings:use_mpi:size",
 350                   ompi_info_deprecated_value);
 351     opal_info_out("Fort use mpi_f08", "bindings:use_mpi_f08",
 352                   fortran_usempif08);
 353     opal_info_out("Fort mpi_f08 compliance", "bindings:use_mpi_f08:compliance",
 354                   fortran_usempif08_compliance);
 355     opal_info_out("Fort mpi_f08 subarrays", "bindings:use_mpi_f08:subarrays-supported",
 356                   fortran_build_f08_subarrays);
 357     opal_info_out("Java bindings", "bindings:java", java);
 358 
 359     opal_info_out("Wrapper compiler rpath", "compiler:all:rpath",
 360                   WRAPPER_RPATH_SUPPORT);
 361     opal_info_out("C compiler", "compiler:c:command", OPAL_CC);
 362     opal_info_out("C compiler absolute", "compiler:c:absolute",
 363                   OPAL_CC_ABSOLUTE);
 364     opal_info_out("C compiler family name", "compiler:c:familyname",
 365                   _STRINGIFY(OPAL_BUILD_PLATFORM_COMPILER_FAMILYNAME));
 366     opal_info_out("C compiler version", "compiler:c:version",
 367                   _STRINGIFY(OPAL_BUILD_PLATFORM_COMPILER_VERSION_STR));
 368 
 369     if (want_all) {
 370         opal_info_out_int("C char size", "compiler:c:sizeof:char", sizeof(char));
 371         /* JMS: should be fixed in MPI-2.2 to differentiate between C
 372            _Bool and C++ bool.  For the moment, the code base assumes
 373            that they are the same.  Because of opal_config_bottom.h,
 374            we can sizeof(bool) here, so we might as well -- even
 375            though this technically isn't right.  This should be fixed
 376            when we update to MPI-2.2.  See below for note about C++
 377            bool alignment. */
 378         opal_info_out_int("C bool size", "compiler:c:sizeof:bool", sizeof(bool));
 379         opal_info_out_int("C short size", "compiler:c:sizeof:short", sizeof(short));
 380         opal_info_out_int("C int size", "compiler:c:sizeof:int", sizeof(int));
 381         opal_info_out_int("C long size", "compiler:c:sizeof:long", sizeof(long));
 382 #if defined(HAVE_SHORT_FLOAT)
 383         opal_info_out_int("C short float size", "compiler:c:sizeof:short_float", sizeof(short float));
 384 #elif defined(HAVE_OPAL_SHORT_FLOAT_T)
 385         opal_info_out_int("C short float size", "compiler:c:sizeof:short_float", sizeof(opal_short_float_t));
 386 #endif
 387         opal_info_out_int("C float size", "compiler:c:sizeof:float", sizeof(float));
 388         opal_info_out_int("C double size", "compiler:c:sizeof:double", sizeof(double));
 389         opal_info_out_int("C long double size", "compiler:c:sizeof:long_double", sizeof(long double));
 390         opal_info_out_int("C pointer size", "compiler:c:sizeof:pointer", sizeof(void *));
 391         opal_info_out_int("C char align", "compiler:c:align:char", OPAL_ALIGNMENT_CHAR);
 392 #if OMPI_BUILD_CXX_BINDINGS
 393         /* JMS: See above for note about C++ bool size.  We don't have
 394            the bool alignment the way configure currently runs -- need
 395            to clean this up when we update for MPI-2.2. */
 396         opal_info_out_int("C bool align", "compiler:c:align:bool", OPAL_ALIGNMENT_CXX_BOOL);
 397 #else
 398         opal_info_out("C bool align", "compiler:c:align:bool", "skipped");
 399 #endif
 400         opal_info_out_int("C int align", "compiler:c:align:int", OPAL_ALIGNMENT_INT);
 401 #if defined(HAVE_SHORT_FLOAT)
 402         opal_info_out_int("C short float align", "compiler:c:align:short_float", OPAL_ALIGNMENT_SHORT_FLOAT);
 403 #elif defined(HAVE_OPAL_SHORT_FLOAT_T)
 404         opal_info_out_int("C short float align", "compiler:c:align:short_float", OPAL_ALIGNMENT_OPAL_SHORT_FLOAT_T);
 405 #endif
 406         opal_info_out_int("C float align", "compiler:c:align:float", OPAL_ALIGNMENT_FLOAT);
 407         opal_info_out_int("C double align", "compiler:c:align:double", OPAL_ALIGNMENT_DOUBLE);
 408         opal_info_out_int("C long double align", "compiler:c:align:long_double", OPAL_ALIGNMENT_LONG_DOUBLE);
 409     }
 410 
 411     opal_info_out("C++ compiler", "compiler:cxx:command", OMPI_CXX);
 412     opal_info_out("C++ compiler absolute", "compiler:cxx:absolute", OMPI_CXX_ABSOLUTE);
 413     opal_info_out("Fort compiler", "compiler:fortran:command", OMPI_FC);
 414     opal_info_out("Fort compiler abs", "compiler:fortran:absolute",
 415                   OMPI_FC_ABSOLUTE);
 416     opal_info_out("Fort ignore TKR", "compiler:fortran:ignore_tkr",
 417                   fortran_have_ignore_tkr);
 418     free(fortran_have_ignore_tkr);
 419     opal_info_out("Fort 08 assumed shape",
 420                   "compiler:fortran:f08_assumed_rank",
 421                   fortran_have_f08_assumed_rank);
 422     opal_info_out("Fort optional args",
 423                   "compiler:fortran:optional_arguments",
 424                   fortran_have_optional_args);
 425     opal_info_out("Fort INTERFACE",
 426                   "compiler:fortran:interface",
 427                   fortran_have_interface);
 428     opal_info_out("Fort ISO_FORTRAN_ENV",
 429                   "compiler:fortran:iso_fortran_env",
 430                   fortran_have_iso_fortran_env);
 431     opal_info_out("Fort STORAGE_SIZE",
 432                   "compiler:fortran:storage_size",
 433                   fortran_have_storage_size);
 434     opal_info_out("Fort BIND(C) (all)",
 435                   "compiler:fortran:bind_c",
 436                   fortran_have_bind_c);
 437     opal_info_out("Fort ISO_C_BINDING",
 438                   "compiler:fortran:iso_c_binding",
 439                   fortran_have_iso_c_binding);
 440     opal_info_out("Fort SUBROUTINE BIND(C)",
 441                   "compiler:fortran:subroutine_bind_c",
 442                   fortran_have_bind_c_sub);
 443     opal_info_out("Fort TYPE,BIND(C)",
 444                   "compiler:fortran:type_bind_c",
 445                   fortran_have_bind_c_type);
 446     opal_info_out("Fort T,BIND(C,name=\"a\")",
 447                   "compiler:fortran:type_name_bind_c",
 448                   fortran_have_bind_c_type_name);
 449     opal_info_out("Fort PRIVATE",
 450                   "compiler:fortran:private",
 451                   fortran_have_private);
 452     opal_info_out("Fort PROTECTED",
 453                   "compiler:fortran:protected",
 454                   fortran_have_protected);
 455     opal_info_out("Fort ABSTRACT",
 456                   "compiler:fortran:abstract",
 457                   fortran_have_abstract);
 458     opal_info_out("Fort ASYNCHRONOUS",
 459                   "compiler:fortran:asynchronous",
 460                   fortran_have_asynchronous);
 461     opal_info_out("Fort PROCEDURE",
 462                   "compiler:fortran:procedure",
 463                   fortran_have_procedure);
 464     opal_info_out("Fort USE...ONLY",
 465                   "compiler:fortran:use_only",
 466                   fortran_have_use_only);
 467     opal_info_out("Fort C_FUNLOC",
 468                   "compiler:fortran:c_funloc",
 469                   fortran_have_c_funloc);
 470     opal_info_out("Fort f08 using wrappers",
 471                   "compiler:fortran:08_wrappers",
 472                   fortran_08_using_wrappers_for_choice_buffer_functions);
 473     opal_info_out("Fort MPI_SIZEOF",
 474                   "compiler:fortran:mpi_sizeof",
 475                   fortran_build_sizeof);
 476 
 477     if (want_all) {
 478 
 479         /* Will always have the size of Fortran integer */
 480 
 481         opal_info_out_int("Fort integer size", "compiler:fortran:sizeof:integer",
 482                       OMPI_SIZEOF_FORTRAN_INTEGER);
 483 
 484         opal_info_out_int("Fort logical size", "compiler:fortran:sizeof:logical",
 485                       OMPI_SIZEOF_FORTRAN_LOGICAL);
 486         opal_info_out_int("Fort logical value true", "compiler:fortran:value:true",
 487                       OMPI_FORTRAN_VALUE_TRUE);
 488 
 489 
 490         /* May or may not have the other Fortran sizes */
 491 
 492         if (OMPI_BUILD_FORTRAN_BINDINGS >= OMPI_FORTRAN_MPIFH_BINDINGS) {
 493             opal_info_out("Fort have integer1", "compiler:fortran:have:integer1",
 494                           OMPI_HAVE_FORTRAN_INTEGER1 ? "yes" : "no");
 495             opal_info_out("Fort have integer2", "compiler:fortran:have:integer2",
 496                           OMPI_HAVE_FORTRAN_INTEGER2 ? "yes" : "no");
 497             opal_info_out("Fort have integer4", "compiler:fortran:have:integer4",
 498                           OMPI_HAVE_FORTRAN_INTEGER4 ? "yes" : "no");
 499             opal_info_out("Fort have integer8", "compiler:fortran:have:integer8",
 500                           OMPI_HAVE_FORTRAN_INTEGER8 ? "yes" : "no");
 501             opal_info_out("Fort have integer16", "compiler:fortran:have:integer16",
 502                           OMPI_HAVE_FORTRAN_INTEGER16 ? "yes" : "no");
 503 
 504             opal_info_out("Fort have real2", "compiler:fortran:have:real2",
 505                           OMPI_HAVE_FORTRAN_REAL2 ? "yes" : "no");
 506             opal_info_out("Fort have real4", "compiler:fortran:have:real4",
 507                           OMPI_HAVE_FORTRAN_REAL4 ? "yes" : "no");
 508             opal_info_out("Fort have real8", "compiler:fortran:have:real8",
 509                           OMPI_HAVE_FORTRAN_REAL8 ? "yes" : "no");
 510             opal_info_out("Fort have real16", "compiler:fortran:have:real16",
 511                           OMPI_HAVE_FORTRAN_REAL16 && OMPI_REAL16_MATCHES_C ? "yes" : "no");
 512 
 513             opal_info_out("Fort have complex4", "compiler:fortran:have:complex4",
 514                           OMPI_HAVE_FORTRAN_COMPLEX4 ? "yes" : "no");
 515             opal_info_out("Fort have complex8", "compiler:fortran:have:complex8",
 516                           OMPI_HAVE_FORTRAN_COMPLEX8 ? "yes" : "no");
 517             opal_info_out("Fort have complex16", "compiler:fortran:have:complex16",
 518                           OMPI_HAVE_FORTRAN_COMPLEX16 ? "yes" : "no");
 519             opal_info_out("Fort have complex32", "compiler:fortran:have:complex32",
 520                           OMPI_HAVE_FORTRAN_COMPLEX32 && OMPI_REAL16_MATCHES_C ? "yes" : "no");
 521 
 522             opal_info_out_int("Fort integer1 size", "compiler:fortran:sizeof:integer1",
 523                           OMPI_HAVE_FORTRAN_INTEGER1 ? OMPI_SIZEOF_FORTRAN_INTEGER1 : -1);
 524             opal_info_out_int("Fort integer2 size", "compiler:fortran:sizeof:integer2",
 525                           OMPI_HAVE_FORTRAN_INTEGER2 ? OMPI_SIZEOF_FORTRAN_INTEGER2 : -1);
 526             opal_info_out_int("Fort integer4 size", "compiler:fortran:sizeof:integer4",
 527                           OMPI_HAVE_FORTRAN_INTEGER4 ? OMPI_SIZEOF_FORTRAN_INTEGER4 : -1);
 528             opal_info_out_int("Fort integer8 size", "compiler:fortran:sizeof:integer8",
 529                           OMPI_HAVE_FORTRAN_INTEGER8 ? OMPI_SIZEOF_FORTRAN_INTEGER8 : -1);
 530             opal_info_out_int("Fort integer16 size", "compiler:fortran:sizeof:integer16",
 531                           OMPI_HAVE_FORTRAN_INTEGER16 ? OMPI_SIZEOF_FORTRAN_INTEGER16 : -1);
 532 
 533             opal_info_out_int("Fort real size", "compiler:fortran:sizeof:real",
 534                           OMPI_SIZEOF_FORTRAN_REAL);
 535             opal_info_out_int("Fort real2 size", "compiler:fortran:sizeof:real2",
 536                           OMPI_HAVE_FORTRAN_REAL2 ? OMPI_SIZEOF_FORTRAN_REAL2 : -1);
 537             opal_info_out_int("Fort real4 size", "compiler:fortran:sizeof:real4",
 538                           OMPI_HAVE_FORTRAN_REAL4 ? OMPI_SIZEOF_FORTRAN_REAL4 : -1);
 539             opal_info_out_int("Fort real8 size", "compiler:fortran:sizeof:real8",
 540                           OMPI_HAVE_FORTRAN_REAL8 ? OMPI_SIZEOF_FORTRAN_REAL8 : -1);
 541             opal_info_out_int("Fort real16 size", "compiler:fortran:sizeof:real17",
 542                           OMPI_HAVE_FORTRAN_REAL16 ? OMPI_SIZEOF_FORTRAN_REAL16 : -1);
 543 
 544             opal_info_out_int("Fort dbl prec size",
 545                           "compiler:fortran:sizeof:double_precision",
 546                           OMPI_SIZEOF_FORTRAN_DOUBLE_PRECISION);
 547 
 548             opal_info_out_int("Fort cplx size", "compiler:fortran:sizeof:complex",
 549                           OMPI_SIZEOF_FORTRAN_COMPLEX);
 550             opal_info_out_int("Fort dbl cplx size",
 551                           "compiler:fortran:sizeof:double_complex",
 552                           OMPI_HAVE_FORTRAN_DOUBLE_COMPLEX ? OMPI_SIZEOF_FORTRAN_DOUBLE_COMPLEX : -1);
 553             opal_info_out_int("Fort cplx4 size", "compiler:fortran:sizeof:complex4",
 554                           OMPI_HAVE_FORTRAN_COMPLEX4 ? OMPI_SIZEOF_FORTRAN_COMPLEX4 : -1);
 555             opal_info_out_int("Fort cplx8 size", "compiler:fortran:sizeof:complex8",
 556                           OMPI_HAVE_FORTRAN_COMPLEX8 ? OMPI_SIZEOF_FORTRAN_COMPLEX8 : -1);
 557             opal_info_out_int("Fort cplx16 size", "compiler:fortran:sizeof:complex16",
 558                           OMPI_HAVE_FORTRAN_COMPLEX16 ? OMPI_SIZEOF_FORTRAN_COMPLEX16 : -1);
 559             opal_info_out_int("Fort cplx32 size", "compiler:fortran:sizeof:complex32",
 560                           OMPI_HAVE_FORTRAN_COMPLEX32 ? OMPI_SIZEOF_FORTRAN_COMPLEX32 : -1);
 561 
 562             opal_info_out_int("Fort integer align", "compiler:fortran:align:integer",
 563                           OMPI_ALIGNMENT_FORTRAN_INTEGER);
 564             opal_info_out_int("Fort integer1 align", "compiler:fortran:align:integer1",
 565                           OMPI_HAVE_FORTRAN_INTEGER1 ? OMPI_ALIGNMENT_FORTRAN_INTEGER1 : -1);
 566             opal_info_out_int("Fort integer2 align", "compiler:fortran:align:integer2",
 567                           OMPI_HAVE_FORTRAN_INTEGER2 ? OMPI_ALIGNMENT_FORTRAN_INTEGER2 : -1);
 568             opal_info_out_int("Fort integer4 align", "compiler:fortran:align:integer4",
 569                           OMPI_HAVE_FORTRAN_INTEGER4 ? OMPI_ALIGNMENT_FORTRAN_INTEGER4 : -1);
 570             opal_info_out_int("Fort integer8 align", "compiler:fortran:align:integer8",
 571                           OMPI_HAVE_FORTRAN_INTEGER8 ? OMPI_ALIGNMENT_FORTRAN_INTEGER8 : -1);
 572             opal_info_out_int("Fort integer16 align", "compiler:fortran:align:integer16",
 573                           OMPI_HAVE_FORTRAN_INTEGER16 ? OMPI_ALIGNMENT_FORTRAN_INTEGER16 : -1);
 574 
 575             opal_info_out_int("Fort real align", "compiler:fortran:align:real",
 576                           OMPI_ALIGNMENT_FORTRAN_REAL);
 577             opal_info_out_int("Fort real2 align", "compiler:fortran:align:real2",
 578                           OMPI_HAVE_FORTRAN_REAL2 ? OMPI_ALIGNMENT_FORTRAN_REAL2 : -1);
 579             opal_info_out_int("Fort real4 align", "compiler:fortran:align:real4",
 580                           OMPI_HAVE_FORTRAN_REAL4 ? OMPI_ALIGNMENT_FORTRAN_REAL4 : -1);
 581             opal_info_out_int("Fort real8 align", "compiler:fortran:align:real8",
 582                           OMPI_HAVE_FORTRAN_REAL8 ? OMPI_ALIGNMENT_FORTRAN_REAL8 : -1);
 583             opal_info_out_int("Fort real16 align", "compiler:fortran:align:real16",
 584                           OMPI_HAVE_FORTRAN_REAL16 ? OMPI_ALIGNMENT_FORTRAN_REAL16 : -1);
 585 
 586             opal_info_out_int("Fort dbl prec align",
 587                           "compiler:fortran:align:double_precision",
 588                           OMPI_ALIGNMENT_FORTRAN_DOUBLE_PRECISION);
 589 
 590             opal_info_out_int("Fort cplx align", "compiler:fortran:align:complex",
 591                           OMPI_ALIGNMENT_FORTRAN_COMPLEX);
 592             opal_info_out_int("Fort dbl cplx align",
 593                           "compiler:fortran:align:double_complex",
 594                           OMPI_HAVE_FORTRAN_DOUBLE_COMPLEX ? OMPI_ALIGNMENT_FORTRAN_DOUBLE_COMPLEX : -1);
 595             opal_info_out_int("Fort cplx4 align", "compiler:fortran:align:complex4",
 596                           OMPI_HAVE_FORTRAN_COMPLEX4 ? OMPI_ALIGNMENT_FORTRAN_COMPLEX4 : -1);
 597             opal_info_out_int("Fort cplx8 align", "compiler:fortran:align:complex8",
 598                           OMPI_HAVE_FORTRAN_COMPLEX8 ? OMPI_ALIGNMENT_FORTRAN_COMPLEX8 : -1);
 599             opal_info_out_int("Fort cplx16 align", "compiler:fortran:align:complex16",
 600                           OMPI_HAVE_FORTRAN_COMPLEX16 ? OMPI_ALIGNMENT_FORTRAN_COMPLEX16 : -1);
 601             opal_info_out_int("Fort cplx32 align", "compiler:fortran:align:complex32",
 602                           OMPI_HAVE_FORTRAN_COMPLEX32 ? OMPI_ALIGNMENT_FORTRAN_COMPLEX32 : -1);
 603 
 604         } else {
 605             opal_info_out("Fort real size", "compiler:fortran:sizeof:real", "skipped");
 606             opal_info_out("Fort dbl prec size",
 607                           "compiler:fortran:sizeof:double_precision", "skipped");
 608             opal_info_out("Fort cplx size", "compiler:fortran:sizeof:complex", "skipped");
 609             opal_info_out("Fort dbl cplx size",
 610                           "compiler:fortran:sizeof:double_complex", "skipped");
 611 
 612             opal_info_out("Fort integer align", "compiler:fortran:align:integer", "skipped");
 613             opal_info_out("Fort real align", "compiler:fortran:align:real", "skipped");
 614             opal_info_out("Fort dbl prec align",
 615                           "compiler:fortran:align:double_precision","skipped");
 616             opal_info_out("Fort cplx align", "compiler:fortran:align:complex", "skipped");
 617             opal_info_out("Fort dbl cplx align",
 618                           "compiler:fortran:align:double_complex", "skipped");
 619         }
 620     }
 621 
 622     opal_info_out("C profiling", "option:profiling:c", cprofiling);
 623     opal_info_out("C++ profiling", "option:profiling:cxx", cxxprofiling);
 624     opal_info_out("Fort mpif.h profiling", "option:profiling:mpif.h",
 625                   fortran_mpifh_profiling);
 626     opal_info_out("Fort use mpi profiling", "option:profiling:use_mpi",
 627                   fortran_usempi_profiling);
 628     opal_info_out("Fort use mpi_f08 prof",
 629                   "option:profiling:use_mpi_f08",
 630                   fortran_usempif08_profiling);
 631 
 632     opal_info_out("C++ exceptions", "option:cxx_exceptions", cxxexceptions);
 633     opal_info_out("Thread support", "option:threads", threads);
 634     free(threads);
 635     opal_info_out("Sparse Groups", "option:sparse:groups", sparse_groups);
 636 
 637     if (want_all) {
 638 
 639         /* Don't display the build CPPFLAGS or CXXCPPFLAGS because they're
 640          * just -I$(top_srcdir)/include, etc.  Hence, they're a) boring,
 641          * and c) specific for ompi_info.
 642          */
 643 
 644         opal_info_out("Build CFLAGS", "option:build:cflags", OMPI_BUILD_CFLAGS);
 645         opal_info_out("Build CXXFLAGS", "option:build:cxxflags", OMPI_BUILD_CXXFLAGS);
 646         opal_info_out("Build FCFLAGS", "option:build:fcflags", OMPI_BUILD_FCFLAGS);
 647         opal_info_out("Build LDFLAGS", "option:build:ldflags", OMPI_BUILD_LDFLAGS);
 648         opal_info_out("Build LIBS", "option:build:libs", OMPI_BUILD_LIBS);
 649 
 650         opal_info_out("Wrapper extra CFLAGS", "option:wrapper:extra_cflags",
 651                       WRAPPER_EXTRA_CFLAGS);
 652         opal_info_out("Wrapper extra CXXFLAGS", "option:wrapper:extra_cxxflags",
 653                       WRAPPER_EXTRA_CXXFLAGS);
 654         opal_info_out("Wrapper extra FCFLAGS", "option:wrapper:extra_fcflags",
 655                       WRAPPER_EXTRA_FCFLAGS);
 656         opal_info_out("Wrapper extra LDFLAGS", "option:wrapper:extra_ldflags",
 657                       WRAPPER_EXTRA_LDFLAGS);
 658         opal_info_out("Wrapper extra LIBS", "option:wrapper:extra_libs",
 659                       WRAPPER_EXTRA_LIBS);
 660     }
 661 
 662     opal_info_out("Internal debug support", "option:debug", debug);
 663     opal_info_out("MPI interface warnings", "option:mpi-interface-warning", mpi_interface_warning);
 664     opal_info_out("MPI parameter check", "option:mpi-param-check", paramcheck);
 665     opal_info_out("Memory profiling support", "option:mem-profile", memprofile);
 666     opal_info_out("Memory debugging support", "option:mem-debug", memdebug);
 667     opal_info_out("dl support", "option:dlopen", have_dl);
 668     opal_info_out("Heterogeneous support", "options:heterogeneous", heterogeneous);
 669 #if OMPI_RTE_ORTE
 670     opal_info_out("mpirun default --prefix", "mpirun:prefix_by_default",
 671                   mpirun_prefix_by_default);
 672 #endif
 673     opal_info_out("MPI_WTIME support", "options:mpi-wtime", wtime_support);
 674     opal_info_out("Symbol vis. support", "options:visibility", symbol_visibility);
 675     opal_info_out("Host topology support", "options:host-topology",
 676                   topology_support);
 677     opal_info_out("IPv6 support", "options:ipv6", ipv6_support);
 678     opal_info_out("MPI1 compatibility", "options:mpi1-compatibility",
 679                   mpi1_compat_support);
 680 
 681     opal_info_out("MPI extensions", "options:mpi_ext", OMPI_MPIEXT_COMPONENTS);
 682 
 683     opal_info_out("FT Checkpoint support", "options:ft_support", ft_support);
 684     free(ft_support);
 685 
 686     opal_info_out("C/R Enabled Debugging", "options:crdebug_support", crdebug_support);
 687     free(crdebug_support);
 688 
 689     opal_info_out_int("MPI_MAX_PROCESSOR_NAME", "options:mpi-max-processor-name",
 690                   MPI_MAX_PROCESSOR_NAME);
 691     opal_info_out_int("MPI_MAX_ERROR_STRING",   "options:mpi-max-error-string",
 692                   MPI_MAX_ERROR_STRING);
 693     opal_info_out_int("MPI_MAX_OBJECT_NAME",    "options:mpi-max-object-name",
 694                   MPI_MAX_OBJECT_NAME);
 695     opal_info_out_int("MPI_MAX_INFO_KEY",       "options:mpi-max-info-key",
 696                   MPI_MAX_INFO_KEY);
 697     opal_info_out_int("MPI_MAX_INFO_VAL",       "options:mpi-max-info-val",
 698                   MPI_MAX_INFO_VAL);
 699     opal_info_out_int("MPI_MAX_PORT_NAME",      "options:mpi-max-port-name",
 700                   MPI_MAX_PORT_NAME);
 701     opal_info_out_int("MPI_MAX_DATAREP_STRING", "options:mpi-max-datarep-string",
 702                   MPI_MAX_DATAREP_STRING);
 703 
 704 }

/* [<][>][^][v][top][bottom][index][help] */