Re: Default NO_CLEAN=yes in 15+

"Bjoern A. Zeeb" <[email protected]>
Newsgroups gmane.os.freebsd.architechture
Message-ID <[email protected]>
On Tue, 23 Jul 2024, John Baldwin wrote:

> On 7/23/24 16:08, Shawn Webb wrote:
>> On Tue, Jul 23, 2024 at 03:58:13PM -0400, John Baldwin wrote:
>>> The buildworld and buildkernel targets include a "clean" step before 
>>> building
>>> objects dating back before my time to 'make world' (I haven't looked to 
>>> see
>>> how far back it goes).  To permit incremental builds, this step can be 
>>> skipped
>>> via NO_CLEAN=yes.  This step is a bit unusual in build systems however. 
>>> Most
>>> build systems have separate commands for building vs cleaning (e.g. 'make 
>>> all'
>>> vs 'make clean') and over time FreeBSD's build system has gained dedicated
>>> clean targets as well (cleanworld and cleankernel).  For myself, I always
>>> use NO_CLEAN=yes when building worlds and kernels.  If I need a clean 
>>> build
>>> I use the dedicated clean targets (e.g. cleanworld) first.  In particular,
>>> cleanworld/cleankernel are far more efficient since they use a single
>>> recursive 'rm' whereas the "clean" step involves a full tree walk with
>>> nested make invocations of the 'cleandir' target.
>>> 
>>> A few years ago, Ed Maste added a MK_CLEAN option to src.opts.mk to as a
>>> WITH/WITHOUT knob for the "clean" step similar to NO_CLEAN=yes.  To 
>>> preserve
>>> existing behavior this knob currently defaults to on, but I know Ed's goal
>>> was to eventually flip the default so that NO_CLEAN builds would be the
>>> default.  I would like us to do that starting in 15.
>> 
>> It would make sense to me to default MK_CLEAN=no in release branches.
>> Perhaps stable branches, too. While I don't hold a strong opinion on
>> the matter, I would prefer MK_CLEAN=yes to remain the default on the
>> main branch.
>> 
>> I can't give tangible examples, but I remember running into weird
>> issues occasionally when using `make buildworld WITHOUT_CLEAN=yes` in
>> main. I probably should do a better job at documenting those
>> (infrequent) issues when they arise.
>
> To be clear, the suggestion is that when you hit an issue, just run
> 'make cleanworld' rather than relying on the omission of NO_CLEAN=yes
> to do this for you (and much slower at that).  Have you used any other
> build systems where 'make' does an implicit 'make clean' before it
> builds?  I have never encountered another where this is true.  'clean' is
> always a separate target from 'all' in my experience.

Can we (if not in 15 but then in 16) simply:

(1) document clean builds as make cleanblah .. && make blah
(2) document that if we do not run make cleanblah we'll get an
     incremental build
(3) if an incremental build fails (CI will detect as well) -- do as Ed
     said
(4) make sure re and so are aware of the extra make cleanblah needed?
(5) remove NO_CLEAN and MK_CLEAN entirely (there's no point in flipping
     the default if you can choose to run a make step or not)?

I think that is basically your suggestion?

+101 for that from here.

/bz

-- 
Bjoern A. Zeeb                                                     r15:7
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.