``make buildkernel'' fails when /usr/obj is empty
Warner Losh
imp at bsdimp.com
Thu May 31 18:11:54 UTC 2018
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
More information about the freebsd-current
mailing list