462adee81a
from: svn merge -r5440:5448 https://svn.open-mpi.org/svn/ompi/tmp/hetero . This commit was SVN r5549. The following SVN revisions from the original message are invalid or inconsistent and therefore were not cross-referenced: r5440 r5448
814 строки
27 KiB
Bash
814 строки
27 KiB
Bash
dnl -*- shell-script -*-
|
|
dnl
|
|
dnl Copyright (c) 2004-2005 The Trustees of Indiana University.
|
|
dnl All rights reserved.
|
|
dnl Copyright (c) 2004-2005 The Trustees of the University of Tennessee.
|
|
dnl All rights reserved.
|
|
dnl Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
|
dnl University of Stuttgart. All rights reserved.
|
|
dnl Copyright (c) 2004-2005 The Regents of the University of California.
|
|
dnl All rights reserved.
|
|
dnl $COPYRIGHT$
|
|
dnl
|
|
dnl Additional copyrights may follow
|
|
dnl
|
|
dnl $HEADER$
|
|
dnl
|
|
|
|
AC_DEFUN([OMPI_MCA],[
|
|
|
|
# Find which components should be built as run-time loadable components
|
|
# Acceptable combinations:
|
|
#
|
|
# [default -- no option given]
|
|
# --enable-mca-dso
|
|
# --enable-mca-dso=[.+,]*COMPONENT_TYPE[.+,]*
|
|
# --enable-mca-dso=[.+,]*COMPONENT_TYPE-COMPONENT_NAME[.+,]*
|
|
# --disable-mca-dso
|
|
#
|
|
|
|
AC_ARG_ENABLE(mca-dso,
|
|
AC_HELP_STRING([--enable-mca-dso=LIST],
|
|
[comma-separated list of types and/or
|
|
type-component pairs that will be built as
|
|
run-time loadable components (as opposed to
|
|
statically linked in), if supported on this
|
|
platform. The default is to build all components
|
|
as DSOs; the --disable-mca-dso[=LIST] form can be
|
|
used to disable building all or some
|
|
types/components as DSOs]))
|
|
AC_ARG_ENABLE(mca-static,
|
|
AC_HELP_STRING([--enable-mca-static=LIST],
|
|
[comma-separated list of types and/or
|
|
type-component pairs that will be built statically
|
|
linked into the library. The default (if DSOs are
|
|
supported) is to build all components as DSOs.
|
|
Enabling a component as static disables it
|
|
building as a DSO.]))
|
|
AC_ARG_ENABLE(mca-direct,
|
|
AC_HELP_STRING([--enable-mca-direct=LIST],
|
|
[comma-separated list of type-component pairs that
|
|
will be hard coded as the one component to use for
|
|
a given component type, saving the (small)
|
|
overhead of the component architecture. LIST must
|
|
not be empty and implies given component pairs are
|
|
build as static components.]))
|
|
|
|
#
|
|
# First, add all the mca-direct components / types into the mca-static
|
|
# lists and create a list of component types that are direct compile,
|
|
# in the form DIRECT_[type]=[component]
|
|
#
|
|
AC_MSG_CHECKING([which components should be direct-linked into the library])
|
|
if test "$enable_mca_direct" = "yes" ; then
|
|
AC_MSG_RESULT([yes])
|
|
AC_MSG_ERROR([*** The enable-mca-direct flag requires an explicit list of
|
|
*** type-component pairs. For example, --enable-mca-direct=pml-teg,coll-basic])
|
|
elif test ! -z "$enable_mca_direct" -a "$enable_mca_direct" != "" ; then
|
|
#
|
|
# we need to add this into the static list, unless the static list
|
|
# is everything
|
|
#
|
|
if test "$enable_mca_static" = "no" ; then
|
|
AC_MSG_WARN([*** Re-enabling static component support for direct call])
|
|
enable_mca_static="$enable_mca_direct"
|
|
elif test -z "$enable_mca_static" ; then
|
|
enable_mca_static="$enable_mca_direct"
|
|
elif test "$enable_mca_static" != "yes" ; then
|
|
enable_mca_static="$enable_mca_direct,$enable_mca_static"
|
|
fi
|
|
|
|
ifs_save="$IFS"
|
|
IFS="${IFS}$PATH_SEPARATOR,"
|
|
msg=
|
|
for item in $enable_mca_direct; do
|
|
type="`echo $item | cut -f1 -d-`"
|
|
comp="`echo $item | cut -f2- -d-`"
|
|
if test -z $type -o -z $comp ; then
|
|
AC_MSG_ERROR([*** The enable-mca-direct flag requires a
|
|
*** list of type-component pairs. Invalid input detected.])
|
|
else
|
|
str="`echo DIRECT_$type=$comp | sed s/-/_/g`"
|
|
eval $str
|
|
msg="$item $msg"
|
|
fi
|
|
done
|
|
IFS="$ifs_save"
|
|
fi
|
|
AC_MSG_RESULT([$msg])
|
|
unset msg
|
|
|
|
#
|
|
# Second, set the DSO_all and STATIC_all variables. conflict
|
|
# resolution (prefer static) is done in the big loop below
|
|
#
|
|
AC_MSG_CHECKING([which components should be run-time loadable])
|
|
if test "$enable_shared" = "no"; then
|
|
DSO_all=0
|
|
msg=none
|
|
elif test -z "$enable_mca_dso" -o "$enable_mca_dso" = "yes"; then
|
|
DSO_all=1
|
|
msg=all
|
|
elif test "$enable_mca_dso" = "no"; then
|
|
DSO_all=0
|
|
msg=none
|
|
else
|
|
DSO_all=0
|
|
ifs_save="$IFS"
|
|
IFS="${IFS}$PATH_SEPARATOR,"
|
|
msg=
|
|
for item in $enable_mca_dso; do
|
|
str="`echo DSO_$item=1 | sed s/-/_/g`"
|
|
eval $str
|
|
msg="$item $msg"
|
|
done
|
|
IFS="$ifs_save"
|
|
fi
|
|
AC_MSG_RESULT([$msg])
|
|
unset msg
|
|
if test "$enable_shared" = "no"; then
|
|
AC_MSG_WARN([*** Shared libraries have been disabled (--disable-shared])
|
|
AC_MSG_WARN([*** Building MCA components as DSOs automatically disabled])
|
|
fi
|
|
|
|
AC_MSG_CHECKING([which components should be static])
|
|
if test "$enable_mca_static" = "yes"; then
|
|
STATIC_all=1
|
|
msg=all
|
|
elif test -z "$enable_mca_static" -o "$enable_mca_static" = "no"; then
|
|
STATIC_all=0
|
|
msg=none
|
|
else
|
|
STATIC_all=0
|
|
ifs_save="$IFS"
|
|
IFS="${IFS}$PATH_SEPARATOR,"
|
|
msg=
|
|
for item in $enable_mca_static; do
|
|
str="`echo STATIC_$item=1 | sed s/-/_/g`"
|
|
eval $str
|
|
msg="$item $msg"
|
|
done
|
|
IFS="$ifs_save"
|
|
fi
|
|
AC_MSG_RESULT([$msg])
|
|
unset msg
|
|
|
|
|
|
# The list of MCA types (it's fixed)
|
|
|
|
AC_MSG_CHECKING([for MCA types])
|
|
found_types="common allocator coll dps errmgr gpr io iof mpool ns oob pls pml ptl ras rds rmaps rmgr rml soh topo"
|
|
AC_MSG_RESULT([$found_types])
|
|
|
|
# Get the list of all the non-configure MCA components that were found by
|
|
# autogen.sh.
|
|
|
|
# config/mca_no_configure_components.m4
|
|
MCA_FIND_NO_CONFIGURE_COMPONENTS
|
|
|
|
# Now determine the configurable components in each of the types. This
|
|
# is a little redundant and could be combined into
|
|
# MCA_FIND_NO_CONFIGURE_COMPONENTS, but we separate it out for clarity.
|
|
# The extern statements and array of pointers to the component global
|
|
# structs are written to a file for each type that is #include'd in
|
|
# the file for each type.
|
|
|
|
for type in $found_types; do
|
|
all_components=
|
|
static_components=
|
|
dso_components=
|
|
static_ltlibs=
|
|
|
|
# Ensure that the directory where the #include file is to live
|
|
# exists. Need to do this for VPATH builds, because the directory
|
|
# may not exist yet. For the "common" type, it's not really a
|
|
# component, so it doesn't have a base.
|
|
|
|
if test "$type" = "common"; then
|
|
outdir=src/mca/common
|
|
else
|
|
outdir=src/mca/$type/base
|
|
fi
|
|
total_dir="."
|
|
for dir_part in `IFS='/\\'; set X $outdir; shift; echo "$[@]"`; do
|
|
total_dir=$total_dir/$dir_part
|
|
test -d "$total_dir" ||
|
|
mkdir "$total_dir" ||
|
|
AC_MSG_ERROR([cannot create $total_dir])
|
|
done
|
|
|
|
# Also ensure that the dynamic-mca base directory exists
|
|
|
|
total_dir="."
|
|
dyndir=src/dynamic-mca/$type
|
|
for dir_part in `IFS='/\\'; set X $dyndir; shift; echo "$[@]"`; do
|
|
total_dir=$total_dir/$dir_part
|
|
test -d "$total_dir" ||
|
|
mkdir "$total_dir" ||
|
|
AC_MSG_ERROR([cannot create $total_dir])
|
|
done
|
|
|
|
# Remove any previous generated #include files.
|
|
|
|
outfile_real=$outdir/static-components.h
|
|
outfile=$outfile_real.new
|
|
rm -f $outfile $outfile.struct $outfile.extern \
|
|
$outfile.all $outfile.static $outfile.dyanmic
|
|
touch $outfile.struct $outfile.extern \
|
|
$outfile.all $outfile.static $outfile.dso
|
|
|
|
# Manual conversion of $type to its generic name (e.g., crmpi->cr,
|
|
# crompi->cr).
|
|
# JMS Fix this
|
|
|
|
case "$type" in
|
|
crmpi)
|
|
generic_type="cr"
|
|
;;
|
|
crompi)
|
|
generic_type="cr"
|
|
;;
|
|
*)
|
|
generic_type="$type"
|
|
;;
|
|
esac
|
|
|
|
# set the direct / no direct flag
|
|
str="DIRECT_COMPONENT=\$DIRECT_${type}"
|
|
eval $str
|
|
if test ! -z "$DIRECT_COMPONENT" ; then
|
|
str="MCA_${type}_DIRECT_CALL_COMPONENT=$DIRECT_COMPONENT"
|
|
eval $str
|
|
str="MCA_${type}_DIRECT_CALL=1"
|
|
eval $str
|
|
else
|
|
str="MCA_${type}_DIRECT_CALL_COMPONENT="
|
|
eval $str
|
|
str="MCA_${type}_DIRECT_CALL=0"
|
|
eval $str
|
|
fi
|
|
|
|
# Iterate through the list of no-configure components
|
|
|
|
foo="found_components=\$MCA_${type}_NO_CONFIGURE_SUBDIRS"
|
|
eval $foo
|
|
|
|
for component in $found_components; do
|
|
m=`basename "$component"`
|
|
|
|
# build if:
|
|
# - the component type is direct and we are that component
|
|
# - there is no ompi_ignore file
|
|
# - there is an ompi_ignore, but there is an empty ompi_unignore
|
|
# - there is an ompi_ignore, but username is in ompi_unignore
|
|
if test -d $srcdir/$component ; then
|
|
# decide if we want the component to be built or not. This
|
|
# is spread out because some of the logic is a little complex
|
|
# and test's syntax isn't exactly the greatest. We want to
|
|
# build the component by default.
|
|
want_component=1
|
|
if test -f $srcdir/$component/.ompi_ignore ; then
|
|
# If there is an ompi_ignore file, don't build
|
|
# the component. Note that this decision can be
|
|
# overriden by the unignore logic below.
|
|
want_component=0
|
|
fi
|
|
if test -f $srcdir/$component/.ompi_unignore ; then
|
|
# if there is an empty ompi_unignore, that is
|
|
# equivalent to having your userid in the unignore file.
|
|
# If userid is in the file, unignore the ignore file.
|
|
if test ! -s $srcdir/$component/.ompi_unignore ; then
|
|
want_component=1
|
|
elif test ! -z "`grep $USER $srcdir/$component/.ompi_unignore`" ; then
|
|
want_component=1
|
|
fi
|
|
fi
|
|
# if this component type is direct and we are not it, we don't want
|
|
# to be built. Otherwise, we do want to be built.
|
|
if test ! -z "$DIRECT_COMPONENT" ; then
|
|
if test "$DIRECT_COMPONENT" = "$m" ; then
|
|
want_component=1
|
|
else
|
|
want_component=0
|
|
fi
|
|
fi
|
|
if test "$want_component" = "1" ; then
|
|
ompi_show_subtitle "MCA component $type:$m (no configure script)"
|
|
|
|
# Remove any possible sym link in the mca-dynamic tree
|
|
|
|
rm -f src/dynamic-mca/$type/$m
|
|
|
|
# Now process the component
|
|
|
|
MCA_PROCESS_COMPONENT(1, 1, $type, $m)
|
|
|
|
# Note that the AM_CONDITIONAL for this component is set in
|
|
# config/mca_no_configure_components.m4 -- which is generated by
|
|
# autogen.sh because we cannot have a variable
|
|
# AM_CONDITIONAL name (which we need here). Since
|
|
# autogen.sh knows the name that is necessary, it just
|
|
# generated the AM_CONDITIONAL directly. Here, we fill in
|
|
# the variable that is used in that AM_CONDITIONAL.
|
|
|
|
if test "$compile_mode" = "dso"; then
|
|
value=1
|
|
else
|
|
value=0
|
|
fi
|
|
foo="BUILD_${type}_${m}_DSO=$value"
|
|
eval $foo
|
|
|
|
# double check that we can build direct if that was requested
|
|
# DIRECT_CALL_HEADER *must* be defined by the component
|
|
# (in its post configure) if it
|
|
# can be direct built, so we use that as a keyword to tell us
|
|
# whether the component was successfully setup or not
|
|
if test "$DIRECT_COMPONENT" = "$m" -a \
|
|
-z "$MCA_${type}_DIRECT_CALL_HEADER" ; then
|
|
AC_MSG_ERROR([${type} component ${m} was requested to be directly linked
|
|
into libmpi, but does not support such a configuration. Please choose
|
|
another ${type} component for direct compilation or allow all components
|
|
of type ${type} to be loaded at runtime.])
|
|
fi
|
|
fi
|
|
fi
|
|
done
|
|
|
|
# Find all configureable components, run their configure scripts,
|
|
# etc.
|
|
|
|
for component in $srcdir/src/mca/$type/*; do
|
|
FOUND=0
|
|
HAPPY=0
|
|
m="`basename $component`"
|
|
# build if:
|
|
# - the component type is direct and we are that component
|
|
# - there is no ompi_ignore file
|
|
# - there is an ompi_ignore, but there is an empty ompi_unignore
|
|
# - there is an ompi_ignore, but username is in ompi_unignore
|
|
if test -d $component -a -x $component/configure ; then
|
|
want_component=1
|
|
if test -f $srcdir/$component/.ompi_ignore ; then
|
|
want_component=0
|
|
fi
|
|
if test -f $srcdir/$component/.ompi_unignore ; then
|
|
if test ! -s $srcdir/$component/.ompi_unignore ; then
|
|
want_component=1
|
|
elif test ! -z "`grep $USER $srcdir/$component/.ompi_unignore`" ; then
|
|
want_component=1
|
|
fi
|
|
fi
|
|
# if this component type is direct and we are not it, we don't want
|
|
# to be built. Otherwise, we do want to be built.
|
|
if test ! -z "$DIRECT_COMPONENT" ; then
|
|
if test "$DIRECT_COMPONENT" = "$m" ; then
|
|
# BWB - need some check in here to make sure component
|
|
# can be built direct!
|
|
want_component=1
|
|
else
|
|
want_component=0
|
|
fi
|
|
fi
|
|
if test "$want_component" = "1" ; then
|
|
ompi_show_subtitle "MCA component $type:$m (need to configure)"
|
|
|
|
# We found one!
|
|
|
|
FOUND=1
|
|
|
|
# Remove any possible sym link in the mca-dynamic tree
|
|
|
|
rm -f src/dyanmic-mca/$type/$m
|
|
|
|
# Configure the component subdirectory
|
|
|
|
OMPI_CONFIG_SUBDIR([src/mca/$type/$m],
|
|
[$ompi_subdir_args],
|
|
[HAPPY=1], [HAPPY=0])
|
|
fi
|
|
fi
|
|
|
|
# Process this component
|
|
|
|
MCA_PROCESS_COMPONENT($FOUND, $HAPPY, $type, $m)
|
|
# double check that we can build direct if that was requested
|
|
if test "$DIRECT_COMPONENT" = "$m" -a \
|
|
-z "$MCA_${type}_DIRECT_CALL_HEADER" ; then
|
|
AC_MSG_ERROR([${type} component ${m} was requested to be directly linked
|
|
into libmpi, but does not support such a configuration. Please choose
|
|
another ${type} component for direct compilation or allow all components
|
|
of type ${type} to be loaded at runtime.])
|
|
fi
|
|
|
|
done
|
|
|
|
# m4 weirdness: must also do the echo after the sort, or we get a
|
|
# string with newlines in it
|
|
|
|
all_components="`sort $outfile.all`"
|
|
all_components="`echo $all_components`"
|
|
static_components="`sort $outfile.static`"
|
|
static_components="`echo $static_components`"
|
|
dso_components="`sort $outfile.dso`"
|
|
dso_components="`echo $dso_components`"
|
|
rm -f $outfile $outfile.all $outfile.static $outfile.dso
|
|
|
|
# Create the final .h file that will be included in the type's
|
|
# top-level glue. This lists all the static components. We don't
|
|
# need to do this for "common".
|
|
|
|
if test "$type" != "common"; then
|
|
cat > $outfile <<EOF
|
|
/*
|
|
* \$HEADER\$
|
|
*/
|
|
|
|
`cat $outfile.extern`
|
|
|
|
const mca_base_component_t *mca_${type}_base_static_components[[]] = {
|
|
`cat $outfile.struct`
|
|
NULL
|
|
};
|
|
EOF
|
|
# Only replace the header file if a) it doesn't previously
|
|
# exist, or b) the contents are different. Do this to not
|
|
# trigger recompilation of certain .c files just because the
|
|
# timestamp changed on $outfile_real (similar to the way AC
|
|
# handles AC_CONFIG_HEADER files).
|
|
|
|
diff $outfile $outfile_real > /dev/null 2>&1
|
|
if test "$?" != "0"; then
|
|
mv $outfile $outfile_real
|
|
else
|
|
rm -f $outfile
|
|
fi
|
|
fi
|
|
rm -f $outfile.struct $outfile.extern
|
|
|
|
# Save the results for the Makefile.am's. Note the whacky shell
|
|
# script escaping that is necessary because $components may be
|
|
# multiple words, but we also need to substitute on ${type}...
|
|
|
|
foo="MCA_${type}_ALL_SUBDIRS"'="$all_components"'
|
|
eval "$foo"
|
|
foo="MCA_${type}_STATIC_SUBDIRS"'="$static_components"'
|
|
eval "$foo"
|
|
foo="MCA_${type}_DSO_SUBDIRS"'="$dso_components"'
|
|
eval "$foo"
|
|
foo="MCA_${type}_STATIC_LTLIBS"'="$static_ltlibs"'
|
|
eval "$foo"
|
|
done
|
|
unset foo type m components structs outfile outdir total_dir file \
|
|
all_components static_components dso_components static_ltlibs
|
|
|
|
# Grumble. It seems that AC_SUBST and AC_DEFINE don't let you
|
|
# substitue on a variable name that contains a variable (e.g.,
|
|
# OMPI_MCA_$type_SUBDIRS). So we have to do this manually. :-(
|
|
|
|
# Common types
|
|
|
|
AC_SUBST(MCA_common_ALL_SUBDIRS)
|
|
AC_SUBST(MCA_common_STATIC_SUBDIRS)
|
|
AC_SUBST(MCA_common_DSO_SUBDIRS)
|
|
AC_SUBST(MCA_common_STATIC_LTLIBS)
|
|
|
|
# ORTE types
|
|
|
|
AC_SUBST(MCA_oob_ALL_SUBDIRS)
|
|
AC_SUBST(MCA_oob_STATIC_SUBDIRS)
|
|
AC_SUBST(MCA_oob_DSO_SUBDIRS)
|
|
AC_SUBST(MCA_oob_STATIC_LTLIBS)
|
|
|
|
AC_SUBST(MCA_dps_ALL_SUBDIRS)
|
|
AC_SUBST(MCA_dps_STATIC_SUBDIRS)
|
|
AC_SUBST(MCA_dps_DSO_SUBDIRS)
|
|
AC_SUBST(MCA_dps_STATIC_LTLIBS)
|
|
|
|
AC_SUBST(MCA_errmgr_ALL_SUBDIRS)
|
|
AC_SUBST(MCA_errmgr_STATIC_SUBDIRS)
|
|
AC_SUBST(MCA_errmgr_DSO_SUBDIRS)
|
|
AC_SUBST(MCA_errmgr_STATIC_LTLIBS)
|
|
|
|
AC_SUBST(MCA_gpr_ALL_SUBDIRS)
|
|
AC_SUBST(MCA_gpr_STATIC_SUBDIRS)
|
|
AC_SUBST(MCA_gpr_DSO_SUBDIRS)
|
|
AC_SUBST(MCA_gpr_STATIC_LTLIBS)
|
|
|
|
AC_SUBST(MCA_ns_ALL_SUBDIRS)
|
|
AC_SUBST(MCA_ns_STATIC_SUBDIRS)
|
|
AC_SUBST(MCA_ns_DSO_SUBDIRS)
|
|
AC_SUBST(MCA_ns_STATIC_LTLIBS)
|
|
|
|
AC_SUBST(MCA_ras_ALL_SUBDIRS)
|
|
AC_SUBST(MCA_ras_STATIC_SUBDIRS)
|
|
AC_SUBST(MCA_ras_DSO_SUBDIRS)
|
|
AC_SUBST(MCA_ras_STATIC_LTLIBS)
|
|
|
|
AC_SUBST(MCA_rds_ALL_SUBDIRS)
|
|
AC_SUBST(MCA_rds_STATIC_SUBDIRS)
|
|
AC_SUBST(MCA_rds_DSO_SUBDIRS)
|
|
AC_SUBST(MCA_rds_STATIC_LTLIBS)
|
|
|
|
AC_SUBST(MCA_rmaps_ALL_SUBDIRS)
|
|
AC_SUBST(MCA_rmaps_STATIC_SUBDIRS)
|
|
AC_SUBST(MCA_rmaps_DSO_SUBDIRS)
|
|
AC_SUBST(MCA_rmaps_STATIC_LTLIBS)
|
|
|
|
AC_SUBST(MCA_rmgr_ALL_SUBDIRS)
|
|
AC_SUBST(MCA_rmgr_STATIC_SUBDIRS)
|
|
AC_SUBST(MCA_rmgr_DSO_SUBDIRS)
|
|
AC_SUBST(MCA_rmgr_STATIC_LTLIBS)
|
|
|
|
AC_SUBST(MCA_pls_ALL_SUBDIRS)
|
|
AC_SUBST(MCA_pls_STATIC_SUBDIRS)
|
|
AC_SUBST(MCA_pls_DSO_SUBDIRS)
|
|
AC_SUBST(MCA_pls_STATIC_LTLIBS)
|
|
|
|
AC_SUBST(MCA_rml_ALL_SUBDIRS)
|
|
AC_SUBST(MCA_rml_STATIC_SUBDIRS)
|
|
AC_SUBST(MCA_rml_DSO_SUBDIRS)
|
|
AC_SUBST(MCA_rml_STATIC_LTLIBS)
|
|
|
|
AC_SUBST(MCA_soh_ALL_SUBDIRS)
|
|
AC_SUBST(MCA_soh_STATIC_SUBDIRS)
|
|
AC_SUBST(MCA_soh_DSO_SUBDIRS)
|
|
AC_SUBST(MCA_soh_STATIC_LTLIBS)
|
|
|
|
AC_SUBST(MCA_svc_ALL_SUBDIRS)
|
|
AC_SUBST(MCA_svc_STATIC_SUBDIRS)
|
|
AC_SUBST(MCA_svc_DSO_SUBDIRS)
|
|
AC_SUBST(MCA_svc_STATIC_LTLIBS)
|
|
|
|
# MPI types
|
|
|
|
AC_SUBST(MCA_allocator_ALL_SUBDIRS)
|
|
AC_SUBST(MCA_allocator_STATIC_SUBDIRS)
|
|
AC_SUBST(MCA_allocator_DSO_SUBDIRS)
|
|
AC_SUBST(MCA_allocator_STATIC_LTLIBS)
|
|
|
|
AC_SUBST(MCA_coll_ALL_SUBDIRS)
|
|
AC_SUBST(MCA_coll_STATIC_SUBDIRS)
|
|
AC_SUBST(MCA_coll_DSO_SUBDIRS)
|
|
AC_SUBST(MCA_coll_STATIC_LTLIBS)
|
|
|
|
AC_SUBST(MCA_io_ALL_SUBDIRS)
|
|
AC_SUBST(MCA_io_STATIC_SUBDIRS)
|
|
AC_SUBST(MCA_io_DSO_SUBDIRS)
|
|
AC_SUBST(MCA_io_STATIC_LTLIBS)
|
|
|
|
AC_SUBST(MCA_iof_ALL_SUBDIRS)
|
|
AC_SUBST(MCA_iof_STATIC_SUBDIRS)
|
|
AC_SUBST(MCA_iof_DSO_SUBDIRS)
|
|
AC_SUBST(MCA_iof_STATIC_LTLIBS)
|
|
|
|
AC_SUBST(MCA_mpool_ALL_SUBDIRS)
|
|
AC_SUBST(MCA_mpool_STATIC_SUBDIRS)
|
|
AC_SUBST(MCA_mpool_DSO_SUBDIRS)
|
|
AC_SUBST(MCA_mpool_STATIC_LTLIBS)
|
|
|
|
AC_SUBST(MCA_pml_ALL_SUBDIRS)
|
|
AC_SUBST(MCA_pml_STATIC_SUBDIRS)
|
|
AC_SUBST(MCA_pml_DSO_SUBDIRS)
|
|
AC_SUBST(MCA_pml_STATIC_LTLIBS)
|
|
OMPI_SETUP_DIRECT_CALL(pml)
|
|
|
|
AC_SUBST(MCA_ptl_ALL_SUBDIRS)
|
|
AC_SUBST(MCA_ptl_STATIC_SUBDIRS)
|
|
AC_SUBST(MCA_ptl_DSO_SUBDIRS)
|
|
AC_SUBST(MCA_ptl_STATIC_LTLIBS)
|
|
|
|
AC_SUBST(MCA_schema_ALL_SUBDIRS)
|
|
AC_SUBST(MCA_schema_STATIC_SUBDIRS)
|
|
AC_SUBST(MCA_schema_DSO_SUBDIRS)
|
|
AC_SUBST(MCA_schema_STATIC_LTLIBS)
|
|
|
|
AC_SUBST(MCA_topo_ALL_SUBDIRS)
|
|
AC_SUBST(MCA_topo_STATIC_SUBDIRS)
|
|
AC_SUBST(MCA_topo_DSO_SUBDIRS)
|
|
AC_SUBST(MCA_topo_STATIC_LTLIBS)
|
|
|
|
# Finally, now that we've filled in all the test variables, get all
|
|
# the AM_CONDITIONALs that indicate whether to build components as shared
|
|
# or static.
|
|
|
|
# config/mca_no_configure_components.m4
|
|
MCA_AMC_NO_CONFIGURE_COMPONENTS])
|
|
|
|
dnl -----------------------------------------------------------------------
|
|
dnl -----------------------------------------------------------------------
|
|
dnl -----------------------------------------------------------------------
|
|
|
|
AC_DEFUN([MCA_PROCESS_COMPONENT],[
|
|
FOUND=$1
|
|
HAPPY=$2
|
|
type=$3
|
|
m=$4
|
|
|
|
# See if it dropped an output file for us to pick up some
|
|
# shell variables in.
|
|
|
|
infile="src/mca/$type/$m/post_configure.sh"
|
|
|
|
# Did we find a valid component, and did its configure run
|
|
# successfully?
|
|
|
|
if test "$HAPPY" = "1"; then
|
|
|
|
# Add this subdir to the mast list of all MCA component subdirs
|
|
|
|
echo $m >> $outfile.all
|
|
|
|
# Is this component going to built staic or shared?
|
|
|
|
str="SHARED_TYPE=\$DSO_$type"
|
|
eval $str
|
|
str="SHARED_GENERIC_TYPE=\$DSO_$generic_type"
|
|
eval $str
|
|
str="SHARED_COMPONENT=\$DSO_${type}_$m"
|
|
eval $str
|
|
|
|
|
|
str="STATIC_TYPE=\$STATIC_$type"
|
|
eval $str
|
|
str="STATIC_GENERIC_TYPE=\$STATIC_$generic_type"
|
|
eval $str
|
|
str="STATIC_COMPONENT=\$STATIC_${type}_$m"
|
|
eval $str
|
|
|
|
shared_mode_override=static
|
|
|
|
# Setup for either shared or static
|
|
if test "$STATIC_TYPE" = "1" -o \
|
|
"$STATIC_GENERIC_TYPE" = "1" -o \
|
|
"$STATIC_COMPONENT" = "1" -o \
|
|
"$STATIC_all" = "1" ; then
|
|
compile_mode="static"
|
|
elif test "$shared_mode_override" = "dso" -o \
|
|
"$SHARED_TYPE" = "1" -o \
|
|
"$SHARED_GENERIC_TYPE" = "1" -o \
|
|
"$SHARED_COMPONENT" = "1" -o \
|
|
"$DSO_all" = "1"; then
|
|
compile_mode="dso"
|
|
else
|
|
compile_mode="static"
|
|
fi
|
|
|
|
if test "$compile_mode" = "dso" ; then
|
|
echo $m >> $outfile.dso
|
|
rm -f "src/dynamic-mca/$type/$m"
|
|
$LN_S "$OMPI_TOP_BUILDDIR/src/mca/$type/$m" \
|
|
"src/dynamic-mca/$type/$m"
|
|
else
|
|
static_ltlibs="mca/$type/$m/libmca_${type}_${m}.la $static_ltlibs"
|
|
echo "extern const mca_base_component_t mca_${type}_${m}_component;" >> $outfile.extern
|
|
echo " &mca_${type}_${m}_component, " >> $outfile.struct
|
|
echo $m >> $outfile.static
|
|
fi
|
|
|
|
# Output pretty results
|
|
|
|
AC_MSG_CHECKING([if MCA component $type:$m can compile])
|
|
AC_MSG_RESULT([yes])
|
|
AC_MSG_CHECKING([for MCA component $type:$m compile mode])
|
|
if test "$DIRECT_COMPONENT" = "$m" ; then
|
|
AC_MSG_RESULT([$compile_mode - direct])
|
|
else
|
|
AC_MSG_RESULT([$compile_mode])
|
|
fi
|
|
|
|
# If there's an output file, add the values to
|
|
# scope_EXTRA_flags.
|
|
|
|
if test -f $infile; then
|
|
|
|
# First check for the ABORT tag
|
|
|
|
line="`grep ABORT= $infile | cut -d= -f2-`"
|
|
if test -n "$line" -a "$line" != "no"; then
|
|
AC_MSG_WARN([MCA component configure script told me to abort])
|
|
AC_MSG_ERROR([cannot continue])
|
|
fi
|
|
|
|
# If we're not compiling statically, then only take the
|
|
# "ALWAYS" tags (a uniq will be performed at the end -- no
|
|
# need to worry about duplicate flags here)
|
|
|
|
for flags in LDFLAGS LIBS; do
|
|
var_in="LIBMPI_ALWAYS_EXTRA_${flags}"
|
|
var_out="LIBMPI_EXTRA_${flags}"
|
|
line="`grep $var_in= $infile | cut -d= -f2-`"
|
|
eval "line=$line"
|
|
if test -n "$line"; then
|
|
str="$var_out="'"$'"$var_out $var_in $line"'"'
|
|
eval $str
|
|
fi
|
|
done
|
|
|
|
for flags in CFLAGS CXXFLAGS FFLAGS FCFLAGS LDFLAGS LIBS; do
|
|
var_in="WRAPPER_ALWAYS_EXTRA_${flags}"
|
|
var_out="WRAPPER_EXTRA_${flags}"
|
|
line="`grep $var_in= $infile | cut -d= -f2-`"
|
|
eval "line=$line"
|
|
if test -n "$line"; then
|
|
str="$var_out="'"$'"$var_out $var_in $line"'"'
|
|
eval $str
|
|
fi
|
|
done
|
|
|
|
# Check for flags passed up from the component. If we're
|
|
# compiling statically, then take all flags passed up from the
|
|
# component.
|
|
|
|
if test "$compile_mode" = "static"; then
|
|
for flags in LDFLAGS LIBS; do
|
|
var="LIBMPI_EXTRA_${flags}"
|
|
line="`grep $var= $infile | cut -d= -f2-`"
|
|
eval "line=$line"
|
|
if test -n "$line"; then
|
|
str="$var="'"$'"$var $line"'"'
|
|
eval $str
|
|
fi
|
|
done
|
|
|
|
for flags in CFLAGS CXXFLAGS FFLAGS FCFLAGS LDFLAGS LIBS; do
|
|
var="WRAPPER_EXTRA_${flags}"
|
|
line="`grep $var= $infile | cut -d= -f2-`"
|
|
eval "line=$line"
|
|
if test -n "$line"; then
|
|
str="$var="'"$'"$var $line"'"'
|
|
eval $str
|
|
fi
|
|
done
|
|
fi
|
|
dnl check for direct call header to include. This will be
|
|
dnl AC_SUBSTed later.
|
|
if test "$DIRECT_COMPONENT" = "$m" ; then
|
|
if test "`grep DIRECT_CALL_HEADER $infile`" != "" ; then
|
|
line="`grep DIRECT_CALL_HEADER $infile | cut -d= -f2-`"
|
|
str="MCA_${type}_DIRECT_CALL_HEADER=\\\"$line\\\""
|
|
eval $str
|
|
else
|
|
AC_MSG_ERROR([*** ${type} component ${m} was supposed to be direct-called, but
|
|
*** does not appear to support direct calling.
|
|
*** Aborting])
|
|
fi
|
|
fi
|
|
else
|
|
# were we supposed to have found something in the
|
|
# post_configure.sh, but the file didn't exist?
|
|
if test "$DIRECT_COMPONENT" = "$m" ; then
|
|
AC_MSG_ERROR([*** ${type} component ${m} was supposed to be direct-called, but
|
|
*** does not appear to support direct calling.
|
|
*** Aborting])
|
|
fi
|
|
fi
|
|
elif test "$FOUND" = "1"; then
|
|
AC_MSG_CHECKING([if MCA component $type:$m can compile])
|
|
AC_MSG_RESULT([no])
|
|
|
|
# If this component was requested as the default for this
|
|
# type, then abort.
|
|
|
|
str="foo="'"$'"with_$type"'"'
|
|
eval $str
|
|
str="bar="'"$'"with_$generic_type"'"'
|
|
eval $str
|
|
if test "$foo" = "$m" -o "$bar" = "$m"; then
|
|
AC_MSG_WARN([MCA component "$m" failed to configure properly])
|
|
AC_MSG_WARN([This component was selected as the default])
|
|
AC_MSG_ERROR([Cannot continue])
|
|
exit 1
|
|
fi
|
|
fi
|
|
])
|
|
|
|
|
|
AC_DEFUN([OMPI_SETUP_DIRECT_CALL],[
|
|
AC_SUBST(MCA_$1_DIRECT_CALL_HEADER)
|
|
AC_DEFINE_UNQUOTED([MCA_$1_DIRECT_CALL], [$MCA_$1_DIRECT_CALL],
|
|
[Defined to 1 if $1 should use direct calls instead of components])
|
|
AC_DEFINE_UNQUOTED([MCA_$1_DIRECT_CALL_COMPONENT], [$MCA_$1_DIRECT_CALL_COMPONENT],
|
|
[name of component to use for direct calls, if MCA_$1_DIRECT_CALL is 1])
|
|
OMPI_WRITE_DIRECT_CALL_HEADER($1)
|
|
])
|
|
|
|
|
|
AC_DEFUN([OMPI_WRITE_DIRECT_CALL_HEADER],[
|
|
AC_CONFIG_FILES(src/mca/$1/$1_direct_call.h.template)
|
|
AC_CONFIG_COMMANDS($1-direct,
|
|
[if test -f "src/mca/$1/$1_direct_call"; then
|
|
diff "src/mca/$1/$1_direct_call.h" "src/mca/$1/$1_direct_call.h.template" > /dev/null 2>&1
|
|
if test "$?" != "0"; then
|
|
cp "src/mca/$1/$1_direct_call.h.template" "src/mca/$1/$1_direct_call.h"
|
|
echo "config.status: regenerating src/mca/$1/$1_direct_call.h"
|
|
else
|
|
echo "config.state: src/mca/$1/$1_direct_call.h unchanged"
|
|
fi
|
|
else
|
|
cp "src/mca/$1/$1_direct_call.h.template" "src/mca/$1/$1_direct_call.h"
|
|
echo "config.status: creating src/mca/$1/$1_direct_call.h"
|
|
fi
|
|
rm src/mca/$1/$1_direct_call.h.template])
|
|
])
|