2 # LN_CONFIG_MAX_PAYLOAD
4 # configure maximum payload
6 AC_DEFUN([LN_CONFIG_MAX_PAYLOAD], [
7 AC_MSG_CHECKING([for non-default maximum LNET payload])
8 AC_ARG_WITH([max-payload-mb],
9 AC_HELP_STRING([--with-max-payload-mb=MBytes],
10 [set maximum lnet payload in MBytes]),
12 AC_MSG_RESULT([$with_max_payload_mb])
13 CONFIG_LNET_MAX_PAYLOAD_MB=$with_max_payload_mb
14 CONFIG_LNET_MAX_PAYLOAD="(($with_max_payload_mb)<<20)"
17 CONFIG_LNET_MAX_PAYLOAD="LNET_MTU"
19 AC_DEFINE_UNQUOTED(CONFIG_LNET_MAX_PAYLOAD, $CONFIG_LNET_MAX_PAYLOAD,
21 ]) # LN_CONFIG_MAX_PAYLOAD
24 # LN_CHECK_GCC_VERSION
26 # Check compiler version
28 AC_DEFUN([LN_CHECK_GCC_VERSION], [
29 AC_MSG_CHECKING([compiler version])
30 PTL_CC_VERSION=`$CC --version | awk '/^gcc/{print $ 3}'`
31 PTL_MIN_CC_VERSION="3.2.2"
33 awk -F. '{printf "%d\n", (($ 1)*100+($ 2))*100+($ 3)}'
35 if test -z "$PTL_CC_VERSION" -o \
36 $(echo $PTL_CC_VERSION | v2n) -ge $(echo $PTL_MIN_CC_VERSION | v2n); then
39 AC_MSG_RESULT([Buggy compiler found])
40 AC_MSG_ERROR([Need gcc version >= $PTL_MIN_CC_VERSION])
42 ]) # LN_CHECK_GCC_VERSION
45 # LN_FUNC_DEV_GET_BY_NAME_2ARG
47 AC_DEFUN([LN_FUNC_DEV_GET_BY_NAME_2ARG], [
48 LB_CHECK_COMPILE([if 'dev_get_by_name' has two args],
49 dev_get_by_name_2args, [
50 #include <linux/netdevice.h>
52 dev_get_by_name(NULL, NULL);
54 AC_DEFINE(HAVE_DEV_GET_BY_NAME_2ARG, 1,
55 [dev_get_by_name has 2 args])
57 ]) # LN_FUNC_DEV_GET_BY_NAME_2ARG
62 # check if cpu affinity is available/wanted
64 AC_DEFUN([LN_CONFIG_AFFINITY], [
65 AC_MSG_CHECKING([whether to enable CPU affinity support])
66 AC_ARG_ENABLE([affinity],
67 AC_HELP_STRING([--disable-affinity],
68 [disable process/irq affinity]),
69 [], [enable_affinity="yes"])
70 AC_MSG_RESULT([$enable_affinity])
71 AS_IF([test "x$enable_affinity" = xyes], [
72 LB_CHECK_COMPILE([if Linux kernel has cpu affinity support],
73 set_cpus_allowed_ptr, [
74 #include <linux/sched.h>
76 struct task_struct *t;
82 set_cpus_allowed_ptr(t, &m);
84 AC_DEFINE(CPU_AFFINITY, 1,
85 [kernel has cpu affinity support])
88 ]) # LN_CONFIG_AFFINITY
93 # check if tunable tcp backoff is available/wanted
95 AC_DEFUN([LN_CONFIG_BACKOFF], [
96 AC_MSG_CHECKING([whether to enable tunable backoff TCP support])
97 AC_ARG_ENABLE([backoff],
98 AC_HELP_STRING([--disable-backoff],
99 [disable socknal tunable backoff]),
100 [], [enable_backoff="yes"])
101 AC_MSG_RESULT([$enable_backoff])
102 AS_IF([test "x$enable_backoff" = xyes], [
103 AC_MSG_CHECKING([if Linux kernel has tunable backoff TCP support])
104 AS_IF([grep -c TCP_BACKOFF $LINUX/include/linux/tcp.h >/dev/null], [
106 AC_DEFINE(SOCKNAL_BACKOFF, 1, [use tunable backoff TCP])
107 AS_IF([grep rto_max $LINUX/include/linux/tcp.h | grep -q __u16 >/dev/null],
108 [AC_DEFINE(SOCKNAL_BACKOFF_MS, 1,
109 [tunable backoff TCP in ms])])
114 ]) # LN_CONFIG_BACKOFF
119 # Configure dlc if enabled
121 # if libyaml is set (IE libyaml installed) and enable_dlc = yes then build
122 # dlc other wise (IE if libyaml is not set or enable_dlc = no) then don't
125 AC_DEFUN([LN_CONFIG_DLC], [
126 AC_CHECK_LIB([yaml], [yaml_parser_initialize],[
129 AC_MSG_CHECKING([whether to enable dlc])
131 AC_HELP_STRING([--disable-dlc],
132 [disable building dlc]),
133 [], [enable_dlc="yes"])
135 AS_IF([test "x$enable_dlc" = xyes],
136 [AS_IF([test "x$LIBYAML" = xlibyaml], [
140 AC_MSG_RESULT([no (libyaml not present)])
151 AC_DEFUN([LN_CONFIG_O2IB], [
152 AC_MSG_CHECKING([whether to use Compat RDMA])
154 AC_HELP_STRING([--with-o2ib=path],
155 [build o2iblnd against path]),
158 yes) O2IBPATHS="$LINUX $LINUX/drivers/infiniband"
163 *) O2IBPATHS=$with_o2ib
168 O2IBPATHS="$LINUX $LINUX/drivers/infiniband"
171 AS_IF([test $ENABLEO2IB -eq 0], [
175 for O2IBPATH in $O2IBPATHS; do
176 AS_IF([test \( -f ${O2IBPATH}/include/rdma/rdma_cm.h -a \
177 -f ${O2IBPATH}/include/rdma/ib_cm.h -a \
178 -f ${O2IBPATH}/include/rdma/ib_verbs.h -a \
179 -f ${O2IBPATH}/include/rdma/ib_fmr_pool.h \)], [
180 AS_IF([test \( -d ${O2IBPATH}/kernel_patches -a \
181 -f ${O2IBPATH}/Makefile \)], [
185 you appear to be trying to use the OFED distribution's source
186 directory (${O2IBPATH}) rather than the "development/headers"
187 directory which is likely in ${O2IBPATH%-*}
194 if ! $o2ib_found; then
198 2) AC_MSG_ERROR([kernel OpenIB gen2 headers not present]) ;;
199 3) AC_MSG_ERROR([bad --with-o2ib path]) ;;
200 *) AC_MSG_ERROR([internal error]) ;;
203 compatrdma_found=false
204 if test -f ${O2IBPATH}/include/linux/compat-2.6.h; then
206 compatrdma_found=true
207 AC_DEFINE(HAVE_COMPAT_RDMA, 1, [compat rdma found])
211 if ! $compatrdma_found; then
212 if test -f "$O2IBPATH/config.mk"; then
213 . "$O2IBPATH/config.mk"
214 elif test -f "$O2IBPATH/ofed_patch.mk"; then
215 . "$O2IBPATH/ofed_patch.mk"
218 if test "x$RHEL_KERNEL" = xyes; then
219 case "$RHEL_RELEASE_NO" in
221 EXTRA_OFED_INCLUDE="$EXTRA_OFED_INCLUDE -DCONFIG_COMPAT_RHEL_6_4" ;;
223 EXTRA_OFED_INCLUDE="$EXTRA_OFED_INCLUDE -DCONFIG_COMPAT_RHEL_6_4 -DCONFIG_COMPAT_RHEL_6_5" ;;
225 elif test "x$SUSE_KERNEL" = xyes; then
226 SP=$(grep PATCHLEVEL /etc/SuSE-release | sed -e 's/.*= *//')
227 EXTRA_OFED_INCLUDE="$EXTRA_OFED_INCLUDE -DCONFIG_COMPAT_SLES_11_$SP"
230 AC_MSG_CHECKING([whether to use any OFED backport headers])
231 if test -n "$BACKPORT_INCLUDES"; then
233 OFED_BACKPORT_PATH="$O2IBPATH/${BACKPORT_INCLUDES/*\/kernel_addons/kernel_addons}/"
234 EXTRA_OFED_INCLUDE="-I$OFED_BACKPORT_PATH $EXTRA_OFED_INCLUDE"
240 O2IBPATH=$(readlink --canonicalize $O2IBPATH)
241 EXTRA_OFED_INCLUDE="$EXTRA_OFED_INCLUDE -I$O2IBPATH/include"
242 LB_CHECK_COMPILE([whether to enable OpenIB gen2 support],
243 openib_gen2_support, [
244 #include <linux/version.h>
245 #include <linux/pci.h>
246 #include <linux/gfp.h>
247 #ifdef HAVE_COMPAT_RDMA
248 #include <linux/compat-2.6.h>
250 #include <rdma/rdma_cm.h>
251 #include <rdma/ib_cm.h>
252 #include <rdma/ib_verbs.h>
253 #include <rdma/ib_fmr_pool.h>
255 struct rdma_cm_id *cm_idi __attribute__ ((unused));
256 struct rdma_conn_param conn_param __attribute__ ((unused));
257 struct ib_device_attr device_attr __attribute__ ((unused));
258 struct ib_qp_attr qp_attr __attribute__ ((unused));
259 struct ib_pool_fmr pool_fmr __attribute__ ((unused));
260 enum ib_cm_rej_reason rej_reason __attribute__ ((unused));
261 rdma_destroy_id(NULL);
267 2) AC_MSG_ERROR([can't compile with kernel OpenIB gen2 headers]) ;;
268 3) AC_MSG_ERROR([can't compile with OpenIB gen2 headers under $O2IBPATH]) ;;
269 *) AC_MSG_ERROR([internal error]) ;;
272 # we know at this point that the found OFED source is good
274 if test $ENABLEO2IB -eq 3 ; then
275 # OFED default rpm not handle sles10 Modules.symvers name
276 for name in Module.symvers Modules.symvers; do
277 if test -f $O2IBPATH/$name; then
282 if test -n "$O2IB_SYMVER"; then
283 AC_MSG_NOTICE([adding $O2IBPATH/$O2IB_SYMVER to $PWD/$SYMVERFILE])
284 # strip out the existing symbols versions first
285 if test -f $PWD/$SYMVERFILE; then
286 egrep -v $(echo $(awk '{ print $2 }' $O2IBPATH/$O2IB_SYMVER) | tr ' ' '|') $PWD/$SYMVERFILE > $PWD/$SYMVERFILE.old
288 touch $PWD/$SYMVERFILE.old
290 cat $PWD/$SYMVERFILE.old $O2IBPATH/$O2IB_SYMVER > $PWD/$SYMVERFILE
291 rm $PWD/$SYMVERFILE.old
293 AC_MSG_ERROR([an external source tree was specified for o2iblnd however I could not find a $O2IBPATH/Module.symvers there])
300 AC_SUBST(EXTRA_OFED_INCLUDE)
303 # In RHEL 6.2, rdma_create_id() takes the queue-pair type as a fourth argument
304 AS_IF([test $ENABLEO2IB -ne 0], [
305 LB_CHECK_COMPILE([if 'rdma_create_id' wants four args],
306 rdma_create_id_4args, [
307 #ifdef HAVE_COMPAT_RDMA
308 #include <linux/compat-2.6.h>
310 #include <rdma/rdma_cm.h>
312 rdma_create_id(NULL, NULL, 0, 0);
314 AC_DEFINE(HAVE_RDMA_CREATE_ID_4ARG, 1,
315 [rdma_create_id wants 4 args])
323 # check whether to use the Gemini Network Interface lnd
325 AC_DEFUN([LN_CONFIG_GNILND], [
326 AC_MSG_CHECKING([whether to enable GNI lnd])
328 AC_HELP_STRING([--enable-gni],
330 [], [enable_gni="no"])
331 AC_MSG_RESULT([$enable_gni])
333 AS_IF([test "x$enable_gni" = xyes], [
334 # GNICPPFLAGS was set in spec file
335 EXTRA_KCFLAGS_save="$EXTRA_KCFLAGS"
336 EXTRA_KCFLAGS="$EXTRA_KCFLAGS $GNICPPFLAGS"
337 LB_CHECK_COMPILE([if GNI kernel headers are present],
339 #include <linux/types.h>
342 gni_cdm_handle_t kgni_domain;
345 rc = gni_cdm_create(0, 1, 1, 0, &kgni_domain);
346 rrc = (rc == GNI_RC_SUCCESS) ? 0 : 1;
351 AC_MSG_ERROR([can't compile gnilnd with given GNICPPFLAGS: $GNICPPFLAGS])
353 # at this point, we have gnilnd basic support,
354 # now check for extra features
355 LB_CHECK_COMPILE([to use RCA in gnilnd],
357 #include <linux/types.h>
359 #include <krca_lib.h>
361 gni_cdm_handle_t kgni_domain;
363 krca_ticket_t ticket = KRCA_NULL_TICKET;
365 __u32 nid = 0, nic_addr;
366 rc = gni_cdm_create(0, 1, 1, 0, &kgni_domain);
367 rrc = (rc == GNI_RC_SUCCESS) ? 0 : 1;
368 rrc += krca_nid_to_nicaddrs(nid, 1, &nic_addr);
369 rrc += krca_register(&ticket, RCA_MAKE_SERVICE_INDEX(RCA_IO_CLASS, 9), 99, 0);
372 GNICPPFLAGS="$GNICPPFLAGS -DGNILND_USE_RCA=1"
373 GNILNDRCA="gnilndrca"
375 EXTRA_KCFLAGS="$EXTRA_KCFLAGS_save"
377 AC_SUBST(GNICPPFLAGS)
380 ]) # LN_CONFIG_GNILND
383 # LN_CONFIG_TCP_SENDPAGE
385 # 2.6.36 tcp_sendpage() first parameter is 'struct sock' instead of 'struct socket'.
387 AC_DEFUN([LN_CONFIG_TCP_SENDPAGE], [
388 tmp_flags="$EXTRA_KCFLAGS"
389 EXTRA_KCFLAGS="-Werror"
390 LB_CHECK_COMPILE([if 'tcp_sendpage' first parameter is socket],
391 tcp_sendpage_socket, [
392 #include <linux/net.h>
395 tcp_sendpage((struct socket*)0, NULL, 0, 0, 0);
397 AC_DEFINE(HAVE_TCP_SENDPAGE_USE_SOCKET, 1,
398 [tcp_sendpage use socket as first parameter])
400 EXTRA_KCFLAGS="$tmp_flags"
401 ]) # LN_CONFIG_TCP_SENDPAGE
404 # LN_CONFIG_SK_DATA_READY
406 # 2.6.36 tcp_sendpage() first parameter is 'struct sock' instead of 'struct socket'.
408 AC_DEFUN([LN_CONFIG_SK_DATA_READY], [
409 tmp_flags="$EXTRA_KCFLAGS"
410 EXTRA_KCFLAGS="-Werror"
411 LB_CHECK_COMPILE([if 'sk_data_ready' takes only one argument],
413 #include <linux/net.h>
414 #include <net/sock.h>
416 ((struct sock *)0)->sk_data_ready(NULL);
418 AC_DEFINE(HAVE_SK_DATA_READY_ONE_ARG, 1,
419 [sk_data_ready uses only one argument])
421 EXTRA_KCFLAGS="$tmp_flags"
422 ]) # LN_CONFIG_SK_DATA_READY
427 # LNet linux kernel checks
429 AC_DEFUN([LN_PROG_LINUX], [
430 AC_MSG_NOTICE([LNet kernel checks
431 ==============================================================================])
433 LN_FUNC_DEV_GET_BY_NAME_2ARG
439 LN_CONFIG_TCP_SENDPAGE
441 LN_CONFIG_SK_DATA_READY
447 # default paths for installed files
449 AC_DEFUN([LN_PATH_DEFAULTS], [
450 ]) # LN_PATH_DEFAULTS
455 # other configure checks
457 AC_DEFUN([LN_CONFIGURE], [
458 AC_MSG_NOTICE([LNet core checks
459 ==============================================================================])
461 # lnet/utils/portals.c
462 AC_CHECK_HEADERS([netdb.h netinet/tcp.h asm/types.h endian.h sys/ioctl.h])
463 AC_CHECK_FUNCS([gethostbyname socket connect])
466 AC_CHECK_HEADERS([linux/version.h])
468 # lnet/utils/wirecheck.c
469 AC_CHECK_FUNCS([strnlen])
471 # -------- Check for required packages --------------
476 # Build with readline
478 AC_MSG_CHECKING([whether to enable readline support])
479 AC_ARG_ENABLE(readline,
480 AC_HELP_STRING([--disable-readline],
481 [disable readline support]),
482 [], [enable_readline="yes"])
483 AC_MSG_RESULT([$enable_readline])
485 # -------- check for readline if enabled ----
488 AS_IF([test "x$enable_readline" = xyes], [
489 AC_CHECK_LIB([readline], [readline], [
490 LIBREADLINE="-lreadline"
491 AC_DEFINE(HAVE_LIBREADLINE, 1,
492 [readline library is available])])
494 AC_SUBST(LIBREADLINE)
496 # -------- enable acceptor libwrap (TCP wrappers) support? -------
498 AC_MSG_CHECKING([if libwrap support is requested])
499 AC_ARG_ENABLE([libwrap],
500 AC_HELP_STRING([--enable-libwrap], [use TCP wrappers]),
501 [case "${enableval}" in
502 yes) enable_libwrap="yes" ;;
503 no) enable_libwrap="no" ;;
504 *) AC_MSG_ERROR(bad value ${enableval} for --enable-libwrap) ;;
505 esac], [enable_libwrap="no"])
506 AC_MSG_RESULT([$enable_libwrap])
508 AS_IF([test "x$enable_libwrap" = xyes], [
510 AC_DEFINE(HAVE_LIBWRAP, 1,
511 [libwrap support is requested])
515 LN_CONFIG_MAX_PAYLOAD
522 # AM_CONDITOINAL defines for lnet
524 AC_DEFUN([LN_CONDITIONALS], [
525 AM_CONDITIONAL(BUILD_O2IBLND, test x$O2IBLND = "xo2iblnd")
526 AM_CONDITIONAL(BUILD_GNILND, test x$GNILND = "xgnilnd")
527 AM_CONDITIONAL(BUILD_GNILND_RCA, test x$GNILNDRCA = "xgnilndrca")
528 AM_CONDITIONAL(BUILD_DLC, test x$USE_DLC = "xyes")
534 # files that should be generated with AC_OUTPUT
536 AC_DEFUN([LN_CONFIG_FILES], [
540 lnet/autoconf/Makefile
542 lnet/include/Makefile
543 lnet/include/lnet/Makefile
545 lnet/klnds/autoMakefile
546 lnet/klnds/o2iblnd/Makefile
547 lnet/klnds/o2iblnd/autoMakefile
548 lnet/klnds/gnilnd/Makefile
549 lnet/klnds/gnilnd/autoMakefile
550 lnet/klnds/socklnd/Makefile
551 lnet/klnds/socklnd/autoMakefile
553 lnet/lnet/autoMakefile
554 lnet/selftest/Makefile
555 lnet/selftest/autoMakefile
557 lnet/utils/lnetconfig/Makefile