HomeFreeBSD

tools/build/make.py: Make --with-default-sys-path mirror usr.bin/bmake

Description

tools/build/make.py: Make --with-default-sys-path mirror usr.bin/bmake

The top-level Makefile passes -m to its sub-makes in order to ensure
they use the in-tree mk files in share/mk, but the top-level make itself
has to rely on whatever environment the bmake used has. For FreeBSD, we
configure the system bmake with .../share/mk:/usr/share/mk, which means
it will pick up src's share/mk whenever run from within the src tree,
but currently for non-FreeBSD we configure our bootstrap bmake only with
bmake's own mk files. This is mostly compatible, with two exceptions:

  1. "targets" runs at the top level, but needs TARGET_MACHINE_LIST and the corresponding MACHINE_ARCH_LIST_${target}, otherwise it will just print an empty list.
  1. "universe" and "universe-toolchain", when run at the top level (i.e. not via the various wrappers around universe like tinderbox), end up failing in universe-toolchain itself with:

    bmake[1]: "/path/to/freebsd/share/mk/src.sys.obj.mk" line 112: Cannot use MAKEOBJDIR= Unset MAKEOBJDIR to get default: MAKEOBJDIR='${.CURDIR:S,^${SRCTOP},${OBJTOP},}'

By including .../share/mk in the default sys path like FreeBSD's system
bmake we ensure that we get the in-tree mk files for the top-level make,
not just sub-makes, and avoid such issues.

Note that we cannot (yet) stop using the installed mk files, since the
MAKEOBJDIRPREFIX check in Makefile runs in the object directory and uses
env -i, thereby losing the MAKESYSPATH exported by src.sys.env.mk. Other
such issues may also exist, though are likely rare if so.

Reviewed by: sjg
Differential Revision: https://reviews.freebsd.org/D41544

Details

Provenance
jrtc27Authored on Aug 23 2023, 4:56 PM
Reviewer
sjg
Differential Revision
D41544: tools/build/make.py: Make --with-default-sys-path mirror usr.bin/bmake
Parents
rG69cfdc81ea7b: tools/build/make.py: Keep bootstrapped bmake binary up-to-date
Branches
Unknown
Tags
Unknown