Re: ``make buildkernel'' fails when /usr/obj is empty

From: Warner Losh <imp_at_bsdimp.com>
Date: Thu, 31 May 2018 12:11:52 -0600
On Thu, May 31, 2018 at 11:47 AM, Dimitry Andric <dim_at_freebsd.org> wrote:

> On 31 May 2018, at 18:04, Benjamin Kaduk <kaduk_at_MIT.EDU> wrote:
> >
> > On Thu, May 31, 2018 at 09:58:50AM +0200, Gary Jennejohn wrote:
> >> On Thu, 31 May 2018 09:52:22 +0200
> >> Gary Jennejohn <gljennjohn_at_gmail.com> wrote:
> >>
> >>> There's something totally screwy about trying to build a kernel when
> >>> /usr/obj is not populated.
> >>>
> >>> I ran ``make clean'' in /usr/src and then ``make buildkernel''.  This
> >>> fails with
> >>>     make[2]: "/usr/src/sys/conf/kern.pre.mk" line 125: amd64 kernel
> >>>     requires linker ifunc support
> >>>
> >>> This is total BS because
> >>>
> >>> /usr/bin/ld --version
> >>> LLD 6.0.0 (FreeBSD 326565-1200002) (compatible with GNU linkers)
> >>>
> >>> which is exactly what bsd.linker.mk is looking for to set ifunc.
> >>>
> >>> If I do this:
> >>>
> >>> mkdir -p /usr/obj/usr/src/amd64.amd64/tmp/legacy/usr/bin
> >>> cp /usr/bin/ld /usr/obj/usr/src/amd64.amd64/tmp/legacy/usr/bin
> >>>
> >>> the buildkernel then succeeds.
> >>>
> >>> Considering that (reformatted output from make)
> >>>
> >>> PATH=/usr/obj/usr/src/amd64.amd64/tmp/legacy/usr/sbin:
> >>> /usr/obj/usr/src/amd64.amd64/tmp/legacy/usr/bin:
> >>> /usr/obj/usr/src/amd64.amd64/tmp/legacy/bin:
> >>> /usr/obj/usr/src/amd64.amd64/tmp/usr/sbin:
> >>> /usr/obj/usr/src/amd64.amd64/tmp/usr/bin:
> >>> /sbin:/bin:/usr/sbin:/usr/bin
> >>>
> >>> it seems like /usr/bin/ld should be found by bsd.linker.mk and no
> >>> error should be reported.
> >>>
> >>
> >> OK, it seems that ``make clean'' does not remove the contents of
> >> /usr/obj/usr/src/amd64.amd64/tmp/legacy.  If I delete everything
> >> under /usr/obj then ``make buildkernel'' works.
> >>
> >> Still, it seems pretty strange to me to make building a kernel
> >> depend on some random junk which is left laying around under
> >> /usr/obj.
> >
> > Whatever happened to the "run buildworld or kernel-toolchain before
> > buildkernel" requirement?
>
> That is still a requirement, yes.  Otherwise, you might have outdated
> toolchain components are in your /usr/obj.
>

Usually you can get away without doing that, and now that clang is the
toolchain that's rebuilt (and that's not fast) people try to get away with
it more and more...

Warner
Received on Thu May 31 2018 - 16:11:54 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:41:16 UTC