diff --git a/config/opal_check_compiler_version.m4 b/config/opal_check_compiler_version.m4 index 05d58562303..8c5100d36da 100644 --- a/config/opal_check_compiler_version.m4 +++ b/config/opal_check_compiler_version.m4 @@ -2,6 +2,8 @@ dnl -*- shell-script -*- dnl dnl Copyright (c) 2009 Oak Ridge National Labs. All rights reserved. dnl Copyright (c) 2021 Cisco Systems, Inc. All rights reserved. +dnl Copyright (c) 2021 Amazon.com, Inc. or its affiliates. All Rights +dnl reserved. dnl dnl $COPYRIGHT$ dnl @@ -27,86 +29,92 @@ AC_DEFUN([OPAL_CHECK_COMPILER_VERSION_ID], AC_DEFUN([OPAL_CHECK_COMPILER], [ - lower=m4_tolower($1) - AC_CACHE_CHECK([for compiler $lower], opal_cv_compiler_[$1], + AS_LITERAL_IF([$1], [], + [m4_fatal([OPAL_CHECK_COMPILER argument must be a literal])]) + lower=m4_tolower([$1]) + AC_CACHE_CHECK([for compiler $lower], [opal_cv_compiler_$1], [ CPPFLAGS_orig=$CPPFLAGS - CPPFLAGS="-I${OPAL_TOP_SRCDIR}/opal/include/opal $CPPFLAGS" + CPPFLAGS="-I${OPAL_TOP_SRCDIR}/opal/include $CPPFLAGS" AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include #include -#include "opal_portable_platform.h" +#include "opal/opal_portable_platform.h" ]],[[ FILE * f; f=fopen("conftestval", "w"); if (!f) exit(1); fprintf (f, "%d", PLATFORM_COMPILER_$1); ]])], [ - eval opal_cv_compiler_$1=`cat conftestval`; + opal_cv_compiler_$1=`cat conftestval` ], [ - eval opal_cv_compiler_$1=0 + opal_cv_compiler_$1=0 ], [ - eval opal_cv_compiler_$1=0 + opal_cv_compiler_$1=0 ]) CPPFLAGS=$CPPFLAGS_orig ]) - AC_DEFINE_UNQUOTED([OPAL_BUILD_PLATFORM_COMPILER_$1], $opal_cv_compiler_[$1], + AC_DEFINE_UNQUOTED([OPAL_BUILD_PLATFORM_COMPILER_$1], [$opal_cv_compiler_$1], [The compiler $lower which OMPI was built with]) ])dnl AC_DEFUN([OPAL_CHECK_COMPILER_STRING], [ - lower=m4_tolower($1) - AC_CACHE_CHECK([for compiler $lower], opal_cv_compiler_[$1], + AS_LITERAL_IF([$1], [], + [m4_fatal([OPAL_CHECK_COMPILER_STRING argument must be a literal])]) + lower=m4_tolower([$1]) + AC_CACHE_CHECK([for compiler $lower], [opal_cv_compiler_$1], [ CPPFLAGS_orig=$CPPFLAGS - CPPFLAGS="-I${OPAL_TOP_SRCDIR}/opal/include/opal $CPPFLAGS" + CPPFLAGS="-I${OPAL_TOP_SRCDIR}/opal/include $CPPFLAGS" AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include #include -#include "opal_portable_platform.h" +#include "opal/opal_portable_platform.h" ]],[[ FILE * f; f=fopen("conftestval", "w"); if (!f) exit(1); fprintf (f, "%s", PLATFORM_COMPILER_$1); ]])], [ - eval opal_cv_compiler_$1=`cat conftestval`; + opal_cv_compiler_$1=`cat conftestval` ], [ - eval opal_cv_compiler_$1=UNKNOWN + opal_cv_compiler_$1=UNKNOWN ], [ - eval opal_cv_compiler_$1=UNKNOWN + opal_cv_compiler_$1=UNKNOWN ]) CPPFLAGS=$CPPFLAGS_orig ]) - AC_DEFINE_UNQUOTED([OPAL_BUILD_PLATFORM_COMPILER_$1], $opal_cv_compiler_[$1], + AC_DEFINE_UNQUOTED([OPAL_BUILD_PLATFORM_COMPILER_$1], [$opal_cv_compiler_$1], [The compiler $lower which OMPI was built with]) ])dnl AC_DEFUN([OPAL_CHECK_COMPILER_STRINGIFY], [ - lower=m4_tolower($1) - AC_CACHE_CHECK([for compiler $lower], opal_cv_compiler_[$1], + AS_LITERAL_IF([$1], [], + [m4_fatal([OPAL_CHECK_COMPILER_STRINGIFY argument must be a literal])]) + lower=m4_tolower([$1]) + AC_CACHE_CHECK([for compiler $lower], [opal_cv_compiler_$1], [ CPPFLAGS_orig=$CPPFLAGS - CPPFLAGS="-I${OPAL_TOP_SRCDIR}/opal/include/opal $CPPFLAGS" + CPPFLAGS="-I${OPAL_TOP_SRCDIR}/opal/include $CPPFLAGS" AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include #include -#include "opal_portable_platform.h" +#include "opal/opal_portable_platform.h" ]],[[ FILE * f; f=fopen("conftestval", "w"); if (!f) exit(1); - fprintf (f, "%s", _STRINGIFY(PLATFORM_COMPILER_$1)); + fprintf (f, "%s", PLATFORM_STRINGIFY(PLATFORM_COMPILER_$1)); ]])], [ - eval opal_cv_compiler_$1=`cat conftestval`; + opal_cv_compiler_$1=`cat conftestval` ], [ - eval opal_cv_compiler_$1=UNKNOWN + opal_cv_compiler_$1=UNKNOWN ], [ - eval opal_cv_compiler_$1=UNKNOWN + opal_cv_compiler_$1=UNKNOWN ]) CPPFLAGS=$CPPFLAGS_orig ]) - AC_DEFINE_UNQUOTED([OPAL_BUILD_PLATFORM_COMPILER_$1], $opal_cv_compiler_[$1], + AC_DEFINE_UNQUOTED([OPAL_BUILD_PLATFORM_COMPILER_$1], [$opal_cv_compiler_$1], [The compiler $lower which OMPI was built with]) ])dnl diff --git a/ompi/include/Makefile.am b/ompi/include/Makefile.am index dcb55c27730..222ec75bbbc 100644 --- a/ompi/include/Makefile.am +++ b/ompi/include/Makefile.am @@ -127,6 +127,6 @@ distclean-local: mpif-sizeof.h \ mpif-c-constants-decl.h mpif-c-constants.h mpif-f08-types.h -mpi_portable_platform.h: $(top_srcdir)/opal/include/opal/opal_portable_platform.h +mpi_portable_platform.h: $(top_srcdir)/opal/include/opal/opal_portable_platform_real.h -@rm -f mpi_portable_platform.h - $(OMPI_V_LN_S) $(LN_S) $(top_srcdir)/opal/include/opal/opal_portable_platform.h mpi_portable_platform.h + $(OMPI_V_LN_S) $(LN_S) $(top_srcdir)/opal/include/opal/opal_portable_platform_real.h mpi_portable_platform.h diff --git a/ompi/include/mpi.h.in b/ompi/include/mpi.h.in index 6b40f13aaa0..0c2f2d6cf63 100644 --- a/ompi/include/mpi.h.in +++ b/ompi/include/mpi.h.in @@ -22,6 +22,8 @@ * Copyright (c) 2017-2019 IBM Corporation. All rights reserved. * Copyright (c) 2018 FUJITSU LIMITED. All rights reserved. * Copyright (c) 2021 Google, LLC. All rights reserved. + * Copyright (c) 2021 Amazon.com, Inc. or its affiliates. All Rights + * reserved. * $COPYRIGHT$ * * Additional copyrights may follow @@ -78,6 +80,9 @@ /* The size of a `int', as computed by sizeof. */ #undef OPAL_SIZEOF_INT +/* The size of a `void*', as computed by sizeof. */ +#undef OPAL_SIZEOF_VOID_P + /* Maximum length of datarep string (default is 128) */ #undef OPAL_MAX_DATAREP_STRING @@ -249,10 +254,29 @@ #if !OMPI_BUILDING /* * Figure out which compiler is being invoked (in order to compare if - * it was different than what OMPI was built with). + * it was different than what OMPI was built with). Do some preprocessor + * hacks to eliminate warnings in the portable_platform.h file. */ +# ifndef SIZEOF_VOID_P +# define CLEANUP_SIZEOF_VOID_P 1 +# define SIZEOF_VOID_P OPAL_SIZEOF_VOID_P +# else +# define CLEANUP_SIZEOF_VOID_P 0 +# endif + +# ifndef _PORTABLE_PLATFORM_H +# define _PORTABLE_PLATFORM_H 0 +# endif +# ifndef PLATFORM_HEADER_VERSION +# define PLATFORM_HEADER_VERSION 0 +# endif + # include "mpi_portable_platform.h" +#if CLEANUP_SIZEOF_VOID_P +#undef SIZEOF_VOID_P +#endif + /* * If we're currently using the same compiler that was used to * build Open MPI, enable compile-time warning of user-level code diff --git a/ompi/tools/ompi_info/param.c b/ompi/tools/ompi_info/param.c index 785bc65b6ac..09706d8578c 100644 --- a/ompi/tools/ompi_info/param.c +++ b/ompi/tools/ompi_info/param.c @@ -14,7 +14,7 @@ * Copyright (c) 2014-2019 Research Organization for Information Science * and Technology (RIST). All rights reserved. * Copyright (c) 2015-2019 Intel, Inc. All rights reserved. - * Copyright (c) 2018 Amazon.com, Inc. or its affiliates. All Rights reserved. + * Copyright (c) 2018-2021 Amazon.com, Inc. or its affiliates. All Rights reserved. * Copyright (c) 2018 FUJITSU LIMITED. All rights reserved. * $COPYRIGHT$ * @@ -287,7 +287,7 @@ void ompi_info_do_config(bool want_all) if (OMPI_FORTRAN_HAVE_IGNORE_TKR) { /* OMPI_FORTRAN_IGNORE_TKR_PREDECL is already in quotes; it - didn't work consistently to put it in _STRINGIFY because + didn't work consistently to put it in PLATFORM_STRINGIFY because sometimes the compiler would actually interpret the pragma in there before stringify-ing it. */ (void)opal_asprintf(&fortran_have_ignore_tkr, "yes (%s)", @@ -336,9 +336,9 @@ void ompi_info_do_config(bool want_all) opal_info_out("C compiler absolute", "compiler:c:absolute", OPAL_CC_ABSOLUTE); opal_info_out("C compiler family name", "compiler:c:familyname", - _STRINGIFY(OPAL_BUILD_PLATFORM_COMPILER_FAMILYNAME)); + PLATFORM_STRINGIFY(OPAL_BUILD_PLATFORM_COMPILER_FAMILYNAME)); opal_info_out("C compiler version", "compiler:c:version", - _STRINGIFY(OPAL_BUILD_PLATFORM_COMPILER_VERSION_STR)); + PLATFORM_STRINGIFY(OPAL_BUILD_PLATFORM_COMPILER_VERSION_STR)); if (want_all) { opal_info_out_int("C char size", "compiler:c:sizeof:char", sizeof(char)); diff --git a/opal/include/opal/Makefile.am b/opal/include/opal/Makefile.am index f0389a25815..ed657307caf 100644 --- a/opal/include/opal/Makefile.am +++ b/opal/include/opal/Makefile.am @@ -10,6 +10,7 @@ # Copyright (c) 2004-2005 The Regents of the University of California. # All rights reserved. # Copyright (c) 2007 Cisco Systems, Inc. All rights reserved. +# Copyright (c) 2021 Nanook Consulting. All rights reserved. # $COPYRIGHT$ # # Additional copyrights may follow @@ -27,7 +28,8 @@ headers += \ opal/prefetch.h \ opal/hash_string.h \ opal/frameworks.h \ - opal/opal_portable_platform.h + opal/opal_portable_platform.h \ + opal/opal_portable_platform_real.h nodist_headers += \ opal/version.h diff --git a/opal/include/opal/opal_portable_platform.h b/opal/include/opal/opal_portable_platform.h index 2cbc012697d..fc09d04fdaf 100644 --- a/opal/include/opal/opal_portable_platform.h +++ b/opal/include/opal/opal_portable_platform.h @@ -1,396 +1,26 @@ /* - * Header file with preprocessor magic to figure out, which compiler the user has been calling! + * Copyright (c) 2021 Amazon.com, Inc. or its affiliates. All Rights + * reserved. + * $COPYRIGHT$ * - * This code is adapted from the file other/portable_platform.h of GASnet-1.14.0: - * - Ripping out the required parts. - * - Get rid of brackets as it messes up autoconf - * - Delete version tests for older PGI versions (#include "omp.h" not acceptabe) - * - Indent ('#' should be in column 0) + * Additional copyrights may follow * - * External packages (i.e., romio) depend on top_build_dir/ompi/include, therefore - * although this is not changed in the configure process, this has to be set as - * a .in file... - * --------------------------------------------------------------------------- - */ -#ifndef OPAL_PORTABLE_PLATFORM_H -#define OPAL_PORTABLE_PLATFORM_H - -/* All files in this directory and all sub-directories (except where otherwise noted) - * are subject to the following licensing terms: - * - * --------------------------------------------------------------------------- - * "Copyright (c) 2000-2003 The Regents of the University of California. - * All rights reserved. - * - * Permission to use, copy, modify, and distribute this software and its - * documentation for any purpose, without fee, and without written agreement is - * hereby granted, provided that the above copyright notice and the following - * two paragraphs appear in all copies of this software. - * - * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR - * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT - * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF - * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY - * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS - * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO - * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." - * --------------------------------------------------------------------------- - * - * Please see the license.txt files within the gm-conduit, lapi-conduit and - * vapi-conduit directories for the licensing terms governing those - * contributed components. - * - * The authors/contributors of GASNet include: - * - * Dan Bonachea : - * General infrastructure & documentation - * mpi-conduit - * elan-conduit - * smp-conduit - * udp-conduit - * extended-ref - * template-conduit - * Christian Bell : gm-conduit, shmem-conduit - * Mike Welcome : lapi-conduit, portals-conduit - * Paul H. Hargrove : vapi-conduit, ibv-conduit - * Rajesh Nishtala : collectives, dcmf-conduit - * Parry Husbands (PJRHusbands@lbl.gov): lapi-conduit - * - * For more information about GASNet, visit our home page at: - * http://gasnet.cs.berkeley.edu/ - * Or send email to: - * - * - * Source code contributions (fixes, patches, extensions etc.) should be - * sent to to be reviewed for acceptance into the primary - * distribution. Contributions are most likely to be accepted if they - * are provided as public domain, or under a BSD-style license such as - * the one above. + * $HEADER$ * + * Wrapper around GASNet's gasnet_portable_platform.h to avoid + * compiler warnings */ -#ifndef _STRINGIFY -# define _STRINGIFY_HELPER(x) # x -# define _STRINGIFY(x) _STRINGIFY_HELPER(x) -#endif - -#if defined(__INTEL_COMPILER) -# define PLATFORM_COMPILER_FAMILYNAME INTEL -# define PLATFORM_COMPILER_FAMILYID 2 -# ifdef __cplusplus -# define PLATFORM_COMPILER_INTEL_CXX 1 -# else -# define PLATFORM_COMPILER_INTEL_C 1 -# endif -# define _PLATFORM_COMPILER_INTEL_MIN_BUILDDATE \ - 19700000 /* year 1970: predates most intel products :) */ -# ifdef __INTEL_COMPILER_BUILD_DATE -# define _PLATFORM_INTEL_COMPILER_BUILD_DATE __INTEL_COMPILER_BUILD_DATE -# else -# define _PLATFORM_INTEL_COMPILER_BUILD_DATE _PLATFORM_COMPILER_INTEL_MIN_BUILDDATE -# endif -/* patch number is a decimal build date: YYYYMMDD */ -# define PLATFORM_COMPILER_VERSION_INT(maj, min, pat) \ - (((((maj) *10) | (min)) << 20) \ - | ((pat) < _PLATFORM_COMPILER_INTEL_MIN_BUILDDATE \ - ? _PLATFORM_COMPILER_INTEL_MIN_BUILDDATE \ - : ((pat) -_PLATFORM_COMPILER_INTEL_MIN_BUILDDATE))) -# define PLATFORM_COMPILER_VERSION \ - PLATFORM_COMPILER_VERSION_INT(__INTEL_COMPILER / 10, __INTEL_COMPILER / 100, \ - _PLATFORM_INTEL_COMPILER_BUILD_DATE) -# define PLATFORM_COMPILER_VERSION_STR \ - _STRINGIFY(__INTEL_COMPILER) "." _STRINGIFY(_PLATFORM_INTEL_COMPILER_BUILD_DATE) - -#elif defined(__PATHSCALE__) -# define PLATFORM_COMPILER_PATHSCALE 1 -# define PLATFORM_COMPILER_FAMILYNAME PATHSCALE -# define PLATFORM_COMPILER_FAMILYID 3 -# ifdef __cplusplus -# define PLATFORM_COMPILER_PATHSCALE_CXX 1 -# else -# define PLATFORM_COMPILER_PATHSCALE_C 1 -# endif -# define PLATFORM_COMPILER_VERSION \ - PLATFORM_COMPILER_VERSION_INT(__PATHCC__, __PATHCC_MINOR__, __PATHCC_PATCHLEVEL__) -# define PLATFORM_COMPILER_VERSION_STR __PATHSCALE__ - -#elif defined(__PGI) -# define PLATFORM_COMPILER_PGI 1 -# define PLATFORM_COMPILER_FAMILYNAME PGI -# define PLATFORM_COMPILER_FAMILYID 4 -# ifdef __cplusplus -# define PLATFORM_COMPILER_PGI_CXX 1 -# else -# define PLATFORM_COMPILER_PGI_C 1 -# endif -# if __PGIC__ == 99 -/* bug 2230: PGI versioning was broken for some platforms in 7.0 - no way to know exact version, but provide something slightly more accurate */ -# define PLATFORM_COMPILER_VERSION 0x070000 -# define PLATFORM_COMPILER_VERSION_STR "7.?-?" -# elif defined(__PGIC__) && defined(__PGIC_MINOR__) && defined(__PGIC_PATCHLEVEL__) -# define PLATFORM_COMPILER_VERSION \ - PLATFORM_COMPILER_VERSION_INT(__PGIC__, __PGIC_MINOR__, __PGIC_PATCHLEVEL__) -# define PLATFORM_COMPILER_VERSION_STR \ - _STRINGIFY(__PGIC__) "." _STRINGIFY(__PGIC_MINOR__) "-" _STRINGIFY(__PGIC_PATCHLEVEL__) -# else -/* PGI before 6.1-4 lacks any version ID preprocessor macros - so use this filthy hack */ -/* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - * We cannot do these within mpi.h.in, as we should not include ompi.h - * Hopefully, compilers with integrated preprocessors will not analyse code within the #if 0-block - * XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - */ -# if 0 -# ifdef PLATFORM_PGI_IS_ANCIENT - /* Include below might fail for ancient versions lacking this header, but testing shows it - works back to at least 5.1-3 (Nov 2003), and based on docs probably back to 3.2 (Sep 2000) */ -# define PLATFORM_COMPILER_VERSION 0 -# elif defined( \ - __x86_64__) /* bug 1753 - 64-bit omp.h upgrade happenned in <6.0-8,6.1-1) */ -# include "omp.h" -# if defined(_PGOMP_H) - /* 6.1.1 or newer */ -# define PLATFORM_COMPILER_VERSION 0x060101 -# define PLATFORM_COMPILER_VERSION_STR ">=6.1-1" -# else - /* 6.0.8 or older */ -# define PLATFORM_COMPILER_VERSION 0 -# define PLATFORM_COMPILER_VERSION_STR "<=6.0-8" -# endif -# else /* 32-bit omp.h upgrade happenned in <5.2-4,6.0-8 */ -# include "omp.h" -# if defined(_PGOMP_H) - /* 6.0-8 or newer */ -# define PLATFORM_COMPILER_VERSION 0x060008 -# define PLATFORM_COMPILER_VERSION_STR ">=6.0-8" -# else - /* 5.2-4 or older */ -# define PLATFORM_COMPILER_VERSION 0 -# define PLATFORM_COMPILER_VERSION_STR "<=5.2-4" -# endif -# endif -# endif /* 0 */ -/* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX */ -# endif - -#elif defined(__xlC__) || defined(__ibmxl__) || defined(__IBMC__) || defined(__IBMCPP__) -# define PLATFORM_COMPILER_XLC 1 -# define PLATFORM_COMPILER_FAMILYNAME XLC -# define PLATFORM_COMPILER_FAMILYID 5 -# ifdef __cplusplus -# define PLATFORM_COMPILER_XLC_CXX 1 -# else -# define PLATFORM_COMPILER_XLC_C 1 -# endif -# define PLATFORM_COMPILER_VERSION __xlC__ -# define PLATFORM_COMPILER_VERSION_INT(maj, min, pat) (((maj) << 8) | ((min) << 4) | (pat)) -#elif defined(__DECC) || defined(__DECCXX) -# define PLATFORM_COMPILER_COMPAQ 1 -# define PLATFORM_COMPILER_FAMILYNAME COMPAQ -# define PLATFORM_COMPILER_FAMILYID 6 -# ifdef __cplusplus -# define PLATFORM_COMPILER_COMPAQ_CXX 1 -# else -# define PLATFORM_COMPILER_COMPAQ_C 1 -# endif -# if defined(__DECC_VER) -# define PLATFORM_COMPILER_VERSION __DECC_VER -# elif defined(__DECCXX_VER) -# define PLATFORM_COMPILER_VERSION __DECCXX_VER -# endif - -# define PLATFORM_COMPILER_VERSION_INT(maj, min, pat) \ - (((maj) *10000000) + ((min) *100000) + (90000) + (pat)) -/* 90000 = official ver, 80000 = customer special ver, 60000 = field test ver */ - -#elif defined(__SUNPRO_C) || defined(__SUNPRO_CC) -# define PLATFORM_COMPILER_SUN 1 -# define PLATFORM_COMPILER_FAMILYNAME SUN -# define PLATFORM_COMPILER_FAMILYID 7 -# ifdef __cplusplus -# define PLATFORM_COMPILER_SUN_CXX 1 -# else -# define PLATFORM_COMPILER_SUN_C 1 -# endif -# if defined(__SUNPRO_C) && __SUNPRO_C > 0 -# define PLATFORM_COMPILER_VERSION __SUNPRO_C -# elif defined(__SUNPRO_CC) && __SUNPRO_CC > 0 -# define PLATFORM_COMPILER_VERSION __SUNPRO_CC -# endif -# define PLATFORM_COMPILER_VERSION_INT(maj, min, pat) (((maj) << 8) | ((min) << 4) | (pat)) - -#elif defined(__HP_cc) || defined(__HP_aCC) -# define PLATFORM_COMPILER_HP 1 -# define PLATFORM_COMPILER_FAMILYNAME HP -# define PLATFORM_COMPILER_FAMILYID 8 -# ifdef __cplusplus -# define PLATFORM_COMPILER_HP_CXX 1 -# else -# define PLATFORM_COMPILER_HP_C 1 -# endif -# if defined(__HP_cc) && __HP_cc > 0 -# define PLATFORM_COMPILER_VERSION __HP_cc -# elif defined(__HP_aCC) && __HP_aCC > 0 -# define PLATFORM_COMPILER_VERSION __HP_aCC -# endif -# define PLATFORM_COMPILER_VERSION_INT(maj, min, pat) (((maj) << 16) | ((min) << 8) | (pat)) - -#elif defined(_SGI_COMPILER_VERSION) \ - || (defined(_COMPILER_VERSION) && defined(__sgi) \ - && !defined(__GNUC__)) /* 7.3.0 and earlier lack _SGI_COMPILER_VERSION */ -# define PLATFORM_COMPILER_SGI 1 -# define PLATFORM_COMPILER_FAMILYNAME SGI -# define PLATFORM_COMPILER_FAMILYID 9 -# ifdef __cplusplus -# define PLATFORM_COMPILER_SGI_CXX 1 -# else -# define PLATFORM_COMPILER_SGI_C 1 -# endif -# if defined(_SGI_COMPILER_VERSION) && _SGI_COMPILER_VERSION > 0 -# define PLATFORM_COMPILER_VERSION _SGI_COMPILER_VERSION -# elif defined(_COMPILER_VERSION) && _COMPILER_VERSION > 0 -# define PLATFORM_COMPILER_VERSION _COMPILER_VERSION -# endif -# define PLATFORM_COMPILER_VERSION_INT(maj, min, pat) (((maj) << 8) | ((min) << 4) | (pat)) - -#elif defined(_CRAYC) -# define PLATFORM_COMPILER_CRAY 1 -# define PLATFORM_COMPILER_FAMILYNAME CRAY -# define PLATFORM_COMPILER_FAMILYID 10 -# ifdef __cplusplus -# define PLATFORM_COMPILER_CRAY_CXX 1 -# else -# define PLATFORM_COMPILER_CRAY_C 1 -# endif -# if defined(_RELEASE) && defined(_RELEASE_MINOR) /* X1 and XT */ -# define PLATFORM_COMPILER_VERSION PLATFORM_COMPILER_VERSION_INT(_RELEASE, _RELEASE_MINOR, 0) -# elif defined(_RELEASE) /* T3E */ -# define PLATFORM_COMPILER_VERSION PLATFORM_COMPILER_VERSION_INT(_RELEASE, 0, 0) -# endif -# ifdef _RELEASE_STRING /* X1 and XT */ -# define PLATFORM_COMPILER_VERSION_STR _RELEASE_STRING -# endif - -#elif defined(__KCC) -# define PLATFORM_COMPILER_KAI 1 -# define PLATFORM_COMPILER_FAMILYNAME KAI -# define PLATFORM_COMPILER_FAMILYID 11 -# ifdef __cplusplus -# define PLATFORM_COMPILER_KAI_CXX 1 -# else -# define PLATFORM_COMPILER_KAI_C 1 -# endif - -#elif defined(__MTA__) -# define PLATFORM_COMPILER_MTA 1 -# define PLATFORM_COMPILER_FAMILYNAME MTA -# define PLATFORM_COMPILER_FAMILYID 12 -# ifdef __cplusplus -# define PLATFORM_COMPILER_MTA_CXX 1 -# else -# define PLATFORM_COMPILER_MTA_C 1 -# endif - -#elif defined(_SX) -# define PLATFORM_COMPILER_NECSX 1 -# define PLATFORM_COMPILER_FAMILYNAME NECSX -# define PLATFORM_COMPILER_FAMILYID 13 -# ifdef __cplusplus -# define PLATFORM_COMPILER_NECSX_CXX 1 -# else -# define PLATFORM_COMPILER_NECSX_C 1 -# endif - -#elif defined(_MSC_VER) -# define PLATFORM_COMPILER_MICROSOFT 1 -# define PLATFORM_COMPILER_FAMILYNAME MICROSOFT -# define PLATFORM_COMPILER_FAMILYID 14 -# ifdef __cplusplus -# define PLATFORM_COMPILER_MICROSOFT_CXX 1 -# else -# define PLATFORM_COMPILER_MICROSOFT_C 1 -# endif -# define PLATFORM_COMPILER_VERSION _MSC_VER - -#elif defined(__TINYC__) -# define PLATFORM_COMPILER_TINY 1 -# define PLATFORM_COMPILER_FAMILYNAME TINY -# define PLATFORM_COMPILER_FAMILYID 15 -# ifdef __cplusplus -# define PLATFORM_COMPILER_TINY_CXX 1 -# else -# define PLATFORM_COMPILER_TINY_C 1 -# endif - -#elif defined(__LCC__) -# define PLATFORM_COMPILER_LCC 1 -# define PLATFORM_COMPILER_FAMILYNAME LCC -# define PLATFORM_COMPILER_FAMILYID 16 -# ifdef __cplusplus -# define PLATFORM_COMPILER_LCC_CXX 1 -# else -# define PLATFORM_COMPILER_LCC_C 1 -# endif - -#else /* unknown compiler */ -# define PLATFORM_COMPILER_UNKNOWN 1 -#endif +#ifndef OPAL_PORTABLE_PLATFORM_H +#define OPAL_PORTABLE_PLATFORM_H 1 -/* this stanza comes last, because many vendor compilers lie and claim - to be GNU C for compatibility reasons and/or because they share a frontend */ -#if defined(__GNUC__) -# undef PLATFORM_COMPILER_UNKNOWN -# ifndef PLATFORM_COMPILER_FAMILYID -# define PLATFORM_COMPILER_GNU 1 -# define PLATFORM_COMPILER_FAMILYNAME GNU -# define PLATFORM_COMPILER_FAMILYID 1 -# ifdef __cplusplus -# define PLATFORM_COMPILER_GNU_CXX 1 -# else -# define PLATFORM_COMPILER_GNU_C 1 -# endif -# if defined(__GNUC_MINOR__) && defined(__GNUC_PATCHLEVEL__) -# define PLATFORM_COMPILER_VERSION \ - PLATFORM_COMPILER_VERSION_INT(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__) -# elif defined(__GNUC_MINOR__) /* older versions of egcs lack __GNUC_PATCHLEVEL__ */ -# define PLATFORM_COMPILER_VERSION \ - PLATFORM_COMPILER_VERSION_INT(__GNUC__, __GNUC_MINOR__, 0) -# else -# define PLATFORM_COMPILER_VERSION PLATFORM_COMPILER_VERSION_INT(__GNUC__, 0, 0) -# endif -# define PLATFORM_COMPILER_VERSION_STR __PLATFORM_COMPILER_GNU_VERSION_STR -# else -# define _PLATFORM_COMPILER_GNU_VERSION_STR __PLATFORM_COMPILER_GNU_VERSION_STR -# endif -/* gather any advertised GNU version number info, even for non-gcc compilers */ -# if defined(__GNUC_MINOR__) && defined(__GNUC_PATCHLEVEL__) -# define __PLATFORM_COMPILER_GNU_VERSION_STR \ - _STRINGIFY(__GNUC__) "." _STRINGIFY(__GNUC_MINOR__) "." _STRINGIFY(__GNUC_PATCHLEVEL__) -# elif defined(__GNUC_MINOR__) -# define __PLATFORM_COMPILER_GNU_VERSION_STR \ - _STRINGIFY(__GNUC__) "." _STRINGIFY(__GNUC_MINOR__) ".?" -# else -# define __PLATFORM_COMPILER_GNU_VERSION_STR _STRINGIFY(__GNUC__) ".?.?" -# endif -#elif defined(PLATFORM_COMPILER_UNKNOWN) /* unknown compiler */ -# define PLATFORM_COMPILER_FAMILYNAME UNKNOWN -# define PLATFORM_COMPILER_FAMILYID 0 +#ifndef _PORTABLE_PLATFORM_H +#define _PORTABLE_PLATFORM_H 0 #endif - -/* Default Values */ -#ifndef PLATFORM_COMPILER_VERSION -# define PLATFORM_COMPILER_VERSION 0 /* don't know */ +#ifndef PLATFORM_HEADER_VERSION +#define PLATFORM_HEADER_VERSION 0 #endif -#ifndef PLATFORM_COMPILER_VERSION_STR -# define PLATFORM_COMPILER_VERSION_STR _STRINGIFY(PLATFORM_COMPILER_VERSION) -#endif +#include "opal/opal_portable_platform_real.h" -#ifndef PLATFORM_COMPILER_VERSION_INT -# define PLATFORM_COMPILER_VERSION_INT(maj, min, pat) (((maj) << 16) | ((min) << 8) | (pat)) #endif - -#endif /* OPAL_PORTABLE_PLATFORM_H */ diff --git a/opal/include/opal/opal_portable_platform_real.h b/opal/include/opal/opal_portable_platform_real.h new file mode 100644 index 00000000000..70e73cebc7e --- /dev/null +++ b/opal/include/opal/opal_portable_platform_real.h @@ -0,0 +1,1161 @@ +/* $Source: bitbucket.org:berkeleylab/gasnet.git/other/portable_platform.h $ + * Description: Portable platform detection header + * Copyright 2006, Dan Bonachea + * Copyright 2018, The Regents of the University of California + * Terms of Use: In ADDITION to the license information in license.txt, + * anyone redistributing this header agrees not to change any part of this notice, or + * the version handshake in the header versioning section below. + * Furthermore, redistributed copies of any portion of this header must + * not appear within files named "portable_platform.h" or "gasnet_portable_platform.h", + * unless it is embedded within a complete copy of the GASNet distribution. + * These restrictions are designed to prevent conflicts for end users + * who compose multiple projects using the PLATFORM_ namespace. + * + * The canonical version of this header is hosted in the GASNet project at: + * https://bitbucket.org/berkeleylab/gasnet + * + * Developers who clone this header into their own project are HIGHLY encouraged to + * contribute any improvements (especially addition of new platforms) back to the + * canonical version, for the benefit of the community. + * Contributions and bug reports should be directed to: + * https://gasnet-bugs.lbl.gov or gasnet-staff@lbl.gov + */ +/* ------------------------------------------------------------------------------------ */ +/* Header versioning: DO NOT CHANGE ANYTHING IN THIS SECTION + * The license terms for this header prohibit modifying this section in ANY way. + Clones should continue to advertise a PLATFORM_HEADER_VERSION equal to the canonical version they cloned, + and should not modify the handshake logic which ensures the highest canonical header version is used. + */ +/* Publish and enforce version number for the public interface to this header */ +/* YOU ARE NOT PERMITTED TO CHANGE THIS SECTION WITHOUT DIRECT APPROVAL FROM DAN BONACHEA */ +#if _PORTABLE_PLATFORM_H != PLATFORM_HEADER_VERSION \ + || PLATFORM_HEADER_VERSION < 16 +#undef PLATFORM_HEADER_VERSION +#define PLATFORM_HEADER_VERSION 16 +#undef _PORTABLE_PLATFORM_H +#define _PORTABLE_PLATFORM_H PLATFORM_HEADER_VERSION +/* End Header versioning handshake */ +/* ------------------------------------------------------------------------------------ */ + +/* make sure that previously-included older/broken clones of this header do not pollute our namespace */ +#undef PLATFORM_COMPILER_FAMILYNAME +#undef PLATFORM_COMPILER_FAMILYID +#undef PLATFORM_COMPILER_ID +#undef PLATFORM_COMPILER_VERSION +#undef PLATFORM_COMPILER_VERSION_STR +#undef PLATFORM_COMPILER_VERSION_INT +#undef PLATFORM_COMPILER_IDSTR +#undef PLATFORM_COMPILER_VERSION_GT +#undef PLATFORM_COMPILER_VERSION_GE +#undef PLATFORM_COMPILER_VERSION_EQ +#undef PLATFORM_COMPILER_VERSION_LE +#undef PLATFORM_COMPILER_VERSION_LT +#undef PLATFORM_COMPILER_C_LANGLVL +#undef PLATFORM_COMPILER_CXX_LANGLVL +#undef PLATFORM_COMPILER_INTEL +#undef PLATFORM_COMPILER_INTEL_C +#undef PLATFORM_COMPILER_INTEL_CXX +#undef PLATFORM_COMPILER_PATHSCALE +#undef PLATFORM_COMPILER_PATHSCALE_C +#undef PLATFORM_COMPILER_PATHSCALE_CXX +#undef PLATFORM_COMPILER_PGI +#undef PLATFORM_COMPILER_PGI_C +#undef PLATFORM_COMPILER_PGI_CXX +#undef PLATFORM_COMPILER_XLC +#undef PLATFORM_COMPILER_XLC_C +#undef PLATFORM_COMPILER_XLC_CXX +#undef PLATFORM_COMPILER_COMPAQ +#undef PLATFORM_COMPILER_COMPAQ_C +#undef PLATFORM_COMPILER_COMPAQ_CXX +#undef PLATFORM_COMPILER_SUN +#undef PLATFORM_COMPILER_SUN_C +#undef PLATFORM_COMPILER_SUN_CXX +#undef PLATFORM_COMPILER_HP +#undef PLATFORM_COMPILER_HP_C +#undef PLATFORM_COMPILER_HP_CXX +#undef PLATFORM_COMPILER_SGI +#undef PLATFORM_COMPILER_SGI_C +#undef PLATFORM_COMPILER_SGI_CXX +#undef PLATFORM_COMPILER_CRAY +#undef PLATFORM_COMPILER_CRAY_C +#undef PLATFORM_COMPILER_CRAY_CXX +#undef PLATFORM_COMPILER_KAI +#undef PLATFORM_COMPILER_KAI_C +#undef PLATFORM_COMPILER_KAI_CXX +#undef PLATFORM_COMPILER_MTA +#undef PLATFORM_COMPILER_MTA_C +#undef PLATFORM_COMPILER_MTA_CXX +#undef PLATFORM_COMPILER_NECSX +#undef PLATFORM_COMPILER_NECSX_C +#undef PLATFORM_COMPILER_NECSX_CXX +#undef PLATFORM_COMPILER_MICROSOFT +#undef PLATFORM_COMPILER_MICROSOFT_C +#undef PLATFORM_COMPILER_MICROSOFT_CXX +#undef PLATFORM_COMPILER_TINY +#undef PLATFORM_COMPILER_TINY_C +#undef PLATFORM_COMPILER_TINY_CXX +#undef PLATFORM_COMPILER_LCC +#undef PLATFORM_COMPILER_LCC_C +#undef PLATFORM_COMPILER_LCC_CXX +#undef PLATFORM_COMPILER_OPEN64 +#undef PLATFORM_COMPILER_OPEN64_C +#undef PLATFORM_COMPILER_OPEN64_CXX +#undef PLATFORM_COMPILER_PCC +#undef PLATFORM_COMPILER_PCC_C +#undef PLATFORM_COMPILER_PCC_CXX +#undef PLATFORM_COMPILER_CLANG +#undef PLATFORM_COMPILER_CLANG_C +#undef PLATFORM_COMPILER_CLANG_CXX +#undef PLATFORM_COMPILER_NVHPC +#undef PLATFORM_COMPILER_NVHPC_C +#undef PLATFORM_COMPILER_NVHPC_CXX +#undef PLATFORM_COMPILER_GNU +#undef PLATFORM_COMPILER_GNU_C +#undef PLATFORM_COMPILER_GNU_CXX +#undef PLATFORM_COMPILER_UNKNOWN + +#undef PLATFORM_OS_FAMILYNAME +#undef PLATFORM_OS_CATAMOUNT +#undef PLATFORM_OS_CNL +#undef PLATFORM_OS_BGP +#undef PLATFORM_OS_BGQ +#undef PLATFORM_OS_WSL +#undef PLATFORM_OS_K42 +#undef PLATFORM_OS_UCLINUX +#undef PLATFORM_OS_LINUX +#undef PLATFORM_OS_BLRTS +#undef PLATFORM_OS_CYGWIN +#undef PLATFORM_OS_MSWINDOWS +#undef PLATFORM_OS_AIX +#undef PLATFORM_OS_TRU64 +#undef PLATFORM_OS_FREEBSD +#undef PLATFORM_OS_NETBSD +#undef PLATFORM_OS_OPENBSD +#undef PLATFORM_OS_SOLARIS +#undef PLATFORM_OS_DARWIN +#undef PLATFORM_OS_IRIX +#undef PLATFORM_OS_HPUX +#undef PLATFORM_OS_UNICOS +#undef PLATFORM_OS_MTA +#undef PLATFORM_OS_SUPERUX +#undef PLATFORM_OS_UNKNOWN + +#undef PLATFORM_ARCH_FAMILYNAME +#undef PLATFORM_ARCH_32 +#undef _PLATFORM_ARCH_32 +#undef PLATFORM_ARCH_64 +#undef _PLATFORM_ARCH_64 +#undef PLATFORM_ARCH_BIG_ENDIAN +#undef _PLATFORM_ARCH_BIG_ENDIAN +#undef PLATFORM_ARCH_LITTLE_ENDIAN +#undef _PLATFORM_ARCH_LITTLE_ENDIAN +#undef PLATFORM_ARCH_POWERPC +#undef PLATFORM_ARCH_MIC +#undef PLATFORM_ARCH_X86_64 +#undef PLATFORM_ARCH_IA64 +#undef PLATFORM_ARCH_X86 +#undef PLATFORM_ARCH_ALPHA +#undef PLATFORM_ARCH_MIPS +#undef PLATFORM_ARCH_SPARC +#undef PLATFORM_ARCH_PARISC +#undef PLATFORM_ARCH_CRAYX1 +#undef PLATFORM_ARCH_CRAYT3E +#undef PLATFORM_ARCH_MTA +#undef PLATFORM_ARCH_NECSX +#undef PLATFORM_ARCH_MICROBLAZE +#undef PLATFORM_ARCH_ARM +#undef PLATFORM_ARCH_AARCH64 +#undef PLATFORM_ARCH_TILE +#undef PLATFORM_ARCH_S390 +#undef PLATFORM_ARCH_UNKNOWN + +/* prevent known old/broken versions of this header from loading */ +#undef OMPI_PORTABLE_PLATFORM_H +#define OMPI_PORTABLE_PLATFORM_H +#undef OPAL_PORTABLE_PLATFORM_H +#define OPAL_PORTABLE_PLATFORM_H + +/* ------------------------------------------------------------------------------------ */ +/* most of this file was written based on information in vendor documents, system headers, + and inspecting verbose compiler output. + Another useful source of information: http://predef.sourceforge.net/ +*/ + +/* ------------------------------------------------------------------------------------ */ +/* helpers */ + +#undef _PLATFORM_STRINGIFY_HELPER +#define _PLATFORM_STRINGIFY_HELPER(x) #x +#undef PLATFORM_STRINGIFY +#define PLATFORM_STRINGIFY(x) _PLATFORM_STRINGIFY_HELPER(x) + +/* ------------------------------------------------------------------------------------ */ +/* Compiler detection */ +/* + PLATFORM_COMPILER_: + defined to 1 if compiler is a given family, undef otherwise + PLATFORM_COMPILER__C + PLATFORM_COMPILER__CXX + defined to 1 if compiler is a given family, and is the C or C++ compiler, respectively + PLATFORM_COMPILER_FAMILYNAME: + unquoted token which provides the compiler family name + PLATFORM_COMPILER_FAMILYID: + defined to a positive integral value which is unique to a given compiler family + or zero if the compiler is unrecognized + PLATFORM_COMPILER_ID: + same as PLATFORM_COMPILER_FAMILYID, except C and C++ compilers are differentiated + PLATFORM_COMPILER_VERSION: + defined to an integral expression which is guaranteed to be monotonically non-decreasing + with increasing compiler versions. Will be zero for unrecognized compilers. + The exact encoding of compiler version tuples into this constant may occasionally + change when this header is upgraded, so code should use the (in)equality macros below + to check against particular compiler versions, instead of embedding an encoded constant. + PLATFORM_COMPILER_VERSION_STR: + A string representation of the compiler version, which may contain additional info + PLATFORM_COMPILER_VERSION_[GT,GE,EQ,LE,LT](maj,min,pat): + evaluate to non-zero iff the compiler version in use is respectively + greater-than, greater-or-equal, equal, less-or-equal, less-than + the provided version components + PLATFORM_COMPILER_IDSTR: + a string which uniquely identifies recognized compilers + PLATFORM_COMPILER_C_LANGLVL and PLATFORM_COMPILER_CXX_LANGLVL: (in PLATFORM_HEADER_VERSION >= 5) + defined to a positive integral value corresponding to the C or C++ (respectively) + language standard to which the current compiler advertises conformance. + Otherwise undef (in particular at most one of these is defined in a given compilation). +*/ + +#if defined(__INTEL_COMPILER) + #define PLATFORM_COMPILER_INTEL 1 + #define PLATFORM_COMPILER_FAMILYNAME INTEL + #define PLATFORM_COMPILER_FAMILYID 2 + #ifdef __cplusplus + #define PLATFORM_COMPILER_INTEL_CXX 1 + #else + #define PLATFORM_COMPILER_INTEL_C 1 + #endif + /* Intel compiler version "patch number" + * ------------------------------------- + * Intel compiler versioning is unfortunately complicated by behavioral changes. + * Versions prior to Intel 14.0.0 (Sept 2013) lacked a preprocessor symbol to supply the "update" number. + * Version 14.0.0 and later supply a __INTEL_COMPILER_UPDATE symbol, but sadly several releases of Version 19 + * report the wrong value in this field (bug 3876). + * For now, the "patch" field of the PLATFORM_COMPILER_VERSION for Intel is the release package BUILD DATE, + * in the same decimal YYYYMMDD format as __INTEL_COMPILER_BUILD_DATE, as this is the only indicator that has + * remained reliably stable/correct across versions. + * So for example to check for icc --version "19.0.1.144 20181018" or later, pass: + * PLATFORM_COMPILER_VERSION_GE(19, 0, 20181018) + * NOTE 1: this build-date is unfortunately OS-DEPENDENT, sometimes differing by several days or weeks + * between the Linux and OSX releases. For a complete mapping, see: + * https://software.intel.com/en-us/articles/intel-compiler-and-composer-update-version-numbers-to-compiler-version-number-mapping + * NOTE 2: some of the build-date entries in the table linked above have been observed to be incorrect, + * so when possible it's safest to verify the build-date from `icc --version` on both Linux and macOS. + */ + #undef _PLATFORM_INTEL_COMPILER_BUILD_DATE + #undef _PLATFORM_COMPILER_INTEL_MIN_BUILDDATE + #define _PLATFORM_COMPILER_INTEL_MIN_BUILDDATE 19900000 /* year 1990: corresponds roughly to Intel v4.5 (1992) */ + /* MIN_BUILDDATE is used to normalize build dates to a bit-saving range for the encoding + * Intel officially supports the current release and two prior (currently back to 2016) + * Our 1990 floor corresponds to Intel v4.x that only worked on MS-DOS and predates both Linux and BSD-based macOS + */ + #ifdef __INTEL_COMPILER_BUILD_DATE + #define _PLATFORM_INTEL_COMPILER_BUILD_DATE __INTEL_COMPILER_BUILD_DATE + #else + #define _PLATFORM_INTEL_COMPILER_BUILD_DATE _PLATFORM_COMPILER_INTEL_MIN_BUILDDATE + #endif + /* Intel patch number is a decimal build date: YYYYMMDD - do NOT pass the "update number" */ + #define PLATFORM_COMPILER_VERSION_INT(maj,min,pat) \ + (((((maj) * 100) + (min)) << 19) | \ + ((pat) < _PLATFORM_COMPILER_INTEL_MIN_BUILDDATE ? \ + 0 : ((pat)-_PLATFORM_COMPILER_INTEL_MIN_BUILDDATE))) + #undef _PLATFORM__INTEL_COMPILER + #if __INTEL_COMPILER == 9999 /* Seen in 20110811 release of 12.1.0 - overflows VERSION_INT() */ + #define _PLATFORM__INTEL_COMPILER 1201 + #else + #define _PLATFORM__INTEL_COMPILER __INTEL_COMPILER + #endif + #define PLATFORM_COMPILER_VERSION \ + PLATFORM_COMPILER_VERSION_INT(_PLATFORM__INTEL_COMPILER/100, _PLATFORM__INTEL_COMPILER%100, _PLATFORM_INTEL_COMPILER_BUILD_DATE) + #define PLATFORM_COMPILER_VERSION_STR \ + PLATFORM_STRINGIFY(_PLATFORM__INTEL_COMPILER) "." PLATFORM_STRINGIFY(_PLATFORM_INTEL_COMPILER_BUILD_DATE) + +#elif defined(__PATHSCALE__) + #define PLATFORM_COMPILER_PATHSCALE 1 + #define PLATFORM_COMPILER_FAMILYNAME PATHSCALE + #define PLATFORM_COMPILER_FAMILYID 3 + #ifdef __cplusplus + #define PLATFORM_COMPILER_PATHSCALE_CXX 1 + #else + #define PLATFORM_COMPILER_PATHSCALE_C 1 + #endif + #define PLATFORM_COMPILER_VERSION \ + PLATFORM_COMPILER_VERSION_INT(__PATHCC__,__PATHCC_MINOR__,__PATHCC_PATCHLEVEL__+0) + #define PLATFORM_COMPILER_VERSION_STR __PATHSCALE__ + +#elif defined(__NVCOMPILER) // Must occur prior to PGI and CLANG + #define PLATFORM_COMPILER_NVHPC 1 + #define PLATFORM_COMPILER_FAMILYNAME NVHPC + #define PLATFORM_COMPILER_FAMILYID 20 + #ifdef __cplusplus + #define PLATFORM_COMPILER_NVHPC_CXX 1 + #else + #define PLATFORM_COMPILER_NVHPC_C 1 + #endif + #define PLATFORM_COMPILER_VERSION \ + PLATFORM_COMPILER_VERSION_INT(__NVCOMPILER_MAJOR__,__NVCOMPILER_MINOR__,__NVCOMPILER_PATCHLEVEL__) + #define PLATFORM_COMPILER_VERSION_STR \ + PLATFORM_STRINGIFY(__NVCOMPILER_MAJOR__) "." PLATFORM_STRINGIFY(__NVCOMPILER_MINOR__) "-" PLATFORM_STRINGIFY(__NVCOMPILER_PATCHLEVEL__) + +#elif defined(__PGI) + #define PLATFORM_COMPILER_PGI 1 + #define PLATFORM_COMPILER_FAMILYNAME PGI + #define PLATFORM_COMPILER_FAMILYID 4 + #ifdef __cplusplus + #define PLATFORM_COMPILER_PGI_CXX 1 + #else + #define PLATFORM_COMPILER_PGI_C 1 + #endif + #if __PGIC__ == 99 + /* bug 2230: PGI versioning was broken for some platforms in 7.0 + no way to know exact version, but provide something slightly more accurate */ + #define PLATFORM_COMPILER_VERSION 0x070000 + #define PLATFORM_COMPILER_VERSION_STR "7.?-?" + #elif defined(__PGIC__) && defined(__PGIC_MINOR__) && defined(__PGIC_PATCHLEVEL__) + #define PLATFORM_COMPILER_VERSION \ + PLATFORM_COMPILER_VERSION_INT(__PGIC__,__PGIC_MINOR__,__PGIC_PATCHLEVEL__) + #define PLATFORM_COMPILER_VERSION_STR \ + PLATFORM_STRINGIFY(__PGIC__) "." PLATFORM_STRINGIFY(__PGIC_MINOR__) "-" PLATFORM_STRINGIFY(__PGIC_PATCHLEVEL__) + #else + /* PGI before 6.1-4 lacks any version ID preprocessor macros - so use this filthy hack */ + #ifdef PLATFORM_PGI_IS_ANCIENT + /* Include below might fail for ancient versions lacking this header, but testing shows it + works back to at least 5.1-3 (Nov 2003), and based on docs probably back to 3.2 (Sep 2000) */ + #define PLATFORM_COMPILER_VERSION 0 + #elif defined(__x86_64__) /* bug 1753 - 64-bit omp.h upgrade happenned in <6.0-8,6.1-1] */ + #include "omp.h" + #if defined(_PGOMP_H) + /* 6.1.1 or newer */ + #define PLATFORM_COMPILER_VERSION 0x060101 + #define PLATFORM_COMPILER_VERSION_STR ">=6.1-1" + #else + /* 6.0.8 or older */ + #define PLATFORM_COMPILER_VERSION 0 + #define PLATFORM_COMPILER_VERSION_STR "<=6.0-8" + #endif + #else /* 32-bit omp.h upgrade happenned in <5.2-4,6.0-8] */ + #include "omp.h" + #if defined(_PGOMP_H) + /* 6.0-8 or newer */ + #define PLATFORM_COMPILER_VERSION 0x060008 + #define PLATFORM_COMPILER_VERSION_STR ">=6.0-8" + #else + /* 5.2-4 or older */ + #define PLATFORM_COMPILER_VERSION 0 + #define PLATFORM_COMPILER_VERSION_STR "<=5.2-4" + #endif + #endif + #endif + +#elif defined(__xlC__) || defined(__ibmxl__) + #define PLATFORM_COMPILER_XLC 1 + #define PLATFORM_COMPILER_FAMILYNAME XLC + #define PLATFORM_COMPILER_FAMILYID 5 + #ifdef __cplusplus + #define PLATFORM_COMPILER_XLC_CXX 1 + #else + #define PLATFORM_COMPILER_XLC_C 1 + #endif + #ifdef __ibmxl_version__ + #define PLATFORM_COMPILER_VERSION \ + (__ibmxl_version__ << 24 | __ibmxl_release__ << 16 | \ + __ibmxl_modification__ << 8 | __ibmxl_ptf_fix_level__) + #define PLATFORM_COMPILER_VERSION_STR \ + PLATFORM_STRINGIFY(__ibmxl_version__) "." PLATFORM_STRINGIFY(__ibmxl_release__) "." PLATFORM_STRINGIFY(__ibmxl_modification__) "." PLATFORM_STRINGIFY(__ibmxl_ptf_fix_level__) + #else + #ifdef __xlC_ver__ + #define PLATFORM_COMPILER_VERSION (__xlC__ << 16 | __xlC_ver__) + #else + #define PLATFORM_COMPILER_VERSION (__xlC__ << 16) + #endif + #ifdef __xlc__ + #define PLATFORM_COMPILER_VERSION_STR __xlc__ + #else + #define PLATFORM_COMPILER_VERSION_STR PLATFORM_STRINGIFY(__xlC__) + #endif + #endif + #define PLATFORM_COMPILER_VERSION_INT(maj,min,pat) \ + ( ((maj) << 24) | ((min) << 16) | ((pat) << 8) ) + +#elif defined(__DECC) || defined(__DECCXX) + #define PLATFORM_COMPILER_COMPAQ 1 + #define PLATFORM_COMPILER_FAMILYNAME COMPAQ + #define PLATFORM_COMPILER_FAMILYID 6 + #ifdef __cplusplus + #define PLATFORM_COMPILER_COMPAQ_CXX 1 + #else + #define PLATFORM_COMPILER_COMPAQ_C 1 + #endif + #if defined(__DECC_VER) + #define PLATFORM_COMPILER_VERSION __DECC_VER + #elif defined(__DECCXX_VER) + #define PLATFORM_COMPILER_VERSION __DECCXX_VER + #endif + + #define PLATFORM_COMPILER_VERSION_INT(maj,min,pat) \ + ( ((maj) * 10000000) + ((min) * 100000) + (90000) + (pat) ) + /* 90000 = official ver, 80000 = customer special ver, 60000 = field test ver */ + +#elif defined(__SUNPRO_C) || defined(__SUNPRO_CC) + #define PLATFORM_COMPILER_SUN 1 + #define PLATFORM_COMPILER_FAMILYNAME SUN + #define PLATFORM_COMPILER_FAMILYID 7 + #ifdef __cplusplus + #define PLATFORM_COMPILER_SUN_CXX 1 + #else + #define PLATFORM_COMPILER_SUN_C 1 + #endif + #if defined(__SUNPRO_C) && __SUNPRO_C > 0 + #define PLATFORM_COMPILER_VERSION __SUNPRO_C + #elif defined(__SUNPRO_CC) && __SUNPRO_CC > 0 + #define PLATFORM_COMPILER_VERSION __SUNPRO_CC + #endif + /* Sun version numbers look like hex but are actually a sloppy concatenation of decimal version numbers + * leading to weird discontinuities in the version space, luckily it remains monotonic (so far) + */ + #define PLATFORM_COMPILER_VERSION_INT(maj,min,pat) ( \ + (min) < 10 ? \ + ( ((maj) << 8) | ((min) << 4) | (pat) ) : \ + ( ((maj) << 12) | (((min)/10) << 8) | (((min)%10) << 4) | (pat) ) ) + +#elif defined(__HP_cc) || defined(__HP_aCC) + #define PLATFORM_COMPILER_HP 1 + #define PLATFORM_COMPILER_FAMILYNAME HP + #define PLATFORM_COMPILER_FAMILYID 8 + #ifdef __cplusplus + #define PLATFORM_COMPILER_HP_CXX 1 + #else + #define PLATFORM_COMPILER_HP_C 1 + #endif + #if defined(__HP_cc) && __HP_cc > 0 + #define PLATFORM_COMPILER_VERSION __HP_cc + #elif defined(__HP_aCC) && __HP_aCC > 0 + #define PLATFORM_COMPILER_VERSION __HP_aCC + #endif + #define PLATFORM_COMPILER_VERSION_INT(maj,min,pat) \ + ( ((maj) << 16) | ((min) << 8) | (pat) ) + +#elif defined(_SGI_COMPILER_VERSION) || \ + (defined(_COMPILER_VERSION) && defined(__sgi) && !defined(__GNUC__)) /* 7.3.0 and earlier lack _SGI_COMPILER_VERSION */ + #define PLATFORM_COMPILER_SGI 1 + #define PLATFORM_COMPILER_FAMILYNAME SGI + #define PLATFORM_COMPILER_FAMILYID 9 + #ifdef __cplusplus + #define PLATFORM_COMPILER_SGI_CXX 1 + #else + #define PLATFORM_COMPILER_SGI_C 1 + #endif + #if defined(_SGI_COMPILER_VERSION) && _SGI_COMPILER_VERSION > 0 + #define PLATFORM_COMPILER_VERSION _SGI_COMPILER_VERSION + #elif defined(_COMPILER_VERSION) && _COMPILER_VERSION > 0 + #define PLATFORM_COMPILER_VERSION _COMPILER_VERSION + #endif + #define PLATFORM_COMPILER_VERSION_INT(maj,min,pat) \ + ( ((maj) << 8) | ((min) << 4) | (pat) ) + +#elif defined(_CRAYC) + #define PLATFORM_COMPILER_CRAY 1 + #define PLATFORM_COMPILER_FAMILYNAME CRAY + #define PLATFORM_COMPILER_FAMILYID 10 + #ifdef __cplusplus + #define PLATFORM_COMPILER_CRAY_CXX 1 + #else + #define PLATFORM_COMPILER_CRAY_C 1 + #endif + #if defined(_RELEASE_MAJOR) && defined(_RELEASE_MINOR) /* XE, XK, XC */ + #define PLATFORM_COMPILER_VERSION \ + PLATFORM_COMPILER_VERSION_INT(_RELEASE_MAJOR,_RELEASE_MINOR,0) + #elif defined(_RELEASE) && defined(_RELEASE_MINOR) /* X1 and XT */ + #define PLATFORM_COMPILER_VERSION \ + PLATFORM_COMPILER_VERSION_INT(_RELEASE,_RELEASE_MINOR,0) + #elif defined(_RELEASE) /* T3E */ + #define PLATFORM_COMPILER_VERSION \ + PLATFORM_COMPILER_VERSION_INT(_RELEASE,0,0) + #endif + #ifdef _RELEASE_STRING /* X1 and XT, XK, XC */ + #define PLATFORM_COMPILER_VERSION_STR _RELEASE_STRING + #endif + +#elif defined(__KCC) + #define PLATFORM_COMPILER_KAI 1 + #define PLATFORM_COMPILER_FAMILYNAME KAI + #define PLATFORM_COMPILER_FAMILYID 11 + #ifdef __cplusplus + #define PLATFORM_COMPILER_KAI_CXX 1 + #else + #define PLATFORM_COMPILER_KAI_C 1 + #endif + +#elif defined(__MTA__) + #define PLATFORM_COMPILER_MTA 1 + #define PLATFORM_COMPILER_FAMILYNAME MTA + #define PLATFORM_COMPILER_FAMILYID 12 + #ifdef __cplusplus + #define PLATFORM_COMPILER_MTA_CXX 1 + #else + #define PLATFORM_COMPILER_MTA_C 1 + #endif + +#elif defined(_SX) + #define PLATFORM_COMPILER_NECSX 1 + #define PLATFORM_COMPILER_FAMILYNAME NECSX + #define PLATFORM_COMPILER_FAMILYID 13 + #ifdef __cplusplus + #define PLATFORM_COMPILER_NECSX_CXX 1 + #else + #define PLATFORM_COMPILER_NECSX_C 1 + #endif + +#elif defined(_MSC_VER) + #define PLATFORM_COMPILER_MICROSOFT 1 + #define PLATFORM_COMPILER_FAMILYNAME MICROSOFT + #define PLATFORM_COMPILER_FAMILYID 14 + #ifdef __cplusplus + #define PLATFORM_COMPILER_MICROSOFT_CXX 1 + #else + #define PLATFORM_COMPILER_MICROSOFT_C 1 + #endif + #define PLATFORM_COMPILER_VERSION _MSC_VER + +#elif defined(__TINYC__) + #define PLATFORM_COMPILER_TINY 1 + #define PLATFORM_COMPILER_FAMILYNAME TINY + #define PLATFORM_COMPILER_FAMILYID 15 + #ifdef __cplusplus + #define PLATFORM_COMPILER_TINY_CXX 1 + #else + #define PLATFORM_COMPILER_TINY_C 1 + #endif + +#elif defined(__LCC__) + #define PLATFORM_COMPILER_LCC 1 + #define PLATFORM_COMPILER_FAMILYNAME LCC + #define PLATFORM_COMPILER_FAMILYID 16 + #ifdef __cplusplus + #define PLATFORM_COMPILER_LCC_CXX 1 + #else + #define PLATFORM_COMPILER_LCC_C 1 + #endif + +#elif defined(__OPENCC__) + #define PLATFORM_COMPILER_OPEN64 1 + #define PLATFORM_COMPILER_FAMILYNAME OPEN64 + #define PLATFORM_COMPILER_FAMILYID 17 + #ifdef __cplusplus + #define PLATFORM_COMPILER_OPEN64_CXX 1 + #else + #define PLATFORM_COMPILER_OPEN64_C 1 + #endif + /* Note: can't use __OPENCC_PATCHLEVEL__ because it is sometimes non-integer (eg 3.2). + Adding a cast would not result in a preprocessor constant expression. */ + #define PLATFORM_COMPILER_VERSION \ + PLATFORM_COMPILER_VERSION_INT(__OPENCC__,__OPENCC_MINOR__,0) + #define PLATFORM_COMPILER_VERSION_STR __OPEN64__ + +#elif defined(__PCC__) + #define PLATFORM_COMPILER_PCC 1 + #define PLATFORM_COMPILER_FAMILYNAME PCC + #define PLATFORM_COMPILER_FAMILYID 18 + #ifdef __cplusplus + #define PLATFORM_COMPILER_PCC_CXX 1 + #else + #define PLATFORM_COMPILER_PCC_C 1 + #endif + #define PLATFORM_COMPILER_VERSION \ + PLATFORM_COMPILER_VERSION_INT(__PCC__,__PCC_MINOR__,__PCC_MINORMINOR__) + #define PLATFORM_COMPILER_VERSION_STR \ + PLATFORM_STRINGIFY(__PCC__) "." PLATFORM_STRINGIFY(__PCC_MINOR__) "." PLATFORM_STRINGIFY(__PCC_MINORMINOR__) + +#elif defined(__clang__) + #define PLATFORM_COMPILER_CLANG 1 + #define PLATFORM_COMPILER_FAMILYNAME CLANG + #define PLATFORM_COMPILER_FAMILYID 19 + #ifdef __cplusplus + #define PLATFORM_COMPILER_CLANG_CXX 1 + #else + #define PLATFORM_COMPILER_CLANG_C 1 + #endif + #ifdef __clang_version__ + /* clang 2.7 (gcc 4.2.1 compliant) and earlier lacked specific version identification */ + #define PLATFORM_COMPILER_VERSION \ + PLATFORM_COMPILER_VERSION_INT(__clang_major__,__clang_minor__,__clang_patchlevel__) + #define PLATFORM_COMPILER_VERSION_STR __clang_version__ + #endif + +// NOTE: PLATFORM_COMPILER_FAMILYID "20" is allocted to NVHPC, appearing earlier + +#else /* unknown compiler */ + #define PLATFORM_COMPILER_UNKNOWN 1 +#endif + +/* this stanza comes last, because many vendor compilers lie and claim + to be GNU C for compatibility reasons and/or because they share a frontend */ +#undef _PLATFORM_COMPILER_GNU_VERSION_STR +#undef __PLATFORM_COMPILER_GNU_VERSION_STR +#if defined(__GNUC__) + #undef PLATFORM_COMPILER_UNKNOWN + #ifndef PLATFORM_COMPILER_FAMILYID + #define PLATFORM_COMPILER_GNU 1 + #define PLATFORM_COMPILER_FAMILYNAME GNU + #define PLATFORM_COMPILER_FAMILYID 1 + #ifdef __cplusplus + #define PLATFORM_COMPILER_GNU_CXX 1 + #else + #define PLATFORM_COMPILER_GNU_C 1 + #endif + #if defined(__GNUC_MINOR__) && defined(__GNUC_PATCHLEVEL__) + #define PLATFORM_COMPILER_VERSION \ + PLATFORM_COMPILER_VERSION_INT(__GNUC__,__GNUC_MINOR__,__GNUC_PATCHLEVEL__) + #elif defined(__GNUC_MINOR__) /* older versions of egcs lack __GNUC_PATCHLEVEL__ */ + #define PLATFORM_COMPILER_VERSION \ + PLATFORM_COMPILER_VERSION_INT(__GNUC__,__GNUC_MINOR__,0) + #else + #define PLATFORM_COMPILER_VERSION \ + PLATFORM_COMPILER_VERSION_INT(__GNUC__,0,0) + #endif + #define PLATFORM_COMPILER_VERSION_STR __PLATFORM_COMPILER_GNU_VERSION_STR + #else + #define _PLATFORM_COMPILER_GNU_VERSION_STR __PLATFORM_COMPILER_GNU_VERSION_STR + #endif + /* gather any advertised GNU version number info, even for non-gcc compilers */ + #if defined(__GNUC_MINOR__) && defined(__GNUC_PATCHLEVEL__) + #define __PLATFORM_COMPILER_GNU_VERSION_STR \ + PLATFORM_STRINGIFY(__GNUC__) "." PLATFORM_STRINGIFY(__GNUC_MINOR__) "." PLATFORM_STRINGIFY(__GNUC_PATCHLEVEL__) + #elif defined(__GNUC_MINOR__) + #define __PLATFORM_COMPILER_GNU_VERSION_STR \ + PLATFORM_STRINGIFY(__GNUC__) "." PLATFORM_STRINGIFY(__GNUC_MINOR__) ".?" + #else + #define __PLATFORM_COMPILER_GNU_VERSION_STR \ + PLATFORM_STRINGIFY(__GNUC__) ".?.?" + #endif +#elif defined(PLATFORM_COMPILER_UNKNOWN) /* unknown compiler */ + #define PLATFORM_COMPILER_FAMILYNAME UNKNOWN + #define PLATFORM_COMPILER_FAMILYID 0 +#endif + +/* defaulting */ + +#ifndef PLATFORM_COMPILER_VERSION +#define PLATFORM_COMPILER_VERSION 0 /* don't know */ +#endif + +#ifndef PLATFORM_COMPILER_VERSION_STR +#define PLATFORM_COMPILER_VERSION_STR PLATFORM_STRINGIFY(PLATFORM_COMPILER_VERSION) +#endif + +#ifndef PLATFORM_COMPILER_VERSION_INT +#define PLATFORM_COMPILER_VERSION_INT(maj,min,pat) \ + (((maj) << 16) | ((min) << 8) | (pat)) +#endif + +/* version check macros */ + +#define PLATFORM_COMPILER_VERSION_GT(maj,min,pat) \ + PLATFORM_COMPILER_VERSION > PLATFORM_COMPILER_VERSION_INT(maj,min,pat) +#define PLATFORM_COMPILER_VERSION_GE(maj,min,pat) \ + PLATFORM_COMPILER_VERSION >= PLATFORM_COMPILER_VERSION_INT(maj,min,pat) +#define PLATFORM_COMPILER_VERSION_EQ(maj,min,pat) \ + PLATFORM_COMPILER_VERSION == PLATFORM_COMPILER_VERSION_INT(maj,min,pat) +#define PLATFORM_COMPILER_VERSION_LE(maj,min,pat) \ + PLATFORM_COMPILER_VERSION <= PLATFORM_COMPILER_VERSION_INT(maj,min,pat) +#define PLATFORM_COMPILER_VERSION_LT(maj,min,pat) \ + PLATFORM_COMPILER_VERSION < PLATFORM_COMPILER_VERSION_INT(maj,min,pat) + +/* misc feature detection */ + +#ifdef __cplusplus + #define PLATFORM_COMPILER_ID (10000+PLATFORM_COMPILER_FAMILYID) +#else + #define PLATFORM_COMPILER_ID PLATFORM_COMPILER_FAMILYID +#endif + +/* default language spec conformance detection */ +#if !defined(PLATFORM_COMPILER_C_LANGLVL) && !defined(PLATFORM_COMPILER_CXX_LANGLVL) + #if defined(__cplusplus) && (__cplusplus > 0) /* C++98 or newer */ + #define PLATFORM_COMPILER_CXX_LANGLVL __cplusplus + #elif defined(__STDC_VERSION__) && (__STDC_VERSION__ > 0) /* C95 or newer */ + #define PLATFORM_COMPILER_C_LANGLVL __STDC_VERSION__ + #elif defined(__STDC__) && !defined(__cplusplus) && !defined(__STDC_VERSION__) /* C89/C90 */ + #define PLATFORM_COMPILER_C_LANGLVL 199000L + #else + /* unknown - leave both undef */ + #endif +#endif + +#undef _PLATFORM_COMPILER_STD_STDC +#ifdef __STDC__ + #define _PLATFORM_COMPILER_STD_STDC "__STDC__" +#else + #define _PLATFORM_COMPILER_STD_STDC "-" +#endif +#undef _PLATFORM_COMPILER_STD_STDC_VERSION +#ifdef __STDC_VERSION__ + #define _PLATFORM_COMPILER_STD_STDC_VERSION ",__STDC_VERSION__=" PLATFORM_STRINGIFY(__STDC_VERSION__) +#else + #define _PLATFORM_COMPILER_STD_STDC_VERSION +#endif +#undef _PLATFORM_COMPILER_STD_STDC_EXT +#ifdef __STDC_EXT__ + #define _PLATFORM_COMPILER_STD_STDC_EXT ",__STDC_EXT__=" PLATFORM_STRINGIFY(__STDC_EXT__) +#else + #define _PLATFORM_COMPILER_STD_STDC_EXT +#endif +#undef _PLATFORM_COMPILER_STD_CPLUSPLUS +#ifdef __cplusplus + #define _PLATFORM_COMPILER_STD_CPLUSPLUS ",__cplusplus=" PLATFORM_STRINGIFY(__cplusplus) +#else + #define _PLATFORM_COMPILER_STD_CPLUSPLUS +#endif + +#undef _PLATFORM_COMPILER_MISC_VERSION_STR +#ifndef _PLATFORM_COMPILER_MISC_VERSION_STR + #ifdef __VERSION__ + #define _PLATFORM_COMPILER_MISC_VERSION_STR "|misc:" __VERSION__ + #else + #define _PLATFORM_COMPILER_MISC_VERSION_STR + #endif +#endif +#undef _PLATFORM_COMPILER_GNU_VERSION_STR_HELP +#ifdef _PLATFORM_COMPILER_GNU_VERSION_STR + #define _PLATFORM_COMPILER_GNU_VERSION_STR_HELP "|GNU:" _PLATFORM_COMPILER_GNU_VERSION_STR +#else + #define _PLATFORM_COMPILER_GNU_VERSION_STR_HELP +#endif + +#define PLATFORM_COMPILER_IDSTR \ + "|COMPILER_FAMILY:" \ + PLATFORM_STRINGIFY(PLATFORM_COMPILER_FAMILYNAME) \ + "|COMPILER_VERSION:" PLATFORM_COMPILER_VERSION_STR \ + "|COMPILER_FAMILYID:" \ + PLATFORM_STRINGIFY(PLATFORM_COMPILER_FAMILYID) \ + _PLATFORM_COMPILER_GNU_VERSION_STR_HELP \ + "|STD:" _PLATFORM_COMPILER_STD_STDC \ + _PLATFORM_COMPILER_STD_STDC_VERSION \ + _PLATFORM_COMPILER_STD_STDC_EXT \ + _PLATFORM_COMPILER_STD_CPLUSPLUS \ + _PLATFORM_COMPILER_MISC_VERSION_STR \ + "|" + +/* ------------------------------------------------------------------------------------ */ +/* OS detection */ +/* + PLATFORM_OS_: + defined to a positive value if OS belongs to a given family, undef otherwise + PLATFORM_OS_FAMILYNAME: + unquoted token which provides the compiler family name +*/ + +#if defined(__LIBCATAMOUNT__) || defined(__QK_USER__) + #define PLATFORM_OS_CATAMOUNT 1 + #define PLATFORM_OS_FAMILYNAME CATAMOUNT + +#elif defined(__CRAYXT_COMPUTE_LINUX_TARGET) + #define PLATFORM_OS_CNL 1 + #define PLATFORM_OS_FAMILYNAME CNL + +#elif defined(GASNETI_ARCH_BGP) || defined(__bgp__) + #define PLATFORM_OS_BGP 1 + #define PLATFORM_OS_FAMILYNAME BGP + +#elif defined(GASNETI_ARCH_BGQ) || defined(__bgq__) + #define PLATFORM_OS_BGQ 1 + #define PLATFORM_OS_FAMILYNAME BGQ + +#elif defined(GASNETI_ARCH_WSL) + #define PLATFORM_OS_WSL 1 + #define PLATFORM_OS_FAMILYNAME WSL + +#elif defined(__K42) + #define PLATFORM_OS_K42 1 + #define PLATFORM_OS_FAMILYNAME K42 + +#elif defined(__uClinux__) + #define PLATFORM_OS_UCLINUX 1 + #define PLATFORM_OS_FAMILYNAME UCLINUX + +#elif defined(__linux) || defined(__linux__) || defined(__gnu_linux__) + #define PLATFORM_OS_LINUX 1 + #define PLATFORM_OS_FAMILYNAME LINUX + +#elif defined(__blrts) || defined(__blrts__) || defined(__gnu_blrts__) + #define PLATFORM_OS_BLRTS 1 + #define PLATFORM_OS_FAMILYNAME BLRTS + +#elif defined(__CYGWIN__) + #define PLATFORM_OS_CYGWIN 1 + #define PLATFORM_OS_FAMILYNAME CYGWIN + +#elif defined(_WIN32) + #define PLATFORM_OS_MSWINDOWS 1 + #define PLATFORM_OS_FAMILYNAME MSWINDOWS + +#elif defined(_AIX) + #define PLATFORM_OS_AIX 1 + #define PLATFORM_OS_FAMILYNAME AIX + +#elif defined(__osf__) || defined(__digital__) + #define PLATFORM_OS_TRU64 1 + #define PLATFORM_OS_FAMILYNAME TRU64 + +#elif defined(__FreeBSD) || defined(__FreeBSD__) + #define PLATFORM_OS_FREEBSD 1 + #define PLATFORM_OS_FAMILYNAME FREEBSD + +#elif defined(__NetBSD) || defined(__NetBSD__) + #define PLATFORM_OS_NETBSD 1 + #define PLATFORM_OS_FAMILYNAME NETBSD + +#elif defined(__OpenBSD__) + #define PLATFORM_OS_OPENBSD 1 + #define PLATFORM_OS_FAMILYNAME OPENBSD + +#elif defined(__sun) || defined(__sun__) + #define PLATFORM_OS_SOLARIS 1 + #define PLATFORM_OS_FAMILYNAME SOLARIS + +#elif (defined(__APPLE__) && defined(__MACH__)) || \ + defined(__osx86__) /* PGI on OSX */ + #define PLATFORM_OS_DARWIN 1 + #define PLATFORM_OS_FAMILYNAME DARWIN + +#elif defined(__sgi) || defined(__sgi__) + #define PLATFORM_OS_IRIX 1 + #define PLATFORM_OS_FAMILYNAME IRIX + +#elif defined(__hpux) || defined(__hpux__) + #define PLATFORM_OS_HPUX 1 + #define PLATFORM_OS_FAMILYNAME HPUX + +#elif defined(_CRAY) || defined(_UNICOSMP) + #define PLATFORM_OS_UNICOS 1 + #define PLATFORM_OS_FAMILYNAME UNICOS + +#elif defined(__MTA__) + #define PLATFORM_OS_MTA 1 + #define PLATFORM_OS_FAMILYNAME MTA + +#elif defined(_SX) + #define PLATFORM_OS_SUPERUX 1 + #define PLATFORM_OS_FAMILYNAME SUPERUX + +#else + #define PLATFORM_OS_UNKNOWN 1 + #define PLATFORM_OS_FAMILYNAME UNKNOWN +#endif + +/* ------------------------------------------------------------------------------------ */ +/* Architecture detection */ +/* + PLATFORM_ARCH_: + defined to positive value if CPU belongs to a given family, undef otherwise + PLATFORM_ARCH_FAMILYNAME: + unquoted token which provides the CPU family name + + PLATFORM_ARCH_32 - 32-bit pointers + PLATFORM_ARCH_64 - 64-bit pointers + PLATFORM_ARCH_BIG_ENDIAN - big-endian word order + PLATFORM_ARCH_LITTLE_ENDIAN - little-endian word order + defined to positive value if CPU is known to have the indicated property, undef otherwise + */ + +#if defined(__ppc64) || defined(__ppc64__) || \ + defined(__PPC64) || defined(__PPC64__) || \ + defined(__powerpc64) || defined(__powerpc64__) + #define PLATFORM_ARCH_POWERPC 1 + #define PLATFORM_ARCH_FAMILYNAME POWERPC + #define _PLATFORM_ARCH_64 1 + #define _PLATFORM_ARCH_BIG_ENDIAN 1 + +#elif defined(_POWER) || \ + defined(__PPC) || defined(__PPC__) || \ + defined(__powerpc) || defined(__powerpc__) || \ + defined(__ppc) || defined(__ppc__) || \ + defined(__POWERPC__) + #define PLATFORM_ARCH_POWERPC 1 + #define PLATFORM_ARCH_FAMILYNAME POWERPC + #define _PLATFORM_ARCH_32 1 + #define _PLATFORM_ARCH_BIG_ENDIAN 1 + +#elif defined(_ARCH_PPC) || defined(_ARCH_PPC64) + #define PLATFORM_ARCH_POWERPC 1 + #define PLATFORM_ARCH_FAMILYNAME POWERPC + #define _PLATFORM_ARCH_BIG_ENDIAN 1 + +#elif defined(__KNC__) || defined(__MIC__) + #define PLATFORM_ARCH_MIC 1 + #define PLATFORM_ARCH_FAMILYNAME MIC + #define _PLATFORM_ARCH_64 1 + #define _PLATFORM_ARCH_LITTLE_ENDIAN 1 + +#elif defined(__x86_64) || defined(__x86_64__) || \ + defined(__athlon) || defined(__athlon__) || \ + defined(__amd64) || defined(__amd64__) + #define PLATFORM_ARCH_X86_64 1 + #define PLATFORM_ARCH_FAMILYNAME X86_64 + #define _PLATFORM_ARCH_64 1 + #define _PLATFORM_ARCH_LITTLE_ENDIAN 1 + +#elif defined(__ia64__) || defined(__ia64) + #define PLATFORM_ARCH_IA64 1 + #define PLATFORM_ARCH_FAMILYNAME IA64 + #define _PLATFORM_ARCH_64 1 + #if defined(PLATFORM_OS_LINUX) || defined(PLATFORM_OS_FREEBSD) + #define _PLATFORM_ARCH_LITTLE_ENDIAN 1 + #elif defined(PLATFORM_OS_HPUX) + #define _PLATFORM_ARCH_BIG_ENDIAN 1 + #else + /* Unknown. Hope one of the other mechanisms can sort it out. */ + #endif + +#elif defined(__i386__) || defined(__i386) || \ + defined(__i486__) || defined(__i486) || \ + defined(__i586__) || defined(__i586) || \ + defined(__i686__) || defined(__i686) || \ + defined(__pentiumpro) || defined(__pentiumpro__) || \ + defined(_M_IX86) + #define PLATFORM_ARCH_X86 1 + #define PLATFORM_ARCH_FAMILYNAME X86 + #define _PLATFORM_ARCH_32 1 + #define _PLATFORM_ARCH_LITTLE_ENDIAN 1 + +#elif defined(__alpha) || defined(__alpha__) + #define PLATFORM_ARCH_ALPHA 1 + #define PLATFORM_ARCH_FAMILYNAME ALPHA + #define _PLATFORM_ARCH_64 1 + #define _PLATFORM_ARCH_LITTLE_ENDIAN 1 + +#elif defined(_mips) || defined(__mips) || defined(__mips__) || \ + defined(__host_mips) || defined(__host_mips__) || \ + defined(_MIPS_ARCH) || defined(__R4000) + #define PLATFORM_ARCH_MIPS 1 + #define PLATFORM_ARCH_FAMILYNAME MIPS + #ifdef _MIPSEL /* MIPS cores support both little and big endian modes */ + /* SiCortex */ + #define _PLATFORM_ARCH_LITTLE_ENDIAN 1 + #else + /* IRIX */ + #define _PLATFORM_ARCH_BIG_ENDIAN 1 + #endif + #ifdef _MIPS_SZPTR + #if _MIPS_SZPTR == 32 + #define _PLATFORM_ARCH_32 1 + #elif _MIPS_SZPTR == 64 + #define _PLATFORM_ARCH_64 1 + #endif + #endif + +#elif defined(__sparc) || defined(__sparc__) || \ + defined(__sparclet__) || defined(__sparclite__) || \ + defined(__sparcv8) || defined(__sparcv9) + #define PLATFORM_ARCH_SPARC 1 + #define PLATFORM_ARCH_FAMILYNAME SPARC + #define _PLATFORM_ARCH_BIG_ENDIAN 1 + +#elif defined(__hppa) || defined(__hppa__) || \ + defined(__parisc) || defined(__parisc__) || \ + defined(_PA_RISC1_1) || defined(_PA_RISC2_0) + #define PLATFORM_ARCH_PARISC 1 + #define PLATFORM_ARCH_FAMILYNAME PARISC + #define _PLATFORM_ARCH_BIG_ENDIAN 1 + +#elif defined(__crayx1) + #define PLATFORM_ARCH_CRAYX1 1 + #define PLATFORM_ARCH_FAMILYNAME CRAYX1 + #define _PLATFORM_ARCH_BIG_ENDIAN 1 + #define _PLATFORM_ARCH_64 1 + +#elif defined(_CRAYT3E) + #define PLATFORM_ARCH_CRAYT3E 1 + #define PLATFORM_ARCH_FAMILYNAME CRAYT3E + #define _PLATFORM_ARCH_BIG_ENDIAN 1 + #define _PLATFORM_ARCH_64 1 + +#elif defined(__MTA__) + #define PLATFORM_ARCH_MTA 1 + #define PLATFORM_ARCH_FAMILYNAME MTA + +#elif defined(_SX) + #define PLATFORM_ARCH_NECSX 1 + #define PLATFORM_ARCH_FAMILYNAME NECSX + +#elif defined(__MICROBLAZE__) + #define PLATFORM_ARCH_MICROBLAZE 1 + #define PLATFORM_ARCH_FAMILYNAME MICROBLAZE + #define _PLATFORM_ARCH_BIG_ENDIAN 1 + #define _PLATFORM_ARCH_32 1 + +#elif defined(__arm__) + #define PLATFORM_ARCH_ARM 1 + #define PLATFORM_ARCH_FAMILYNAME ARM + #define _PLATFORM_ARCH_32 1 + #if defined(__ARMEB__) + #define _PLATFORM_ARCH_BIG_ENDIAN 1 + #elif defined(__ARMEL__) + #define _PLATFORM_ARCH_LITTLE_ENDIAN 1 + #endif + +#elif defined(__aarch64__) + #define PLATFORM_ARCH_AARCH64 1 + #define PLATFORM_ARCH_FAMILYNAME AARCH64 + #if defined(__AARCH64EB__) + #define _PLATFORM_ARCH_BIG_ENDIAN 1 + #elif defined(__AARCH64EL__) + #define _PLATFORM_ARCH_LITTLE_ENDIAN 1 + #endif + +#elif defined(__tile__) + #define PLATFORM_ARCH_TILE 1 + #define PLATFORM_ARCH_FAMILYNAME TILE + #define _PLATFORM_ARCH_LITTLE_ENDIAN 1 + #if defined(__tilegx__) + #define _PLATFORM_ARCH_64 1 + #else + #define _PLATFORM_ARCH_32 1 + #endif + +#elif defined(__s390__) + #define PLATFORM_ARCH_S390 1 + #define PLATFORM_ARCH_FAMILYNAME S390 + #define _PLATFORM_ARCH_BIG_ENDIAN 1 + #if defined(__s390x__) + #define _PLATFORM_ARCH_64 1 + #else + #define _PLATFORM_ARCH_32 1 + #endif + +#else /* unknown CPU */ + #define PLATFORM_ARCH_UNKNOWN 1 + #define PLATFORM_ARCH_FAMILYNAME UNKNOWN +#endif + +/* generic chip properties */ + +#if defined(PLATFORM_ARCH_BIG_ENDIAN) || defined(PLATFORM_ARCH_LITTLE_ENDIAN) + #error internal error in endianness configuration +#endif + +/* PLATFORM_ARCH_{BIG,LITTLE}_ENDIAN: + first detect common preprocessor defines + then default to any arch-specific value provided + */ + +#if defined(__BIG_ENDIAN__) || defined(WORDS_BIGENDIAN) || \ + ( __BYTE_ORDER__ > 0 && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ ) + #define PLATFORM_ARCH_BIG_ENDIAN 1 +#elif defined(__LITTLE_ENDIAN__) || defined(WORDS_LITTLEENDIAN) || \ + ( __BYTE_ORDER__ > 0 && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ ) + #define PLATFORM_ARCH_LITTLE_ENDIAN 1 +#elif _PLATFORM_ARCH_BIG_ENDIAN + #define PLATFORM_ARCH_BIG_ENDIAN 1 +#elif _PLATFORM_ARCH_LITTLE_ENDIAN + #define PLATFORM_ARCH_LITTLE_ENDIAN 1 +#endif +#undef _PLATFORM_ARCH_BIG_ENDIAN +#undef _PLATFORM_ARCH_LITTLE_ENDIAN + +#if defined(PLATFORM_ARCH_BIG_ENDIAN) && defined(PLATFORM_ARCH_LITTLE_ENDIAN) + #error conflicting endianness information +#endif + +/* PLATFORM_ARCH_{32,64}: + first trust SIZEOF_VOID_P, which is most likely to be accurate + next, detect common 32/64 preprocessor defines + finally default to any arch-specific value provided + */ +#if defined(PLATFORM_ARCH_64) || defined(PLATFORM_ARCH_32) + #error internal error in bit width configuration +#endif + +#if SIZEOF_VOID_P == 8 + #define PLATFORM_ARCH_64 1 +#elif SIZEOF_VOID_P == 4 + #define PLATFORM_ARCH_32 1 +#elif defined(_LP64) || defined(__LP64__) || \ + defined(__arch64__) || defined(__64BIT__) || \ + __INTPTR_MAX__ > 2147483647 + #define PLATFORM_ARCH_64 1 +#elif defined(_ILP32) || defined(__ILP32__) || \ + defined(__arch32__) || defined(__32BIT__) || \ + __INTPTR_MAX__ == 2147483647 + #define PLATFORM_ARCH_32 1 +#elif _PLATFORM_ARCH_64 + #define PLATFORM_ARCH_64 1 +#elif _PLATFORM_ARCH_32 + #define PLATFORM_ARCH_32 1 +#endif +#undef _PLATFORM_ARCH_64 +#undef _PLATFORM_ARCH_32 + +#if defined(PLATFORM_ARCH_64) && defined(PLATFORM_ARCH_32) + #error conflicting bit width information +#elif !defined(PLATFORM_ARCH_64) && !defined(PLATFORM_ARCH_32) + #error missing bit width information +#endif + +/* ------------------------------------------------------------------------------------ */ +/* handy test code that can be parsed after preprocess or executed to show platform results */ +#ifdef PLATFORM_SHOW +#include +#include +const char * +COMPILER_FAMILYNAME = PLATFORM_STRINGIFY(PLATFORM_COMPILER_FAMILYNAME) +, * +COMPILER_FAMILYID = PLATFORM_STRINGIFY(PLATFORM_COMPILER_FAMILYID) +, * +COMPILER_VERSION_STR = PLATFORM_COMPILER_VERSION_STR +, * +COMPILER_IDSTR = PLATFORM_COMPILER_IDSTR +, * +OS_FAMILYNAME = PLATFORM_STRINGIFY(PLATFORM_OS_FAMILYNAME) +, * +ARCH_FAMILYNAME = PLATFORM_STRINGIFY(PLATFORM_ARCH_FAMILYNAME) +; +int main(void) { + #define PLATFORM_DISP(x) printf("PLATFORM_"#x"=%s\n",x) + #define PLATFORM_DISPI(x) printf("PLATFORM_"#x"=%li\n",(long int)PLATFORM_##x) + #define PLATFORM_DISPX(x) printf("PLATFORM_"#x"=0x%lx\n",(long int)PLATFORM_##x) + PLATFORM_DISP(COMPILER_FAMILYNAME); + PLATFORM_DISP(COMPILER_FAMILYID); + PLATFORM_DISPI(COMPILER_ID); + PLATFORM_DISPX(COMPILER_VERSION); + PLATFORM_DISP(COMPILER_VERSION_STR); + PLATFORM_DISP(COMPILER_IDSTR); + #if PLATFORM_COMPILER_C_LANGLVL + PLATFORM_DISPI(COMPILER_C_LANGLVL); + #elif PLATFORM_COMPILER_CXX_LANGLVL + PLATFORM_DISPI(COMPILER_CXX_LANGLVL); + #else + printf("WARNING: Missing PLATFORM_COMPILER_C(XX)_LANGLVL!"); + #endif + PLATFORM_DISP(OS_FAMILYNAME); + PLATFORM_DISP(ARCH_FAMILYNAME); + #if PLATFORM_ARCH_32 + PLATFORM_DISPI(ARCH_32); + assert(sizeof(void *) == 4); + #else + PLATFORM_DISPI(ARCH_64); + assert(sizeof(void *) == 8); + #endif + { int x = 0x00FF; + unsigned char *p = (unsigned char *)&x; + #if PLATFORM_ARCH_BIG_ENDIAN + PLATFORM_DISPI(ARCH_BIG_ENDIAN); + assert(*p == 0); + #else + PLATFORM_DISPI(ARCH_LITTLE_ENDIAN); + assert(*p == 0xFF); + #endif + } + return 0; +} +#endif +/* ------------------------------------------------------------------------------------ */ +#endif diff --git a/oshmem/tools/oshmem_info/param.c b/oshmem/tools/oshmem_info/param.c index bcc85693742..d9127be7920 100644 --- a/oshmem/tools/oshmem_info/param.c +++ b/oshmem/tools/oshmem_info/param.c @@ -40,7 +40,7 @@ #include "opal/runtime/opal_info_support.h" #include "ompi/tools/ompi_info/ompi_info.h" -#include "ompi/include/mpi_portable_platform.h" +#include "opal/opal_portable_platform.h" #include "oshmem/tools/oshmem_info/oshmem_info.h" @@ -147,9 +147,9 @@ void oshmem_info_do_config(bool want_all) opal_info_out("C compiler absolute", "compiler:c:absolute", OPAL_CC_ABSOLUTE); opal_info_out("C compiler family name", "compiler:c:familyname", - _STRINGIFY(OPAL_BUILD_PLATFORM_COMPILER_FAMILYNAME)); + PLATFORM_STRINGIFY(OPAL_BUILD_PLATFORM_COMPILER_FAMILYNAME)); opal_info_out("C compiler version", "compiler:c:version", - _STRINGIFY(OPAL_BUILD_PLATFORM_COMPILER_VERSION_STR)); + PLATFORM_STRINGIFY(OPAL_BUILD_PLATFORM_COMPILER_VERSION_STR)); if (want_all) { opal_info_out_int("C char size", "compiler:c:sizeof:char", sizeof(char));