Re: building i386 kernel on amd64 host

From: Warner Losh <imp_at_bsdimp.com>
Date: Sat, 14 Jun 2014 17:31:21 -0600
On Jun 14, 2014, at 3:57 PM, Oliver Pinter <oliver.pntr_at_gmail.com> wrote:

> On 6/13/14, John Baldwin <jhb_at_freebsd.org> wrote:
>> On Friday, June 13, 2014 6:21:28 am Oliver Pinter wrote:
>>> Hi All!
>>> 
>>> When I try to build i386 kernel on amd64 host running compile error
>>> due wrong cpufunc.h picked up by build system.
>>> 
>>> I used the attached script to build the kernel, and I attached a build
>>> log.
>>> 
>>> Any suggestion how can I fix this?
>> 
>> To build an i386 kernel on an amd64 host do this:
>> 
>> cd /usr/src (or some other tree)
>> make TARGET=i386 kernel-toolchain
>> make TARGET=i386 buildkernel
>> make TARGET=i386 installkernel DESTDIR=/some/place
>> 
>> And your i386 kernel will end up in /some/place/boot/kernel/kernel.  (You
>> can
>> set things like KERNCONF to pick an alternate kernel config just as with
>> normal 'make buildkernel'.)
>> 
>> (Your attachment was size zero for me btw)
>> 
>> --
>> John Baldwin
>> 
> 
> I used this script to build the kernel:
> http://svnweb.freebsd.org/socsvn/soc2014/op/tools/build_kernel_32bit.csh?view=log
> 
> And the error log are there:
> https://gist.github.com/opntr/cf8aa0e404c0c5ed6f90 .
> I get this error, when I first build kernel for amd64 system, and
> after that i386 kernel, and only the kernel.
> 
> Now seems like I can build the whole system with buildworld
> buildkernel on vanilla master, I removed the objdir and do a clean
> buildworld. Now I test the modified kernel build, after the
> buildworld.
> 
> It is broken too. When I do only make kernel-toolchain buildkernel,
> than this are broken for vanilla freebsd source and for my version to.
> 
> summary:
> OK: make buildworld buildkernel
> BROKEN: make kernel-toolchain buildkernel

On the same line? O?r is that just a summary?

> Seems like someone in build environment bootstrapping are broken.

I’ve not been able to reproduce this.

rm -rf $OBJDIR
make TARGET=i386 kernel-toolchain
make TARGET=i386 buildkernel

works just fine on current with a clean tree and an empty/missing make.conf and src.conf.

As for your script, don’t define MACHINE and MACHINE_ARCH. That’s almost always wrong since that overrides things on the command line, which is what make buildkernel winds up translating to. You never need to define those yourself in any supported environment, and likely most unsupported ones.

Also, I’d strongly recommend doing it as two invocations to make, not one. kernel-toolchain likely doesn’t have all the right guards in place for it that buildworld likely does. Or you can dive in and figure that out. You can’t really do anything *kernel* related until kernel-toolchain finishes…

Warner
Received on Sat Jun 14 2014 - 21:31:18 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:50 UTC