Re: Should changes in src/usr.sbin/bhyve/ trigger an llvm rebuild?

From: Alexander Leidinger <Alexander_at_Leidinger.net>
Date: Tue, 30 Jan 2024 06:56:19 UTC
Am 2024-01-29 19:07, schrieb Mark Millard:
> On Jan 29, 2024, at 01:50, Alexander Leidinger 
> <Alexander@leidinger.net> wrote:
> 
>> Am 2024-01-29 00:00, schrieb Mark Millard:
>> 
>>> I would have to see make -dM output from (D) to
>>> find the specific timing relationships that lead
>>> to that. There is way to much to analyze the
>>> specifics manually, especially because dependency
>>> chains have to be considered.
>> 
>> Not -stable, but -current
> 
> Sequence going back to where a commit change was involved and
> installed/booted? That older commit was what? The newer one?
> The content of that change contributes to what range of "is
> newer than" stuff shows up in the first buildworld after the
> first installworld-then-reboot to the newer commit.

The sequence was:
  - make update
  - make buildworld buildkernel
  - create new BE
  - make installworld installkernel into the new BE
  - boot the new BE
  - do nothing with src for some days
  - read your mail
  - make -Dm buildworld

> A limiting case is doing a buildworld into an empty /usr/obj/
> like area so that its later install has everything freshly
> built (new timestamps) compared to the prior context. Then
> doing a installworld buildworld sequence may have more "is
> newer than" notices. (Some cases of updates approximate
> such a "largely rebuilt" status, others do not.)
> 
> The list is illustrative as is, just possibly not definitive.
> 
>> (no change to src, buildworld after installworld to a new BE and 
>> booting this new BE):
>> # grep newer buildworld_debug.log | grep -E 
>> 'amd64.amd64/tmp/(usr|legacy)/' | cut -d : -f 3 | sort -u
>> file 
>> '/space/system/usr_obj/space/system/usr_src/amd64.amd64/tmp/legacy/usr/include/roken.h' 
>> is newer than the target...
>> file 
>> '/space/system/usr_obj/space/system/usr_src/amd64.amd64/tmp/legacy/usr/sbin/asn1_compile' 
>> is newer than the target...
>> file 
>> '/space/system/usr_obj/space/system/usr_src/amd64.amd64/tmp/legacy/usr/sbin/awk' 
>> is newer than the target...
>> file 
>> '/space/system/usr_obj/space/system/usr_src/amd64.amd64/tmp/legacy/usr/sbin/basename' 
>> is newer than the target...
>> file 
>> '/space/system/usr_obj/space/system/usr_src/amd64.amd64/tmp/legacy/usr/sbin/cap_mkdb' 
>> is newer than the target...
>> file 
>> '/space/system/usr_obj/space/system/usr_src/amd64.amd64/tmp/legacy/usr/sbin/cat' 
>> is newer than the target...
>> file 
>> '/space/system/usr_obj/space/system/usr_src/amd64.amd64/tmp/legacy/usr/sbin/clang-tblgen' 
>> is newer than the target...
>> file 
>> '/space/system/usr_obj/space/system/usr_src/amd64.amd64/tmp/legacy/usr/sbin/compile_et' 
>> is newer than the target...
>> file 
>> '/space/system/usr_obj/space/system/usr_src/amd64.amd64/tmp/legacy/usr/sbin/cp' 
>> is newer than the target...
>> file 
>> '/space/system/usr_obj/space/system/usr_src/amd64.amd64/tmp/legacy/usr/sbin/crunchgen' 
>> is newer than the target...
>> file 
>> '/space/system/usr_obj/space/system/usr_src/amd64.amd64/tmp/legacy/usr/sbin/crunchide' 
>> is newer than the target...
>> file 
>> '/space/system/usr_obj/space/system/usr_src/amd64.amd64/tmp/legacy/usr/sbin/dd' 
>> is newer than the target...
>> file 
>> '/space/system/usr_obj/space/system/usr_src/amd64.amd64/tmp/legacy/usr/sbin/env' 
>> is newer than the target...
>> file 
>> '/space/system/usr_obj/space/system/usr_src/amd64.amd64/tmp/legacy/usr/sbin/file2c' 
>> is newer than the target...
>> file 
>> '/space/system/usr_obj/space/system/usr_src/amd64.amd64/tmp/legacy/usr/sbin/gencat' 
>> is newer than the target...
>> file 
>> '/space/system/usr_obj/space/system/usr_src/amd64.amd64/tmp/legacy/usr/sbin/grep' 
>> is newer than the target...
>> file 
>> '/space/system/usr_obj/space/system/usr_src/amd64.amd64/tmp/legacy/usr/sbin/gzip' 
>> is newer than the target...
>> file 
>> '/space/system/usr_obj/space/system/usr_src/amd64.amd64/tmp/legacy/usr/sbin/jot' 
>> is newer than the target...
>> file 
>> '/space/system/usr_obj/space/system/usr_src/amd64.amd64/tmp/legacy/usr/sbin/lex' 
>> is newer than the target...
>> file 
>> '/space/system/usr_obj/space/system/usr_src/amd64.amd64/tmp/legacy/usr/sbin/lldb-tblgen' 
>> is newer than the target...
>> file 
>> '/space/system/usr_obj/space/system/usr_src/amd64.amd64/tmp/legacy/usr/sbin/llvm-min-tblgen' 
>> is newer than the target...
>> file 
>> '/space/system/usr_obj/space/system/usr_src/amd64.amd64/tmp/legacy/usr/sbin/llvm-tblgen' 
>> is newer than the target...
>> file 
>> '/space/system/usr_obj/space/system/usr_src/amd64.amd64/tmp/legacy/usr/sbin/ln' 
>> is newer than the target...
>> file 
>> '/space/system/usr_obj/space/system/usr_src/amd64.amd64/tmp/legacy/usr/sbin/m4' 
>> is newer than the target...
>> file 
>> '/space/system/usr_obj/space/system/usr_src/amd64.amd64/tmp/legacy/usr/sbin/make-roken' 
>> is newer than the target...
>> file 
>> '/space/system/usr_obj/space/system/usr_src/amd64.amd64/tmp/legacy/usr/sbin/mkcsmapper' 
>> is newer than the target...
>> file 
>> '/space/system/usr_obj/space/system/usr_src/amd64.amd64/tmp/legacy/usr/sbin/mkesdb' 
>> is newer than the target...
>> file 
>> '/space/system/usr_obj/space/system/usr_src/amd64.amd64/tmp/legacy/usr/sbin/mv' 
>> is newer than the target...
>> file 
>> '/space/system/usr_obj/space/system/usr_src/amd64.amd64/tmp/legacy/usr/sbin/rm' 
>> is newer than the target...
>> file 
>> '/space/system/usr_obj/space/system/usr_src/amd64.amd64/tmp/legacy/usr/sbin/sed' 
>> is newer than the target...
>> file 
>> '/space/system/usr_obj/space/system/usr_src/amd64.amd64/tmp/legacy/usr/sbin/sh' 
>> is newer than the target...
>> file 
>> '/space/system/usr_obj/space/system/usr_src/amd64.amd64/tmp/legacy/usr/sbin/touch' 
>> is newer than the target...
>> file 
>> '/space/system/usr_obj/space/system/usr_src/amd64.amd64/tmp/legacy/usr/sbin/truncate' 
>> is newer than the target...
>> file 
>> '/space/system/usr_obj/space/system/usr_src/amd64.amd64/tmp/legacy/usr/sbin/uudecode' 
>> is newer than the target...
>> file 
>> '/space/system/usr_obj/space/system/usr_src/amd64.amd64/tmp/legacy/usr/sbin/uuencode' 
>> is newer than the target...
>> file 
>> '/space/system/usr_obj/space/system/usr_src/amd64.amd64/tmp/usr/bin/objcopy' 
>> is newer than the target...
>> 
>> There is no dependency to outside the obj tree.
>> 
>> Would it make sense to exclude the tmp/legacy/usr/sbin/... 
>> dependencies? Or a subset? The tmp/usr/bin/objcopy is probably in the 
>> middle of a rebuild, but the name legacy gives the impression that not 
>> a lot of features are needed from those (basics to build our own 
>> version?).
>> 
>> Note, grep for "newer" gives >12000 hits.
> 
> For awk, basename, cat, dd, env, grep, gzip, lex, ln, m4, mv, rm,
> sed, sh, touch, truncate, uudecode, and uuenncode (for example):
> 
> The "is newer than" status is both real and highly likely to be
> irrelevant. META_MODE is based on just the "real" status of "is
> newer than".
> 
> There are other items in the list that I'd be less sure of if
> they are likely to always be irrelevant. Possibly.

The lldvm/lldb/clang ones may be related to a rebuild of llvm triggered 
by irrelevant time changes according to your description. I haven't 
found "is newer than" evidence in the debug output why those legacy ones 
are newer. If I assume those are touched by installworld, we could do 
maybe some kind of check if checksums are equal and not install into 
legacy if they are. This would then require more work on install, but 
may result in less work on buildworld.

> As I remember, I did get example "is newer than" notices that
> were not from /usr/obj/ like areas, not that I remember the
> details any more. (So I could be misremembering.)

Maybe in the installworld stage /usr/sbin/sh newer than 
OBJDIR/..../legacy/usr/sbin/sh?

Bye,
Alexander.

-- 
http://www.Leidinger.net Alexander@Leidinger.net: PGP 0x8F31830F9F2772BF
http://www.FreeBSD.org    netchild@FreeBSD.org  : PGP 0x8F31830F9F2772BF