diff --git a/Makefile b/Makefile index 28cef568312a..305e1b948bb5 100644 --- a/Makefile +++ b/Makefile @@ -122,6 +122,7 @@ TGTS= all all-man buildenv buildenvvars buildkernel buildworld \ check check-old check-old-dirs check-old-files check-old-libs \ checkdpadd checkworld clean cleandepend cleandir cleanworld \ + cleanuniverse \ delete-old delete-old-dirs delete-old-files delete-old-libs \ depend distribute distributekernel distributekernel.debug \ distributeworld distrib-dirs distribution doxygen \ diff --git a/Makefile.inc1 b/Makefile.inc1 index 5d33ac280b0f..ad30854bc7c4 100644 --- a/Makefile.inc1 +++ b/Makefile.inc1 @@ -2751,14 +2751,21 @@ builddtb: .PHONY # in this makefile. We don't do a cleandir walk if MK_AUTO_OBJ is yes # since it is not possible for files to land in the wrong place. # -BW_CANONICALOBJDIR:=${OBJTOP} -cleanworld: .PHONY -.if exists(${BW_CANONICALOBJDIR}/) - -rm -rf ${BW_CANONICALOBJDIR}/* - -chflags -R 0 ${BW_CANONICALOBJDIR} - rm -rf ${BW_CANONICALOBJDIR}/* +.if make(cleanworld) +BW_CANONICALOBJDIR:=${OBJTOP}/ +.elif make(cleanuniverse) +BW_CANONICALOBJDIR:=${OBJROOT} +.if ${MK_UNIFIED_OBJDIR} == "no" +.error ${.TARGETS} only supported with WITH_UNIFIED_OBJDIR enabled. .endif -.if ${MK_AUTO_OBJ} == "no" +.endif +cleanworld cleanuniverse: .PHONY +.if !empty(BW_CANONICALOBJDIR) && exists(${BW_CANONICALOBJDIR}) + -rm -rf ${BW_CANONICALOBJDIR}* + -chflags -R 0 ${BW_CANONICALOBJDIR} + rm -rf ${BW_CANONICALOBJDIR}* +.endif +.if make(cleanworld) && ${MK_AUTO_OBJ} == "no" .if ${.CURDIR} == ${.OBJDIR} || ${.CURDIR}/obj == ${.OBJDIR} # To be safe in this case, fall back to a 'make cleandir' ${_+_}@cd ${.CURDIR}; ${MAKE} cleandir diff --git a/share/man/man7/build.7 b/share/man/man7/build.7 index b0b634654c84..b24a3d52bd92 100644 --- a/share/man/man7/build.7 +++ b/share/man/man7/build.7 @@ -207,8 +207,15 @@ for cross builds and native builds with variable set. .It Cm cleanworld Attempt to clean up targets built by a preceding -.Cm buildworld -step. +.Cm buildworld , +or similar step built from this source directory. +.It Cm cleanuniverse +When +.Va WITH_UNIFIED_OBJDIR +is enabled, attempt to clean up targets built by a preceding +.Cm buildworld , +.Cm universe , +or similar step, for any architecture built from this source directory. .It Cm distributeworld Distribute everything compiled by a preceding .Cm buildworld