crochet build fails at ubldr Wandboard-Dual

Ian Lepore ian at freebsd.org
Sun Apr 19 22:25:57 UTC 2015


On Sun, 2015-04-19 at 14:57 -0700, Waitman Gobble wrote:
> Waitman Gobble
> Los Altos, California USA
> 510 830 7975
> On Apr 19, 2015 1:26 PM, "Tim Kientzle" <tim at kientzle.com> wrote:
> >
> >
> > >>>
> > >>> Somebody reported this on IRC yesterday as well, but I can't reproduce
> > >>> it here.  I don't use crochet, so it must be doing something a bit
> > >>> different to end up with the lib from /usr instead of the local one in
> > >>> objdir.  There should be no need to set LIBSTAND externally.
> > >>>
> > >>
> > >> Thanks for the reply. Unfortunately I missed the discussion on IRC.
> > >>
> > >> I suppose I'll have to backtrack through and find out where it
> > >> _should_ be set to solve the problem. (?) For now, the workaround gets
> > >> the build to finish.
> > >>
> > >
> > > It shouldn't be set anywhere, it should just work.  That's kind of my
> > > point... my build process is just the standard "make buildworld
> > > TARGET_ARCH=armv6hf UBDLR_ADDR=<whatever>" and it just works.  I don't
> > > know what crochet is doing differently (and you only included a fragment
> > > of the build log that didn't include the command used to start the
> > > build).
> > >
> >
> >
> > Crochet does use the standard build machinery; the only significant
> difference is that it builds ubldr separately after a successful
> buildworld.  Building ubldr separately allows it to reuse the buildworld
> results when building for multiple boards with the same TARGET_ARCH but
> varying UBLDR_LOADADDR.
> >
> > The detailed logic is in lib/freebsd.sh, I’ve pasted it below (with a few
> variables substituted in and some error checking removed to clarify):
> >
> >     cd ${FREEBSD_SRC}
> >     ubldr_makefiles=${FREEBSD_SRC}/share/mk
> >     buildenv=`make TARGET_ARCH=$TARGET_ARCH buildenvvars`
> >
> >     cd ${FREEBSD_SRC}/sys/boot
> >     eval $buildenv make UBLDR_LOADADDR=0x11000000 -m $ubldr_makefiles obj
> >     eval $buildenv make UBLDR_LOADADDR=0x11000000 -m $ubldr_makefiles
> clean
> >     eval $buildenv make UBLDR_LOADADDR=0x11000000 -m $ubldr_makefiles
> depend
> >     eval $buildenv make UBLDR_LOADADDR=0x11000000 -m $ubldr_makefiles all
> >
> >     cd arm/uboot
> >     eval $buildenv make UBLDR_LOADADDR=0x11000000 DESTDIR=${UBLDR_DIR}/
> BINDIR=boot NO_MAN=true -m $ubldr_makefiles install
> >
> > The last bit here is just a way to get the FreeBSD makefiles to copy the
> built executable to a known location (otherwise, Crochet has to reproduce
> the FreeBSD build system logic for determining which objdir layout to use).
> >
> > Cheers,
> >
> > Tim
> >
> 
> Thanks,
> 
> So maybe its truly a documentation issue since everyone is convinced
> crochet is correct. I didnt see that mentioned in the docs.
> 
> Waitman

I'm not in at all convinced that crochet is correct.  It used to work
and now it doesn't, but maybe it used to work by accident and some
recent change has made that accident less fortunate.  The technique Tim
mentions above of using "eval $buildenv" strikes me as fragile at best.
It might be a bit better if eval were replaced with env.  To be really
robust it should probably be something like "make buildworld
installworld SUBDDIR_OVERRIDE=sys/boot TARGET_ARCH=whatever
UBLDR_LOADADDR=whatever DESTDIR=whatever"

-- Ian




More information about the freebsd-arm mailing list