Whamcloud - gitweb
Patch from HP to support external qsnet.
[fs/lustre-release.git] / lnet / autoconf / lustre-lnet.m4
index 41f42b5..b7581ad 100644 (file)
@@ -1,4 +1,25 @@
 #
+# LP_CHECK_GCC_VERSION
+#
+# Check compiler version
+#
+AC_DEFUN([LP_CHECK_GCC_VERSION],
+[AC_MSG_CHECKING([compiler version])
+PTL_CC_VERSION=`$CC --version | awk '/^gcc/{print $ 3}'`
+PTL_MIN_CC_VERSION="3.2.3"
+v2n() {
+       awk -F. '{printf "%d\n", (($ 1)*100+($ 2))*100+($ 3)}'
+}
+if test -z "$PTL_CC_VERSION" -o \
+        `echo $PTL_CC_VERSION | v2n` -ge `echo $PTL_MIN_CC_VERSION | v2n`; then
+       AC_MSG_RESULT([ok])
+else
+       AC_MSG_RESULT([Buggy compiler found])
+       AC_MSG_ERROR([Need gcc version >= $PTL_MIN_CC_VERSION])
+fi
+])
+
+#
 # LP_CONFIG_ZEROCOPY
 #
 # check if zerocopy is available/wanted
@@ -62,20 +83,28 @@ fi
 # check if quadrics support is in this kernel
 #
 AC_DEFUN([LP_CONFIG_QUADRICS],
-[AC_MSG_CHECKING([if quadrics kernel headers are present])
-if test -d $LINUX/drivers/net/qsnet ; then
+[AC_MSG_CHECKING([for QsNet sources])
+AC_ARG_WITH([qsnet],
+       AC_HELP_STRING([--with-qsnet=path],
+                      [set path to qsnet source (default=$LINUX)]),
+       [QSNET=$with_qsnet],
+       [QSNET=$LINUX])
+AC_MSG_RESULT([$QSNET])
+
+AC_MSG_CHECKING([if quadrics kernel headers are present])
+if test -d $QSNET/drivers/net/qsnet ; then
        AC_MSG_RESULT([yes])
        QSWNAL="qswnal"
        AC_MSG_CHECKING([for multirail EKC])
-       if test -f $LINUX/include/elan/epcomms.h; then
+       if test -f $QSNET/include/elan/epcomms.h; then
                AC_MSG_RESULT([supported])
-               QSWCPPFLAGS="-DMULTIRAIL_EKC=1"
+               QSWCPPFLAGS="-I$QSNET/include -DMULTIRAIL_EKC=1"
        else
                AC_MSG_RESULT([not supported])
-               if test -d $LINUX/drivers/net/qsnet/include; then
-                       QSWCPPFLAGS="-I$LINUX/drivers/net/qsnet/include"
+               if test -d $QSNET/drivers/net/qsnet/include; then
+                       QSWCPPFLAGS="-I$QSNET/drivers/net/qsnet/include"
                else
-                       QSWCPPFLAGS="-I$LINUX/include/linux"
+                       QSWCPPFLAGS="-I$QSNET/include/linux"
                fi
        fi
 else
@@ -90,64 +119,106 @@ AC_SUBST(QSWNAL)
 #
 # LP_CONFIG_GM
 #
-# check if infiniband support is available
+# check if GM support is available
 #
 AC_DEFUN([LP_CONFIG_GM],
-[AC_MSG_CHECKING([if gm support was requested])
-AC_ARG_WITH([gm],
-       AC_HELP_STRING([--with-gm=path],
-                      [build gmnal against path]),
-       [
-               case $with_gm in 
-                       yes)
-                               AC_MSG_RESULT([yes])
-                               GMCPPFLAGS="-I/usr/local/gm/include"
-                               GMNAL="gmnal"
-                               ;;
-                       no)
-                               AC_MSG_RESULT([no])
-                               GMCPPFLAGS=""
-                               GMNAL=""
-                               ;;
-                       *)
-                               AC_MSG_RESULT([yes])
-                               GMCPPFLAGS="-I$with_gm/include -I$with_gm/drivers -I$with_gm/drivers/linux/gm"
-                               GMNAL="gmnal"
-                               ;;
-               esac
-       ],[
-               AC_MSG_RESULT([no])
-               GMCPPFLAGS=""
-               GMNAL=""
-       ])
+[LB_ARG_LIBS_INCLUDES([Myrinet],[gm])
+if test x$gm_includes != x ; then
+       GMCPPFLAGS="-I$gm_includes"
+       if test -d "$gm/drivers" ; then
+               GMCPPFLAGS="$GMCPPFLAGS -I$gm/drivers -I$gm/drivers/linux/gm"
+       fi
+fi
 AC_SUBST(GMCPPFLAGS)
+
+if test x$gm_libs != x ; then
+       GMLIBS="-L$gm_libs"
+fi
+AC_SUBST(GMLIBS)
+
+ENABLE_GM=0
+if test x$gm != x ; then
+       GMNAL="gmnal"
+       ENABLE_GM=1
+fi
 AC_SUBST(GMNAL)
+AC_SUBST(ENABLE_GM)
 ])
 
 #
 # LP_CONFIG_OPENIB
 #
 # check for OpenIB in the kernel
-AC_DEFUN([LP_CONFIG_OPENIB],
-[AC_MSG_CHECKING([if OpenIB kernel headers are present])
-OPENIBCPPFLAGS="-I$LINUX/drivers/infiniband/include -DIN_TREE_BUILD"
-EXTRA_KCFLAGS_save="$EXTRA_KCFLAGS"
-EXTRA_KCFLAGS="$EXTRA_KCFLAGS $OPENIBCPPFLAGS"
-LB_LINUX_TRY_COMPILE(
+AC_DEFUN([LP_CONFIG_OPENIB],[
+AC_MSG_CHECKING([whether to enable OpenIB support])
+# set default
+OPENIBPATH="$LINUX/drivers/infiniband"
+AC_ARG_WITH([openib],
+       AC_HELP_STRING([--with-openib=path],
+                      [build openibnal against path]),
        [
+               case $with_openib in
+               yes)    ENABLEOPENIB=2
+                       ;;
+               no)     ENABLEOPENIB=0
+                       ;;
+               *)      OPENIBPATH="$with_openib"
+                       ENABLEOPENIB=3
+                       ;;
+               esac
+       ],[
+               ENABLEOPENIB=1
+       ])
+if test $ENABLEOPENIB -eq 0; then
+       AC_MSG_RESULT([disabled])
+elif test ! \( -f ${OPENIBPATH}/include/ts_ib_core.h -a \
+               -f ${OPENIBPATH}/include/ts_ib_cm.h -a\
+              -f ${OPENIBPATH}/include/ts_ib_sa_client.h \); then
+       AC_MSG_RESULT([no])
+       case $ENABLEOPENIB in
+       1) ;;
+       2) AC_MSG_ERROR([kernel OpenIB headers not present]);;
+       3) AC_MSG_ERROR([bad --with-openib path]);;
+       *) AC_MSG_ERROR([internal error]);;
+       esac
+else
+       case $ENABLEOPENIB in
+       1|2) OPENIBCPPFLAGS="-I$OPENIBPATH/include -DIN_TREE_BUILD";;
+       3)   OPENIBCPPFLAGS="-I$OPENIBPATH/include";;
+       *)   AC_MSG_RESULT([no])
+            AC_MSG_ERROR([internal error]);;
+       esac
+       EXTRA_KCFLAGS_save="$EXTRA_KCFLAGS"
+       EXTRA_KCFLAGS="$EXTRA_KCFLAGS $OPENIBCPPFLAGS"
+       LB_LINUX_TRY_COMPILE([
                #include <ts_ib_core.h>
+               #include <ts_ib_cm.h>
+               #include <ts_ib_sa_client.h>
        ],[
-                struct ib_device_properties props;
+                       struct ib_device_properties dev_props;
+               struct ib_cm_active_param   cm_active_params;
+               tTS_IB_CLIENT_QUERY_TID     tid;
+               int                         enum1 = IB_QP_ATTRIBUTE_STATE;
+               int                         enum2 = IB_ACCESS_LOCAL_WRITE;
+               int                         enum3 = IB_CQ_CALLBACK_INTERRUPT;
+               int                         enum4 = IB_CQ_PROVIDER_REARM;
                return 0;
        ],[
                AC_MSG_RESULT([yes])
                OPENIBNAL="openibnal"
        ],[
                AC_MSG_RESULT([no])
+               case $ENABLEOPENIB in
+               1) ;;
+               2) AC_MSG_ERROR([can't compile with kernel OpenIB headers]);;
+               3) AC_MSG_ERROR([can't compile with OpenIB headers under $OPENIBPATH]);;
+               *) AC_MSG_ERROR([internal error]);;
+               esac
                OPENIBNAL=""
                OPENIBCPPFLAGS=""
        ])
