Date: Tue, 23 Jul 2024 15:58:13 -0400 From: John Baldwin <jhb@FreeBSD.org> To: arch@FreeBSD.org Subject: Default NO_CLEAN=yes in 15+ Message-ID: <9bbb12ee-d5e0-4e9c-a832-bbfe5eea0ba6@FreeBSD.org>
next in thread | raw e-mail | index | archive | help
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. Further off, I would suggest that we remove the "clean" step outright, perhaps in 16.x. Regardless, we will need to update documentation to prefer the clean targets over WITH_CLEAN=yes if our docs do not do this already. -- John Baldwin
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?9bbb12ee-d5e0-4e9c-a832-bbfe5eea0ba6>