4 # in kernel compilation? (2.5 only)
6 AC_DEFUN([LB_LINUX_INKERNEL],
7 [AC_MSG_CHECKING([if inkernel build support is requested])
8 AC_ARG_ENABLE([inkernel],
9 AC_HELP_STRING([--enable-inkernel],
10 [set up 2.5 kernel makefiles]),
11 [],[enable_inkernel=no])
12 AC_MSG_RESULT([$enable_inkernel])
14 if test x$enable_inkernel = xyes ; then
15 echo ln -s `pwd` $LINUX/fs/lustre
17 ln -s `pwd` $LINUX/fs/lustre
18 find portals lustre -name Makefile.mk | sed 's/.mk$//' | xargs -n 1 \
19 sh -e -x -c '(cp -f $0.mk $0.in)'
27 # Set things accordingly for a 2.5 kernel
29 AC_DEFUN([LB_LINUX_VERSION],
30 [AC_CHECK_FILE([$LINUX/include/linux/namei.h],
38 AC_MSG_CHECKING([if you are using Linux 2.6])
39 AC_MSG_RESULT([$linux25])
41 MODULE_TARGET="SUBDIRS"
42 if test $linux25 = "yes" ; then
46 AC_MSG_CHECKING([for external module build support])
47 rm -f build/conftest.i
48 LB_LINUX_TRY_MAKE([],[],
49 [$makerule LUSTRE_KERNEL_TEST=conftest.i],
50 [test -s build/conftest.i],
55 makerule="_module_$makerule"
60 makerule="_dir_$PWD/build"
63 AC_SUBST(MODULE_TARGET)
71 # Find paths for linux, handling kernel-source rpms
73 AC_DEFUN([LB_LINUX_PATH],
74 [AC_MSG_CHECKING([for Linux sources])
76 AC_HELP_STRING([--with-linux=path],
77 [set path to Linux source (default=/usr/src/linux)]),
79 [LINUX=/usr/src/linux])
80 AC_MSG_RESULT([$LINUX])
83 # -------- linux objects (for 2.6) --
84 AC_MSG_CHECKING([for Linux objects dir])
85 AC_ARG_WITH([linux-obj],
86 AC_HELP_STRING([--with-linux-obj=path],
87 [set path to Linux objects dir (default=$LINUX)]),
88 [LINUX_OBJ=$with_linux_obj],
90 AC_MSG_RESULT([$LINUX_OBJ])
93 # -------- check for .confg --------
94 AC_ARG_WITH([linux-config],
95 [AC_HELP_STRING([--with-linux-config=path],
96 [set path to Linux .conf (default=$LINUX_OBJ/.config)])],
97 [LINUX_CONFIG=$with_linux_config],
98 [LINUX_CONFIG=$LINUX_OBJ/.config])
99 AC_SUBST(LINUX_CONFIG)
101 AC_CHECK_FILE([/boot/kernel.h],
102 [KERNEL_SOURCE_HEADER='/boot/kernel.h'],
103 [AC_CHECK_FILE([/var/adm/running-kernel.h]),
104 [KERNEL_SOURCE_HEADER='/var/adm/running-kernel.h']])
106 AC_ARG_WITH([kernel-source-header],
107 AC_HELP_STRING([--with-kernel-source-header=path],
108 [Use a different kernel version header. Consult README.kernel-source for details.]),
109 [KERNEL_SOURCE_HEADER=$with_kernel_source_header])
111 # ------------ .config exists ----------------
112 AC_CHECK_FILE([$LINUX_CONFIG],[],
113 [AC_MSG_ERROR([Kernel config could not be found. If you are building from a kernel-source rpm consult README.kernel-source])])
115 # ----------- make dep run? ------------------
116 AC_CHECK_FILES([$LINUX_OBJ/include/linux/autoconf.h
117 $LINUX_OBJ/include/linux/version.h
118 $LINUX/include/linux/config.h],[],
119 [AC_MSG_ERROR([Run make config in $LINUX.])])
121 # ------------ rhconfig.h includes runtime-generated bits --
122 # red hat kernel-source checks
124 # we know this exists after the check above. if the user
125 # tarred up the tree and ran make dep etc. in it, then
126 # version.h gets overwritten with a standard linux one.
128 if grep rhconfig $LINUX_OBJ/include/linux/version.h >/dev/null ; then
129 # This is a clean kernel-source tree, we need to
130 # enable extensive workarounds to get this to build
132 AC_CHECK_FILE([$KERNEL_SOURCE_HEADER],
133 [if test $KERNEL_SOURCE_HEADER = '/boot/kernel.h' ; then
134 AC_MSG_WARN([Using /boot/kernel.h from RUNNING kernel.])
135 AC_MSG_WARN([If this is not what you want, use --with-kernel-source-header.])
136 AC_MSG_WARN([Consult README.kernel-source for details.])
138 [AC_MSG_ERROR([$KERNEL_SOURCE_HEADER not found. Consult README.kernel-source for details.])])
139 EXTRA_KCFLAGS="-include $KERNEL_SOURCE_HEADER $EXTRA_KCFLAGS"
142 # this is needed before we can build modules
145 # --- check that we can build modules at all
146 AC_MSG_CHECKING([that modules can be built at all])
147 LB_LINUX_TRY_COMPILE([],[],[
151 AC_MSG_WARN([Consult config.log for details.])
152 AC_MSG_WARN([If you are trying to build with a kernel-source rpm, consult README.kernel-source])
153 AC_MSG_ERROR([Kernel modules could not be built.])
160 # check for a uml kernel
162 AC_DEFUN([LB_LINUX_UML],
166 AC_MSG_CHECKING([if you are running user mode linux for $target_cpu])
167 if test -e $LINUX/include/asm-um ; then
168 if test X`ls -id $LINUX/include/asm/ 2>/dev/null | awk '{print [$]1}'` = X`ls -id $LINUX/include/asm-um 2>/dev/null | awk '{print [$]1}'` ; then
170 # see notes in Rules.in
174 AC_MSG_RESULT([no (asm doesn't point at asm-um)])
177 AC_MSG_RESULT([no (asm-um missing)])
183 # these are like AC_TRY_COMPILE, but try to build modules against the
184 # kernel, inside the build directory
189 # create a conftest.c file
191 AC_DEFUN([LB_LINUX_CONFTEST],
192 [cat >conftest.c <<_ACEOF
198 # LB_LINUX_COMPILE_IFELSE
200 # like AC_COMPILE_IFELSE
202 AC_DEFUN([LB_LINUX_COMPILE_IFELSE],
203 [m4_ifvaln([$1], [LB_LINUX_CONFTEST([$1])])dnl
204 rm -f build/conftest.o build/conftest.mod.c build/conftest.ko
205 AS_IF([AC_TRY_COMMAND(cp conftest.c build && make [$2] CC="$CC" -f $PWD/build/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/build) >/dev/null && AC_TRY_COMMAND([$3])],
207 [_AC_MSG_LOG_CONFTEST
208 m4_ifvaln([$5],[$5])dnl])dnl
209 rm -f build/conftest.o build/conftest.mod.c build/conftest.mod.o build/conftest.ko m4_ifval([$1], [build/conftest.c conftest.c])[]dnl
213 # LB_LINUX_TRY_COMPILE
215 # like AC_TRY_COMPILE
217 AC_DEFUN([LB_LINUX_TRY_COMPILE],
218 [LB_LINUX_COMPILE_IFELSE(
219 [AC_LANG_PROGRAM([[$1]], [[$2]])],
221 [test -s build/conftest.o],
227 # check if a given config option is defined
229 AC_DEFUN([LB_LINUX_CONFIG],
230 [AC_MSG_CHECKING([if Linux was built with CONFIG_$1])
231 LB_LINUX_TRY_COMPILE([#include <linux/config.h>],[
233 #error CONFIG_$1 not #defined
247 # like LB_LINUX_TRY_COMPILE, but with different arguments
249 AC_DEFUN([LB_LINUX_TRY_MAKE],
250 [LB_LINUX_COMPILE_IFELSE([AC_LANG_PROGRAM([[$1]], [[$2]])], [$3], [$4], [$5], [$6])])
257 AC_DEFUN([LB_PROG_LINUX],
261 LB_LINUX_CONFIG([MODULES],[],[
262 AC_MSG_ERROR([module support is required to build Lustre kernel modules.])
265 LB_LINUX_CONFIG([MODVERSIONS])
267 LB_LINUX_CONFIG([PREEMPT],[
268 AC_MSG_ERROR([Lustre does not support kernels with preempt enabled.])
271 LB_LINUX_CONFIG([KALLSYMS],[],[
272 if test "x$ARCH_UM" = "x" ; then
273 AC_MSG_ERROR([Lustre requires that CONFIG_KALLSYMS is enabled in your kernel.])
285 # LB_LINUX_STRUCT_PAGE_LIST
287 # 2.6.4 no longer has page->list
289 AC_DEFUN([LB_LINUX_STRUCT_PAGE_LIST],
290 [AC_MSG_CHECKING([if struct page has a list field])
291 LB_LINUX_TRY_COMPILE([
292 #include <linux/mm.h>
298 AC_DEFINE(HAVE_PAGE_LIST, 1, [struct page has a list field])
305 # LB_LINUX_STRUCT_SIGHAND
307 # red hat 2.4 adds sighand to struct task_struct
309 AC_DEFUN([LB_LINUX_STRUCT_SIGHAND],
310 [AC_MSG_CHECKING([if task_struct has a sighand field])
311 LB_LINUX_TRY_COMPILE([
312 #include <linux/sched.h>
314 struct task_struct p;
317 AC_DEFINE(CONFIG_RH_2_4_20, 1, [this kernel contains Red Hat 2.4.20 patches])
325 # LB_LINUX_FUNC_CPU_ONLINE
327 # cpu_online is different in rh 2.4, vanilla 2.4, and 2.6
329 AC_DEFUN([LB_LINUX_FUNC_CPU_ONLINE],
330 [AC_MSG_CHECKING([if kernel defines cpu_online()])
331 LB_LINUX_TRY_COMPILE([
332 #include <linux/sched.h>
337 AC_DEFINE(HAVE_CPU_ONLINE, 1, [cpu_online found])
344 # LB_LINUX_TYPE_CPUMASK_T
346 # same goes for cpumask_t
348 AC_DEFUN([LB_LINUX_TYPE_CPUMASK_T],
349 [AC_MSG_CHECKING([if kernel defines cpumask_t])
350 LB_LINUX_TRY_COMPILE([
351 #include <linux/sched.h>
353 return sizeof (cpumask_t);
356 AC_DEFINE(HAVE_CPUMASK_T, 1, [cpumask_t found])
363 # LB_LINUX_FUNC_SHOW_TASK
365 # we export show_task(), but not all kernels have it (yet)
367 AC_DEFUN([LB_LINUX_FUNC_SHOW_TASK],
368 [AC_MSG_CHECKING([if kernel exports show_task])
370 for file in ksyms sched ; do
371 if grep -q "EXPORT_SYMBOL(show_task)" \
372 "$LINUX/kernel/$file.c" 2>/dev/null ; then
377 if test x$have_show_task = x1 ; then
378 AC_DEFINE(HAVE_SHOW_TASK, 1, [show_task is exported])
386 # LB_LINUX_CONFIG_EXT3
388 # that ext3 is enabled in the kernel
390 AC_DEFUN([LB_LINUX_CONFIG_EXT3],
391 [LB_LINUX_CONFIG([EXT3_FS],[],[
392 LB_LINUX_CONFIG([EXT3_FS_MODULE],[],[$2])
394 LB_LINUX_CONFIG([EXT3_FS_XATTR],[$1],[$3])
400 # If we have (and can build) fshooks.h
402 AC_DEFUN([LB_LINUX_FSHOOKS],
403 [AC_MSG_CHECKING([if this compiler can build a SuSE 2.6 kernel])
404 # an excerpt from fshooks.h, which doesn't build with fedora's gcc 3.4
405 LB_LINUX_TRY_COMPILE([
406 /* for the lack of a kernel-wide definition */
410 } boolean_t __attribute__((__mode__(__QI__)));
415 AC_MSG_WARN([We suggest trying gcc 3.3.x.])
416 AC_MSG_WARN([You can set CC=gcc33 before running configure.])
417 AC_MSG_ERROR([Your compiler cannot build a SuSE 2.6 kernel.])
419 AC_MSG_CHECKING([if fshooks are present])
420 LB_LINUX_TRY_COMPILE([
421 #include <linux/fshooks.h>
432 # LB_LINUX_STRUCT_KIOBUF
434 # rh 2.4.18 has iobuf->dovary, but other kernels do not
436 AC_DEFUN([LB_LINUX_STRUCT_KIOBUF],
437 [AC_MSG_CHECKING([if struct kiobuf has a dovary field])
438 LB_LINUX_TRY_COMPILE([
439 #include <linux/iobuf.h>
445 AC_DEFINE(HAVE_KIOBUF_DOVARY, 1, [struct kiobuf has a dovary field])
452 # LB_LINUX_FUNC_COND_RESCHED
454 # cond_resched() was introduced in 2.4.20
456 AC_DEFUN([LB_LINUX_FUNC_COND_RESCHED],
457 [AC_MSG_CHECKING([if kernel offers cond_resched])
458 LB_LINUX_TRY_COMPILE([
459 #include <linux/sched.h>
464 AC_DEFINE(HAVE_COND_RESCHED, 1, [cond_resched found])
471 # LB_LINUX_FUNC_ZAP_PAGE_RANGE
473 # if zap_page_range() taks a vma arg
475 AC_DEFUN([LB_LINUX_FUNC_ZAP_PAGE_RANGE],
476 [AC_MSG_CHECKING([if zap_pag_range with vma parameter])
477 ZAP_PAGE_RANGE_VMA="`grep -c 'zap_page_range.*struct vm_area_struct' $LINUX/include/linux/mm.h`"
478 if test "$ZAP_PAGE_RANGE_VMA" != 0 ; then
479 AC_DEFINE(ZAP_PAGE_RANGE_VMA, 1, [zap_page_range with vma parameter])
489 # if proc_fs.h defines PDE()
491 AC_DEFUN([LB_LINUX_FUNC_PDE],
492 [AC_MSG_CHECKING([if kernel defines PDE])
493 HAVE_PDE="`grep -c 'proc_dir_entry..PDE' $LINUX/include/linux/proc_fs.h`"
494 if test "$HAVE_PDE" != 0 ; then
495 AC_DEFINE(HAVE_PDE, 1, [the kernel defines PDE])
503 # LB_LINUX_FUNC_DIRECT_IO
505 # if direct_IO takes a struct file argument
507 AC_DEFUN([LB_LINUX_FUNC_DIRECT_IO],
508 [AC_MSG_CHECKING([if kernel passes struct file to direct_IO])
509 HAVE_DIO_FILE="`grep -c 'direct_IO.*struct file' $LINUX/include/linux/fs.h`"
510 if test "$HAVE_DIO_FILE" != 0 ; then
511 AC_DEFINE(HAVE_DIO_FILE, 1, [the kernel passes struct file to direct_IO])
519 # LB_LINUX_HEADER_MM_INLINE
521 # RHEL kernels define page_count in mm_inline.h
523 AC_DEFUN([LB_LINUX_HEADER_MM_INLINE],
524 [AC_MSG_CHECKING([if kernel has mm_inline.h header])
525 LB_LINUX_TRY_COMPILE([
526 #include <linux/mm_inline.h>
529 #error mm_inline.h does not define page_count
533 AC_DEFINE(HAVE_MM_INLINE, 1, [mm_inline found])
540 # LB_LINUX_STRUCT_INODE
542 # if inode->i_alloc_sem exists
544 AC_DEFUN([LB_LINUX_STRUCT_INODE],
545 [AC_MSG_CHECKING([if struct inode has i_alloc_sem])
546 LB_LINUX_TRY_COMPILE([
547 #include <linux/fs.h>
548 #include <linux/version.h>
550 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,4,24))
551 #error "down_read_trylock broken before 2.4.24"
554 return (char *)&i.i_alloc_sem - (char *)&i;
557 AC_DEFINE(HAVE_I_ALLOC_SEM, 1, [struct inode has i_alloc_sem])