1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186
|
# -*- shell-script ; indent-tabs-mode:nil -*-
#
# Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
# University Research and Technology
# Corporation. All rights reserved.
# Copyright (c) 2004-2005 The University of Tennessee and The University
# of Tennessee Research Foundation. All rights
# reserved.
# Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
# University of Stuttgart. All rights reserved.
# Copyright (c) 2004-2005 The Regents of the University of California.
# All rights reserved.
# Copyright (c) 2009-2020 Cisco Systems, Inc. All rights reserved
# Copyright (c) 2011-2014 Los Alamos National Security, LLC. All rights
# reserved.
# Copyright (c) 2014-2020 Intel, Inc. All rights reserved.
# Copyright (c) 2014-2019 Research Organization for Information Science
# and Technology (RIST). All rights reserved.
# Copyright (c) 2016 IBM Corporation. All rights reserved.
# Copyright (c) 2021-2025 Nanook Consulting All rights reserved.
# Copyright (c) 2021-2022 Amazon.com, Inc. or its affiliates.
# All Rights reserved.
# Copyright (c) 2023 Jeffrey M. Squyres. All rights reserved.
# $COPYRIGHT$
#
# Additional copyrights may follow
#
# $HEADER$
#
dnl $1 is the base cap name (i.e., what comes after "PMIX_CAP_")
dnl $2 is the action if happy
dnl $3 is the action if not happy
AC_DEFUN([PRTE_CHECK_PMIX_CAP],[
AC_PREPROC_IFELSE(
[AC_LANG_PROGRAM([#include <pmix_version.h>],
[#if !defined(PMIX_CAPABILITIES)
#error This PMIx does not have any capability flags
#endif
#if !defined(PMIX_CAP_$1)
#error This PMIx does not have the PMIX_CAP_$1 capability flag at all
#endif
#if (PMIX_CAPABILITIES & PMIX_CAP_$1) == 0
#error This PMIx does not have the PMIX_CAP_$1 capability flag set
#endif
]
)
],
[AC_MSG_RESULT([found])
$2],
[AC_MSG_RESULT([not found])
$3])
])
AC_DEFUN([PRTE_CHECK_PMIX],[
PRTE_VAR_SCOPE_PUSH([prte_external_pmix_save_CPPFLAGS prte_pmix_support found_pmixcc])
AC_ARG_WITH([pmix],
[AS_HELP_STRING([--with-pmix(=DIR)],
[Where to find PMIx support, optionally adding DIR to the search path])])
AC_ARG_WITH([pmix-libdir],
[AS_HELP_STRING([--with-pmix-libdir=DIR],
[Look for libpmix in the given directory DIR, DIR/lib or DIR/lib64])])
AC_ARG_WITH([pmix-extra-libs],
[AS_HELP_STRING([--with-pmix-extra-libs=LIBS],
[Add LIBS as dependencies of pmix])])
AC_ARG_ENABLE([pmix-lib-checks],
[AS_HELP_STRING([--disable-pmix-lib-checks],
[If --disable-pmix-lib-checks is specified, configure will assume that -lpmix is available])])
prte_pmix_support=1
if test "$with_pmix" = "no"; then
AC_MSG_WARN([PRTE requires PMIx support using])
AC_MSG_WARN([an external copy that you supply.])
AC_MSG_ERROR([Cannot continue])
fi
AS_IF([test "$with_pmix_extra_libs" = "yes" -o "$with_pmix_extra_libs" = "no"],
[AC_MSG_ERROR([--with-pmix-extra-libs requires an argument other than yes or no])])
AS_IF([test "$enable_pmix_lib_checks" != "no"],
[dnl Need to explicitly enable wrapper compiler to get the dependent libraries
dnl when pkg-config is not available.
pmix_USE_WRAPPER_COMPILER=1
OAC_CHECK_PACKAGE([pmix],
[prte_pmix],
[pmix.h],
[pmix $with_pmix_extra_libs],
[PMIx_Init],
[],
[prte_pmix_support=0])],
[PRTE_FLAGS_APPEND_UNIQ([PRTE_FINAL_LIBS], [$with_pmix_extra_libs])])
AS_IF([test $prte_pmix_support -eq 0],
[AC_MSG_WARN([PRRTE requires PMIx support using an external copy that you supply.])
AC_MSG_ERROR([Cannot continue.])])
prte_external_pmix_save_CPPFLAGS=$CPPFLAGS
PRTE_FLAGS_PREPEND_UNIQ(CPPFLAGS, $prte_pmix_CPPFLAGS)
# if the version file exists, then we need to parse it to find
# the actual release series
# NOTE: We have already read PRRTE's VERSION file, so we can use
# $pmix_min_version.
prte_pmix_min_num_version=PRTE_PMIX_NUMERIC_MIN_VERSION
prte_pmix_min_version=PRTE_PMIX_MIN_VERSION
AC_MSG_CHECKING([version at or above v$prte_pmix_min_version])
AC_PREPROC_IFELSE([AC_LANG_PROGRAM([
#include <pmix_version.h>
#if (PMIX_NUMERIC_VERSION < $prte_pmix_min_num_version)
#error "not version $prte_pmix_min_num_version or above"
#endif
], [])],
[AC_MSG_RESULT([yes])],
[AC_MSG_RESULT(no)
AC_MSG_WARN([PRRTE requires PMIx v$prte_pmix_min_num_version or above.])
AC_MSG_ERROR([Please select a supported version and configure again])])
AC_CHECK_HEADER([src/util/pmix_argv.h], [],
[AC_MSG_ERROR([Could not find PMIx devel headers. Can not continue.])])
# restore the global flags
CPPFLAGS=$prte_external_pmix_save_CPPFLAGS
PRTE_FLAGS_APPEND_UNIQ(PRTE_FINAL_CPPFLAGS, $prte_pmix_CPPFLAGS)
PRTE_FLAGS_APPEND_UNIQ(PRTE_FINAL_LDFLAGS, $prte_pmix_LDFLAGS)
PRTE_FLAGS_APPEND_UNIQ(PRTE_FINAL_LIBS, $prte_pmix_LIBS)
AC_DEFINE_UNQUOTED([PRTE_PMIX_MINIMUM_VERSION],
[$prte_pmix_min_num_version],
[Minimum supported PMIx version])
found_pmixcc=0
PMIXCC_PATH="pmixcc"
AS_IF([test -n "${with_pmix}"],
[PMIXCC_PATH="${with_pmix}/bin/$PMIXCC_PATH"])
PRTE_LOG_COMMAND([pmixcc_showme_results=`$PMIXCC_PATH --showme:version 2>&1`], [found_pmixcc=1])
PRTE_LOG_MSG([pmixcc version: $pmixcc_showme_results])
AS_IF([test $found_pmixcc -eq 0],
[AC_MSG_WARN([Could not find $PMIXCC_PATH])
PMIXCC_PATH=])
AM_CONDITIONAL([PRTE_HAVE_PMIXCC], [test $found_pmixcc -eq 1])
AC_SUBST([PMIXCC_PATH])
# Check for any needed capabilities from the PMIx we found.
#
# Note: if the PMIx we found does not define capability flags,
# then it definitely does not have the capability flags we're
# looking for. Specifically, we cannot use PMIx versions that
# support LTO compatibility as their pmix_framework.h definition
# is incompatible with our infrastructure
prte_external_pmix_save_CPPFLAGS=$CPPFLAGS
prte_external_pmix_save_LDFLAGS=$LDFLAGS
prte_external_pmix_save_LIBS=$LIBS
PRTE_FLAGS_APPEND_UNIQ(CPPFLAGS, $PRTE_FINAL_CPPFLAGS)
PRTE_FLAGS_APPEND_UNIQ(LDFLAGS, $PRTE_FINAL_LDFLAGS)
PRTE_FLAGS_APPEND_UNIQ(LIBS, $PRTE_FINAL_LIBS)
AC_MSG_CHECKING([for LTO compatibility])
PRTE_CHECK_PMIX_CAP([LTO],
[AC_MSG_RESULT([yes])
AC_MSG_WARN([Your PMIx version includes the PMIX_CAP_LTO])
AC_MSG_WARN([capability flag. The infrastructure defined])
AC_MSG_WARN([within it is not compatible with this version])
AC_MSG_WARN([of PRRTE. Please point us at an earlier PMIx])
AC_MSG_ERROR([Cannot proceed.])],
[AC_MSG_RESULT([no])
AC_MSG_WARN([This build will not be compatible with the])
AC_MSG_WARN([LTO optimizer. All LTO-related flags will])
AC_MSG_WARN([be removed from the build])])
# restore the global flags
CPPFLAGS=$prte_external_pmix_save_CPPFLAGS
LDFLAGS=$prte_external_pmix_save_LDFLAGS
LIBS=$prte_external_pmix_save_LIBS
PRTE_SUMMARY_ADD([Required Packages], [PMIx], [], [$prte_pmix_SUMMARY])
PRTE_VAR_SCOPE_POP
])
|