4 # Check compiler version
6 AC_DEFUN([LP_CHECK_GCC_VERSION],
7 [AC_MSG_CHECKING([compiler version])
8 PTL_CC_VERSION=`$CC --version | awk '/^gcc/{print $ 3}'`
9 PTL_MIN_CC_VERSION="3.2.3"
11 awk -F. '{printf "%d\n", (($ 1)*100+($ 2))*100+($ 3)}'
13 if test -z "$PTL_CC_VERSION" -o \
14 `echo $PTL_CC_VERSION | v2n` -ge `echo $PTL_MIN_CC_VERSION | v2n`; then
17 AC_MSG_RESULT([Buggy compiler found])
18 AC_MSG_ERROR([Need gcc version >= $PTL_MIN_CC_VERSION])
25 # check if zerocopy is available/wanted
27 AC_DEFUN([LP_CONFIG_ZEROCOPY],
28 [AC_MSG_CHECKING([for zero-copy TCP support])
29 AC_ARG_ENABLE([zerocopy],
30 AC_HELP_STRING([--disable-zerocopy],
31 [disable socknal zerocopy]),
32 [],[enable_zerocopy='yes'])
33 if test x$enable_zerocopy = xno ; then
34 AC_MSG_RESULT([no (by request)])
36 ZCCD="`grep -c zccd $LINUX/include/linux/skbuff.h`"
37 if test "$ZCCD" != 0 ; then
38 AC_DEFINE(SOCKNAL_ZC, 1, [use zero-copy TCP])
41 AC_MSG_RESULT([no (no kernel support)])
49 # check if cpu affinity is available/wanted
51 AC_DEFUN([LP_CONFIG_AFFINITY],
52 [AC_ARG_ENABLE([affinity],
53 AC_HELP_STRING([--disable-affinity],
54 [disable process/irq affinity]),
55 [],[enable_affinity='yes'])
57 AC_MSG_CHECKING([for CPU affinity support])
58 if test x$enable_affinity = xno ; then
59 AC_MSG_RESULT([no (by request)])
61 LB_LINUX_TRY_COMPILE([
62 #include <linux/sched.h>
70 set_cpus_allowed(&t, m);
72 AC_DEFINE(CPU_AFFINITY, 1, [kernel has cpu affinity support])
75 AC_MSG_RESULT([no (no kernel support)])
83 # check if quadrics support is in this kernel
85 AC_DEFUN([LP_CONFIG_QUADRICS],
86 [AC_MSG_CHECKING([if quadrics kernel headers are present])
87 if test -d $LINUX/drivers/net/qsnet ; then
90 AC_MSG_CHECKING([for multirail EKC])
91 if test -f $LINUX/include/elan/epcomms.h; then
92 AC_MSG_RESULT([supported])
93 QSWCPPFLAGS="-DMULTIRAIL_EKC=1"
95 AC_MSG_RESULT([not supported])
96 if test -d $LINUX/drivers/net/qsnet/include; then
97 QSWCPPFLAGS="-I$LINUX/drivers/net/qsnet/include"
99 QSWCPPFLAGS="-I$LINUX/include/linux"
107 AC_SUBST(QSWCPPFLAGS)
114 # check if GM support is available
116 AC_DEFUN([LP_CONFIG_GM],
117 [LB_ARG_LIBS_INCLUDES([Myrinet],[gm])
118 if test x$gm_includes != x ; then
119 GMCPPFLAGS="-I$gm_includes"
120 if test -d "$gm/drivers" ; then
121 GMCPPFLAGS="$GMCPPFLAGS -I$gm/drivers -I$gm/drivers/linux/gm"
126 if test x$gm_libs != x ; then
132 if test x$gm != x ; then
143 # check for OpenIB in the kernel
144 AC_DEFUN([LP_CONFIG_OPENIB],[
145 AC_MSG_CHECKING([whether to enable OpenIB support])
147 OPENIBPATH="$LINUX/drivers/infiniband"
148 AC_ARG_WITH([openib],
149 AC_HELP_STRING([--with-openib=path],
150 [build openibnal against path]),
157 *) OPENIBPATH="$with_openib"
164 if test $ENABLEOPENIB -eq 0; then
165 AC_MSG_RESULT([disabled])
166 elif test ! \( -f ${OPENIBPATH}/include/ts_ib_core.h -a \
167 -f ${OPENIBPATH}/include/ts_ib_cm.h -a\
168 -f ${OPENIBPATH}/include/ts_ib_sa_client.h \); then
170 case $ENABLEOPENIB in
172 2) AC_MSG_ERROR([kernel OpenIB headers not present]);;
173 3) AC_MSG_ERROR([bad --with-openib path]);;
174 *) AC_MSG_ERROR([internal error]);;
177 case $ENABLEOPENIB in
178 1|2) OPENIBCPPFLAGS="-I$OPENIBPATH/include -DIN_TREE_BUILD";;
179 3) OPENIBCPPFLAGS="-I$OPENIBPATH/include";;
180 *) AC_MSG_RESULT([no])
181 AC_MSG_ERROR([internal error]);;
183 EXTRA_KCFLAGS_save="$EXTRA_KCFLAGS"
184 EXTRA_KCFLAGS="$EXTRA_KCFLAGS $OPENIBCPPFLAGS"
185 LB_LINUX_TRY_COMPILE([
186 #include <ts_ib_core.h>
187 #include <ts_ib_cm.h>
188 #include <ts_ib_sa_client.h>
190 struct ib_device_properties dev_props;
191 struct ib_cm_active_param cm_active_params;
192 tTS_IB_CLIENT_QUERY_TID tid;
193 int enum1 = IB_QP_ATTRIBUTE_STATE;
194 int enum2 = IB_ACCESS_LOCAL_WRITE;
195 int enum3 = IB_CQ_CALLBACK_INTERRUPT;
196 int enum4 = IB_CQ_PROVIDER_REARM;
200 OPENIBNAL="openibnal"
203 case $ENABLEOPENIB in
205 2) AC_MSG_ERROR([can't compile with kernel OpenIB headers]);;
206 3) AC_MSG_ERROR([can't compile with OpenIB headers under $OPENIBPATH]);;
207 *) AC_MSG_ERROR([internal error]);;
212 EXTRA_KCFLAGS="$EXTRA_KCFLAGS_save"
214 AC_SUBST(OPENIBCPPFLAGS)
221 # check for infinicon infiniband support
223 AC_DEFUN([LP_CONFIG_IIB],
224 [AC_MSG_CHECKING([if Infinicon IB kernel headers are present])
225 # for how the only infinicon ib build has headers in /usr/include/iba
226 IIBCPPFLAGS="-I/usr/include -DIN_TREE_BUILD"
227 EXTRA_KCFLAGS_save="$EXTRA_KCFLAGS"
228 EXTRA_KCFLAGS="$EXTRA_KCFLAGS $IIBCPPFLAGS"
229 LB_LINUX_TRY_COMPILE([
230 #include <linux/iba/ibt.h>
232 IBT_INTERFACE_UNION interfaces;
235 rc = IbtGetInterfaceByVersion(IBT_INTERFACE_VERSION_2,
238 return rc == FSUCCESS ? 0 : 1;
247 EXTRA_KCFLAGS="$EXTRA_KCFLAGS_save"
248 AC_SUBST(IIBCPPFLAGS)
255 # check for Voltaire infiniband support
257 AC_DEFUN([LP_CONFIG_VIB],
258 [AC_MSG_CHECKING([whether to enable Voltaire IB support])
261 AC_HELP_STRING([--with-vib=path],
262 [build vibnal against path]),
265 no) AC_MSG_RESULT([no]);;
266 *) VIBPATH="${with_vib}/src/nvigor/ib-code"
267 if test -d "$with_vib" -a -d "$VIBPATH"; then
271 AC_MSG_ERROR([No directory $VIBPATH])
277 if test -z "$VIBPATH"; then
280 VIBCPPFLAGS="-I${VIBPATH}/include -I${VIBPATH}/cm"
281 EXTRA_KCFLAGS_save="$EXTRA_KCFLAGS"
282 EXTRA_KCFLAGS="$EXTRA_KCFLAGS $VIBCPPFLAGS"
283 LB_LINUX_TRY_COMPILE([
284 #include <linux/list.h>
285 #include <asm/byteorder.h>
290 #ifdef __LITTLE_ENDIAN
301 ibat_arp_data_t arp_data;
304 vvrc = vv_hca_open("ANY_HCA", NULL, &kib_hca);
305 cep = cm_create_cep(cm_cep_transp_rc);
306 ibatrc = ibat_get_ib_data((uint32_t)0, (uint32_t)0,
307 ibat_paths_primary, &arp_data,
308 (ibat_get_ib_data_reply_fn_t)NULL,
314 AC_MSG_ERROR([can't compile vibnal with given path])
316 EXTRA_KCFLAGS="$EXTRA_KCFLAGS_save"
318 AC_SUBST(VIBCPPFLAGS)
325 # check whether to use the RapidArray nal
327 AC_DEFUN([LP_CONFIG_RANAL],
329 AC_MSG_CHECKING([if RapidArray kernel headers are present])
331 RACPPFLAGS="-I${LINUX}/drivers/xd1/include"
332 EXTRA_KCFLAGS_save="$EXTRA_KCFLAGS"
333 EXTRA_KCFLAGS="$EXTRA_KCFLAGS $RACPPFLAGS"
334 LB_LINUX_TRY_COMPILE([
335 #include <linux/types.h>
339 RAP_PVOID dev_handle;
341 rc = RapkGetDeviceByIndex(0, NULL, &dev_handle);
343 return rc == RAP_SUCCESS ? 0 : 1;
352 EXTRA_KCFLAGS="$EXTRA_KCFLAGS_save"
358 # LP_STRUCT_PAGE_LIST
360 # 2.6.4 no longer has page->list
362 AC_DEFUN([LP_STRUCT_PAGE_LIST],
363 [AC_MSG_CHECKING([if struct page has a list field])
364 LB_LINUX_TRY_COMPILE([
365 #include <linux/mm.h>
371 AC_DEFINE(HAVE_PAGE_LIST, 1, [struct page has a list field])
380 # red hat 2.4 adds sighand to struct task_struct
382 AC_DEFUN([LP_STRUCT_SIGHAND],
383 [AC_MSG_CHECKING([if task_struct has a sighand field])
384 LB_LINUX_TRY_COMPILE([
385 #include <linux/sched.h>
387 struct task_struct p;
390 AC_DEFINE(CONFIG_RH_2_4_20, 1, [this kernel contains Red Hat 2.4.20 patches])
400 # cpu_online is different in rh 2.4, vanilla 2.4, and 2.6
402 AC_DEFUN([LP_FUNC_CPU_ONLINE],
403 [AC_MSG_CHECKING([if kernel defines cpu_online()])
404 LB_LINUX_TRY_COMPILE([
405 #include <linux/sched.h>
410 AC_DEFINE(HAVE_CPU_ONLINE, 1, [cpu_online found])
419 # same goes for cpumask_t
421 AC_DEFUN([LP_TYPE_CPUMASK_T],
422 [AC_MSG_CHECKING([if kernel defines cpumask_t])
423 LB_LINUX_TRY_COMPILE([
424 #include <linux/sched.h>
426 return sizeof (cpumask_t);
429 AC_DEFINE(HAVE_CPUMASK_T, 1, [cpumask_t found])
438 # we export show_task(), but not all kernels have it (yet)
440 AC_DEFUN([LP_FUNC_SHOW_TASK],
441 [AC_MSG_CHECKING([if kernel exports show_task])
443 for file in ksyms sched ; do
444 if grep -q "EXPORT_SYMBOL(show_task)" \
445 "$LINUX/kernel/$file.c" 2>/dev/null ; then
450 if test x$have_show_task = x1 ; then
451 AC_DEFINE(HAVE_SHOW_TASK, 1, [show_task is exported])
461 # Portals linux kernel checks
463 AC_DEFUN([LP_PROG_LINUX],
464 [LP_CHECK_GCC_VERSION
487 AC_DEFUN([LP_PROG_DARWIN],
488 [LB_DARWIN_CHECK_FUNCS([get_preemption_level])
494 # default paths for installed files
496 AC_DEFUN([LP_PATH_DEFAULTS],
503 # other configure checks
505 AC_DEFUN([LP_CONFIGURE],
506 [# portals/utils/portals.c
507 AC_CHECK_HEADERS([netdb.h netinet/tcp.h asm/types.h endian.h])
508 AC_CHECK_FUNCS([gethostbyname socket connect])
510 # portals/utils/debug.c
511 AC_CHECK_HEADERS([linux/version.h])
513 AC_CHECK_TYPE([spinlock_t],
514 [AC_DEFINE(HAVE_SPINLOCK_T, 1, [spinlock_t is defined])],
516 [#include <linux/spinlock.h>])
518 # portals/utils/wirecheck.c
519 AC_CHECK_FUNCS([strnlen])
521 # -------- Check for required packages --------------
524 LIBS="-lncurses $LIBS"
525 AC_CHECK_LIB([readline],[readline],[
526 LIBREADLINE="-lreadline -lncurses"
527 AC_DEFINE(HAVE_LIBREADLINE, 1, [readline library is available])
532 AC_SUBST(LIBREADLINE)
534 AC_MSG_CHECKING([if efence debugging support is requested])
535 AC_ARG_ENABLE(efence,
536 AC_HELP_STRING([--enable-efence],
537 [use efence library]),
538 [],[enable_efence='no'])
539 AC_MSG_RESULT([$enable_efence])
540 if test "$enable_efence" = "yes" ; then
542 AC_DEFINE(HAVE_LIBEFENCE, 1, [libefence support is requested])
548 # -------- enable acceptor libwrap (TCP wrappers) support? -------
549 AC_MSG_CHECKING([if libwrap support is requested])
550 AC_ARG_ENABLE([libwrap],
551 AC_HELP_STRING([--enable-libwrap], [use TCP wrappers]),
552 [case "${enableval}" in
553 yes) enable_libwrap=yes ;;
554 no) enable_libwrap=no ;;
555 *) AC_MSG_ERROR(bad value ${enableval} for --enable-libwrap) ;;
556 esac],[enable_libwrap=no])
557 AC_MSG_RESULT([$enable_libwrap])
558 if test x$enable_libwrap = xyes ; then
560 AC_DEFINE(HAVE_LIBWRAP, 1, [libwrap support is requested])
566 # ----------------------------------------
567 # some tests for catamount-like systems
568 # ----------------------------------------
569 AC_ARG_ENABLE([sysio_init],
570 AC_HELP_STRING([--disable-sysio-init],
571 [call sysio init functions when initializing liblustre]),
572 [],[enable_sysio_init=yes])
573 AC_MSG_CHECKING([whether to initialize libsysio])
574 AC_MSG_RESULT([$enable_sysio_init])
575 if test x$enable_sysio_init != xno ; then
576 AC_DEFINE([INIT_SYSIO], 1, [call sysio init functions])
579 AC_ARG_ENABLE([urandom],
580 AC_HELP_STRING([--disable-urandom],
581 [disable use of /dev/urandom for liblustre]),
582 [],[enable_urandom=yes])
583 AC_MSG_CHECKING([whether to use /dev/urandom for liblustre])
584 AC_MSG_RESULT([$enable_urandom])
585 if test x$enable_urandom != xno ; then
586 AC_DEFINE([LIBLUSTRE_USE_URANDOM], 1, [use /dev/urandom for random data])
589 # -------- check for -lcap and -lpthread ----
590 if test x$enable_liblustre = xyes ; then
591 AC_CHECK_LIB([cap], [cap_get_proc],
594 AC_DEFINE([HAVE_LIBCAP], 1, [use libcap])
598 AC_CHECK_LIB([pthread], [pthread_create],
600 PTHREAD_LIBS="-lpthread"
601 AC_DEFINE([HAVE_LIBPTHREAD], 1, [use libpthread])
604 AC_SUBST(PTHREAD_LIBS)
611 # AM_CONDITOINAL defines for portals
613 AC_DEFUN([LP_CONDITIONALS],
614 [AM_CONDITIONAL(BUILD_QSWNAL, test x$QSWNAL = "xqswnal")
615 AM_CONDITIONAL(BUILD_GMNAL, test x$GMNAL = "xgmnal")
616 AM_CONDITIONAL(BUILD_OPENIBNAL, test x$OPENIBNAL = "xopenibnal")
617 AM_CONDITIONAL(BUILD_IIBNAL, test x$IIBNAL = "xiibnal")
618 AM_CONDITIONAL(BUILD_VIBNAL, test x$VIBNAL = "xvibnal")
619 AM_CONDITIONAL(BUILD_RANAL, test x$RANAL = "xranal")
625 # files that should be generated with AC_OUTPUT
627 AC_DEFUN([LP_CONFIG_FILES],
632 portals/autoconf/Makefile
634 portals/include/Makefile
635 portals/include/libcfs/Makefile
636 portals/include/libcfs/linux/Makefile
637 portals/include/portals/Makefile
638 portals/include/portals/linux/Makefile
639 portals/knals/Makefile
640 portals/knals/autoMakefile
641 portals/knals/gmnal/Makefile
642 portals/knals/gmnal/autoMakefile
643 portals/knals/openibnal/Makefile
644 portals/knals/openibnal/autoMakefile
645 portals/knals/iibnal/Makefile
646 portals/knals/iibnal/autoMakefile
647 portals/knals/vibnal/Makefile
648 portals/knals/vibnal/autoMakefile
649 portals/knals/lonal/Makefile
650 portals/knals/lonal/autoMakefile
651 portals/knals/qswnal/Makefile
652 portals/knals/qswnal/autoMakefile
653 portals/knals/ranal/Makefile
654 portals/knals/ranal/autoMakefile
655 portals/knals/socknal/Makefile
656 portals/knals/socknal/autoMakefile
657 portals/libcfs/Makefile
658 portals/libcfs/autoMakefile
659 portals/libcfs/linux/Makefile
660 portals/portals/Makefile
661 portals/portals/autoMakefile
662 portals/router/Makefile
663 portals/router/autoMakefile
664 portals/tests/Makefile
665 portals/tests/autoMakefile
666 portals/unals/Makefile
667 portals/utils/Makefile
669 case $lb_target_os in
672 portals/include/libcfs/darwin/Makefile
673 portals/include/portals/darwin/Makefile
674 portals/libcfs/darwin/Makefile