What is easiest way to build a BSD 8 binary on a BSD 7 box?

Pieter de Goeje pieter at degoeje.nl
Sun Feb 7 01:27:58 UTC 2010

On Saturday 06 February 2010 20:22:13 Peter Steele wrote:
> I have a BSD 7 system with the full BSD 8 sources loaded on it, and we use
> this box to build our custom BSD 8 kernel and tools. We do not install the
> custom code on the BSD 7 box but simply collect the artifacts as a basis
> for our custom BSD 8 image. I have a standalone tool that has previously
> been built on this same BSD 7 system, but it just uses gcc and links
> against the normal BSD 7 libraries that are located on this box.
> When we run this tool on a BSD 7 box it works fine. However, we've
> discovered one function it performs doesn't work properly. It uses kvm_read
> to collect network statistics and apparently applications that use this
> function have to be linked against the libraries of the actual target OS.
> One easy solution of course is to build our tool on a BSD 8 box, and in the
> long run we'll likely go that route as we move away from BSD 7. Right now
> though our build server is BSD 7 and we need to build this tool against BSD
> 8 libraries. This obviously can be done since "make world" does exactly
> that-it builds everything against 8.0 objects even if the build is done on
> a BSD 7 box.
> Without dissecting the magic going on in "make world", can any explain how
> I could do the same thing with my standalone tool? Specifically, build it
> on a BSD 7 box but link it against BSD 8 libraries.

The easiest way would probably be the following.

# SOMEDIR=/path/to/fbsd8buildenv
# mkdir -p ${SOMEDIR}
# cd /path/to/FreeBSD-8.0/src
# make buildworld
# make installworld DESTDIR=${SOMEDIR}

Then adding --sysroot=${SOMEDIR} to all invocations of gcc/ld and/or liberal use
of -I and -L gcc options should do the trick.

For example:
# export CFLAGS="-I${SOMEDIR}/usr/include -L${SOMEDIR}/lib -L${SOMEDIR}/usr/lib
# make


Pieter de Goeje

More information about the freebsd-questions mailing list