Whamcloud - gitweb
c840f4a77b0a8c4c5f6318c139083d17b3cf2601
[fs/lustre-release.git] / lnet / autoconf / lustre-lnet.m4
1 #
2 # LP_CONFIG_ZEROCOPY
3 #
4 # check if zerocopy is available/wanted
5 #
6 AC_DEFUN([LP_CONFIG_ZEROCOPY],
7 [AC_MSG_CHECKING([for zero-copy TCP support])
8 AC_ARG_ENABLE([zerocopy],
9         AC_HELP_STRING([--disable-zerocopy],
10                        [disable socknal zerocopy]),
11         [],[enable_zerocopy='yes'])
12 if test x$enable_zerocopy = xno ; then
13         AC_MSG_RESULT([no (by request)])
14 else
15         ZCCD="`grep -c zccd $LINUX/include/linux/skbuff.h`"
16         if test "$ZCCD" != 0 ; then
17                 AC_DEFINE(SOCKNAL_ZC, 1, [use zero-copy TCP])
18                 AC_MSG_RESULT(yes)
19         else
20                 AC_MSG_RESULT([no (no kernel support)])
21         fi
22 fi
23 ])
24
25 #
26 # LP_CONFIG_AFFINITY
27 #
28 # check if cpu affinity is available/wanted
29 #
30 AC_DEFUN([LP_CONFIG_AFFINITY],
31 [AC_ARG_ENABLE([affinity],
32         AC_HELP_STRING([--disable-affinity],
33                        [disable process/irq affinity]),
34         [],[enable_affinity='yes'])
35
36 AC_MSG_CHECKING([for CPU affinity support])
37 if test x$enable_affinity = xno ; then
38         AC_MSG_RESULT([no (by request)])
39 else
40         LB_LINUX_TRY_COMPILE([
41                 #include <linux/sched.h>
42         ],[
43                 struct task_struct t;
44                 #ifdef CPU_ARRAY_SIZE
45                 cpumask_t m;
46                 #else
47                 unsigned long m;
48                 #endif
49                 set_cpus_allowed(&t, m);
50         ],[
51                 AC_DEFINE(CPU_AFFINITY, 1, [kernel has cpu affinity support])
52                 AC_MSG_RESULT([yes])
53         ],[
54                 AC_MSG_RESULT([no (no kernel support)])
55         ])
56 fi
57 ])
58
59 #
60 # LP_CONFIG_QUADRICS
61 #
62 # check if quadrics support is in this kernel
63 #
64 AC_DEFUN([LP_CONFIG_QUADRICS],
65 [AC_MSG_CHECKING([if quadrics kernel headers are present])
66 if test -d $LINUX/drivers/net/qsnet ; then
67         AC_MSG_RESULT([yes])
68         QSWNAL="qswnal"
69         AC_MSG_CHECKING([for multirail EKC])
70         if test -f $LINUX/include/elan/epcomms.h; then
71                 AC_MSG_RESULT([supported])
72                 QSWCPPFLAGS="-DMULTIRAIL_EKC=1"
73         else
74                 AC_MSG_RESULT([not supported])
75                 if test -d $LINUX/drivers/net/qsnet/include; then
76                         QSWCPPFLAGS="-I$LINUX/drivers/net/qsnet/include"
77                 else
78                         QSWCPPFLAGS="-I$LINUX/include/linux"
79                 fi
80         fi
81 else
82         AC_MSG_RESULT([no])
83         QSWNAL=""
84         QSWCPPFLAGS=""
85 fi
86 AC_SUBST(QSWCPPFLAGS)
87 AC_SUBST(QSWNAL)
88 ])
89
90 #
91 # LP_CONFIG_GM
92 #
93 # check if GM support is available
94 #
95 AC_DEFUN([LP_CONFIG_GM],
96 [AC_MSG_CHECKING([if gm support was requested])
97 AC_ARG_WITH([gm],
98         AC_HELP_STRING([--with-gm=path],
99                        [build gmnal against path]),
100         [
101                 case $with_gm in 
102                         yes)
103                                 AC_MSG_RESULT([yes])
104                                 GMCPPFLAGS="-I/usr/local/gm/include"
105                                 GMNAL="gmnal"
106                                 ;;
107                         no)
108                                 AC_MSG_RESULT([no])
109                                 GMCPPFLAGS=""
110                                 GMNAL=""
111                                 ;;
112                         *)
113                                 AC_MSG_RESULT([yes])
114                                 GMCPPFLAGS="-I$with_gm/include -I$with_gm/drivers -I$with_gm/drivers/linux/gm"
115                                 GMNAL="gmnal"
116                                 ;;
117                 esac
118         ],[
119                 AC_MSG_RESULT([no])
120                 GMCPPFLAGS=""
121                 GMNAL=""
122         ])
123 AC_SUBST(GMCPPFLAGS)
124 AC_SUBST(GMNAL)
125 ])
126
127 #
128 # LP_CONFIG_OPENIB
129 #
130 # check for OpenIB in the kernel
131 AC_DEFUN([LP_CONFIG_OPENIB],[
132 AC_MSG_CHECKING([whether to enable OpenIB support])
133 # set default
134 DFLTOPENIBCPPFLAGS="-I$LINUX/drivers/infiniband/include -DIN_TREE_BUILD"
135 AC_ARG_WITH([openib],
136         AC_HELP_STRING([--with-openib=path],
137                        [build openibnal against path]),
138         [
139                 case $with_openib in
140                 yes)    OPENIBCPPFLAGS="$DFLTOPENIBCPPFLAGS"
141                         ENABLEOPENIB=2
142                         ;;
143                 no)     ENABLEOPENIB=0
144                         ;;
145                 *)      OPENIBCPPFLAGS="-I$with_openib/include"
146                         ENABLEOPENIB=3
147                         ;;
148                 esac
149         ],[
150                 OPENIBCPPFLAGS="$DFLTOPENIBCPPFLAGS"
151                 ENABLEOPENIB=1
152         ])
153 if test $ENABLEOPENIB -eq 0; then
154         AC_MSG_RESULT([disabled])
155 else
156         EXTRA_KCFLAGS_save="$EXTRA_KCFLAGS"
157         EXTRA_KCFLAGS="$EXTRA_KCFLAGS $OPENIBCPPFLAGS"
158         LB_LINUX_TRY_COMPILE([
159                 #include <ts_ib_core.h>
160         ],[
161                 struct ib_device_properties props;
162                 return 0;
163         ],[
164                 AC_MSG_RESULT([yes])
165                 OPENIBNAL="openibnal"
166         ],[
167                 AC_MSG_RESULT([no])
168                 case $ENABLEOPENIB in
169                 1) ;;
170                 2) AC_MSG_ERROR([default openib headers not present]);;
171                 3) AC_MSG_ERROR([bad --with-openib path]);;
172                 *) AC_MSG_ERROR([internal error]);;
173                 esac
174                 OPENIBNAL=""
175                 OPENIBCPPFLAGS=""
176         ])
177         EXTRA_KCFLAGS="$EXTRA_KCFLAGS_save"
178 fi
179 AC_SUBST(OPENIBCPPFLAGS)
180 AC_SUBST(OPENIBNAL)
181 ])
182
183 #
184 # LP_CONFIG_IIB
185 #
186 # check for infinicon infiniband support
187 #
188 AC_DEFUN([LP_CONFIG_IIB],
189 [AC_MSG_CHECKING([if Infinicon IB kernel headers are present])
190 # for how the only infinicon ib build has headers in /usr/include/iba
191 IIBCPPFLAGS="-I/usr/include -DIN_TREE_BUILD"
192 EXTRA_KCFLAGS_save="$EXTRA_KCFLAGS"
193 EXTRA_KCFLAGS="$EXTRA_KCFLAGS $IIBCPPFLAGS"
194 LB_LINUX_TRY_COMPILE([
195         #include <linux/iba/ibt.h>
196 ],[
197         IBT_INTERFACE_UNION interfaces;
198         FSTATUS             rc;
199
200          rc = IbtGetInterfaceByVersion(IBT_INTERFACE_VERSION_2,
201                                        &interfaces);
202
203         return rc == FSUCCESS ? 0 : 1;
204 ],[
205         AC_MSG_RESULT([yes])
206         IIBNAL="iibnal"
207 ],[
208         AC_MSG_RESULT([no])
209         IIBNAL=""
210         IIBCPPFLAGS=""
211 ])
212 EXTRA_KCFLAGS="$EXTRA_KCFLAGS_save"
213 AC_SUBST(IIBCPPFLAGS)
214 AC_SUBST(IIBNAL)
215 ])
216
217 #
218 # LP_CONFIG_VIB
219 #
220 # check for Voltaire infiniband support
221 #
222 AC_DEFUN([LP_CONFIG_VIB],
223 [AC_MSG_CHECKING([if Voltaire IB kernel headers are present])
224 VIBCPPFLAGS="-I/usr/local/include/ibhost-kdevel -DCPU_BE=0 -DCPU_LE=1 -DGSI_PASS_PORT_NUM"
225 EXTRA_KCFLAGS_save="$EXTRA_KCFLAGS"
226 EXTRA_KCFLAGS="$EXTRA_KCFLAGS $VIBCPPFLAGS"
227 LB_LINUX_TRY_COMPILE([
228         #include <linux/list.h>
229         #include <vverbs.h>
230 ],[
231         vv_hca_h_t     kib_hca;
232         vv_return_t    retval;
233
234         retval = vv_hca_open("ANY_HCA", NULL, &kib_hca);
235
236         return retval == vv_return_ok ? 0 : 1;
237 ],[
238         AC_MSG_RESULT([yes])
239         VIBNAL="vibnal"
240 ],[
241         AC_MSG_RESULT([no])
242         VIBNAL=""
243         VIBCPPFLAGS=""
244 ])
245 EXTRA_KCFLAGS="$EXTRA_KCFLAGS_save"
246 AC_SUBST(VIBCPPFLAGS)
247 AC_SUBST(VIBNAL)
248 ])
249
250 #
251 # LP_CONFIG_RANAL
252 #
253 # check whether to use the RapidArray nal
254 #
255 AC_DEFUN([LP_CONFIG_RANAL],
256 [#### Rapid Array
257 AC_MSG_CHECKING([if RapidArray kernel headers are present])
258 # placeholder
259 RACPPFLAGS="-I/tmp"
260 EXTRA_KCFLAGS_save="$EXTRA_KCFLAGS"
261 EXTRA_KCFLAGS="$EXTRA_KCFLAGS $RACPPFLAGS"
262 LB_LINUX_TRY_COMPILE([
263         #include <linux/types.h>
264         #include <rapl.h>
265 ],[
266         RAP_RETURN          rc;
267         RAP_PVOID           dev_handle;
268
269         rc = RapkGetDeviceByIndex(0, NULL, &dev_handle);
270
271         return rc == RAP_SUCCESS ? 0 : 1;
272 ],[
273         AC_MSG_RESULT([yes])
274         RANAL="ranal"
275 ],[
276         AC_MSG_RESULT([no])
277         RANAL=""
278         RACPPFLAGS=""
279 ])
280 EXTRA_KCFLAGS="$EXTRA_KCFLAGS_save"
281 AC_SUBST(RACPPFLAGS)
282 AC_SUBST(RANAL)
283 ])
284
285 #
286 # LP_STRUCT_PAGE_LIST
287 #
288 # 2.6.4 no longer has page->list
289 #
290 AC_DEFUN([LP_STRUCT_PAGE_LIST],
291 [AC_MSG_CHECKING([if struct page has a list field])
292 LB_LINUX_TRY_COMPILE([
293         #include <linux/mm.h>
294 ],[
295         struct page page;
296         &page.list;
297 ],[
298         AC_MSG_RESULT([yes])
299         AC_DEFINE(HAVE_PAGE_LIST, 1, [struct page has a list field])
300 ],[
301         AC_MSG_RESULT([no])
302 ])
303 ])
304
305 #
306 # LP_STRUCT_SIGHAND
307 #
308 # red hat 2.4 adds sighand to struct task_struct
309 #
310 AC_DEFUN([LP_STRUCT_SIGHAND],
311 [AC_MSG_CHECKING([if task_struct has a sighand field])
312 LB_LINUX_TRY_COMPILE([
313         #include <linux/sched.h>
314 ],[
315         struct task_struct p;
316         p.sighand = NULL;
317 ],[
318         AC_DEFINE(CONFIG_RH_2_4_20, 1, [this kernel contains Red Hat 2.4.20 patches])
319         AC_MSG_RESULT([yes])
320 ],[
321         AC_MSG_RESULT([no])
322 ])
323 ])
324
325 #
326 # LP_FUNC_CPU_ONLINE
327 #
328 # cpu_online is different in rh 2.4, vanilla 2.4, and 2.6
329 #
330 AC_DEFUN([LP_FUNC_CPU_ONLINE],
331 [AC_MSG_CHECKING([if kernel defines cpu_online()])
332 LB_LINUX_TRY_COMPILE([
333         #include <linux/sched.h>
334 ],[
335         cpu_online(0);
336 ],[
337         AC_MSG_RESULT([yes])
338         AC_DEFINE(HAVE_CPU_ONLINE, 1, [cpu_online found])
339 ],[
340         AC_MSG_RESULT([no])
341 ])
342 ])
343
344 #
345 # LP_TYPE_CPUMASK_T
346 #
347 # same goes for cpumask_t
348 #
349 AC_DEFUN([LP_TYPE_CPUMASK_T],
350 [AC_MSG_CHECKING([if kernel defines cpumask_t])
351 LB_LINUX_TRY_COMPILE([
352         #include <linux/sched.h>
353 ],[
354         return sizeof (cpumask_t);
355 ],[
356         AC_MSG_RESULT([yes])
357         AC_DEFINE(HAVE_CPUMASK_T, 1, [cpumask_t found])
358 ],[
359         AC_MSG_RESULT([no])
360 ])
361 ])
362
363 #
364 # LP_FUNC_SHOW_TASK
365 #
366 # we export show_task(), but not all kernels have it (yet)
367 #
368 AC_DEFUN([LP_FUNC_SHOW_TASK],
369 [AC_MSG_CHECKING([if kernel exports show_task])
370 have_show_task=0
371 for file in ksyms sched ; do
372         if grep -q "EXPORT_SYMBOL(show_task)" \
373                  "$LINUX/kernel/$file.c" 2>/dev/null ; then
374                 have_show_task=1
375                 break
376         fi
377 done
378 if test x$have_show_task = x1 ; then
379         AC_DEFINE(HAVE_SHOW_TASK, 1, [show_task is exported])
380         AC_MSG_RESULT([yes])
381 else
382         AC_MSG_RESULT([no])
383 fi
384 ])
385
386 #
387 # LP_PROG_LINUX
388 #
389 # Portals linux kernel checks
390 #
391 AC_DEFUN([LP_PROG_LINUX],
392 [LP_CONFIG_ZEROCOPY
393 LP_CONFIG_AFFINITY
394 LP_CONFIG_QUADRICS
395 LP_CONFIG_GM
396 LP_CONFIG_OPENIB
397 LP_CONFIG_IIB
398 LP_CONFIG_VIB
399 LP_CONFIG_RANAL
400
401 LP_STRUCT_PAGE_LIST
402 LP_STRUCT_SIGHAND
403 LP_FUNC_CPU_ONLINE
404 LP_TYPE_CPUMASK_T
405 LP_FUNC_SHOW_TASK
406 ])
407
408 #
409 # LP_PATH_DEFAULTS
410 #
411 # default paths for installed files
412 #
413 AC_DEFUN([LP_PATH_DEFAULTS],
414 [
415 ])
416
417 #
418 # LP_CONFIGURE
419 #
420 # other configure checks
421 #
422 AC_DEFUN([LP_CONFIGURE],
423 [# portals/utils/portals.c
424 AC_CHECK_HEADERS([netdb.h netinet/tcp.h asm/types.h])
425 AC_CHECK_FUNCS([gethostbyname socket connect])
426
427 # portals/utils/debug.c
428 AC_CHECK_HEADERS([linux/version.h])
429
430 AC_CHECK_TYPE([spinlock_t],
431         [AC_DEFINE(HAVE_SPINLOCK_T, 1, [spinlock_t is defined])],
432         [],
433         [#include <linux/spinlock.h>])
434
435 # --------  Check for required packages  --------------
436
437 # this doesn't seem to work on older autoconf
438 # AC_CHECK_LIB(readline, readline,,)
439 AC_MSG_CHECKING([for readline support])
440 AC_ARG_ENABLE(readline,
441         AC_HELP_STRING([--disable-readline],
442                         [do not use readline library]),
443         [],[enable_readline='yes'])
444 AC_MSG_RESULT([$enable_readline]) 
445 if test x$enable_readline = xyes ; then
446         LIBREADLINE="-lreadline -lncurses"
447         AC_DEFINE(HAVE_LIBREADLINE, 1, [readline library is available])
448 else 
449         LIBREADLINE=""
450 fi
451 AC_SUBST(LIBREADLINE)
452
453 AC_MSG_CHECKING([if efence debugging support is requested])
454 AC_ARG_ENABLE(efence,
455         AC_HELP_STRING([--enable-efence],
456                         [use efence library]),
457         [],[enable_efence='no'])
458 AC_MSG_RESULT([$enable_efence])
459 if test "$enable_efence" = "yes" ; then
460         LIBEFENCE="-lefence"
461         AC_DEFINE(HAVE_LIBEFENCE, 1, [libefence support is requested])
462 else 
463         LIBEFENCE=""
464 fi
465 AC_SUBST(LIBEFENCE)
466
467 # -------- enable acceptor libwrap (TCP wrappers) support? -------
468 AC_MSG_CHECKING([if libwrap support is requested])
469 AC_ARG_ENABLE([libwrap],
470         AC_HELP_STRING([--enable-libwrap], [use TCP wrappers]),
471         [case "${enableval}" in
472                 yes) enable_libwrap=yes ;;
473                 no) enable_libwrap=no ;;
474                 *) AC_MSG_ERROR(bad value ${enableval} for --enable-libwrap) ;;
475         esac],[enable_libwrap=no])
476 AC_MSG_RESULT([$enable_libwrap])
477 if test x$enable_libwrap = xyes ; then
478         LIBWRAP="-lwrap"
479         AC_DEFINE(HAVE_LIBWRAP, 1, [libwrap support is requested])
480 else
481         LIBWRAP=""
482 fi
483 AC_SUBST(LIBWRAP)
484
485 # ----------------------------------------
486 # some tests for catamount-like systems
487 # ----------------------------------------
488 AC_ARG_ENABLE([sysio_init],
489         AC_HELP_STRING([--disable-sysio-init],
490                 [call sysio init functions when initializing liblustre]),
491         [],[enable_sysio_init=yes])
492 AC_MSG_CHECKING([whether to initialize libsysio])
493 AC_MSG_RESULT([$enable_sysio_init])
494 if test x$enable_sysio_init != xno ; then
495         AC_DEFINE([INIT_SYSIO], 1, [call sysio init functions])
496 fi
497
498 AC_ARG_ENABLE([urandom],
499         AC_HELP_STRING([--disable-urandom],
500                 [disable use of /dev/urandom for liblustre]),
501         [],[enable_urandom=yes])
502 AC_MSG_CHECKING([whether to use /dev/urandom for liblustre])
503 AC_MSG_RESULT([$enable_urandom])
504 if test x$enable_urandom != xno ; then
505         AC_DEFINE([LIBLUSTRE_USE_URANDOM], 1, [use /dev/urandom for random data])
506 fi
507
508 # -------- check for -lcap and -lpthread ----
509 if test x$enable_liblustre = xyes ; then
510         AC_CHECK_LIB([cap], [cap_get_proc],
511                 [
512                         CAP_LIBS="-lcap"
513                         AC_DEFINE([HAVE_LIBCAP], 1, [use libcap])
514                 ],
515                 [CAP_LIBS=""])
516         AC_SUBST(CAP_LIBS)
517         AC_CHECK_LIB([pthread], [pthread_create],
518                 [
519                         PTHREAD_LIBS="-lpthread"
520                         AC_DEFINE([HAVE_LIBPTHREAD], 1, [use libpthread])
521                 ],
522                 [PTHREAD_LIBS=""])
523         AC_SUBST(PTHREAD_LIBS)
524 fi
525 ])
526
527 #
528 # LP_CONDITIONALS
529 #
530 # AM_CONDITOINAL defines for portals
531 #
532 AC_DEFUN([LP_CONDITIONALS],
533 [AM_CONDITIONAL(BUILD_QSWNAL, test x$QSWNAL = "xqswnal")
534 AM_CONDITIONAL(BUILD_GMNAL, test x$GMNAL = "xgmnal")
535 AM_CONDITIONAL(BUILD_OPENIBNAL, test x$OPENIBNAL = "xopenibnal")
536 AM_CONDITIONAL(BUILD_IIBNAL, test x$IIBNAL = "xiibnal")
537 AM_CONDITIONAL(BUILD_VIBNAL, test x$VIBNAL = "xvibnal")
538 AM_CONDITIONAL(BUILD_RANAL, test x$RANAL = "xranal")
539 ])
540
541 #
542 # LP_CONFIG_FILES
543 #
544 # files that should be generated with AC_OUTPUT
545 #
546 AC_DEFUN([LP_CONFIG_FILES],
547 [AC_CONFIG_FILES([
548 portals/Kernelenv
549 portals/Makefile
550 portals/autoMakefile
551 portals/autoconf/Makefile
552 portals/doc/Makefile
553 portals/include/Makefile
554 portals/include/linux/Makefile
555 portals/include/portals/Makefile
556 portals/knals/Makefile
557 portals/knals/autoMakefile
558 portals/knals/gmnal/Makefile
559 portals/knals/gmnal/autoMakefile
560 portals/knals/openibnal/Makefile
561 portals/knals/openibnal/autoMakefile
562 portals/knals/iibnal/Makefile
563 portals/knals/iibnal/autoMakefile
564 portals/knals/vibnal/Makefile
565 portals/knals/vibnal/autoMakefile
566 portals/knals/lonal/Makefile
567 portals/knals/lonal/autoMakefile
568 portals/knals/qswnal/Makefile
569 portals/knals/qswnal/autoMakefile
570 portals/knals/ranal/Makefile
571 portals/knals/ranal/autoMakefile
572 portals/knals/socknal/Makefile
573 portals/knals/socknal/autoMakefile
574 portals/libcfs/Makefile
575 portals/libcfs/autoMakefile
576 portals/portals/Makefile
577 portals/portals/autoMakefile
578 portals/router/Makefile
579 portals/router/autoMakefile
580 portals/tests/Makefile
581 portals/tests/autoMakefile
582 portals/unals/Makefile
583 portals/utils/Makefile
584 ])
585 ])