[SOLVED] Re: Deterministic rescue buildworld error with custom make.conf/src.conf/MAKEOBJDIRPREFIX

From: Lawrence Stewart <lstewart_at_freebsd.org>
Date: Sun, 12 Mar 2017 13:45:58 +1100
On 12/03/2017 13:37, Ian Lepore wrote:
> On Sun, 2017-03-12 at 13:27 +1100, Lawrence Stewart wrote:
>> Hi Ian,
>>
>> On 12/03/2017 10:29, Ian Lepore wrote:
>>>
>>> On Sun, 2017-03-12 at 10:22 +1100, Lawrence Stewart wrote:
>>>>
>>>> Hi all,
>>>>
>>>> I'm unable to complete buildworld with 2 recent svn revs I've
>>>> tried
>>>> (r314838 and r315059). I'm building for a slightly resource
>>>> constrained
>>>> production system so am specifying custom settings and a
>>>> different
>>>> obj
>>>> tree location so I can copy it to the target system. The error
>>>> persists
>>>> after an "rm -rf /usr/obj/*", and if parallel building is
>>>> disabled.
>>>>
>>>> The underlying build system built from r314838 via simple "make
>>>> -C
>>>> /usr/src -s -j6 buildworld buildkernel" built and installed fine,
>>>> so
>>>> the
>>>> problem seems to be around the use of the build customisations.
>>>>
>>>> Any clues?
>>>>
>>>> Cheers,
>>>> Lawrence
>>>>
>>>>
>>>> root_at_builder-head-amd64:/usr/src # cat cust_make.conf
>>>> KERNCONF=GENERIC-NODEBUG
>>>> MALLOC_PRODUCTION=YES
>>>>
>>>> root_at_builder-head-amd64:/usr/src # cat cust_src.conf
>>>> WITHOUT_PROFILE=1
>>>>
>>>> root_at_builder-head-amd64:/usr/src # make
>>>> __MAKE_CONF=/usr/src/cust_make.conf
>>>> SRCCONF=/usr/src/cust_src.conf
>>>> MAKEOBJDIRPREFIX=/usr/obj/cust buildworld buildkernel
>>>> [...]
>>>> MK_AUTO_OBJ=no
>>>> MK_TESTS=no  UPDATE_DEPENDFILE=no  _RECURSING_CRUNCH=1
>>>> CC="cc -target x86_64-unknown-freebsd12.0
>>>> --sysroot=/usr/obj/cust/usr/src/tmp
>>>> -B/usr/obj/cust/usr/src/tmp/usr/bin
>>>> -O2 -pipe   -std=gnu99    -Qunused-arguments  "  CXX="c++  -
>>>> target
>>>> x86_64-unknown-freebsd12.0 --sysroot=/usr/obj/cust/usr/src/tmp
>>>> -B/usr/obj/cust/usr/src/tmp/usr/bin -O2 -pipe -Qunused-arguments
>>>> -Wno-c++11-extensions  "  make .MAKE.MODE="normal curdirOk=yes"
>>>> .MAKE.META.IGNORE_PATHS=""  -f rescue.mk exe
>>>> cc -target x86_64-unknown-freebsd12.0
>>>> --sysroot=/usr/obj/cust/usr/src/tmp
>>>> -B/usr/obj/cust/usr/src/tmp/usr/bin
>>>> -O2 -pipe   -std=gnu99    -Qunused-arguments   -nostdlib -Wl,-dc
>>>> -r
>>>> -o
>>>> cat.lo cat_stub.o
>>>> /usr/obj/cust/usr/src/rescue/rescue//usr/src/bin/cat/cat.o
>>>> cc: error: no such file or directory:
>>>> '/usr/obj/cust/usr/src/rescue/rescue//usr/src/bin/cat/cat.o'
>>>> *** Error code 1
>>>>
>>>> There appear to be a lot of missing .o files under the rescue obj
>>>> tree:
>>>>
>>>> root_at_builder-head-amd64:/usr/src # find
>>>> /usr/obj/cust/usr/src/rescue/rescue//usr -type f
>>>> /usr/obj/cust/usr/src/rescue/rescue//usr/src/bin/sh/mksyntax.o
>>>> /usr/obj/cust/usr/src/rescue/rescue//usr/src/bin/sh/mksyntax
>>>> /usr/obj/cust/usr/src/rescue/rescue//usr/src/bin/sh/mknodes.o
>>>> /usr/obj/cust/usr/src/rescue/rescue//usr/src/bin/sh/mknodes
>>>> /usr/obj/cust/usr/src/rescue/rescue//usr/src/bin/csh/sh.err.h
>>>> /usr/obj/cust/usr/src/rescue/rescue//usr/src/bin/csh/tc.const.h
>>>> /usr/obj/cust/usr/src/rescue/rescue//usr/src/bin/csh/gethost
>>>>
>>>> compared with an obj tree on a different head system:
>>>>
>>>> find /usr/obj/usr/src/rescue/rescue/usr/ -type f | wc -l
>>>>     1552
>>>> _______________________________________________
>>>> freebsd-current_at_freebsd.org mailing list
>>>> https://lists.freebsd.org/mailman/listinfo/freebsd-current
>>>> To unsubscribe, send any mail to "freebsd-current-unsubscribe_at_fre
>>>> ebsd
>>>> .org"
>>> The MAKEOBJDIRPREFIX variable must be set in the environment, not
>>> in
>>> make.conf or on the make command line (documented in build(7)).
>> Your assertion seems at odds with my past experience and my reading
>> of
>> the man page... from build(7):
>>
>> 	The build may be controlled by defining make(1) variables
>> 	described in the ENVIRONMENT section below, and by the
>> 	variables documented in make.conf(5).
>>
>> ... which indicates they are make variables, not environment
>> variables
>> specifically. As a concrete example, TARGET and DESTDIR are listed
>> under
>> the "ENVIRONMENT" section of the man page, yet "EXAMPLES" shows:
>>
>>            make TARGET=sparc64 buildworld
>>            make TARGET=sparc64 DESTDIR=/clients/sparc64 installworld
>>
>> I've certainly always set build vars documented in the "ENVIRONMENT"
>> section of the man page on the make command line without issue.
>> Pretty
>> sure I've set MAKEOBJDIRPREFIX from the make command line also in the
>> past, though perhaps it has been working for me "by accident" and a
>> documentation tweak is in order if the distinction you make is in
>> fact
>> relevant...
>>
>> Cheers,
>> Lawrence
>> _______________________________________________
>> freebsd-current_at_freebsd.org mailing list
>> https://lists.freebsd.org/mailman/listinfo/freebsd-current
>> To unsubscribe, send any mail to "freebsd-current-unsubscribe_at_freebsd
>> .org"
> 
> You cited everything from build(7) except the part most on-point for
> the problem you're having:
> 
>     MAKEOBJDIRPREFIX
>         Defines the prefix for directory names in the tree of
>         built objects.  Defaults to /usr/obj if not defined.  This variable
>         should only be set in the environment and not via /etc/make.conf or the
>         command line.

Oh dear. I *completely* glossed over that... multiple times. Derp.

Thank you for the liberal application of clue bat and my apologies for
the noise

Cheers,
Lawrence
Received on Sun Mar 12 2017 - 01:47:26 UTC

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