Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 23 Feb 2023 12:25:03 -0800
From:      "Simon J. Gerraty" <sjg@juniper.net>
To:        Mark Millard <marklmi@yahoo.com>
Cc:        Bryan Drewery <bdrewery@FreeBSD.org>, Current FreeBSD <freebsd-current@FreeBSD.org>, Peter <pmc@citylink.dinoex.sub.org>, <sjg@juniper.net>
Subject:   Re: FYI: Why META_MODE rebuilds so much for building again after installworld (no source changes)
Message-ID:  <30.1677183903@kaos.jnpr.net>
In-Reply-To: <B11DA944-90E7-42D9-81A4-145686767305@yahoo.com>
References:  <B74790D9-FBC2-4818-BEAF-34E5B705C460@yahoo.com> <3345EBA5-A09C-4E3F-B94D-39F57F56BDBB@yahoo.com> <DB0C7B41-2101-4C5C-BFC8-3C95CC0B9F6F@yahoo.com> <73088.1611797582@kaos.jnpr.net> <CB7040D0-3BF4-496F-A54F-87E5378016E0@yahoo.com> <F6BF110D-7855-4A10-A53F-52B34282234F@yahoo.com> <10819.1677108389@kaos.jnpr.net> <76FA98EF-6184-4D7E-A01F-0EE8117D0D10@yahoo.com> <29887.1677115125@kaos.jnpr.net> <27790339-240F-4C97-97C7-38AFD8DE03D5@yahoo.com> <72419.1677133429@kaos.jnpr.net> <B11DA944-90E7-42D9-81A4-145686767305@yahoo.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Mark Millard <marklmi@yahoo.com> wrote:
> >> Also, OBJTOP is not constant over all the parts of
> >> buildworld buildkernel . Having the late-substitution
> >> form of notation ${OBJTOP} might not be appropriate
> >> for the content of .MAKE.META.IGNORE_PATHS .
> >
> > Fwiw .MAKE.META.IGNORE_PATHS is evaluated when meta_init() is
> > called after all the makefiles have been read - and had a
> > chance to influence .MAKE.MODE, so I'm not sure how varaiablity of
> > OBJTOP would matter?
> =

> To my knowledge, there is no place to find documentation
> about when/how-often the .MAKE.META.IGNORE_PATHS original
> text is reevaluated other than the above statement or
> source code inspection. (Others have a similar status.)

True.  That should be fixed.
.MAKE.META.IGNORE_PATHS is only evaluated once by make
after all makefiles have been read.  It is use to populate a list.

By contrast .MAKE.META.IGNORE_PATTERNS and .MAKE.META.IGNORE_FILTER
are evaluated for every line of filemon output - but again all that
happens after all makefiles have been read.

> -dV -V.MAKE.META.IGNORE_PATHS use does list ${__MAKE_SHELL}
> but lists /bin/sh without the -dV . (So -V use does not
> give a direct clue at what you report.)

One of the local changes to bmake in FreeBSD is that =

without -dV -V shows the fully resolved value.

