Hello Mark,

Minutes ago I used a more tradicional way:

# make buildworld-jobs buildkernel-jobs

```
RELEASE=Whatever
> bectl create ${RELEASE}
> bectl mount ${RELEASE}
BASEDIR=/tmp/be_mount.XXXX # Use mount point returned by bectl mount

> make DESTDIR=${BASEDIR} installkernel
> etcupdate -p -D ${BASEDIR}
> make DESTDIR=${BASEDIR} installworld
> etcupdate -D ${BASEDIR}
> bectl activate ${RELEASE}
> reboot
```

# make buildworld-jobs[1] buildkernel-jobs[2]
[1] did not compile
[2] compiled

# make buildworld-jobs[1] buildkernel-jobs[2]
[1] did not compile
[2] did not compile

Cheers,

Mark Millard <mark...@yahoo.com> escreveu (segunda, 5/05/2025 à(s) 23:18):

> Nuno Teixeira <eduardo_at_freebsd.org> wrote on
> Date: Mon, 05 May 2025 20:37:09 UTC :
>
> > (...)
> >
> > Don't forget to `env NO_PKG_UPGRADE=yes beinstall.sh` to not mess with
> > ports and stuff.
> >
> > Nuno Teixeira <edua...@freebsd.org> escreveu (segunda, 5/05/2025 à(s)
> > 21:34):
> >
> > > Hello,
> > >
> > > Using incremental WITH_META_MODE builds, after installation with
> > > beinstall.sh, building same src, a complete compilation happens.
> > >
> > > If someone uses this script, could you please do the following test:
> > >
> > > WITH_META_MODE=yes (/etc/src-env.conf)
> > > filemon module loaded
> > >
> > > # cd /usr/src
> > > # make buildworld-jobs buildkernel-jobs
>
> The above used older commands and files from before
> the following install. META_MODE recorded the use of
> those commands.
>
> Example .meta mode file content:
>
> # Meta data file
> /usr/obj/amd64_clang/amd64.amd64/usr/fbsd/mm-src/amd64.amd64/lib/libc++/libc++.a.meta
> CMD @echo building static c++ library
> CMD @rm -f libc++.a
> CMD ar -crsD libc++.a algorithm.o any.o atomic.o barrier.o bind.o
> charconv.o chrono.o condition_variable.o condition_variable_destructor.o
> debug.o exception.o filesystem/directory_iterator.o filesyste
> m/int128_builtins.o filesystem/operations.o functional.o future.o hash.o
> ios.o iostream.o locale.o memory.o mutex.o mutex_destructor.o new.o
> optional.o random.o random_shuffle.o regex.o shared_mutex.o
> stdexcept.o string.o strstream.o system_error.o thread.o typeinfo.o
> utility.o valarray.o variant.o vector.o cxxrt_auxhelper.o
> cxxrt_dynamic_cast.o cxxrt_exception.o cxxrt_guard.o cxxrt_libelftc_dem_g
> nu3.o cxxrt_memory.o cxxrt_stdexcept.o cxxrt_terminate.o cxxrt_typeinfo.o
> CWD /usr/obj/amd64_clang/amd64.amd64/usr/fbsd/mm-src/amd64.amd64/lib/libc++
> TARGET libc++.a
> -- command output --
> building static c++ library
>
> -- filemon acquired metadata --
> # filemon version 5
> # Target pid 22471
> # Start 1611359217.214996
> V 5
> E 22961 /bin/sh
> R 22961 /etc/libmap.conf
> R 22961 /var/run/ld-elf.so.hints
> R 22961 /lib/libedit.so.7
> R 22961 /lib/libc.so.7
> R 22961 /lib/libncursesw.so.9
> R 22961 /usr/share/locale/C.UTF-8/LC_CTYPE
> F 22961 22962
> E 22962
> /usr/obj/amd64_clang/amd64.amd64/usr/fbsd/mm-src/amd64.amd64/tmp/legacy/usr/sbin/rm
> R 22962 /etc/libmap.conf
> R 22962 /var/run/ld-elf.so.hints
> R 22962 /lib/libc.so.7
> R 22962 /usr/share/locale/C.UTF-8/LC_CTYPE
> D 22962 libc++.a
> X 22962 0 0
> . . .
>
> So META_MODE has lots of files that were used
> that it can later detect being newer than the
> prior build results, leading to rebuilds based
> on those newer files.
>
> > > # ./tools/build/beinstall.sh
>
> The new be will have various updated files
> that could be different by content and, for
> commands, could behave differently than those
> used to do the prior build. Detecting newer
> time stamps on such used files leads to
> rebuild activity.
>
> More than /usr/src/ and /usr/obj/ content
> are involved as well.
>
> Note that the new be is based on somewhat
> different files than the original
> buildworld-jobs buildkernel-jobs was based
> on.
>
> > > # reboot
> > >
>
> (I presume booting into the new be here.)
>
> > > # cd /usr/src
> > > # make buildworld-jobs buildkernel-jobs
>
> META_MODE will notice when commands are used
> that are newer than when the prior build was
> done. Similarly  for other files that may be
> read. It will make sure that the newer commands
> and files are allowed to produce new results
> that potentially could be distinct in content
> from what the old context produced for results.
>
> > >
> > > Since src and obj are the same from one BE to newer BE, minimal
> > > compilation should happen, not a full one.
>
> META_MODE is more careful than that.
>
> Note: I'm not claiming that new behavior that is
> needed is likely for lots of the files with new
> dates. But META_MODE is biased to avoiding leaving
> in place something that should have been updated.
>
> > >
> > > Am I missing something here?
> > >
>
> Note that make has a -dM option:
>
>              M       Print debugging information about “meta” mode
> decisions
>                      about targets.
>
> So, for example,
>
> file
> '/usr/obj/amd64_clang/amd64.amd64/usr/fbsd/mm-src/amd64.amd64/tmp/legacy/usr/sbin/awk'
> is newer than the target...
> file
> '/usr/obj/amd64_clang/amd64.amd64/usr/fbsd/mm-src/amd64.amd64/tmp/legacy/usr/sbin/cap_mkdb'
> is newer than the target...
> file
> '/usr/obj/amd64_clang/amd64.amd64/usr/fbsd/mm-src/amd64.amd64/tmp/legacy/usr/sbin/cat'
> is newer than the target...
> file
> '/usr/obj/amd64_clang/amd64.amd64/usr/fbsd/mm-src/amd64.amd64/tmp/legacy/usr/sbin/cp'
> is newer than the target...
> file
> '/usr/obj/amd64_clang/amd64.amd64/usr/fbsd/mm-src/amd64.amd64/tmp/legacy/usr/sbin/crunchgen'
> is newer than the target...
> file
> '/usr/obj/amd64_clang/amd64.amd64/usr/fbsd/mm-src/amd64.amd64/tmp/legacy/usr/sbin/crunchide'
> is newer than the target...
> file
> '/usr/obj/amd64_clang/amd64.amd64/usr/fbsd/mm-src/amd64.amd64/tmp/legacy/usr/sbin/dd'
> is newer than the target...
> . . .
>
> Various . . ./tmp/legacy/. . ./*bin/ actually were
> links to files.
>
> Ultimately buildworld then installworld lead to new
> dates for a bunch of files used. Later use of
> META_MODE notices such and rebuilds based on the
> newer files. (It is a lot of detail to go through
> it all.)
>
> Back in 2021 and 2023 I got help with exploring
> avoiding lots of these. But, in the end, it
> involved use of experimental code in
> share/mk/src.sys.obj.mk to provide a new
> definition to use to build some paths with.
>
> The experiments were an unsupported activity that
> produced an unsupported change to allow
> configurable enabling of taking risks with not
> updating files that possibly should be updated.
>
> ===
> Mark Millard
> marklmi at yahoo.com
>
>

-- 
Nuno Teixeira
FreeBSD UNIX:  <edua...@freebsd.org>   Web:  https://FreeBSD.org

Reply via email to