Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 23 Jul 2024 17:29:12 -0400
From:      John Baldwin <jhb@FreeBSD.org>
To:        Shawn Webb <shawn.webb@hardenedbsd.org>
Cc:        arch@freebsd.org
Subject:   Re: Default NO_CLEAN=yes in 15+
Message-ID:  <71d28fd9-7679-4aaa-981e-81fa70c5da71@FreeBSD.org>
In-Reply-To: <ia2xwmohoomnica7vp7hotd7sknovyyb3hgkfrx6blekbx6qdn@aax3blyqxcer>
References:  <9bbb12ee-d5e0-4e9c-a832-bbfe5eea0ba6@FreeBSD.org> <ia2xwmohoomnica7vp7hotd7sknovyyb3hgkfrx6blekbx6qdn@aax3blyqxcer>

next in thread | previous in thread | raw e-mail | index | archive | help
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.

-- 
John Baldwin




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?71d28fd9-7679-4aaa-981e-81fa70c5da71>