Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 28 May 2016 22:58:39 -0600
From:      Warner Losh <imp@bsdimp.com>
To:        Bryan Drewery <bdrewery@freebsd.org>
Cc:        "freebsd-arch@freebsd.org" <freebsd-arch@freebsd.org>
Subject:   Re: [Build] Enabling automatic object directory creation
Message-ID:  <CANCZdfotR8dsBrK-NzGj%2BLg-A0E%2BF2JLTaZQ%2Bhq%2Bqmh8dnMTgw@mail.gmail.com>
In-Reply-To: <5e8f0d99-dab1-36a8-1aac-328de4490145@FreeBSD.org>
References:  <5e8f0d99-dab1-36a8-1aac-328de4490145@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, May 25, 2016 at 12:20 PM, Bryan Drewery <bdrewery@freebsd.org> wrote:
> For in-tree source builds only, I would like to make it so that 'make'
> in a subdirectory would automatically create the object directory.  This
> would naturally extend to buildworld/buildkernel as well with some
> tweaks.  I already am nearly done with adding this in for buildworld and
> was going to just make it happen since the 'make obj' tree-walk is a
> waste of time.  It is very error-prone to not automatically create an
> object directory when building in a subdirectory as it may look for
> files in the wrong place.  So I would prefer to add it everywhere instead.
>
> What is the impact of this feature?
>
> Keep in mind this would *only affect in-tree builds, not ports*.
>
> We would need to move the 'default' MAKEOBJDIRPREFIX from
> Makefile/Makefile.inc1 into share/mk/sys.mk.  It would only be
> overridable from environment and make argument, but also
> /etc/src-env.conf (I think).  This restriction is already in place.  I
> would have to move the assertion for this out of /Makefile and into
> sys.mk.  Now when I say sys.mk I really mean something like
> src.sys.env.mk. which is hidden in a way to only impact in-tree builds.
>
> The feature is named 'WITH_AUTO_OBJ'.  Enabling this by default means
> that the only way to disable it is to add WITHOUT_AUTO_OBJ=yes to
> environment, make argument or /etc/src-env.conf.

I tend to think this is a good idea. However, more and more is moving
into sys.mk, and it's been collecting lots of odd pebbles...

> There are times when building in a directory without an object directoy
> makes sense, but for the vast majority of people they likely have done a
> buildworld already and are trying to build in a subdirectory to test
> something further.  If they pulled down new revisions then it is
> possible that this new directory did not get a 'make obj' tree-walk.
>
> A side topic is changing the default MAKEOBJDIR such that it always uses
> ${MAKEOBJDIRPREFIX}/${SRCTOP}/${TARGET}.${TARGET_ARCH}/${RELDIR}.  Doing
> this is far simpler if I can just use WITH_AUTO_OBJ everywhere.  This is
> discussed a bit in https://reviews.freebsd.org/D3711.  It would give
> directories such as: /usr/obj/usr/src/amd64.amd64/bin/sh.  It would keep
> all universe/cross-builds inside of /usr/obj/usr/src and allow more
> easily cleaning up object trees with multiple checkouts.  This object
> tree pattern is what the DIRDEPS_BUILD uses as well and has been quite
> handy.  I would extend the DIRDEPS_BUILD 'make destroy' and 'make
> destroy-arch', to the normal build, to cleanup the entire object tree
> for the object directory and the specified target.target_arch respectively.

I think this is a good idea. I've had hacks like this in the past
because they are quite useful. though named differently and perhaps
with different scopes.

Warner



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CANCZdfotR8dsBrK-NzGj%2BLg-A0E%2BF2JLTaZQ%2Bhq%2Bqmh8dnMTgw>