> I got past the issue using :=3D before reading the above.
> (I'm also using MAKEOBJDIR instead of OBJTOP currently.)

Per my last response, I'd be pretty sure MAKEOBJDIR is incorrect.
> =

> >>> .MAKE.META.IGNORE_PATHS+=3D ${OBJTOP}/tmp/
> >>
> >> (Ignoring the variability of OBJTOP issue . . .)
> >>
> >> I do not expect that would work: ignoring things
> >> it likely should not.
> >
> > Sure, but it may be useful as an experiment to ensure things are
> > behaving as expected.
> =

> As a test:
> =

> .if ${.MAKE.LEVEL} =3D=3D 0
> .MAKE.META.IGNORE_PATHS+=3D ${MAKEOBJDIR:tA}/tmp/
> .MAKE.META.IGNORE_PATHS:=3D ${.MAKE.META.IGNORE_PATHS}
> .endif

Lose the .if ${.MAKE.LEVEL} =3D=3D 0
it is almost certainly keeping things from working as expected.

> I still get things like:
> =

> /usr/obj/BUILDs/main-amd64-nodbg-clang/usr/main-src/amd64.amd64/sys/GENE=
RIC-NODBG/modules/usr/main-src/sys/modules/zlib/x86.meta: 23: file '/usr/o=
bj/BUILDs/main-amd64-nodbg-clang/usr/main-src/amd64.amd64/tmp/legacy/usr/s=
bin/realpath' is newer than the target...
> Building /usr/obj/BUILDs/main-amd64-nodbg-clang/usr/main-src/amd64.amd64=
/sys/GENERIC-NODBG/modules/usr/main-src/sys/modules/zlib/x86

Because that will not be level 0 and so .MAKE.META.IGNORE_PATHS is not
set.

> =

> and:
> =

> /usr/obj/BUILDs/main-amd64-nodbg-clang/usr/main-src/amd64.amd64/sys/GENE=
RIC-NODBG/modules/usr/main-src/sys/modules/xl/opt_platform.h.meta: 12: fil=
e '/usr/obj/BUILDs/main-amd64-nodbg-clang/usr/main-src/amd64.amd64/tmp/leg=
acy/usr/sbin/ln' is newer than the target...
> Building /usr/obj/BUILDs/main-amd64-nodbg-clang/usr/main-src/amd64.amd64=
/sys/GENERIC-NODBG/modules/usr/main-src/sys/modules/xl/opt_platform.h
> =

> for both of a pair of back-to-back runs of buildworld buildkernel.
> =

> FYI: The file system is zfs with mounts that look
> like:
> =

> zoptb                           /zoptb
> zoptb/BUILDs                    /usr/obj/BUILDs
> . . .
> zoptb/BUILDs/main-amd64-nodbg-clang  /usr/obj/BUILDs/main-amd64-nodbg-cl=
ang
> . . .
> zoptb/ROOT/main-amd64           /
> . . .
> zoptb/tmp                       /tmp
> . . .
> =

> # bectl list
> BE             Active Mountpoint Space Created
> 13S-amd64      -      -          4.97G 2021-08-20 16:57
> 13_0R-amd64    -      -          4.30G 2021-08-20 16:56
> 13_1R-amd64    -      -          4.12G 2022-03-10 12:38
> main-amd64     NR     /          7.42G 2023-02-19 15:37
> old-main-amd64 -      -          2.25G 2023-02-09 19:07
> =

> (I use zfs in order to use bectl on a couple of
> systems, not for redundancy.)
> =

> =

> >> Also, I'd rather grow a smaller set of ignores
> >> gradually to make it easier to detect if an
> >> addition starts causing a problem and can be
> >> backed out. Starting with everything ignored
> >> would make things much harder to figure out
> >> when ignoring creates a problem.
> >
> > Yes.
> >
> >>
> >>> You might need ${OBJTOP:tA}/tmp/
> >>> or both.
> >
> > I found it necessary in the unit tests to add :tA to both TMPDIR
> > and .OBJDIR to get sane result on one test platform.
> >
> >>>> It is using paths that match the -dM output lines ( sbin
> >>>> use despite sbin -> ../bin being a symbolic link).
> >
> > use :tA if you want to ensure consistent results.
> =

> So, for each:
> =

> .MAKE.META.IGNORE_PATHS+=3D ${MAKEOBJDIR}/tmp/legacy/usr/sbin/${ignore_l=
egacy_tool}
> =

> I need to form an overall :tA on the path? Something
> like:
> =

> .if ${.MAKE.LEVEL} =3D=3D 0

I think you need to first get rid of that level 0 check before
worrying about anything else.

> .for ignore_legacy_tool in awk cap_mkdb cat cp crunchgen crunchide dd eg=
rep env file2c gencat grep gzip jot lex lb ln m4 mkcsmapper mktemp mv patc=
h realpath rm sed sh touch truncate uudecode uuencode
> xargs
> IGNORELEGACY_${ignore_legacy_tool}=3D ${MAKEOBJDIR}/tmp/legacy/usr/sbin/=
${ignore_legacy_tool}
> .MAKE.META.IGNORE_PATHS+=3D ${IGNORELEGACY_${ignore_legacy_tool}:tA}
> .endfor
> .for ignore_other_tool in ctfconvert objcopy nm
> IGNOREOTHER_${ignore_other_tool}=3D ${MAKEOBJDIR}/tmp/usr/bin/${ignore_o=
ther_tool}
> .MAKE.META.IGNORE_PATHS+=3D ${IGNOREOTHER_${ignore_other_tool}:tA}
> .endfor
> .MAKE.META.IGNORE_PATHS:=3D ${.MAKE.META.IGNORE_PATHS}
> .endif
> =

> Such seems to make no difference to the text reported via
> -dV -V.MAKE.META.IGNORE_PATHS in my context.

Yes, right now I think your main problem is only setting
.MAKE.META.IGNORE_PATHS at level 0



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?30.1677183903>