+
+# Kernel build make options
+KERNELMAKE_PARAMS=
+#KERNELMAKE_PARAMS="V=1" # Enable verbose module build
+
+# Kernel build cpp flags
+KERNELCPPFLAGS="$KERNELCPPFLAGS -DHAVE_SPL -D_KERNEL "
+KERNELCPPFLAGS="$KERNELCPPFLAGS -I$splsrc -I$splsrc/include -I$TOPDIR"
+
+# Minimally required for pread() functionality an other GNU goodness
+HOSTCFLAGS="$HOSTCFLAGS -ggdb -O2 -std=c99 -D_GNU_SOURCE -D__EXTENSIONS__ "
+
+# XXX: Quiet warnings not covered by the gcc-* patches
+# XXX: Once all the warnings are resolved these flags should be removed
+HOSTCFLAGS="$HOSTCFLAGS -Wno-switch -Wno-unused -Wno-missing-braces -Wno-parentheses "
+HOSTCFLAGS="$HOSTCFLAGS -Wno-uninitialized -fno-strict-aliasing "
+
+# Expected defines not covered by zfs_config.h or spl_config.h
+HOSTCFLAGS="$HOSTCFLAGS -DHAVE_SPL -D_POSIX_PTHREAD_SEMANTICS "
+HOSTCFLAGS="$HOSTCFLAGS -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_REENTRANT "
+HOSTCFLAGS="$HOSTCFLAGS -DTEXT_DOMAIN=\\\"zfs-linux-kernel\\\" "
+
+# Expected default include paths additional paths added by Makefiles
+HOSTCFLAGS="$HOSTCFLAGS -I$TOPDIR "
+
+if test "$kernelbuild" != "$kernelsrc"; then
+ KERNELMAKE_PARAMS="$KERNELMAKE_PARAMS O=$kernelbuild"
+fi
+
+# XXX: I really, really hate this... but to ensure the kernel build
+# system compiles C files shared between a library and a kernel module,
+# we need to ensure each file has a unique make target. To do that
+# I'm creating symlinks for each shared file at configure time. It
+# may be possible something better can be done in the Makefile but it
+# will take some serious investigation and I don't have the time now.
+
+echo "Creating symlinks for additional make targets"
+ln -f -s $LIBDIR/libport/u8_textprep.c $LIBDIR/libport/ku8_textprep.c
+ln -f -s $LIBDIR/libavl/avl.c $LIBDIR/libavl/kavl.c
+ln -f -s $LIBDIR/libavl/avl.c $LIBDIR/libavl/uavl.c
+ln -f -s $LIBDIR/libnvpair/nvpair.c $LIBDIR/libnvpair/knvpair.c
+ln -f -s $LIBDIR/libnvpair/nvpair.c $LIBDIR/libnvpair/unvpair.c
+ln -f -s $LIBDIR/libzcommon/zfs_deleg.c $LIBDIR/libzcommon/kzfs_deleg.c
+ln -f -s $LIBDIR/libzcommon/zfs_prop.c $LIBDIR/libzcommon/kzfs_prop.c
+ln -f -s $LIBDIR/libzcommon/zprop_common.c $LIBDIR/libzcommon/kzprop_common.c
+ln -f -s $LIBDIR/libzcommon/compress.c $LIBDIR/libzcommon/kcompress.c
+ln -f -s $LIBDIR/libzcommon/list.c $LIBDIR/libzcommon/klist.c
+ln -f -s $LIBDIR/libzcommon/zfs_namecheck.c $LIBDIR/libzcommon/kzfs_namecheck.c
+ln -f -s $LIBDIR/libzcommon/zfs_comutil.c $LIBDIR/libzcommon/kzfs_comutil.c
+ln -f -s $LIBDIR/libzcommon/zpool_prop.c $LIBDIR/libzcommon/kzpool_prop.c