Commit 0acce8c3 authored by David Goodell's avatar David Goodell
Browse files

[svn-r2943] Delete the sshm and gasnet channels and the nemesis tcp_module. Also,

remove/update some references to the deleted code.
parent 056f23d7
......@@ -481,12 +481,6 @@ If you want to try this experimental channel, please let us know what does
and does not work. The next release will have a more robust,
ready-for-production, version of this channel.
The sshm (scalable shared memory) channel is currently not
supported. The code has been retained to provide an example of some
MPI-2 RMA optimizations (the immediate method as opposed to the
deferred method used in other channels for implementing the
synchronization in MPI-2 one-sided communication).
The Nemesis channel is a low-latency channel that uses shared memory
for intra-node communication and various networks for inter-node
communication. It currently supports TCP, GM, MX and Qsnet/Elan
......@@ -762,10 +756,7 @@ includes all of ROMIO)
Active-target one-sided communication is implemented. Passive target
one-sided communication (with MPI_Win_lock and MPI_Win_unlock) is
implemented but relies on MPI functions at the target for progress to
occur (the function could well be MPI_Win_free). The one exception is
in the sshm channel when window memory is allocated with
MPI_Alloc_mem. In this case, communication happens without any action
from the target.
occur (the function could well be MPI_Win_free).
The dynamic process management routines (MPI_Comm_spawn,
MPI_Comm_Connect, and MPI_Comm_Accept, and their relations) are
......
......@@ -24,7 +24,6 @@ The mpich2 dlls can be built to use shared memory communication, tcp socket comm
or both.
Select the ch3sockDebug or ch3sockRelease configurations to build the sockets only dlls.
Select the ch3shmDebug or ch3shmRelease configurations to build the shmem only dlls.
Select the ch3sshmDebug or ch3sshmRelease configurations to build the scalable shmem only dlls.
Select the ch3ssmDebug or ch3ssmRelease configurations to build the sockets+shmem dlls.
Select the ch3ibDebug or ch3ibRelease configurations to build the infiniband dlls.
......
......@@ -31,7 +31,7 @@
implement dynamic process support (i.e., MPI_COMM_SPAWN,
MPI_COMM_CONNECT, MPI_COMM_ACCEPT, etc.) under Unix. All other
channels will experience failures for tests exercising dynamic
process functionality. Under Windows, the sock, ssm, and sshm
process functionality. Under Windows, the sock and ssm
channels implement the dynamic process support.
- The ssm channel uses special interprocess locks (often assembly) that may
......
......@@ -201,16 +201,16 @@ In file included from sock.c:9: \
Check if you have set the envirnoment variable CPPFLAGS. If so, unset
it and use CXXFLAGS instead. Then rerun configure and make.
%% Heading: Q: When building the ssm or sshm channel, I get the \
%% Heading: Q: When building the ssm channel, I get the \
error ``mpidu\_process\_locks.h:234:2: error: \#error *** No atomic memory \
operation specified to implement busy locks ***''
%% Filename: asmlocks
%% End
The ssm and sshm channels do not work on all platforms because they
use special interprocess locks (often assembly) that may not work
with some compilers or machine architectures. They work on Linux with
The ssm channel does not work on all platforms because it
uses special interprocess locks (often assembly) that may not work
with some compilers or machine architectures. It works on Linux with
gcc, Intel, and Pathscale compilers on various Intel
architectures. They also work in Windows and Solaris environments.
architectures. It also works in Windows and Solaris environments.
%% Heading: Q: When using the Intel Fortran 90 compiler (version 9), the make \
fails with errors in compiling statement that reference \
......
......@@ -195,7 +195,7 @@ machine.
\item run ``\texttt{winconfigure.wsf --cleancode}'' to configure mpich2 for Windows and output
all the generated files like mpi.h and the fortran interface files, etc.
\item run the Developer Studio command line tool to build all the pieces of MPICH2. This
includes each of the channels - sock, ssm, shm, sshm, and the multi-threaded sock
includes each of the channels - sock, ssm, shm, and the multi-threaded sock
channel. Two versions of each channel are built, the regular release build and the rlog
profiled version. The mpi wrapper channel selector dll is built and three Fortran interfaces
are built, one for each set of common symbol types and calling conventions. mpiexec and
......@@ -387,7 +387,7 @@ The default channel uses sockets for communication. There are two channels that
shared memory. There is a channel that uses both sockets and shared memory. There is a
channel that uses Infiniband. And there is a thread-safe version of the sockets channel.
The short names for the channels are: sock, shm, sshm, ssm, mt.
The short names for the channels are: sock, shm, ssm, mt.
These channels can be selected at runtime with an environment variable: MPICH2\_CHANNEL.
The following is an example that uses the Infiniband channel instead of the default sockets
......@@ -407,7 +407,6 @@ mpiexec -channel auto -n 4 myapp.exe
The rules are:
\begin{enumerate}
\item If numprocs is less than 8 on one machine, use the shm channel
\item If numprocs is greater than 7 on one machine, use the sshm channel
\item If running on multiple machines, use the ssm channel. This channel can be changed
using winconfigure.
\end{enumerate}
......@@ -545,13 +544,13 @@ command.
\item \texttt{-channel channel\_name}
This option is only available under Windows and allows the user to select which
channel implementation of MPICH2 to select at runtime. The current channels
supported are sock, mt, ssm, shm, and sshm. These represent the sockets,
multi-threaded sockets, sockets plus shared memory, shared memory, and scalable
shared memory channels. The shared memory channels only work on one node.
The sockets, multi-threaded sockets, and sockets plus shared memory channels
work on multiple nodes. There are also profiled versions of the channels that
produce RLOG files for each process when selected. They are named p, mtp, ssmp,
shmp, and sshmp. See the section on channel selection for additional information.
supported are sock, mt, ssm, and shm. These represent the sockets,
multi-threaded sockets, sockets plus shared memory, and shared memory channels.
The shared memory channels only work on one node. The sockets, multi-threaded
sockets, and sockets plus shared memory channels work on multiple nodes. There
are also profiled versions of the channels that produce RLOG files for each
process when selected. They are named p, mtp, ssmp, and shmp. See the
section on channel selection for additional information.
\item \texttt{-configfile filename}
Use the specified job configuration file to launch the job. Each line in the
......
......@@ -208,15 +208,12 @@ case $device in
;;
ch3:nemesis)
# FIXME: Add the other directories
devsrcdirs="src/mpid/ch3/channels/nemesis/src src/mpid/ch3/src src/mpid/ch3/channels/nemesis/nemesis/net_mod/tcp_module src/mpid/ch3/channels/nemesis/nemesis/src"
devsrcdirs="src/mpid/ch3/channels/nemesis/src src/mpid/ch3/src src/mpid/ch3/channels/nemesis/nemesis/net_mod/newtcp_module src/mpid/ch3/channels/nemesis/nemesis/src"
extra_opts="$extra_opts --enable-nemesis-dbg-localoddeven"
;;
ch3|ch3:sock)
devsrcdirs="src/mpid/ch3/channels/sock/src src/mpid/ch3/src $ch3sock"
;;
ch3:sshm)
devsrcdirs="src/mpid/ch3/channels/sshm/src src/mpid/ch3/src $ch3shm"
;;
ch3:shm)
devsrcdirs="src/mpid/ch3/channels/shm/src src/mpid/ch3/src $ch3shm"
;;
......
......@@ -77,7 +77,7 @@ sub create_mpich2
# Remove packages that are not being released
debug("===> Removing packages that are not being released... ");
chdir("${root}/mpich2-${version}");
run_cmd("rm -rf src/mpid/globus doc/notes src/pm/mpd/Zeroconf.py src/mpid/ch3/channels/gasnet src/mpid/ch3/channels/sshm src/pmi/simple2");
run_cmd("rm -rf src/mpid/globus doc/notes src/pm/mpd/Zeroconf.py src/pmi/simple2");
chdir("${root}/mpich2-${version}/src/mpid/ch3/channels/nemesis/nemesis/net_mod");
my @nem_modules = qw(elan mx newgm sctp ib psm);
......
......@@ -480,7 +480,7 @@ RECURSIVE = YES
# excluded from the INPUT source files. This way you can easily exclude a
# subdirectory from a directory tree whose root is specified with the INPUT tag.
EXCLUDE = mpe2 mpid/mm mpid/rdma mpid/globus mpid/ch3/channels/ib mpid/ch3/channels/gasnet mpid/ch3/channels/sshm
EXCLUDE = mpe2 mpid/mm mpid/rdma mpid/globus mpid/ch3/channels/ib
# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
# directories that are symbolic links (a Unix filesystem feature) are excluded
......
# SUBDIRS_channel_name contains the list of all possible channel
# implementations
SUBDIRS_channel_name = shm sock ssm gasnet sshm nemesis sctp dllchan
SUBDIRS_channel_name = shm sock ssm nemesis sctp dllchan
SUBDIRS = @channel_name@ .
#EXTRA_DIRS = ../../../common/sock
SUBDIRS = src .
distclean-local:
-rm -f include/mpidi_ch3i_gasnet_conf.h
maintainer-clean-local:
-rm -f include/mpidi_ch3i_gasnet_conf.h.in
AC_PREREQ(2.59)
AC_INIT(configure.in)
dnl
dnl Set the directory that contains support scripts such as install-sh and
dnl config.guess
dnl
AC_CONFIG_AUX_DIR(../../../../../confdb)
dnl The MPICH2 top-level configure adds a bunch of flags to the
dnl user-defined CFLAGS by processing different configure command-line
dnl arguments (--enable-g, --enable-default-optimization). These updated
dnl flags are passed down as a separate flag. Here, we don't care about
dnl the user-defined flags, but rather this updated flags, so we just
dnl overwrite CFLAGS with them.
PAC_SUBCONFIG_INIT()
dnl
dnl Definitions will be placed in this file rather than in the DEFS variable
dnl
AC_CONFIG_HEADER(include/mpidi_ch3i_gasnet_conf.h)
AH_TOP([/* -*- Mode: C; c-basic-offset:4 ; -*- */
/*
* (C) 2001 by Argonne National Laboratory.
* See COPYRIGHT in top-level directory.
*/
#ifndef MPIDI_CH3I_GASNET_CONF_H_INCLUDED
#define MPIDI_CH3I_GASNET_CONF_H_INCLUDED
])
AH_BOTTOM([#endif])
echo "RUNNING CONFIGURE FOR THE GASNET CHANNEL"
dnl
dnl First check that we have a clean build if we are doing a VPATH build
PAC_VPATH_CHECK()
PAC_PROG_MAKE
dnl AC_CHECK_HEADER(net/if.h) fails on Solaris; extra header files needed
AC_TRY_COMPILE([
#include <sys/types.h>
#include <sys/socket.h>
#include <net/if.h>
],,lac_cv_header_net_if_h=yes,lac_cv_header_net_if_h=no)
echo "checking for net/if.h... $lac_cv_header_net_if_h"
if test "$lac_cv_header_net_if_h" = "yes" ; then
AC_DEFINE(HAVE_NET_IF_H, 1, [Define if you have the <net/if.h> header file.])
fi
AC_CHECK_HEADERS( \
assert.h \
netdb.h \
sys/ioctl.h \
sys/socket.h \
sys/sockio.h \
sys/types.h \
errno.h)
# netinet/in.h often requires sys/types.h first. With AC 2.57, check_headers
# does the right thing, which is to test whether the header is found
# by the compiler, but this can cause problems when the header needs
# other headers. 2.57 changes the syntax (!) of check_headers to allow
# additional headers.
AC_CACHE_CHECK([for netinet/in.h],ac_cv_header_netinet_in_h,[
AC_TRY_COMPILE([#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#include <netinet/in.h>],[int a=0;],
ac_cv_header_netinet_in_h=yes,
ac_cv_header_netinet_in_h=no)])
if test "$ac_cv_header_netinet_in_h" = yes ; then
AC_DEFINE(HAVE_NETINET_IN_H,1,[Define if netinet/in.h exists])
fi
AC_SUBST(device_name)
AC_SUBST(channel_name)
AC_SUBST(AR)
AC_SUBST(RANLIB)
AC_SUBST(MPILIBNAME)
AC_SUBST(CC)
AC_SUBST(CFLAGS)
AC_SUBST(CPPFLAGS)
PAC_CC_SUBDIR_SHLIBS
AC_SUBST(master_top_srcdir)
AC_SUBST(master_top_builddir)
dnl
dnl Dependency handling
AC_SUBST(MAKE_DEPEND_C)
dnl Place holder macro for finalization
PAC_SUBCONFIG_FINALIZE()
AC_OUTPUT(Makefile src/Makefile localdefs)
/* -*- Mode: C; c-basic-offset:4 ; -*- */
/*
* (C) 2001 by Argonne National Laboratory.
* See COPYRIGHT in top-level directory.
*/
#if !defined(MPICH_MPIDI_CH3_IMPL_H_INCLUDED)
#define MPICH_MPIDI_CH3_IMPL_H_INCLUDED
extern int MPIDI_CH3I_my_rank;
#include "mpidi_ch3i_gasnet_conf.h"
#include "mpidi_ch3_conf.h"
#include "mpidimpl.h"
#if defined(HAVE_ASSERT_H)
#include <assert.h>
#endif
extern int MPIDI_CH3I_inside_handler;
extern gasnet_token_t MPIDI_CH3I_gasnet_token;
extern int MPIDI_CH3_packet_len;
extern void *MPIDI_CH3_packet_buffer;
#define CH3_NORMAL_QUEUE 0
#define CH3_RNDV_QUEUE 1
#define CH3_NUM_QUEUES 2
extern struct MPID_Request *MPIDI_CH3I_sendq_head[CH3_NUM_QUEUES];
extern struct MPID_Request *MPIDI_CH3I_sendq_tail[CH3_NUM_QUEUES];
extern struct MPID_Request *MPIDI_CH3I_active_send[CH3_NUM_QUEUES];
#define MPIDI_CH3I_SendQ_enqueue(req, queue) \
{ \
/* MT - not thread safe! */ \
MPIDI_DBG_PRINTF((50, FCNAME, "SendQ_enqueue req=0x%08x", req->handle)); \
req->dev.next = NULL; \
if (MPIDI_CH3I_sendq_tail[queue] != NULL) \
{ \
MPIDI_CH3I_sendq_tail[queue]->dev.next = req; \
} \
else \
{ \
MPIDI_CH3I_sendq_head[queue] = req; \
} \
MPIDI_CH3I_sendq_tail[queue] = req; \
}
#define MPIDI_CH3I_SendQ_enqueue_head(req, queue) \
{ \
/* MT - not thread safe! */ \
MPIDI_DBG_PRINTF((50, FCNAME, "SendQ_enqueue_head req=0x%08x", \
req->handle)); \
req->dev.next = MPIDI_CH3I_sendq_tail[queue]; \
if (MPIDI_CH3I_sendq_tail[queue] == NULL) \
{ \
MPIDI_CH3I_sendq_tail[queue] = req; \
} \
MPIDI_CH3I_sendq_head[queue] = req; \
}
#define MPIDI_CH3I_SendQ_dequeue(queue) \
{ \
/* MT - not thread safe! */ \
MPIDI_DBG_PRINTF((50, FCNAME, "SendQ_dequeue req=0x%08x", \
MPIDI_CH3I_sendq_head[queue]->handle)); \
MPIDI_CH3I_sendq_head[queue] = MPIDI_CH3I_sendq_head[queue]->dev.next; \
if (MPIDI_CH3I_sendq_head[queue] == NULL) \
{ \
MPIDI_CH3I_sendq_tail[queue] = NULL; \
} \
}
#define MPIDI_CH3I_SendQ_head(queue) (MPIDI_CH3I_sendq_head[queue])
#define MPIDI_CH3I_SendQ_empty(queue) (MPIDI_CH3I_sendq_head[queue] == NULL)
#ifndef MPIDI_CH3_GASNET_TAKES_IOV
int gasnet_AMRequestMediumv0(gasnet_node_t dest, gasnet_handler_t handler,
struct iovec *iov, size_t n_iov);
#endif
int MPIDI_CH3I_Progress_init(void);
int MPIDI_CH3I_Progress_finalize(void);
short MPIDI_CH3I_Listener_get_port(void);
int MPIDI_CH3I_VC_post_connect(MPIDI_VC_t *);
int MPIDI_CH3I_VC_post_read(MPIDI_VC_t *, MPID_Request *);
int MPIDI_CH3I_VC_post_write(MPIDI_VC_t *, MPID_Request *);
int MPIDI_CH3I_sock_errno_to_mpi_errno(char * fcname, int sock_errno);
#endif /* !defined(MPICH_MPIDI_CH3_IMPL_H_INCLUDED) */
/* -*- Mode: C; c-basic-offset:4 ; -*- */
/*
* (C) 2001 by Argonne National Laboratory.
* See COPYRIGHT in top-level directory.
*/
#if !defined(MPICH_MPIDI_CH3_POST_H_INCLUDED)
#define MPICH_MPIDI_CH3_POST_H_INCLUDED
/* #define MPIDI_CH3_EAGER_MAX_MSG_SIZE (1500 - sizeof(MPIDI_CH3_Pkt_t)) */
#define MPIDI_CH3_EAGER_MAX_MSG_SIZE 128000
/*
* Channel level request management macros
*/
#define MPIDI_CH3_Request_add_ref(req) \
{ \
MPIU_Assert(HANDLE_GET_MPI_KIND(req->handle) == MPID_REQUEST); \
MPIR_Request_add_ref(req); \
}
#define MPIDI_CH3_Request_release_ref(req, req_ref_count) \
{ \
MPIU_Assert(HANDLE_GET_MPI_KIND(req->handle) == MPID_REQUEST); \
MPIR_Request_release_ref(req, req_ref_count); \
MPIU_Assert(req->ref_count >= 0); \
}
/*
* MPIDI_CH3_Progress_signal_completion() is used to notify the progress
* engine that a completion has occurred. The multi-threaded version will need
* to wake up any (and all) threads blocking in MPIDI_CH3_Progress().
*/
extern volatile unsigned int MPIDI_CH3I_progress_completions;
#if !defined(MPICH_IS_THREADED)
#define MPIDI_CH3_Progress_signal_completion() \
{ \
MPIDI_CH3I_progress_completions++; \
}
#else
#error Multi-threaded MPIDI_CH3_Progress_notify_completion() not implemented.
/* XXX - this routine need to wake up any threads blocking in the progress
engine */
#endif
#if !defined(MPICH_IS_THREADED)
#define MPIDI_CH3_Progress_start(state)
#define MPIDI_CH3_Progress_end(state)
#endif
enum {
MPIDI_CH3_start_packet_handler_id = 128,
MPIDI_CH3_continue_packet_handler_id = 129,
MPIDI_CH3_CTS_packet_handler_id = 130,
MPIDI_CH3_reload_IOV_or_done_handler_id = 131,
MPIDI_CH3_reload_IOV_reply_handler_id = 132
};
int MPIDI_CH3I_Progress(int blocking);
#define MPIDI_CH3_Progress_test() MPIDI_CH3I_Progress(FALSE)
#define MPIDI_CH3_Progress_wait(state) MPIDI_CH3I_Progress(TRUE)
#endif /* !defined(MPICH_MPIDI_CH3_POST_H_INCLUDED) */
/* -*- Mode: C; c-basic-offset:4 ; -*- */
/*
* (C) 2001 by Argonne National Laboratory.
* See COPYRIGHT in top-level directory.
*/
#if !defined(MPICH_MPIDI_CH3_PRE_H_INCLUDED)
#define MPICH_MPIDI_CH3_PRE_H_INCLUDED
#if ! GASNET_NDEBUG && ! GASNET_DEBUG
#define GASNET_NDEBUG 1
#endif
#define GASNET_SEQ
#include "gasnet.h"
/*#define MPID_USE_SEQUENCE_NUMBERS*/
#define HAVE_CH3_PRE_INIT
#define MPIDI_CH3_HAS_NO_DYNAMIC_PROCESS
typedef struct MPIDI_CH3I_PG
{
char *kvs_name;
}
MPIDI_CH3I_PG_t;
#define MPIDI_CH3_PG_DECL MPIDI_CH3I_PG_t ch;
typedef enum MPIDI_CH3I_VC_state
{
MPIDI_CH3I_VC_STATE_UNCONNECTED,
MPIDI_CH3I_VC_STATE_CONNECTING,
MPIDI_CH3I_VC_STATE_CONNECTED,
MPIDI_CH3I_VC_STATE_FAILED
}
MPIDI_CH3I_VC_state_t;
typedef struct MPIDI_CH3I_VC
{
int pg_rank;
int data_sz;
void * data;
struct MPID_Request *recv_active;
} MPIDI_CH3I_VC;
#define MPIDI_CH3_VC_DECL MPIDI_CH3I_VC gasnet;
typedef enum MPIDI_CH3I_RNDV_state
{
MPIDI_CH3_RNDV_NEW,
MPIDI_CH3_RNDV_CURRENT,
MPIDI_CH3_RNDV_WAIT
}
MPIDI_CH3I_RNDV_state_t;
/*
* MPIDI_CH3_REQUEST_DECL (additions to MPID_Request)
*/
#define MPIDI_CH3_REQUEST_DECL \
struct MPIDI_CH3I_Request \
{ \
MPIDI_VC_t *vc; \
/* iov_offset points to the current head element in the IOV */ \
MPIDI_CH3I_RNDV_state_t rndv_state; \
gasnet_handle_t rndv_handle; \
int remote_req_id; \
MPID_IOV remote_iov[MPID_IOV_LIMIT]; \
int iov_bytes; \
int remote_iov_bytes; \
int iov_offset; \
int remote_iov_offset; \
int remote_iov_count; \
MPIDI_CH3_Pkt_t pkt; \
} gasnet;
#if 0
#define DUMP_REQUEST(req) do { \
int i; \
MPIDI_DBG_PRINTF((55, FCNAME, "request %p\n", (req))); \
MPIDI_DBG_PRINTF((55, FCNAME, " handle = %d\n", (req)->handle)); \
MPIDI_DBG_PRINTF((55, FCNAME, " ref_count = %d\n", (req)->ref_count));\
MPIDI_DBG_PRINTF((55, FCNAME, " cc = %d\n", (req)->cc)); \
for (i = 0; i < (req)->iov_count; ++i) \
MPIDI_DBG_PRINTF((55, FCNAME, " dev.iov[%d] = (%p, %d)\n", i, \
(req)->dev.iov[i].MPID_IOV_BUF, \
(req)->dev.iov[i].MPID_IOV_LEN)); \
MPIDI_DBG_PRINTF((55, FCNAME, " dev.iov_count = %d\n", \
(req)->dev.iov_count)); \
MPIDI_DBG_PRINTF((55, FCNAME, " dev.ca = %d\n", (req)->dev.ca)); \
MPIDI_DBG_PRINTF((55, FCNAME, " dev.state = 0x%x\n", (req)->dev.state));\
MPIDI_DBG_PRINTF((55, FCNAME, " type = %d\n", \
MPIDI_Request_get_type(req))); \
MPIDI_DBG_PRINTF((55, FCNAME, " gasnet.rndv_state = %d\n", \
(req)->gasnet.rndv_state)); \
MPIDI_DBG_PRINTF((55, FCNAME, " gasnet.remote_req_id = %d\n", \
(req)->gasnet.remote_req_id)); \
} while (0)
#else
#define DUMP_REQUEST(req) do { } while (0)
#endif
#endif /* !defined(MPICH_MPIDI_CH3_PRE_H_INCLUDED) */
/* -*- Mode: C; c-basic-offset:4 ; -*- */
/*
* (C) 2001 by Argonne National Laboratory.
* See COPYRIGHT in top-level directory.
*/
#! /bin/sh
# See if there are any definitions from the sock implementation
if test -s src/mpid/common/sock/localdefs ; then
. src/mpid/common/sock/localdefs
fi
echo "RUNNING SETUP_CHANNEL FOR THE GASNET CHANNEL"
#
# NOTE: This file is sourced from the setup_device with the current working
# directory set to the top-level build directory.
#
#
# Variables of interest...
#
# $with_device - device name and arguments
# $device_name - name of the device
# $device_args - contains name of channel select plus an channel args
# $channel_name - name of the channel
# $master_top_srcdir - top-level source directory
# $master_top_builddir - top-level build directory
# $ac_configure_args - all arguments passed to configure
#
file=${master_top_srcdir}/src/mpid/${device_name}/channels/gasnet/setup_channel.args
if test -f ${file} ; then
. ${file}
else
echo "Error: ${file} not found"
exit 1
fi
pathlist=""
pathlist="$pathlist src/mpid/${device_name}/channels/${channel_name}/include"
for path in $pathlist ; do
CPPFLAGS="$CPPFLAGS -I${master_top_builddir}/${path}"
CPPFLAGS="$CPPFLAGS -I${master_top_srcdir}/${path}"
done
##
## Use the sock implementation found in the common directory
##
#file=${master_top_srcdir}/src/mpid/common/sock/setup
#if test -f $file ; then
# echo "sourcing $file"
# . $file
#fi
# include gasnet
if test -n "$gasnet_dir" ; then
CPPFLAGS="$CPPFLAGS -I${gasnet_dir}/include -I${gasnet_dir}/include/${gasnet_conduit}-conduit"
LDFLAGS="$LDFLAGS -L${gasnet_dir}/lib"
fi
if test -n "$gasnet_include_dir" ; then
CPPFLAGS="$CPPFLAGS -I${gasnet_include_dir} -I${gasnet_include_dir}/${gasnet_conduit}-conduit"
fi
if test -n "$gasnet_lib_dir" ; then
LDFLAGS="$LDFLAGS -L${gasnet_lib_dir}"
fi
LIBS="$LIBS -lgasnet-${gasnet_conduit}-seq"
case "$gasnet_conduit" in
gm )
if test -n "$gm_dir" ; then
LDFLAGS="$LDFLAGS -L${gm_dir}/lib"
CPPFLAGS="$CPPFLAGS -I${gm_dir}/include"
fi
if test -n "$gm_include_dir" ; then
CPPFLAGS="$CPPFLAGS -I${gm_include_dir}"
fi
if test -n "$gm_lib_dir" ; then
LDFLAGS="$LDFLAGS -L${gm_lib_dir}"
fi
LIBS="$LIBS -lgm"
;;
lapi )
CPPFLAGS="$CPPFLAGS -D_ALL_SOURCE"
LIBS="$LIBS -llapi_r -lpthread"
;;
"" )
echo "You must specify a gasnet conduit using --with-gasnet-conduit="
exit 1