Quick hack to make fast kernel builds easier

M. Warner Losh imp at bsdimp.com
Sun Jan 11 16:44:43 PST 2009


In message: <20090111191251.GA74450 at zim.MIT.EDU>
            David Schultz <das at FreeBSD.ORG> writes:
: On Sun, Jan 11, 2009, Ed Schouten wrote:
: > I often just run `make' in /usr/obj/...,
: > which also saves some typing, but unfortunately that doesn't work when
: > cross compiling.
: 
: Also, as far as I know, there's no convenient way to rebuild a
: single module for another architecture. I use the following script
: called 'arch' to set the appropriate environment variables, so if
: I've already run 'make universe' and I want to rebuild libc for
: sparc64, I say:
: 
:    cd /usr/src/lib/libc && arch sparc64 make
: 
: It would be nice if there were a better mechanism for this that's
: integrated into the build system.
: 
: #!/bin/sh
: 
: arch=$1
: basepath=/usr/src
: 
: export __MAKE_CONF=/dev/null
: export MAKEOBJDIRPREFIX=/usr/obj/${arch}
: export MACHINE_ARCH=${arch}
: export MACHINE=${arch}
: export CPUTYPE=
: export GROFF_BIN_PATH=/usr/obj/${arch}${basepath}/tmp/legacy/usr/bin
: export GROFF_FONT_PATH=/usr/obj/${arch}${basepath}/tmp/legacy/usr/share/groff_font
: export GROFF_TMAC_PATH=/usr/obj/${arch}${basepath}/tmp/legacy/usr/share/tmac
: export _SHLIBDIRPREFIX=/usr/obj/${arch}${basepath}/tmp
: export INSTALL="sh /usr/src/tools/install.sh"
: export PATH=/usr/obj/${arch}${basepath}/tmp/legacy/usr/sbin:/usr/obj/${arch}${basepath}/tmp/legacy/usr/bin:/usr/obj/${arch}${basepath}/legacy/usr/games:/usr/obj/${arch}${basepath}/tmp/usr/sbin:/usr/obj/${arch}${basepath}/tmp/usr/bin:/usr/obj/${arch}${basepath}/tmp/usr/games:/sbin:/bin:/usr/sbin:/usr/bin
: DESTDIR=/usr/obj/${arch}${basepath}/tmp
: 
: shift
: $*

Also, the following is similar to what I've used in the past.  I think
it is a lot simpler and should be functionally equivalent.  The key
part is to have make tell you what env vars you need to export...

#!/bin/sh
# fxmake arch subdir make-target
arch=$1
dir=$2
shift
shift
target=${*:-all}
makevars=`env TARGET=$arch MAKEOBJDIRPREFIX=${MAKEOBJDIRPREFIX:-/usr/obj} make buildenvvars`
cd $2 && sh -c "${makevars}" make $target

Warner


More information about the freebsd-arch mailing list