crochet build fails at ubldr Wandboard-Dual
Tim Kientzle
tim at kientzle.com
Sat Apr 25 17:58:48 UTC 2015
> On Apr 19, 2015, at 4:44 PM, O'Connor, Daniel <darius at dons.net.au> wrote:
>
>
>> On 20 Apr 2015, at 08:41, Tim Kientzle <tim at kientzle.com> wrote:
>>>>
>>>> Crochet does use the standard build machinery; the only significant difference is that it builds ubldr separately after a successful buildworld. ...
>>>
>>> So maybe its truly a documentation issue since everyone is convinced crochet is correct. I didnt see that mentioned in the docs.
>>>
>> You’ve certainly encountered a problem but I don’t yet have enough information to say anything more. Certainly, Ian is right that you should not have to set LIBSTAND to make this work.
>>
>> Unfortunately, it will be at least a few days before I have a chance to try reproducing what you’re seeing. If you can reproduce it consistently, please let me know; I could work up some patches based on Ian’s suggestions and you could try them to see if they change anything.
>>
>> Another things to try: blow away Crochet’s work directory before you next rebuild. In particular, that will ensure that your world build and ubldr build are consistent with each other.
>
> I had this issue also and worked around it by modifying the loader Makefiles to set LIBSTAND.
> diff --git a/sys/boot/arm/uboot/Makefile b/sys/boot/arm/uboot/Makefile
> index e0ea828..cbd173e 100644
> --- a/sys/boot/arm/uboot/Makefile
> +++ b/sys/boot/arm/uboot/Makefile
> @@ -113,6 +113,8 @@ CFLAGS+= -I${.CURDIR}/../../../../lib/libstand/
> # clang doesn't understand %D as a specifier to printf
> NO_WERROR.clang=
>
> +LIBSTAND= ${.OBJDIR}/../../../../lib/libstand/libstand.a
> +
> DPADD= ${LIBFICL} ${LIBUBOOT} ${LIBFDT} ${LIBUBOOT_FDT} ${LIBSTAND}
> LDADD= ${LIBFICL} ${LIBUBOOT} ${LIBFDT} ${LIBUBOOT_FDT} -lstand
>
> diff --git a/sys/boot/efi/loader/Makefile b/sys/boot/efi/loader/Makefile
> index 5585f78..55b8673 100644
> --- a/sys/boot/efi/loader/Makefile
> +++ b/sys/boot/efi/loader/Makefile
> @@ -29,6 +29,8 @@ SRCS= autoload.c \
> .PATH: ${.CURDIR}/../../i386/libi386
> .include "${.CURDIR}/arch/${MACHINE}/Makefile.inc"
>
> +LIBSTAND= ${.OBJDIR}/../../../../lib/libstand/libstand.a
> +
> CFLAGS+= -I${.CURDIR}
> CFLAGS+= -I${.CURDIR}/arch/${MACHINE}
> CFLAGS+= -I${.CURDIR}/../include
>
> I did it that way because I noticed some other loader Makfiles set LIBSTAND so I assumed it was removed incorrectly from the arm and uefi ones.
I think this is the right fix, though I would be more confident if I could locate the exact change that broke the earlier behavior.
Certainly most of the other boot loader Makefiles do set LIBSTAND in this way, and arm/uboot/Makefile overrides a number of other libraries to ensure they are for the target architecture and not the host architecture.
I also notice that sys/boot/arm/uboot/Makefile has the following:
# where to get libstand from
CFLAGS+= -I${.CURDIR}/../../../../lib/libstand/
It definitely looks like a bug that it’s overriding the include path for libstand but not the library path. Just above this is a similar section for libuboot that overrides both.
Tim
More information about the freebsd-arm
mailing list