X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lnet%2Farchdep.m4;h=7d807da5e7e09d2b75a3d84cfefbe5a3a9272032;hb=3fed8a248a88129a08d2579a988249e648931582;hp=636ee1d0c4d9a9ea784130740c21e3905905a81b;hpb=37113b4cd285399154f0d8a27df7d4090cc5fee4;p=fs%2Flustre-release.git diff --git a/lnet/archdep.m4 b/lnet/archdep.m4 index 636ee1d..7d807da 100644 --- a/lnet/archdep.m4 +++ b/lnet/archdep.m4 @@ -1,7 +1,7 @@ # -------- we can't build modules unless srcdir = builddir if test x$enable_modules != xno ; then -AC_CHECK_FILE([autoMakefile.am],[], - [AC_MSG_ERROR([At this time, Lustre does not support building kernel modules with srcdir != buildir.])]) + AC_CHECK_FILE([autoMakefile.am],[], + [AC_MSG_ERROR([At this time, Lustre does not support building kernel modules with srcdir != buildir.])]) fi # -------- in kernel compilation? (2.5 only) ------------- @@ -14,24 +14,107 @@ AC_MSG_RESULT([$enable_inkernel]) AM_CONDITIONAL(INKERNEL, test x$enable_inkernel = xyes) # -------- are we building against an external portals? ------- -AC_MSG_CHECKING([if Cray portals should be used]) +AC_MSG_CHECKING([for Cray portals]) AC_ARG_WITH([cray-portals], AC_HELP_STRING([--with-cray-portals=path], [path to cray portals]), [ if test "$with_cray_portals" != no; then - if test -r $with_cray_portals/include/portals/api.h ; then - CRAY_PORTALS_INCLUDE="-I$with_cray_portals/include" - AC_DEFINE(CRAY_PORTALS, 1, [Building with Cray Portals]) - else - AC_MSG_ERROR([--with-cray-portals specified badly]) - fi + CRAY_PORTALS_PATH=$with_cray_portals + CRAY_PORTALS_INCLUDES="$with_cray_portals/include" + CRAY_PORTALS_LIBS="$with_cray_portals" fi ],[with_cray_portals=no]) -AC_MSG_RESULT([$with_cray_portals]) +AC_SUBST(CRAY_PORTALS_PATH) +AC_MSG_RESULT([$CRAY_PORTALS_PATH]) + +AC_MSG_CHECKING([for Cray portals includes]) +AC_ARG_WITH([cray-portals-includes], + AC_HELP_STRING([--with-cray-portals-includes=path], + [path to cray portals includes]), + [ + if test "$with_cray_portals_includes" != no; then + CRAY_PORTALS_INCLUDES="$with_cray_portals_includes" + fi + ]) +AC_SUBST(CRAY_PORTALS_INCLUDES) +AC_MSG_RESULT([$CRAY_PORTALS_INCLUDES]) + +AC_MSG_CHECKING([for Cray portals libs]) +AC_ARG_WITH([cray-portals-libs], + AC_HELP_STRING([--with-cray-portals-libs=path], + [path to cray portals libs]), + [ + if test "$with_cray_portals_libs" != no; then + CRAY_PORTALS_LIBS="$with_cray_portals_libs" + fi + ]) +AC_SUBST(CRAY_PORTALS_LIBS) +AC_MSG_RESULT([$CRAY_PORTALS_LIBS]) +if test x$CRAY_PORTALS_INCLUDES != x ; then + if test ! -r $CRAY_PORTALS_INCLUDES/portals/api.h ; then + AC_MSG_ERROR([Cray portals headers were not found in $CRAY_PORTALS_INCLUDES. Please check the paths passed to --with-cray-portals or --with-cray-portals-includes.]) + fi +fi +if test x$CRAY_PORTALS_LIBS != x ; then + if test ! -r $CRAY_PORTALS_LIBS/libportals.a ; then + AC_MSG_ERROR([Cray portals libraries were not found in $CRAY_PORTALS_LIBS. Please check the paths passed to --with-cray-portals or --with-cray-portals-libs.]) + fi +fi + +AC_MSG_CHECKING([whether to use Cray portals]) +if test x$CRAY_PORTALS_INCLUDES != x -a x$CRAY_PORTALS_LIBS != x ; then + with_cray_portals=yes + AC_DEFINE(CRAY_PORTALS, 1, [Building with Cray Portals]) + CRAY_PORTALS_INCLUDES="-I$CRAY_PORTALS_INCLUDES" +else + with_cray_portals=no +fi +AC_MSG_RESULT([$with_cray_portals]) AM_CONDITIONAL(CRAY_PORTALS, test x$with_cray_portals != xno) +# ---------------------------------------- +# some tests for catamount-like systems +# ---------------------------------------- +AC_ARG_ENABLE([sysio_init], + AC_HELP_STRING([--disable-sysio-init], + [call sysio init functions when initializing liblustre]), + [],[enable_sysio_init=yes]) +AC_MSG_CHECKING([whether to initialize libsysio]) +AC_MSG_RESULT([$enable_sysio_init]) +if test x$enable_sysio_init != xno ; then + AC_DEFINE([INIT_SYSIO], 1, [call sysio init functions]) +fi + +AC_ARG_ENABLE([urandom], + AC_HELP_STRING([--disable-urandom], + [disable use of /dev/urandom for liblustre]), + [],[enable_urandom=yes]) +AC_MSG_CHECKING([whether to use /dev/urandom for liblustre]) +AC_MSG_RESULT([$enable_urandom]) +if test x$enable_urandom != xno ; then + AC_DEFINE([LIBLUSTRE_USE_URANDOM], 1, [use /dev/urandom for random data]) +fi + +# -------- check for -lcap and -lpthread ---- +if test x$enable_liblustre = xyes ; then + AC_CHECK_LIB([cap], [cap_get_proc], + [ + CAP_LIBS="-lcap" + AC_DEFINE([HAVE_LIBCAP], 1, [use libcap]) + ], + [CAP_LIBS=""]) + AC_SUBST(CAP_LIBS) + AC_CHECK_LIB([pthread], [pthread_create], + [ + PTHREAD_LIBS="-lpthread" + AC_DEFINE([HAVE_LIBPTHREAD], 1, [use libpthread]) + ], + [PTHREAD_LIBS=""]) + AC_SUBST(PTHREAD_LIBS) +fi + # -------- enable tests and utils? ------- if test x$enable_tests = xno ; then AC_MSG_NOTICE([disabling tests]) @@ -42,43 +125,54 @@ if test x$enable_utils = xno ; then enable_utils=no fi -# -------- set linuxdir ------------ -AC_MSG_CHECKING([for Linux sources]) -AC_ARG_WITH([linux], - AC_HELP_STRING([--with-linux=path], - [set path to Linux source (default=/usr/src/linux)]), - [LINUX=$with_linux], - [LINUX=/usr/src/linux]) -AC_MSG_RESULT([$LINUX]) -AC_SUBST(LINUX) -if test x$enable_inkernel = xyes ; then - echo ln -s `pwd` $LINUX/fs/lustre - rm $LINUX/fs/lustre - ln -s `pwd` $LINUX/fs/lustre -fi - -# -------- check for .confg -------- -AC_ARG_WITH([linux-config], - [AC_HELP_STRING([--with-linux-config=path], - [set path to Linux .conf (default=\$LINUX/.config)])], - [LINUX_CONFIG=$with_linux_config], - [LINUX_CONFIG=$LINUX/.config]) -AC_SUBST(LINUX_CONFIG) - -AC_CHECK_FILE([/boot/kernel.h], - [KERNEL_SOURCE_HEADER='/boot/kernel.h'], - [AC_CHECK_FILE([/var/adm/running-kernel.h]), - [KERNEL_SOURCE_HEADER='/var/adm/running-kernel.h']]) - -AC_ARG_WITH([kernel-source-header], - AC_HELP_STRING([--with-kernel-source-header=path], - [Use a different kernel version header. Consult README.kernel-source for details.]), - [KERNEL_SOURCE_HEADER=$with_kernel_source_header]) - -# -------------------- -ARCH_UM= -UML_CFLAGS= if test x$enable_modules != xno ; then + # -------- set linuxdir ------------ + AC_MSG_CHECKING([for Linux sources]) + AC_ARG_WITH([linux], + AC_HELP_STRING([--with-linux=path], + [set path to Linux source (default=/usr/src/linux)]), + [LINUX=$with_linux], + [LINUX=/usr/src/linux]) + AC_MSG_RESULT([$LINUX]) + AC_SUBST(LINUX) + if test x$enable_inkernel = xyes ; then + echo ln -s `pwd` $LINUX/fs/lustre + rm $LINUX/fs/lustre + ln -s `pwd` $LINUX/fs/lustre + fi + + # -------- linux objects (for 2.6) -- + AC_MSG_CHECKING([for Linux objects dir]) + AC_ARG_WITH([linux-obj], + AC_HELP_STRING([--with-linux-obj=path], + [set path to Linux objects dir (default=\$LINUX)]), + [LINUX_OBJ=$with_linux_obj], + [LINUX_OBJ=$LINUX]) + AC_MSG_RESULT([$LINUX_OBJ]) + AC_SUBST(LINUX_OBJ) + + # -------- check for .confg -------- + AC_ARG_WITH([linux-config], + [AC_HELP_STRING([--with-linux-config=path], + [set path to Linux .conf (default=\$LINUX_OBJ/.config)])], + [LINUX_CONFIG=$with_linux_config], + [LINUX_CONFIG=$LINUX_OBJ/.config]) + AC_SUBST(LINUX_CONFIG) + + AC_CHECK_FILE([/boot/kernel.h], + [KERNEL_SOURCE_HEADER='/boot/kernel.h'], + [AC_CHECK_FILE([/var/adm/running-kernel.h]), + [KERNEL_SOURCE_HEADER='/var/adm/running-kernel.h']]) + + AC_ARG_WITH([kernel-source-header], + AC_HELP_STRING([--with-kernel-source-header=path], + [Use a different kernel version header. Consult README.kernel-source for details.]), + [KERNEL_SOURCE_HEADER=$with_kernel_source_header]) + + # -------------------- + ARCH_UM= + UML_CFLAGS= + AC_MSG_CHECKING([if you are running user mode linux for $host_cpu]) if test -e $LINUX/include/asm-um ; then if test X`ls -id $LINUX/include/asm/ | awk '{print $1}'` = X`ls -id $LINUX/include/asm-um | awk '{print $1}'` ; then @@ -92,27 +186,40 @@ if test x$enable_modules != xno ; then else AC_MSG_RESULT([no (asm-um missing)]) fi -fi -AC_SUBST(ARCH_UM) -AC_SUBST(UML_CFLAGS) -# --------- Linux 25 ------------------ -AC_CHECK_FILE([$LINUX/include/linux/namei.h], - [ - linux25="yes" - KMODEXT=".ko" - ],[ - KMODEXT=".o" - linux25="no" - ]) -AC_MSG_CHECKING([if you are using Linux 2.6]) -AC_MSG_RESULT([$linux25]) + AC_SUBST(ARCH_UM) + AC_SUBST(UML_CFLAGS) + + # --------- Linux 25 ------------------ + AC_CHECK_FILE([$LINUX/include/linux/namei.h], + [ + linux25="yes" + KMODEXT=".ko" + enable_ldiskfs="yes" + BACKINGFS="ldiskfs" + ],[ + KMODEXT=".o" + linux25="no" + ]) + AC_MSG_CHECKING([if you are using Linux 2.6]) + AC_MSG_RESULT([$linux25]) + + AC_SUBST(LINUX25) + AC_SUBST(KMODEXT) + + AC_PATH_PROG(PATCH, patch, [no]) + AC_PATH_PROG(QUILT, quilt, [no]) + + if test x$enable_ldiskfs$PATCH$QUILT = xyesnono ; then + AC_MSG_ERROR([Quilt or patch are needed to build the ldiskfs module (for Linux 2.6)]) + fi +fi AM_CONDITIONAL(LINUX25, test x$linux25 = xyes) -AC_SUBST(KMODEXT) +AM_CONDITIONAL(USE_QUILT, test x$QUILT != xno) # ------- Makeflags ------------------ -CPPFLAGS="$CRAY_PORTALS_INCLUDE $CRAY_PORTALS_COMMANDLINE -I\$(top_srcdir)/include -I\$(top_srcdir)/portals/include" +CPPFLAGS="$CPPFLAGS $CRAY_PORTALS_INCLUDES -I\$(top_srcdir)/include -I\$(top_srcdir)/portals/include" # liblustre are all the same LLCPPFLAGS="-D__arch_lib__ -D_LARGEFILE64_SOURCE=1" @@ -130,7 +237,7 @@ if test x$enable_ldiskfs = xyes ; then AC_DEFINE(CONFIG_LDISKFS_FS_SECURITY, 1, [enable fs security]) fi -EXTRA_KCFLAGS="-g $CRAY_PORTALS_INCLUDE $CRAY_PORTALS_COMMANDLINE -I$PWD/portals/include -I$PWD/include" +EXTRA_KCFLAGS="-g $CRAY_PORTALS_INCLUDES -I$PWD/portals/include -I$PWD/include" # these are like AC_TRY_COMPILE, but try to build modules against the # kernel, inside the kernel-tests directory @@ -144,7 +251,7 @@ _ACEOF AC_DEFUN([LUSTRE_MODULE_COMPILE_IFELSE], [m4_ifvaln([$1], [LUSTRE_MODULE_CONFTEST([$1])])dnl rm -f kernel-tests/conftest.o kernel-tests/conftest.mod.c kernel-tests/conftest.ko -AS_IF([AC_TRY_COMMAND(cp conftest.c kernel-tests && make [$2] -f $PWD/kernel-tests/Makefile LUSTRE_LINUX_CONFIG=$LINUX_CONFIG -o tmp_include_depends -o scripts -o include/config/MARKER -C $LINUX EXTRA_CFLAGS="$EXTRA_KCFLAGS" $ARCH_UM SUBDIRS=$PWD/kernel-tests) >/dev/null && AC_TRY_COMMAND([$3])], +AS_IF([AC_TRY_COMMAND(cp conftest.c kernel-tests && make [$2] CC="$CC" -f $PWD/kernel-tests/Makefile LUSTRE_LINUX_CONFIG=$LINUX_CONFIG -o tmp_include_depends -o scripts -o include/config/MARKER -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM $MODULE_TARGET=$PWD/kernel-tests) >/dev/null && AC_TRY_COMMAND([$3])], [$4], [_AC_MSG_LOG_CONFTEST m4_ifvaln([$5],[$5])dnl])dnl @@ -169,8 +276,8 @@ if test x$enable_modules != xno ; then [AC_MSG_ERROR([Kernel config could not be found. If you are building from a kernel-source rpm consult README.kernel-source])]) # ----------- make dep run? ------------------ - AC_CHECK_FILES([$LINUX/include/linux/autoconf.h - $LINUX/include/linux/version.h + AC_CHECK_FILES([$LINUX_OBJ/include/linux/autoconf.h + $LINUX_OBJ/include/linux/version.h $LINUX/include/linux/config.h],[], [AC_MSG_ERROR([Run make config in $LINUX.])]) @@ -181,7 +288,7 @@ if test x$enable_modules != xno ; then # tarred up the tree and ran make dep etc. in it, then # version.h gets overwritten with a standard linux one. - if grep rhconfig $LINUX/include/linux/version.h >/dev/null ; then + if grep rhconfig $LINUX_OBJ/include/linux/version.h >/dev/null ; then # This is a clean kernel-source tree, we need to # enable extensive workarounds to get this to build # modules @@ -195,6 +302,27 @@ if test x$enable_modules != xno ; then EXTRA_KCFLAGS="-include $KERNEL_SOURCE_HEADER $EXTRA_KCFLAGS" fi + # ------------ external module support --------------------- + MODULE_TARGET="SUBDIRS" + if test $linux25 = 'yes' ; then + makerule="$PWD/kernel-tests" + AC_MSG_CHECKING([for external module build support]) + rm -f kernel-tests/conftest.i + LUSTRE_MODULE_TRY_MAKE([],[], + [$makerule LUSTRE_KERNEL_TEST=conftest.i], + [test -s kernel-tests/conftest.i], + [ + AC_MSG_RESULT([no]) + ],[ + AC_MSG_RESULT([yes]) + makerule="_module_$makerule" + MODULE_TARGET="M" + ]) + else + makerule="_dir_$PWD/kernel-tests" + fi + AC_SUBST(MODULE_TARGET) + # --- check that we can build modules at all AC_MSG_CHECKING([that modules can be built]) LUSTRE_MODULE_TRY_COMPILE([],[], @@ -208,22 +336,18 @@ if test x$enable_modules != xno ; then ]) # ------------ LINUXRELEASE and moduledir ------------------ - AC_MSG_CHECKING([for Linux release]) - rm -f kernel-tests/conftest.i LINUXRELEASE= - if test $linux25 = 'yes' ; then - makerule="$PWD/kernel-tests" - else - makerule="_dir_$PWD/kernel-tests" - fi + rm -f kernel-tests/conftest.i + AC_MSG_CHECKING([for Linux release]) LUSTRE_MODULE_TRY_MAKE( [#include ], - [LINUXRELEASE=UTS_RELEASE], + [char *LINUXRELEASE; + LINUXRELEASE=UTS_RELEASE;], [$makerule LUSTRE_KERNEL_TEST=conftest.i], [test -s kernel-tests/conftest.i], [ # LINUXRELEASE="UTS_RELEASE" - eval $(grep LINUXRELEASE kernel-tests/conftest.i) + eval $(grep "LINUXRELEASE=" kernel-tests/conftest.i) ],[ AC_MSG_RESULT([unknown]) AC_MSG_ERROR([Could not preprocess test program. Consult config.log for details.]) @@ -236,230 +360,361 @@ if test x$enable_modules != xno ; then AC_MSG_RESULT([$LINUXRELEASE]) AC_SUBST(LINUXRELEASE) - moduledir='$(libdir)/modules/'$LINUXRELEASE/kernel - AC_SUBST(moduledir) - + moduledir='/lib/modules/'$LINUXRELEASE/kernel modulefsdir='$(moduledir)/fs/$(PACKAGE)' + modulenetdir='$(moduledir)/net/$(PACKAGE)' + + AC_SUBST(moduledir) AC_SUBST(modulefsdir) + AC_SUBST(modulenetdir) # ------------ RELEASE -------------------------------- AC_MSG_CHECKING([for Lustre release]) RELEASE="`echo ${LINUXRELEASE} | tr '-' '_'`_`date +%Y%m%d%H%M`" AC_MSG_RESULT($RELEASE) AC_SUBST(RELEASE) -fi -# ---------- Portals flags -------------------- - -#AC_PREFIX_DEFAULT([]) -#if test "x$prefix" = xNONE || test "x$prefix" = x; then -# usrprefix=/usr -#else -# usrprefix='${prefix}' -#fi -#AC_SUBST(usrprefix) - -AC_MSG_CHECKING([for zero-copy TCP support]) -AC_ARG_ENABLE([zerocopy], - AC_HELP_STRING([--disable-zerocopy], - [disable socknal zerocopy]), - [],[enable_zerocopy='yes']) -if test x$enable_zerocopy = xno ; then - AC_MSG_RESULT([no (by request)]) -else - ZCCD="`grep -c zccd $LINUX/include/linux/skbuff.h`" - if test "$ZCCD" != 0 ; then - AC_DEFINE(SOCKNAL_ZC, 1, [use zero-copy TCP]) - AC_MSG_RESULT(yes) + # ---------- Portals flags -------------------- + + AC_MSG_CHECKING([for zero-copy TCP support]) + AC_ARG_ENABLE([zerocopy], + AC_HELP_STRING([--disable-zerocopy], + [disable socknal zerocopy]), + [],[enable_zerocopy='yes']) + if test x$enable_zerocopy = xno ; then + AC_MSG_RESULT([no (by request)]) else - AC_MSG_RESULT([no (no kernel support)]) + ZCCD="`grep -c zccd $LINUX/include/linux/skbuff.h`" + if test "$ZCCD" != 0 ; then + AC_DEFINE(SOCKNAL_ZC, 1, [use zero-copy TCP]) + AC_MSG_RESULT(yes) + else + AC_MSG_RESULT([no (no kernel support)]) + fi fi -fi -AC_MSG_CHECKING([for CPU affinity support]) -AC_ARG_ENABLE([affinity], - AC_HELP_STRING([--disable-affinity], - [disable process/irq affinity]), - [],[enable_affinity='yes']) -if test x$enable_affinity = xno ; then - AC_MSG_RESULT([no (by request)]) -else - SET_CPUS_ALLOW="`grep -c set_cpus_allowed $LINUX/kernel/softirq.c`" - if test "$SET_CPUS_ALLOW" != 0 ; then - AC_DEFINE(CPU_AFFINITY, 1, [kernel has cpu affinity support]) - AC_MSG_RESULT([yes]) + AC_ARG_ENABLE([affinity], + AC_HELP_STRING([--disable-affinity], + [disable process/irq affinity]), + [],[enable_affinity='yes']) + + AC_MSG_CHECKING([for CPU affinity support]) + if test x$enable_affinity = xno ; then + AC_MSG_RESULT([no (by request)]) else - AC_MSG_RESULT([no (no kernel support)]) + LUSTRE_MODULE_TRY_COMPILE( + [ + #include + ],[ + struct task_struct t; + #ifdef CPU_ARRAY_SIZE + cpumask_t m; + #else + unsigned long m; + #endif + set_cpus_allowed(&t, m); + ],[ + AC_DEFINE(CPU_AFFINITY, 1, [kernel has cpu affinity support]) + AC_MSG_RESULT([yes]) + ],[ + AC_MSG_RESULT([no (no kernel support)]) + ]) fi -fi - -##################################### + ##################################### -AC_MSG_CHECKING([if quadrics kernel headers are present]) -if test -d $LINUX/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 - AC_MSG_RESULT([supported]) - QSWCPPFLAGS="-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" + AC_MSG_CHECKING([if quadrics kernel headers are present]) + if test -d $LINUX/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 + AC_MSG_RESULT([supported]) + QSWCPPFLAGS="-DMULTIRAIL_EKC=1" else - QSWCPPFLAGS="-I$LINUX/include/linux" + AC_MSG_RESULT([not supported]) + if test -d $LINUX/drivers/net/qsnet/include; then + QSWCPPFLAGS="-I$LINUX/drivers/net/qsnet/include" + else + QSWCPPFLAGS="-I$LINUX/include/linux" + fi fi + else + AC_MSG_RESULT([no]) + QSWNAL="" + QSWCPPFLAGS="" fi -else - AC_MSG_RESULT([no]) - QSWNAL="" - QSWCPPFLAGS="" -fi -AC_SUBST(QSWCPPFLAGS) -AC_SUBST(QSWNAL) -AM_CONDITIONAL(BUILD_QSWNAL, test x$QSWNAL = "xqswnal") + AC_SUBST(QSWCPPFLAGS) + AC_SUBST(QSWNAL) -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="" - ]) -AC_SUBST(GMCPPFLAGS) -AC_SUBST(GMNAL) -AM_CONDITIONAL(BUILD_GMNAL, test x$GMNAL = "xgmnal") + 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="" + ]) + AC_SUBST(GMCPPFLAGS) + AC_SUBST(GMNAL) + + if test $linux25 = 'no' ; then + #### 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" + LUSTRE_MODULE_TRY_COMPILE( + [ + #include + ],[ + struct ib_device_properties props; + return 0; + ],[ + AC_MSG_RESULT([yes]) + OPENIBNAL="openibnal" + ],[ + AC_MSG_RESULT([no]) + OPENIBNAL="" + OPENIBCPPFLAGS="" + ]) + EXTRA_KCFLAGS="$EXTRA_KCFLAGS_save" + AC_SUBST(OPENIBCPPFLAGS) + AC_SUBST(OPENIBNAL) + fi -#fixme: where are the default IB includes? -default_ib_include_dir=/usr/local/ib/include -an_ib_include_file=vapi.h + #### Infinicon IB + AC_MSG_CHECKING([if Infinicon IB kernel headers are present]) + # for how the only infinicon ib build has headers in /usr/include/iba + IIBCPPFLAGS="-I/usr/include -DIN_TREE_BUILD" + EXTRA_KCFLAGS_save="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="$EXTRA_KCFLAGS $IIBCPPFLAGS" + LUSTRE_MODULE_TRY_COMPILE( + [ + #include + ],[ + IBT_INTERFACE_UNION interfaces; + FSTATUS rc; -AC_MSG_CHECKING([if ib nal support was requested]) -AC_ARG_WITH([ib], - AC_HELP_STRING([--with-ib=yes/no/path], - [Path to IB includes]), - [ - case $with_ib in - yes) - AC_MSG_RESULT([yes]) - IBCPPFLAGS="-I/usr/local/ib/include" - IBNAL="ibnal" - ;; - no) - AC_MSG_RESULT([no]) - IBCPPFLAGS="" - IBNAL="" - ;; - *) - AC_MSG_RESULT([yes]) - IBCPPFLAGS="-I$with_ib" - IBNAL="" - ;; - esac - ],[ - AC_MSG_RESULT([no]) - IBFLAGS="" - IBNAL="" - ]) -AC_SUBST(IBNAL) -AC_SUBST(IBCPPFLAGS) -AM_CONDITIONAL(BUILD_IBNAL, test x$IBNAL = "xibnal") + rc = IbtGetInterfaceByVersion(IBT_INTERFACE_VERSION_2, + &interfaces); -AC_SUBST(MOD_LINK) -AC_SUBST(LINUX25) + return rc == FSUCCESS ? 0 : 1; + ],[ + AC_MSG_RESULT([yes]) + IIBNAL="iibnal" + ],[ + AC_MSG_RESULT([no]) + IIBNAL="" + IIBCPPFLAGS="" + ]) + EXTRA_KCFLAGS="$EXTRA_KCFLAGS_save" + AC_SUBST(IIBCPPFLAGS) + AC_SUBST(IIBNAL) + + #### Rapid Array + AC_MSG_CHECKING([if RapidArray kernel headers are present]) + # placeholder + RACPPFLAGS="-I/tmp" + EXTRA_KCFLAGS_save="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="$EXTRA_KCFLAGS $RACPPFLAGS" + LUSTRE_MODULE_TRY_COMPILE( + [ + #include + #include + ],[ + RAP_RETURN rc; + RAP_PVOID dev_handle; -# ---------- Red Hat 2.4.18 has iobuf->dovary -------------- -# But other kernels don't + rc = RapkGetDeviceByIndex(0, NULL, NULL, &dev_handle); -AC_MSG_CHECKING([if struct kiobuf has a dovary field]) -LUSTRE_MODULE_TRY_COMPILE( - [ - #include - ],[ - struct kiobuf iobuf; - iobuf.dovary = 1; - ],[ + return rc == RAP_SUCCESS ? 0 : 1; + ],[ + AC_MSG_RESULT([yes]) + RANAL="ranal" + ],[ + AC_MSG_RESULT([no]) + RANAL="" + RACPPFLAGS="" + ]) + EXTRA_KCFLAGS="$EXTRA_KCFLAGS_save" + AC_SUBST(RACPPFLAGS) + AC_SUBST(RANAL) + + # ---------- Red Hat 2.4.18 has iobuf->dovary -------------- + # But other kernels don't + + AC_MSG_CHECKING([if struct kiobuf has a dovary field]) + LUSTRE_MODULE_TRY_COMPILE( + [ + #include + ],[ + struct kiobuf iobuf; + iobuf.dovary = 1; + ],[ + AC_MSG_RESULT([yes]) + AC_DEFINE(HAVE_KIOBUF_DOVARY, 1, [struct kiobuf has a dovary field]) + ],[ + AC_MSG_RESULT([no]) + ]) + + # ----------- 2.6.4 no longer has page->list --------------- + AC_MSG_CHECKING([if struct page has a list field]) + LUSTRE_MODULE_TRY_COMPILE( + [ + #include + ],[ + struct page page; + &page.list; + ],[ + AC_MSG_RESULT([yes]) + AC_DEFINE(HAVE_PAGE_LIST, 1, [struct page has a list field]) + ],[ + AC_MSG_RESULT([no]) + ]) + + # ---------- Red Hat 2.4.20 backports some 2.5 bits -------- + # This needs to run after we've defined the KCPPFLAGS + + AC_MSG_CHECKING([if task_struct has a sighand field]) + LUSTRE_MODULE_TRY_COMPILE( + [ + #include + ],[ + struct task_struct p; + p.sighand = NULL; + ],[ + AC_DEFINE(CONFIG_RH_2_4_20, 1, [this kernel contains Red Hat 2.4.20 patches]) + AC_MSG_RESULT([yes]) + ],[ + AC_MSG_RESULT([no]) + ]) + + # ---------- 2.4.20 introduced cond_resched -------------- + + AC_MSG_CHECKING([if kernel offers cond_resched]) + LUSTRE_MODULE_TRY_COMPILE( + [ + #include + ],[ + cond_resched(); + ],[ + AC_MSG_RESULT([yes]) + AC_DEFINE(HAVE_COND_RESCHED, 1, [cond_resched found]) + ],[ + AC_MSG_RESULT([no]) + ]) + + # --------- zap_page_range(vma) -------------------------------- + AC_MSG_CHECKING([if zap_pag_range with vma parameter]) + ZAP_PAGE_RANGE_VMA="`grep -c 'zap_page_range.*struct vm_area_struct' $LINUX/include/linux/mm.h`" + if test "$ZAP_PAGE_RANGE_VMA" != 0 ; then + AC_DEFINE(ZAP_PAGE_RANGE_VMA, 1, [zap_page_range with vma parameter]) AC_MSG_RESULT([yes]) - AC_DEFINE(HAVE_KIOBUF_DOVARY, 1, [struct kiobuf has a dovary field]) - ],[ + else AC_MSG_RESULT([no]) - ]) + fi -# ----------- 2.6.4 no longer has page->list --------------- -AC_MSG_CHECKING([if struct page has a list field]) -LUSTRE_MODULE_TRY_COMPILE( - [ - #include - ],[ - struct page page; - &page.list; - ],[ + # ---------- Red Hat 2.4.21 backports some more 2.5 bits -------- + + AC_MSG_CHECKING([if kernel defines PDE]) + HAVE_PDE="`grep -c 'proc_dir_entry..PDE' $LINUX/include/linux/proc_fs.h`" + if test "$HAVE_PDE" != 0 ; then + AC_DEFINE(HAVE_PDE, 1, [the kernel defines PDE]) AC_MSG_RESULT([yes]) - AC_DEFINE(HAVE_PAGE_LIST, 1, [struct page has a list field]) - ],[ + else AC_MSG_RESULT([no]) - ]) + fi -# ---------- Red Hat 2.4.20 backports some 2.5 bits -------- -# This needs to run after we've defined the KCPPFLAGS + AC_MSG_CHECKING([if kernel passes struct file to direct_IO]) + HAVE_DIO_FILE="`grep -c 'direct_IO.*struct file' $LINUX/include/linux/fs.h`" + if test "$HAVE_DIO_FILE" != 0 ; then + AC_DEFINE(HAVE_DIO_FILE, 1, [the kernel passes struct file to direct_IO]) + AC_MSG_RESULT(yes) + else + AC_MSG_RESULT(no) + fi -AC_MSG_CHECKING([for kernel version]) -LUSTRE_MODULE_TRY_COMPILE( - [ - #include - ],[ - struct task_struct p; - p.sighand = NULL; - ],[ - AC_DEFINE(CONFIG_RH_2_4_20, 1, [this kernel contains Red Hat 2.4.20 patches]) - AC_MSG_RESULT([redhat-2.4.20]) - ],[ - AC_MSG_RESULT([$LINUXRELEASE]) - ]) + AC_MSG_CHECKING([if kernel defines cpu_online()]) + LUSTRE_MODULE_TRY_COMPILE( + [ + #include + ],[ + cpu_online(0); + ],[ + AC_MSG_RESULT([yes]) + AC_DEFINE(HAVE_CPU_ONLINE, 1, [cpu_online found]) + ],[ + AC_MSG_RESULT([no]) + ]) + AC_MSG_CHECKING([if kernel defines cpumask_t]) + LUSTRE_MODULE_TRY_COMPILE( + [ + #include + ],[ + return sizeof (cpumask_t); + ],[ + AC_MSG_RESULT([yes]) + AC_DEFINE(HAVE_CPUMASK_T, 1, [cpumask_t found]) + ],[ + AC_MSG_RESULT([no]) + ]) -# ---------- Red Hat 2.4.21 backports some more 2.5 bits -------- + # ---------- RHEL kernels define page_count in mm_inline.h + AC_MSG_CHECKING([if kernel has mm_inline.h header]) + LUSTRE_MODULE_TRY_COMPILE( + [ + #include + ],[ + #ifndef page_count + #error mm_inline.h does not define page_count + #endif + ],[ + AC_MSG_RESULT([yes]) + AC_DEFINE(HAVE_MM_INLINE, 1, [mm_inline found]) + ],[ + AC_MSG_RESULT([no]) + ]) -AC_MSG_CHECKING([if kernel defines PDE]) -HAVE_PDE="`grep -c 'proc_dir_entry..PDE' $LINUX/include/linux/proc_fs.h`" -if test "$HAVE_PDE" != 0 ; then - AC_DEFINE(HAVE_PDE, 1, [the kernel defines PDE]) - AC_MSG_RESULT([yes]) -else - AC_MSG_RESULT([no]) -fi + # ---------- inode->i_alloc_sem -------------- + AC_MSG_CHECKING([if struct inode has i_alloc_sem]) + LUSTRE_MODULE_TRY_COMPILE( + [ + #include + #include + ],[ + #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,4,24)) + #error "down_read_trylock broken before 2.4.24" + #endif + struct inode i; + return (char *)&i.i_alloc_sem - (char *)&i; + ],[ + AC_MSG_RESULT([yes]) + AC_DEFINE(HAVE_I_ALLOC_SEM, 1, [struct inode has i_alloc_sem]) + ],[ + AC_MSG_RESULT([no]) + ]) -AC_MSG_CHECKING([if kernel passes struct file to direct_IO]) -HAVE_DIO_FILE="`grep -c 'direct_IO.*struct file' $LINUX/include/linux/fs.h`" -if test "$HAVE_DIO_FILE" != 0 ; then - AC_DEFINE(HAVE_DIO_FILE, 1, [the kernel passes struct file to direct_IO]) - AC_MSG_RESULT(yes) -else - AC_MSG_RESULT(no) -fi -if test x$enable_modules != xno ; then # ---------- modules? ------------------------ AC_MSG_CHECKING([for module support]) LUSTRE_MODULE_TRY_COMPILE( @@ -507,51 +762,141 @@ if test x$enable_modules != xno ; then AC_MSG_RESULT([no]) ]) - if test $BACKINGFS = 'ext3' ; then - # --- Check that ext3 and ext3 xattr are enabled in the kernel - AC_MSG_CHECKING([that ext3 is enabled in the kernel]) - LUSTRE_MODULE_TRY_COMPILE( - [ - #include - ],[ - #ifndef CONFIG_EXT3_FS - #ifndef CONFIG_EXT3_FS_MODULE - #error CONFIG_EXT3_FS not #defined - #endif - #endif - ],[ - AC_MSG_RESULT([yes]) - ],[ - AC_MSG_RESULT([no]) - AC_MSG_ERROR([Lustre requires that ext3 is enabled in the kernel (CONFIG_EXT3_FS)]) - ]) + # ------------ kallsyms (so software watchdogs produce useful stacks) + AC_MSG_CHECKING([if kallsyms is enabled]) + LUSTRE_MODULE_TRY_COMPILE( + [ + #include + ],[ + #ifndef CONFIG_KALLSYMS + #error CONFIG_KALLSYMS is not #defined + #endif + ],[ + AC_MSG_RESULT([yes]) + ],[ + AC_MSG_RESULT([no]) + if test "x$ARCH_UM" = "x" ; then + AC_MSG_ERROR([Lustre requires that CONFIG_KALLSYMS is enabled in your kernel.]) + fi + ]) - AC_MSG_CHECKING([that extended attributes for ext3 are enabled in the kernel]) - LUSTRE_MODULE_TRY_COMPILE( - [ - #include - ],[ - #ifndef CONFIG_EXT3_FS_XATTR - #error CONFIG_EXT3_FS_XATTR not #defined - #endif - ],[ - AC_MSG_RESULT([yes]) - ],[ - AC_MSG_RESULT([no]) - AC_MSG_WARN([Lustre requires that extended attributes for ext3 are enabled in the kernel (CONFIG_EXT3_FS_XATTR.)]) - AC_MSG_WARN([This build may fail.]) - ]) - fi # BACKINGFS = ext3 + # ------------ check for our show_task patch + AC_MSG_CHECKING([if kernel exports show_task]) + have_show_task=0 + for file in ksyms sched ; do + if grep -q "EXPORT_SYMBOL(show_task)" \ + "$LINUX/kernel/$file.c" 2>/dev/null ; then + have_show_task=1 + break + fi + done + if test x$have_show_task = x1 ; then + AC_DEFINE(HAVE_SHOW_TASK, 1, [show_task is exported]) + AC_MSG_RESULT(yes) + else + AC_MSG_RESULT(no) + fi + + case $BACKINGFS in + ext3) + # --- Check that ext3 and ext3 xattr are enabled in the kernel + AC_MSG_CHECKING([that ext3 is enabled in the kernel]) + LUSTRE_MODULE_TRY_COMPILE( + [ + #include + ],[ + #ifndef CONFIG_EXT3_FS + #ifndef CONFIG_EXT3_FS_MODULE + #error CONFIG_EXT3_FS not #defined + #endif + #endif + ],[ + AC_MSG_RESULT([yes]) + ],[ + AC_MSG_RESULT([no]) + AC_MSG_ERROR([Lustre requires that ext3 is enabled in the kernel (CONFIG_EXT3_FS)]) + ]) + + AC_MSG_CHECKING([that extended attributes for ext3 are enabled in the kernel]) + LUSTRE_MODULE_TRY_COMPILE( + [ + #include + ],[ + #ifndef CONFIG_EXT3_FS_XATTR + #error CONFIG_EXT3_FS_XATTR not #defined + #endif + ],[ + AC_MSG_RESULT([yes]) + ],[ + AC_MSG_RESULT([no]) + AC_MSG_WARN([Lustre requires that extended attributes for ext3 are enabled in the kernel (CONFIG_EXT3_FS_XATTR.)]) + AC_MSG_WARN([This build may fail.]) + ]) + ;; + ldiskfs) + AC_MSG_CHECKING([if fshooks are present]) + LUSTRE_MODULE_TRY_COMPILE( + [ + #include + ],[],[ + AC_MSG_RESULT([yes]) + LDISKFS_SERIES="2.6-suse.series" + ],[ + AC_MSG_RESULT([no]) + LDISKFS_SERIES="2.6-vanilla.series" + ]) + AC_SUBST(LDISKFS_SERIES) + # --- check which ldiskfs series we should use + ;; + esac # $BACKINGFS fi +AM_CONDITIONAL(BUILD_QSWNAL, test x$QSWNAL = "xqswnal") +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_RANAL, test x$RANAL = "xranal") + +# portals/utils/portals.c +AC_CHECK_HEADERS([netdb.h netinet/tcp.h asm/types.h]) +AC_CHECK_FUNCS([gethostbyname socket connect]) + +# portals/utils/debug.c +AC_CHECK_HEADERS([linux/version.h]) + +# include/liblustre.h +AC_CHECK_HEADERS([asm/page.h sys/user.h stdint.h]) + +# liblustre/llite_lib.h +AC_CHECK_HEADERS([xtio.h file.h]) + +# liblustre/dir.c +AC_CHECK_HEADERS([linux/types.h sys/types.h linux/unistd.h unistd.h]) + +# liblustre/lutil.c +AC_CHECK_HEADERS([netinet/in.h arpa/inet.h catamount/data.h]) +AC_CHECK_FUNCS([inet_ntoa]) + CPPFLAGS="-include \$(top_builddir)/include/config.h $CPPFLAGS" EXTRA_KCFLAGS="-include $PWD/include/config.h $EXTRA_KCFLAGS" AC_SUBST(EXTRA_KCFLAGS) -#echo "KCPPFLAGS: $KCPPFLAGS" -#echo "KCFLAGS: $KCFLAGS" -#echo "LLCPPFLAGS: $LLCPPFLAGS" -#echo "LLCFLAGS: $LLCFLAGS" -#echo "MOD_LINK: $MOD_LINK" -#echo "CFLAGS: $CFLAGS" -#echo "CPPFLAGS: $CPPFLAGS" +echo "CPPFLAGS: $CPPFLAGS" +echo "LLCPPFLAGS: $LLCPPFLAGS" +echo "CFLAGS: $CFLAGS" +echo "EXTRA_KCFLAGS: $EXTRA_KCFLAGS" +echo "LLCFLAGS: $LLCFLAGS" + +ENABLE_INIT_SCRIPTS=0 +if test x$enable_utils = xyes ; then + AC_MSG_CHECKING([whether to install init scripts]) + # our scripts only work on red hat systems + if test -f /etc/init.d/functions -a -f /etc/sysconfig/network ; then + ENABLE_INIT_SCRIPTS=1 + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi +fi +AM_CONDITIONAL(INIT_SCRIPTS, test x$ENABLE_INIT_SCRIPTS = "x1") +AC_SUBST(ENABLE_INIT_SCRIPTS)