[Build] Enabling automatic object directory creation
Bryan Drewery
bdrewery at FreeBSD.org
Tue Oct 31 00:56:29 UTC 2017
On 5/25/2016 11:20 AM, Bryan Drewery 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.
>
> 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 have 2 reviews for this:
Changing the default OBJDIR to be like:
/usr/obj/<srcdir>/<target>.<target_arch>/<reldir> is at
https://reviews.freebsd.org/D12840
Enabling AUTO_OBJ if the wanted MAKEOBJDIR is writable is at
https://reviews.freebsd.org/D12841
--
Regards,
Bryan Drewery
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: OpenPGP digital signature
URL: <http://lists.freebsd.org/pipermail/freebsd-arch/attachments/20171030/bcddf534/attachment.sig>
More information about the freebsd-arch
mailing list