Date: Thu, 5 Mar 2009 10:41:10 -0500 From: John Baldwin <jhb@freebsd.org> To: arch@freebsd.org Subject: [PATCH] Set SYSDIR for modules built with kernel Message-ID: <200903051041.10678.jhb@freebsd.org>
next in thread | raw e-mail | index | archive | help
One of the things each kernel module build has to do is figure out where the
source tree it belongs to lives. /usr/share/mk/bsd.kmod.mk uses a heuristic
where it walks up N levels of the tree looking for a kernel source directory.
If that fails it falls back to /sys or /usr/src/sys. One side effect of this
(besides lots of directory lookups during a build as each kernel module build
stage has to do this) is that if CURRENT adds an even deeper level of nesting
(such as with the recent ata chipset modules) then you can't build a kernel
with those modules until /usr/share/mk/bsd.kmod.mk on your build machine has
been updated. This means you can't build an 8.0 kernel on 7.0 simply because
ata chipset modules don't find the right headers.
However, the SYSDIR is already known during a kernel build (we depend on this
to make modules built in ports DTRT when they are rebuilt via buildkernel).
I just changed the kernel build Makefile to always set SYSDIR. With this
change, I was able to build an 8.0 kernel + modules on a 7.1-ish machine with
an unpatched /usr/share/mk/bsd.kmod.mk. This should also have the side
effect of reducing the number of pathname lookup operations done during a
kernel build with modules.
Thoughts?
--- //depot/projects/smpng/sys/conf/kern.post.mk 2009/01/15 22:41:24
+++ //depot/user/jhb/lock/conf/kern.post.mk 2009/03/04 21:25:21
@@ -12,7 +12,8 @@
.if defined(DESTDIR)
MKMODULESENV+= DESTDIR="${DESTDIR}"
.endif
-MKMODULESENV+= KERNBUILDDIR="${.CURDIR}"
+SYSDIR?= ${S:C;^[^/];${.CURDIR}/&;}
+MKMODULESENV+= KERNBUILDDIR="${.CURDIR}" SYSDIR="${SYSDIR}"
.MAIN: all
@@ -29,7 +30,6 @@
# Handle out of tree ports
.if !defined(NO_MODULES) && defined(PORTS_MODULES)
-SYSDIR?= ${S:C;^[^/];${.CURDIR}/&;}
PORTSMODULESENV=SYSDIR=${SYSDIR}
.for __target in all install reinstall clean
${__target}: ports-${__target}
--
John Baldwin
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200903051041.10678.jhb>