-EXTRA_KCFLAGS="$EXTRA_KCFLAGS_save"
+       EXTRA_KCFLAGS="$EXTRA_KCFLAGS_save"
+fi
 AC_SUBST(OPENIBCPPFLAGS)
 AC_SUBST(OPENIBNAL)
 ])
@@ -187,6 +258,76 @@ AC_SUBST(IIBNAL)
 ])
 
 #
+# LP_CONFIG_VIB
+#
+# check for Voltaire infiniband support
+#
+AC_DEFUN([LP_CONFIG_VIB],
+[AC_MSG_CHECKING([whether to enable Voltaire IB support])
+VIBPATH=""
+AC_ARG_WITH([vib],
+       AC_HELP_STRING([--with-vib=path],
+                      [build vibnal against path]),
+       [
+               case $with_vib in
+               no)     AC_MSG_RESULT([no]);;
+               *)      VIBPATH="${with_vib}/src/nvigor/ib-code"
+                       if test -d "$with_vib" -a -d "$VIBPATH"; then
+                               AC_MSG_RESULT([yes])
+                       else
+                               AC_MSG_RESULT([no])
+                               AC_MSG_ERROR([No directory $VIBPATH])
+                        fi;;
+               esac
+       ],[
+               AC_MSG_RESULT([no])
+       ])
+if test -z "$VIBPATH"; then
+       VIBNAL=""
+else
+       VIBCPPFLAGS="-I${VIBPATH}/include -I${VIBPATH}/cm"
+       EXTRA_KCFLAGS_save="$EXTRA_KCFLAGS"
+       EXTRA_KCFLAGS="$EXTRA_KCFLAGS $VIBCPPFLAGS"
+       LB_LINUX_TRY_COMPILE([
+               #include <linux/list.h>
+               #include <asm/byteorder.h>
+               #ifdef __BIG_ENDIAN
+               # define CPU_BE 1
+                # define CPU_LE 0
+               #endif
+               #ifdef __LITTLE_ENDIAN
+               # define CPU_BE 0
+               # define CPU_LE 1
+               #endif
+               #include <vverbs.h>
+               #include <ib-cm.h>
+               #include <ibat.h>
+       ],[
+               vv_hca_h_t       kib_hca;
+               vv_return_t      vvrc;
+               cm_cep_handle_t  cep;
+               ibat_arp_data_t  arp_data;
+               ibat_stat_t      ibatrc;
+
+               vvrc = vv_hca_open("ANY_HCA", NULL, &kib_hca);
+               cep = cm_create_cep(cm_cep_transp_rc);
+               ibatrc = ibat_get_ib_data((uint32_t)0, (uint32_t)0,
+                                          ibat_paths_primary, &arp_data,
+                                         (ibat_get_ib_data_reply_fn_t)NULL,
+                                          NULL, 0);
+               return 0;
+       ],[
+               VIBNAL="vibnal"
+       ],[
+               AC_MSG_ERROR([can't compile vibnal with given path])
+       ])
+       EXTRA_KCFLAGS="$EXTRA_KCFLAGS_save"
+fi
+AC_SUBST(VIBCPPFLAGS)
+AC_SUBST(VIBNAL)
+])
+
+#
 # LP_CONFIG_RANAL
 #
 # check whether to use the RapidArray nal
@@ -195,7 +336,7 @@ AC_DEFUN([LP_CONFIG_RANAL],
 [#### Rapid Array
 AC_MSG_CHECKING([if RapidArray kernel headers are present])
 # placeholder
-RACPPFLAGS="-I/tmp"
+RACPPFLAGS="-I${LINUX}/drivers/xd1/include"
 EXTRA_KCFLAGS_save="$EXTRA_KCFLAGS"
 EXTRA_KCFLAGS="$EXTRA_KCFLAGS $RACPPFLAGS"
 LB_LINUX_TRY_COMPILE([
@@ -328,13 +469,14 @@ fi
 # Portals linux kernel checks
 #
 AC_DEFUN([LP_PROG_LINUX],
-[LP_CONFIG_ZEROCOPY
+[LP_CHECK_GCC_VERSION
+
+LP_CONFIG_ZEROCOPY
 LP_CONFIG_AFFINITY
 LP_CONFIG_QUADRICS
 LP_CONFIG_GM
-if test $linux25 = 'no' ; then
-       LP_CONFIG_OPENIB
-fi
+LP_CONFIG_OPENIB
+LP_CONFIG_VIB
 LP_CONFIG_IIB
 LP_CONFIG_RANAL
 
@@ -346,6 +488,15 @@ LP_FUNC_SHOW_TASK
 ])
 
 #
+# LP_PROG_DARWIN
+#
+# Darwin checks
+#
+AC_DEFUN([LP_PROG_DARWIN],
+[LB_DARWIN_CHECK_FUNCS([get_preemption_level])
+])
+
+#
 # LP_PATH_DEFAULTS
 #
 # default paths for installed files
@@ -361,7 +512,7 @@ AC_DEFUN([LP_PATH_DEFAULTS],
 #
 AC_DEFUN([LP_CONFIGURE],
 [# portals/utils/portals.c
-AC_CHECK_HEADERS([netdb.h netinet/tcp.h asm/types.h])
+AC_CHECK_HEADERS([netdb.h netinet/tcp.h asm/types.h endian.h])
 AC_CHECK_FUNCS([gethostbyname socket connect])
 
 # portals/utils/debug.c
@@ -372,22 +523,20 @@ AC_CHECK_TYPE([spinlock_t],
        [],
        [#include <linux/spinlock.h>])
 
+# portals/utils/wirecheck.c
+AC_CHECK_FUNCS([strnlen])
+
 # --------  Check for required packages  --------------
 
-# this doesn't seem to work on older autoconf
-# AC_CHECK_LIB(readline, readline,,)
-AC_MSG_CHECKING([for readline support])
-AC_ARG_ENABLE(readline,
-       AC_HELP_STRING([--disable-readline],
-                       [do not use readline library]),
-       [],[enable_readline='yes'])
-AC_MSG_RESULT([$enable_readline]) 
-if test x$enable_readline = xyes ; then
+LIBS_save="$LIBS"
+LIBS="-lncurses $LIBS"
+AC_CHECK_LIB([readline],[readline],[
        LIBREADLINE="-lreadline -lncurses"
        AC_DEFINE(HAVE_LIBREADLINE, 1, [readline library is available])
-else 
+],[
        LIBREADLINE=""
-fi
+])
+LIBS="$LIBS_save"
 AC_SUBST(LIBREADLINE)
 
 AC_MSG_CHECKING([if efence debugging support is requested])
@@ -474,6 +623,7 @@ AC_DEFUN([LP_CONDITIONALS],
 AM_CONDITIONAL(BUILD_GMNAL, test x$GMNAL = "xgmnal")
 AM_CONDITIONAL(BUILD_OPENIBNAL, test x$OPENIBNAL = "xopenibnal")
 AM_CONDITIONAL(BUILD_IIBNAL, test x$IIBNAL = "xiibnal")
+AM_CONDITIONAL(BUILD_VIBNAL, test x$VIBNAL = "xvibnal")
 AM_CONDITIONAL(BUILD_RANAL, test x$RANAL = "xranal")
 ])
 
@@ -490,18 +640,22 @@ portals/autoMakefile
 portals/autoconf/Makefile
 portals/doc/Makefile
 portals/include/Makefile
-portals/include/linux/Makefile
+portals/include/libcfs/Makefile
+portals/include/libcfs/linux/Makefile
 portals/include/portals/Makefile
+portals/include/portals/linux/Makefile
 portals/knals/Makefile
 portals/knals/autoMakefile
 portals/knals/gmnal/Makefile
 portals/knals/gmnal/autoMakefile
+portals/knals/openibnal/Makefile
+portals/knals/openibnal/autoMakefile
 portals/knals/iibnal/Makefile
 portals/knals/iibnal/autoMakefile
+portals/knals/vibnal/Makefile
+portals/knals/vibnal/autoMakefile
 portals/knals/lonal/Makefile
 portals/knals/lonal/autoMakefile
-portals/knals/openibnal/Makefile
-portals/knals/openibnal/autoMakefile
 portals/knals/qswnal/Makefile
 portals/knals/qswnal/autoMakefile
 portals/knals/ranal/Makefile
@@ -510,6 +664,7 @@ portals/knals/socknal/Makefile
 portals/knals/socknal/autoMakefile
 portals/libcfs/Makefile
 portals/libcfs/autoMakefile
+portals/libcfs/linux/Makefile
 portals/portals/Makefile
 portals/portals/autoMakefile
 portals/router/Makefile
@@ -519,4 +674,13 @@ portals/tests/autoMakefile
 portals/unals/Makefile
 portals/utils/Makefile
 ])
+case $lb_target_os in
+       darwin)
+               AC_CONFIG_FILES([
+portals/include/libcfs/darwin/Makefile
+portals/include/portals/darwin/Makefile
+portals/libcfs/darwin/Makefile
+])
+               ;;
+esac
 ])