git: f789381671a3 - stable/14 - zfs: merge openzfs/zfs@32949f256 (zfs-2.2-release) into stable/14
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sun, 03 Sep 2023 07:17:49 UTC
The branch stable/14 has been updated by mm:
URL: https://cgit.FreeBSD.org/src/commit/?id=f789381671a3f97496d496d8f996a67eaa8b1a33
commit f789381671a3f97496d496d8f996a67eaa8b1a33
Merge: 4c3f144478d4 32949f2560bf
Author: Martin Matuska <mm@FreeBSD.org>
AuthorDate: 2023-09-02 19:50:10 +0000
Commit: Martin Matuska <mm@FreeBSD.org>
CommitDate: 2023-09-03 07:15:24 +0000
zfs: merge openzfs/zfs@32949f256 (zfs-2.2-release) into stable/14
Notable upstream pull request merges:
#15024 Add missed DMU_PROJECTUSED_OBJECT prefetch
#15029 Do not request data L1 buffers on scan prefetch
#15036 FreeBSD: catch up to __FreeBSD_version 1400093
#15039 Fix raw receive with different indirect block size
#15047 FreeBSD: Fix build on stable/13 after 1302506
#15049 Fix the ZFS checksum error histograms with larger record sizes
#15052 Reduce bloat in ereport.fs.zfs.checksum events
#15056 Avoid extra snprintf() in dsl_deadlist_merge()
#15061 Ignore pool ashift property during vdev attachment
#15063 Don't panic if setting vdev properties is unsupported for this
vdev type
#15067 spa_min_alloc should be GCD, not min
#15071 Add explicit prefetches to bpobj_iterate()
#15072 Adjust prefetch parameters
#15079 set autotrim default to 'off' everywhere
#15080 ZIL: Fix config lock deadlock
#15088 metaslab: tuneable to better control force ganging
#15096 Avoid waiting in dmu_sync_late_arrival()
#15097 BRT should return EOPNOTSUPP
#15103 Remove zl_issuer_lock from zil_suspend()
#15107 Remove fastwrite mechanism
#15113 libzfs: sendrecv: send_progress_thread: handle SIGINFO/SIGUSR1
#15122 ZIL: Second attempt to reduce scope of zl_issuer_lock
#15129 zpool_vdev_remove() should handle EALREADY error return
#15132 ZIL: Replay blocks without next block pointer
#15148 zfs_clone_range should return descriptive error codes
#15153 ZIL: Avoid dbuf_read() before dmu_sync()
#15161 Make zoned/jailed zfsprops(7) make more sense
#15172 copy_file_range: fix fallback when source create on same txg
#15180 Update outdated assertion from zio_write_compress
#15216 Relax error reporting in zpool import and zpool split
#15227 ZIL: Tune some assertions
#15228 ZIL: Revert zl_lock scope reduction
#15233 ZIL: Change ZIOs issue order
Obtained from: OpenZFS
OpenZFS commit: 32949f2560bf35ec86dfa5d984514908e0eb3ecc
Approved by: re (gjb)
Makefile.inc1 | 5 +-
ObsoleteFiles.inc | 3 +
cddl/lib/libzfs/Makefile | 1 +
cddl/lib/libzfs/Makefile.depend | 1 +
lib/librt/Makefile | 1 +
rescue/rescue/Makefile | 2 +-
rescue/rescue/Makefile.depend | 1 +
share/mk/src.libnames.mk | 2 +-
sys/contrib/openzfs/META | 4 +-
sys/contrib/openzfs/cmd/zdb/zdb.c | 77 ++-
sys/contrib/openzfs/cmd/zed/agents/zfs_mod.c | 2 -
sys/contrib/openzfs/cmd/zed/agents/zfs_retire.c | 5 +
sys/contrib/openzfs/cmd/zed/zed.d/Makefile.am | 2 +
.../openzfs/cmd/zed/zed.d/statechange-slot_off.sh | 64 ++
sys/contrib/openzfs/cmd/zed/zed.d/zed.rc | 5 +
sys/contrib/openzfs/cmd/zpool/zpool_main.c | 34 +-
sys/contrib/openzfs/cmd/ztest.c | 2 +-
sys/contrib/openzfs/config/Shellcheck.am | 3 +-
sys/contrib/openzfs/config/kernel-blkdev.m4 | 54 ++
.../config/kernel-vfs-extended-file_range.m4 | 50 ++
.../openzfs/config/kernel-vfs-file_range.m4 | 164 +++++
sys/contrib/openzfs/config/kernel.m4 | 12 +
sys/contrib/openzfs/contrib/debian/changelog | 6 +
.../contrib/debian/openzfs-zfs-test.install | 2 -
.../contrib/debian/openzfs-zfsutils.install | 4 +-
.../contrib/dracut/90zfs/zfs-env-bootfs.service.in | 11 +-
.../dracut/90zfs/zfs-rollback-bootfs.service.in | 2 +-
sys/contrib/openzfs/include/libzfs.h | 1 +
.../openzfs/include/os/freebsd/spl/sys/vnode.h | 6 +-
.../include/os/linux/kernel/linux/blkdev_compat.h | 10 +
.../include/os/linux/kernel/linux/simd_x86.h | 19 +-
.../openzfs/include/os/linux/spl/sys/kmem_cache.h | 8 +
.../openzfs/include/os/linux/spl/sys/types.h | 2 +-
sys/contrib/openzfs/include/os/linux/zfs/sys/zpl.h | 53 ++
sys/contrib/openzfs/include/sys/bpobj.h | 2 +-
sys/contrib/openzfs/include/sys/brt.h | 1 +
sys/contrib/openzfs/include/sys/dmu.h | 4 +
sys/contrib/openzfs/include/sys/dmu_impl.h | 2 -
sys/contrib/openzfs/include/sys/dmu_zfetch.h | 2 -
sys/contrib/openzfs/include/sys/fm/fs/zfs.h | 4 -
sys/contrib/openzfs/include/sys/metaslab.h | 3 -
sys/contrib/openzfs/include/sys/metaslab_impl.h | 6 +-
sys/contrib/openzfs/include/sys/spa_impl.h | 1 +
sys/contrib/openzfs/include/sys/vdev_impl.h | 2 +-
sys/contrib/openzfs/include/sys/zil_impl.h | 44 +-
sys/contrib/openzfs/include/sys/zio.h | 1 -
sys/contrib/openzfs/include/sys/zio_checksum.h | 2 -
sys/contrib/openzfs/lib/libzfs/Makefile.am | 2 +-
sys/contrib/openzfs/lib/libzfs/libzfs_mount.c | 4 +-
sys/contrib/openzfs/lib/libzfs/libzfs_pool.c | 6 +
sys/contrib/openzfs/lib/libzfs/libzfs_sendrecv.c | 95 ++-
sys/contrib/openzfs/man/Makefile.am | 16 +-
sys/contrib/openzfs/man/man4/zfs.4 | 10 +-
sys/contrib/openzfs/man/man7/zfsprops.7 | 16 +-
sys/contrib/openzfs/man/man8/zfs-send.8 | 18 +-
sys/contrib/openzfs/man/man8/zpool-events.8 | 23 +-
sys/contrib/openzfs/man/man8/zpool.8 | 58 +-
sys/contrib/openzfs/module/Kbuild.in | 1 +
.../openzfs/module/os/freebsd/zfs/zfs_vnops_os.c | 6 +-
.../openzfs/module/os/linux/zfs/zfs_ctldir.c | 26 +-
.../openzfs/module/os/linux/zfs/zfs_vfsops.c | 7 +
.../openzfs/module/os/linux/zfs/zfs_znode.c | 8 +
sys/contrib/openzfs/module/os/linux/zfs/zpl_file.c | 29 +-
.../openzfs/module/os/linux/zfs/zpl_file_range.c | 272 ++++++++
.../openzfs/module/os/linux/zfs/zpl_super.c | 39 +-
sys/contrib/openzfs/module/zfs/bpobj.c | 49 +-
sys/contrib/openzfs/module/zfs/brt.c | 43 +-
sys/contrib/openzfs/module/zfs/dbuf.c | 11 +-
sys/contrib/openzfs/module/zfs/dmu.c | 24 +-
sys/contrib/openzfs/module/zfs/dmu_recv.c | 22 +-
sys/contrib/openzfs/module/zfs/dmu_zfetch.c | 12 +-
sys/contrib/openzfs/module/zfs/dnode.c | 31 +-
sys/contrib/openzfs/module/zfs/dsl_deadlist.c | 6 +-
sys/contrib/openzfs/module/zfs/dsl_scan.c | 17 +-
sys/contrib/openzfs/module/zfs/metaslab.c | 83 +--
sys/contrib/openzfs/module/zfs/spa_misc.c | 1 +
sys/contrib/openzfs/module/zfs/vdev.c | 90 ++-
sys/contrib/openzfs/module/zfs/vdev_indirect.c | 2 +-
sys/contrib/openzfs/module/zfs/vdev_raidz.c | 2 +-
sys/contrib/openzfs/module/zfs/zfs_fm.c | 33 +-
sys/contrib/openzfs/module/zfs/zfs_vnops.c | 46 +-
sys/contrib/openzfs/module/zfs/zil.c | 764 +++++++++------------
sys/contrib/openzfs/module/zfs/zio.c | 45 +-
sys/contrib/openzfs/module/zfs/zio_checksum.c | 2 -
sys/contrib/openzfs/module/zfs/zvol.c | 6 +-
sys/contrib/openzfs/tests/runfiles/linux.run | 11 +
.../openzfs/tests/test-runner/bin/zts-report.py.in | 18 +
sys/contrib/openzfs/tests/zfs-tests/cmd/.gitignore | 1 +
.../openzfs/tests/zfs-tests/cmd/Makefile.am | 1 +
.../openzfs/tests/zfs-tests/cmd/clonefile.c | 333 +++++++++
sys/contrib/openzfs/tests/zfs-tests/cmd/readmmap.c | 1 +
.../openzfs/tests/zfs-tests/include/commands.cfg | 1 +
.../openzfs/tests/zfs-tests/tests/Makefile.am | 14 +
.../functional/block_cloning/block_cloning.kshlib | 54 ++
.../block_cloning/block_cloning_copyfilerange.ksh | 60 ++
.../block_cloning_copyfilerange_cross_dataset.ksh | 65 ++
.../block_cloning_copyfilerange_fallback.ksh | 86 +++
...ock_cloning_copyfilerange_fallback_same_txg.ksh | 66 ++
.../block_cloning_copyfilerange_partial.ksh | 68 ++
.../block_cloning_disabled_copyfilerange.ksh | 60 ++
.../block_cloning_disabled_ficlone.ksh | 50 ++
.../block_cloning_disabled_ficlonerange.ksh | 50 ++
.../block_cloning/block_cloning_ficlone.ksh | 56 ++
.../block_cloning/block_cloning_ficlonerange.ksh | 56 ++
.../block_cloning_ficlonerange_partial.ksh | 64 ++
.../tests/functional/block_cloning/cleanup.ksh | 34 +
.../tests/functional/block_cloning/setup.ksh | 36 +
.../cli_root/zpool_attach/attach-o_ashift.ksh | 30 +-
.../cli_root/zpool_replace/replace-o_ashift.ksh | 32 +-
.../cli_root/zpool_replace/replace_prop_ashift.ksh | 24 +-
sys/modules/zfs/zfs_config.h | 30 +-
sys/modules/zfs/zfs_gitrev.h | 2 +-
112 files changed, 3024 insertions(+), 896 deletions(-)
diff --cc Makefile.inc1
index 8838d31c795a,000000000000..f740cc5abcca
mode 100644,000000..100644
--- a/Makefile.inc1
+++ b/Makefile.inc1
@@@ -1,3692 -1,0 +1,3695 @@@
+#
+#
+# Make command line options:
+# -DNO_CLEANDIR run ${MAKE} clean, instead of ${MAKE} cleandir
+# -DNO_CLEAN do not clean at all
+# -DDB_FROM_SRC use the user/group databases in src/etc instead of
+# the system database when installing.
+# -DNO_SHARE do not go into share subdir
+# -DKERNFAST define NO_KERNEL{CONFIG,CLEAN,OBJ}
+# -DNO_KERNELCONFIG do not run config in ${MAKE} buildkernel
+# -DNO_KERNELCLEAN do not run ${MAKE} clean in ${MAKE} buildkernel
+# -DNO_KERNELOBJ do not run ${MAKE} obj in ${MAKE} buildkernel
+# -DNO_ROOT install without using root privilege
+# -DWITHOUT_CTF do not run the DTrace CTF conversion tools on built objects
+# LOCAL_DIRS="list of dirs" to add additional dirs to the SUBDIR list
+# LOCAL_ITOOLS="list of tools" to add additional tools to the ITOOLS list
+# LOCAL_LIB_DIRS="list of dirs" to add additional dirs to libraries target
+# LOCAL_MTREE="list of mtree files" to process to allow local directories
+# to be created before files are installed
+# LOCAL_LEGACY_DIRS="list of dirs" to add additional dirs to the legacy
+# target
+# LOCAL_BSTOOL_DIRS="list of dirs" to add additional dirs to the
+# bootstrap-tools target
+# LOCAL_TOOL_DIRS="list of dirs" to add additional dirs to the build-tools
+# target
+# LOCAL_XTOOL_DIRS="list of dirs" to add additional dirs to the
+# cross-tools target
+# METALOG="path to metadata log" to write permission and ownership
+# when NO_ROOT is set. (default: ${DESTDIR}/${DISTDIR}/METALOG,
+# check /etc/make.conf for DISTDIR)
+# TARGET="machine" to crossbuild world for a different machine type
+# TARGET_ARCH= may be required when a TARGET supports multiple endians
+# BUILDENV_SHELL= shell to launch for the buildenv target (def:${SHELL})
+# WORLD_FLAGS= additional flags to pass to make(1) during buildworld
+# KERNEL_FLAGS= additional flags to pass to make(1) during buildkernel
+# SUBDIR_OVERRIDE="list of dirs" to build rather than everything.
+# All libraries and includes, and some build tools will still build.
+
+#
+# The intended user-driven targets are:
+# buildworld - rebuild *everything*, including glue to help do upgrades
+# installworld- install everything built by "buildworld"
+# checkworld - run test suite on installed world
+# doxygen - build API documentation of the kernel
+#
+# Standard targets (not defined here) are documented in the makefiles in
+# /usr/share/mk. These include:
+# obj depend all install clean cleandepend cleanobj
+
+.if !defined(TARGET) || !defined(TARGET_ARCH)
+.error Both TARGET and TARGET_ARCH must be defined.
+.endif
+
+.if make(showconfig) || make(test-system-*)
+_MKSHOWCONFIG= t
+.endif
+
+SRCDIR?= ${.CURDIR}
+LOCALBASE?= /usr/local
+TIME_ENV ?= time env
+
+.include "share/mk/src.tools.mk"
+
+# Cross toolchain changes must be in effect before bsd.compiler.mk
+# so that gets the right CC, and pass CROSS_TOOLCHAIN to submakes.
+.if defined(CROSS_TOOLCHAIN)
+.if exists(${LOCALBASE}/share/toolchains/${CROSS_TOOLCHAIN}.mk)
+.include "${LOCALBASE}/share/toolchains/${CROSS_TOOLCHAIN}.mk"
+.elif exists(${CROSS_TOOLCHAIN})
+.include "${CROSS_TOOLCHAIN}"
+.else
+.error CROSS_TOOLCHAIN ${CROSS_TOOLCHAIN} not found
+.endif
+CROSSENV+=CROSS_TOOLCHAIN="${CROSS_TOOLCHAIN}"
+.elif defined(UNIVERSE_TOOLCHAIN)
+UNIVERSE_TOOLCHAIN_PATH?=${HOST_OBJTOP}/tmp/usr/bin
+XCC?="${UNIVERSE_TOOLCHAIN_PATH}/cc"
+XCXX?="${UNIVERSE_TOOLCHAIN_PATH}/c++"
+XCPP?="${UNIVERSE_TOOLCHAIN_PATH}/cpp"
+XLD?="${UNIVERSE_TOOLCHAIN_PATH}/ld"
+.endif
+.if defined(CROSS_TOOLCHAIN_PREFIX)
+CROSS_COMPILER_PREFIX?=${CROSS_TOOLCHAIN_PREFIX}
+.endif
+
+XCOMPILERS= CC CXX CPP
+.for COMPILER in ${XCOMPILERS}
+.if defined(CROSS_COMPILER_PREFIX)
+X${COMPILER}?= ${CROSS_COMPILER_PREFIX}${${COMPILER}}
+.else
+X${COMPILER}?= ${${COMPILER}}
+.endif
+.endfor
+# If a full path to an external cross compiler is given, don't build
+# a cross compiler.
+.if ${XCC:N${CCACHE_BIN}:M/*}
+MK_CLANG_BOOTSTRAP= no
+# Make sure sub-makes see the option as disabled so the hack in bsd.sys.mk to
+# work around incompatible headers in Clang's resource directory is enabled.
+.MAKEOVERRIDES+= MK_CLANG_BOOTSTRAP
+.endif
+
+# Pull in compiler metadata from buildworld/toolchain if possible to avoid
+# running CC from bsd.compiler.mk.
+.if make(installworld) || make(install) || make(distributeworld) || \
+ make(stageworld)
+.-include "${OBJTOP}/toolchain-metadata.mk"
+.if !defined(_LOADED_TOOLCHAIN_METADATA)
+.error A build is required first. You may have the wrong MAKEOBJDIRPREFIX set.
+.endif
+.endif
+
+# Pull in COMPILER_TYPE and COMPILER_FREEBSD_VERSION early. Pull it from the
+# tree to be friendlier to foreign OS builds. It's safe to do so unconditionally
+# here since we will always have the right make, unlike in src/Makefile
+# Don't include bsd.linker.mk yet until XBINUTILS is handled (after src.opts.mk)
+_NO_INCLUDE_LINKERMK= t
+# We also want the X_COMPILER* variables if we are using an external toolchain.
+_WANT_TOOLCHAIN_CROSS_VARS= t
+.include "share/mk/bsd.compiler.mk"
+.undef _NO_INCLUDE_LINKERMK
+.undef _WANT_TOOLCHAIN_CROSS_VARS
+# src.opts.mk depends on COMPILER_FEATURES
+.include "share/mk/src.opts.mk"
+
+.if ${TARGET} == ${MACHINE}
+TARGET_CPUTYPE?=${CPUTYPE}
+.else
+TARGET_CPUTYPE?=
+.endif
+.if !empty(TARGET_CPUTYPE)
+_TARGET_CPUTYPE=${TARGET_CPUTYPE}
+.else
+_TARGET_CPUTYPE=dummy
+.endif
+.if ${TARGET} == "arm"
+.if ${TARGET_CPUTYPE:M*soft*} == ""
+TARGET_TRIPLE_ABI= gnueabihf
+.else
+TARGET_TRIPLE_ABI= gnueabi
+.endif
+.endif
+MACHINE_TRIPLE_ABI?= unknown
+MACHINE_TRIPLE?=${MACHINE_ARCH:S/amd64/x86_64/}-${MACHINE_TRIPLE_ABI}-freebsd${OS_REVISION}
+TARGET_TRIPLE_ABI?= unknown
+TARGET_TRIPLE?= ${TARGET_ARCH:S/amd64/x86_64/}-${TARGET_TRIPLE_ABI}-freebsd${OS_REVISION}
+KNOWN_ARCHES?= aarch64/arm64 \
+ amd64 \
+ armv6/arm \
+ armv7/arm \
+ i386 \
+ powerpc \
+ powerpc64/powerpc \
+ powerpc64le/powerpc \
+ powerpcspe/powerpc \
+ riscv64/riscv
+
+.if ${TARGET} == ${TARGET_ARCH}
+_t= ${TARGET}
+.else
+_t= ${TARGET_ARCH}/${TARGET}
+.endif
+.for _t in ${_t}
+.if empty(KNOWN_ARCHES:M${_t})
+.error Unknown target ${TARGET_ARCH}:${TARGET}.
+.endif
+.endfor
+
+.if ${TARGET_ARCH} == "amd64"
+LIBCOMPAT_INCLUDE_DIRS+= i386
+.elif ${TARGET_ARCH} == "aarch64"
+LIBCOMPAT_INCLUDE_DIRS+= arm
+.endif
+
+.if ${.MAKE.OS} != "FreeBSD"
+CROSSBUILD_HOST=${.MAKE.OS}
+.if ${.MAKE.OS} != "Linux" && ${.MAKE.OS} != "Darwin"
+.warning Unsupported crossbuild system: ${.MAKE.OS}. Build will probably fail!
+.endif
+# We need to force NO_ROOT/DB_FROM_SRC builds when building on other operating
+# systems since the BSD.foo.dist specs contain users and groups that do not
+# exist by default on a Linux/MacOS system.
+NO_ROOT:= 1
+DB_FROM_SRC:= 1
+.export NO_ROOT
+.endif
+
+# If all targets are disabled for system llvm then don't expect it to work
+# for cross-builds.
+.if !defined(TOOLS_PREFIX) && ${MK_LLVM_TARGET_ALL} == "no" && \
+ ${MACHINE} != ${TARGET} && ${MACHINE_ARCH} != ${TARGET_ARCH} && \
+ !make(showconfig)
+MK_SYSTEM_COMPILER= no
+MK_SYSTEM_LINKER= no
+.endif
+
+# Handle external binutils.
+.if defined(CROSS_TOOLCHAIN_PREFIX)
+CROSS_BINUTILS_PREFIX?=${CROSS_TOOLCHAIN_PREFIX}
+.endif
+XBINUTILS= AS AR ELFCTL LD NM OBJCOPY RANLIB SIZE STRINGS STRIPBIN
+.for BINUTIL in ${XBINUTILS}
+.if defined(CROSS_BINUTILS_PREFIX) && \
+ exists(${CROSS_BINUTILS_PREFIX}/${${BINUTIL}})
+X${BINUTIL}?= ${CROSS_BINUTILS_PREFIX:C,/*$,,}/${${BINUTIL}}
+.else
+X${BINUTIL}?= ${${BINUTIL}}
+.endif
+.endfor
+
+# If a full path to an external linker is given, don't build lld.
+.if ${XLD:M/*}
+MK_LLD_BOOTSTRAP= no
+.endif
+
+# We also want the X_LINKER* variables if we are using an external toolchain.
+_WANT_TOOLCHAIN_CROSS_VARS= t
+.include "share/mk/bsd.linker.mk"
+.undef _WANT_TOOLCHAIN_CROSS_VARS
+
+# Begin WITH_SYSTEM_COMPILER / WITH_SYSTEM_LD
+
+# WITH_SYSTEM_COMPILER - Pull in needed values and make a decision.
+
+# Check if there is a local compiler that can satisfy as an external compiler.
+# Which compiler is expected to be used?
+.if ${MK_CLANG_BOOTSTRAP} == "yes"
+WANT_COMPILER_TYPE= clang
+.else
+WANT_COMPILER_TYPE=
+.endif
+
+.if !defined(WANT_COMPILER_FREEBSD_VERSION) && !make(showconfig) && \
+ !make(test-system-linker)
+.if ${WANT_COMPILER_TYPE} == "clang"
+WANT_COMPILER_FREEBSD_VERSION_FILE= lib/clang/freebsd_cc_version.h
+WANT_COMPILER_FREEBSD_VERSION!= \
+ awk '$$2 == "FREEBSD_CC_VERSION" {printf("%d\n", $$3)}' \
+ ${SRCDIR}/${WANT_COMPILER_FREEBSD_VERSION_FILE} || echo unknown
+WANT_COMPILER_VERSION_FILE= lib/clang/include/clang/Basic/Version.inc
+WANT_COMPILER_VERSION!= \
+ awk '$$2 == "CLANG_VERSION" {split($$3, a, "."); print a[1] * 10000 + a[2] * 100 + a[3]}' \
+ ${SRCDIR}/${WANT_COMPILER_VERSION_FILE} || echo unknown
+.endif
+.export WANT_COMPILER_FREEBSD_VERSION WANT_COMPILER_VERSION
+.endif # !defined(WANT_COMPILER_FREEBSD_VERSION)
+
+# It needs to be the same revision as we would build for the bootstrap.
+# If the expected vs CC is different then we can't skip.
+# GCC cannot be used for cross-arch yet. For clang we pass -target later if
+# TARGET_ARCH!=MACHINE_ARCH.
+.if ${MK_SYSTEM_COMPILER} == "yes" && \
+ defined(WANT_COMPILER_FREEBSD_VERSION) && \
+ ${MK_CLANG_BOOTSTRAP} == "yes" && \
+ !make(xdev*) && \
+ ${X_COMPILER_TYPE} == ${WANT_COMPILER_TYPE} && \
+ (${X_COMPILER_TYPE} == "clang" || ${TARGET_ARCH} == ${MACHINE_ARCH}) && \
+ ${X_COMPILER_VERSION} == ${WANT_COMPILER_VERSION} && \
+ ${X_COMPILER_FREEBSD_VERSION} == ${WANT_COMPILER_FREEBSD_VERSION}
+# Everything matches, disable the bootstrap compiler.
+MK_CLANG_BOOTSTRAP= no
+USING_SYSTEM_COMPILER= yes
+.endif # ${WANT_COMPILER_TYPE} == ${COMPILER_TYPE}
+
+# WITH_SYSTEM_LD - Pull in needed values and make a decision.
+
+# Check if there is a local linker that can satisfy as an external linker.
+# Which linker is expected to be used?
+.if ${MK_LLD_BOOTSTRAP} == "yes"
+WANT_LINKER_TYPE= lld
+.else
+WANT_LINKER_TYPE=
+.endif
+
+.if !defined(WANT_LINKER_FREEBSD_VERSION) && !make(showconfig) && \
+ !make(test-system-compiler)
+.if ${WANT_LINKER_TYPE} == "lld"
+WANT_LINKER_FREEBSD_VERSION_FILE= lib/clang/include/lld/Common/Version.inc
+WANT_LINKER_FREEBSD_VERSION!= \
+ awk '$$2 == "LLD_FREEBSD_VERSION" {print $$3}' \
+ ${SRCDIR}/${WANT_LINKER_FREEBSD_VERSION_FILE} || echo unknown
+WANT_LINKER_VERSION_FILE= lib/clang/include/lld/Common/Version.inc
+WANT_LINKER_VERSION!= \
+ awk '$$2 == "LLD_VERSION_STRING" {gsub("\"", "", $$3); split($$3, a, "."); print a[1] * 10000 + a[2] * 100 + a[3]}' \
+ ${SRCDIR}/${WANT_LINKER_VERSION_FILE} || echo unknown
+.else
+WANT_LINKER_FREEBSD_VERSION_FILE=
+WANT_LINKER_FREEBSD_VERSION=
+.endif
+.export WANT_LINKER_FREEBSD_VERSION WANT_LINKER_VERSION
+.endif # !defined(WANT_LINKER_FREEBSD_VERSION)
+
+.if ${MK_SYSTEM_LINKER} == "yes" && \
+ defined(WANT_LINKER_FREEBSD_VERSION) && \
+ (${MK_LLD_BOOTSTRAP} == "yes") && \
+ !make(xdev*) && \
+ ${X_LINKER_TYPE} == ${WANT_LINKER_TYPE} && \
+ ${X_LINKER_VERSION} == ${WANT_LINKER_VERSION} && \
+ ${X_LINKER_FREEBSD_VERSION} == ${WANT_LINKER_FREEBSD_VERSION}
+# Everything matches, disable the bootstrap linker.
+MK_LLD_BOOTSTRAP= no
+USING_SYSTEM_LINKER= yes
+.endif # ${WANT_LINKER_TYPE} == ${LINKER_TYPE}
+
+# WITH_SYSTEM_COMPILER / WITH_SYSTEM_LINKER - Handle defaults and debug.
+USING_SYSTEM_COMPILER?= no
+USING_SYSTEM_LINKER?= no
+
+TEST_SYSTEM_COMPILER_VARS= \
+ USING_SYSTEM_COMPILER MK_SYSTEM_COMPILER \
+ MK_CROSS_COMPILER MK_CLANG_BOOTSTRAP \
+ WANT_COMPILER_TYPE WANT_COMPILER_VERSION WANT_COMPILER_VERSION_FILE \
+ WANT_COMPILER_FREEBSD_VERSION WANT_COMPILER_FREEBSD_VERSION_FILE \
+ CC COMPILER_TYPE COMPILER_FEATURES COMPILER_VERSION \
+ COMPILER_FREEBSD_VERSION \
+ XCC X_COMPILER_TYPE X_COMPILER_FEATURES X_COMPILER_VERSION \
+ X_COMPILER_FREEBSD_VERSION
+TEST_SYSTEM_LINKER_VARS= \
+ USING_SYSTEM_LINKER MK_SYSTEM_LINKER \
+ MK_LLD_BOOTSTRAP \
+ WANT_LINKER_TYPE WANT_LINKER_VERSION WANT_LINKER_VERSION_FILE \
+ WANT_LINKER_FREEBSD_VERSION WANT_LINKER_FREEBSD_VERSION_FILE \
+ LD LINKER_TYPE LINKER_FEATURES LINKER_VERSION \
+ LINKER_FREEBSD_VERSION \
+ XLD X_LINKER_TYPE X_LINKER_FEATURES X_LINKER_VERSION \
+ X_LINKER_FREEBSD_VERSION
+
+.for _t in compiler linker
+test-system-${_t}: .PHONY
+.for v in ${TEST_SYSTEM_${_t:tu}_VARS}
+ ${_+_}@printf "%-35s= %s\n" "${v}" "${${v}}"
+.endfor
+.endfor
+.if (make(buildworld) || make(buildkernel) || make(kernel-toolchain) || \
+ make(toolchain) || make(_cross-tools))
+.if ${USING_SYSTEM_COMPILER} == "yes"
+.info SYSTEM_COMPILER: Determined that CC=${CC} matches the source tree. Not bootstrapping a cross-compiler.
+.elif ${MK_CLANG_BOOTSTRAP} == "yes"
+.info SYSTEM_COMPILER: libclang will be built for bootstrapping a cross-compiler.
+.endif
+.if ${USING_SYSTEM_LINKER} == "yes"
+.info SYSTEM_LINKER: Determined that LD=${LD} matches the source tree. Not bootstrapping a cross-linker.
+.elif ${MK_LLD_BOOTSTRAP} == "yes"
+.info SYSTEM_LINKER: libclang will be built for bootstrapping a cross-linker.
+.endif
+.endif
+
+# End WITH_SYSTEM_COMPILER / WITH_SYSTEM_LD
+
+# Store some compiler metadata for use in installworld where we don't
+# want to invoke CC at all.
+_TOOLCHAIN_METADATA_VARS= COMPILER_VERSION \
+ COMPILER_TYPE \
+ COMPILER_FEATURES \
+ COMPILER_FREEBSD_VERSION \
+ COMPILER_RESOURCE_DIR \
+ LINKER_VERSION \
+ LINKER_FEATURES \
+ LINKER_TYPE \
+ LINKER_FREEBSD_VERSION
+toolchain-metadata.mk: .PHONY .META
+ @: > ${.TARGET}
+ @echo ".info Using cached toolchain metadata from build at $$(hostname) on $$(date)" \
+ > ${.TARGET}
+ @echo "_LOADED_TOOLCHAIN_METADATA=t" >> ${.TARGET}
+.for v in ${_TOOLCHAIN_METADATA_VARS}
+ @echo "${v}=${${v}}" >> ${.TARGET}
+ @echo "X_${v}=${X_${v}}" >> ${.TARGET}
+.endfor
+ @echo ".export ${_TOOLCHAIN_METADATA_VARS}" >> ${.TARGET}
+ @echo ".export ${_TOOLCHAIN_METADATA_VARS:C,^,X_,}" >> ${.TARGET}
+
+
+# We must do lib/ and libexec/ before bin/ in case of a mid-install error to
+# keep the users system reasonably usable. For static->dynamic root upgrades,
+# we don't want to install a dynamic binary without rtld and the needed
+# libraries. More commonly, for dynamic root, we don't want to install a
+# binary that requires a newer library version that hasn't been installed yet.
+# This ordering is not a guarantee though. The only guarantee of a working
+# system here would require fine-grained ordering of all components based
+# on their dependencies.
+.if !empty(SUBDIR_OVERRIDE)
+SUBDIR= ${SUBDIR_OVERRIDE}
+.else
+SUBDIR= lib libexec
+# Add LOCAL_LIB_DIRS, but only if they will not be picked up as a SUBDIR
+# of a LOCAL_DIRS directory. This allows LOCAL_DIRS=foo and
+# LOCAL_LIB_DIRS=foo/lib to behave as expected.
+.for _DIR in ${LOCAL_DIRS:M*/} ${LOCAL_DIRS:N*/:S|$|/|}
+_REDUNDANT_LIB_DIRS+= ${LOCAL_LIB_DIRS:M${_DIR}*}
+.endfor
+.for _DIR in ${LOCAL_LIB_DIRS}
+.if ${_DIR} == ".WAIT" || (empty(_REDUNDANT_LIB_DIRS:M${_DIR}) && exists(${.CURDIR}/${_DIR}/Makefile))
+SUBDIR+= ${_DIR}
+.endif
+.endfor
+.if !defined(NO_ROOT) && (make(installworld) || make(install))
+# Ensure libraries are installed before progressing.
+SUBDIR+=.WAIT
+.endif
+SUBDIR+=bin
+.if ${MK_CDDL} != "no"
+SUBDIR+=cddl
+.endif
+SUBDIR+=gnu include
+.if ${MK_KERBEROS} != "no"
+SUBDIR+=kerberos5
+.endif
+.if ${MK_RESCUE} != "no"
+SUBDIR+=rescue
+.endif
+SUBDIR+=sbin
+.if ${MK_CRYPT} != "no"
+SUBDIR+=secure
+.endif
+.if !defined(NO_SHARE)
+SUBDIR+=share
+.endif
+.if ${MK_BOOT} != "no"
+SUBDIR+=stand
+.endif
+SUBDIR+=sys usr.bin usr.sbin
+.if ${MK_TESTS} != "no"
+SUBDIR+= tests
+.endif
+
+# Local directories are built in parallel with the base system directories.
+# Users may insert a .WAIT directive at the beginning or elsewhere within
+# the LOCAL_DIRS and LOCAL_LIB_DIRS lists as needed.
+.for _DIR in ${LOCAL_DIRS}
+.if ${_DIR} == ".WAIT" || exists(${.CURDIR}/${_DIR}/Makefile)
+SUBDIR+= ${_DIR}
+.endif
+.endfor
+
+# We must do etc/ last as it hooks into building the man whatis file
+# by calling 'makedb' in share/man. This is only relevant for
+# install/distribute so they build the whatis file after every manpage is
+# installed.
+.if make(installworld) || make(install)
+SUBDIR+=.WAIT
+.endif
+SUBDIR+=etc
+
+.endif # !empty(SUBDIR_OVERRIDE)
+
+.if defined(NOCLEAN)
+.warning The src.conf WITHOUT_CLEAN option can now be used instead of NOCLEAN.
+MK_CLEAN:= no
+.endif
+.if defined(NO_CLEAN)
+.info The src.conf WITHOUT_CLEAN option can now be used instead of NO_CLEAN.
+MK_CLEAN:= no
+.endif
+.if defined(NO_CLEANDIR)
+CLEANDIR= clean cleandepend
+.else
+CLEANDIR= cleandir
+.endif
+
+.if defined(WORLDFAST)
+MK_CLEAN:= no
+NO_OBJWALK= t
+.endif
+
+.if ${MK_META_MODE} == "yes"
+# If filemon is used then we can rely on the build being incremental-safe.
+# The .meta files will also track the build command and rebuild should
+# it change.
+.if empty(.MAKE.MODE:Mnofilemon)
+MK_CLEAN:= no
+.endif
+.endif
+.if defined(NO_OBJWALK) || ${MK_AUTO_OBJ} == "yes"
+NO_OBJWALK= t
+NO_KERNELOBJ= t
+.endif
+.if !defined(NO_OBJWALK)
+_obj= obj
+.endif
+
+LOCAL_TOOL_DIRS?=
+PACKAGEDIR?= ${DESTDIR}/${DISTDIR}
+
+.if empty(SHELL:M*csh*)
+BUILDENV_SHELL?=${SHELL}
+.else
+BUILDENV_SHELL?=/bin/sh
+.endif
+
+.if !defined(_MKSHOWCONFIG)
+.if !defined(VCS_REVISION) || empty(VCS_REVISION)
+.if !defined(SVNVERSION_CMD) || empty(SVNVERSION_CMD)
+. for _D in ${PATH:S,:, ,g}
+. if exists(${_D}/svnversion)
+SVNVERSION_CMD?=${_D}/svnversion
+. endif
+. if exists(${_D}/svnliteversion)
+SVNVERSION_CMD?=${_D}/svnliteversion
+. endif
+. endfor
+.endif
+.if defined(SVNVERSION_CMD) && !empty(SVNVERSION_CMD)
+_VCS_REVISION?= $$(eval ${SVNVERSION_CMD} ${SRCDIR})
+. if !empty(_VCS_REVISION)
+VCS_REVISION= $$(echo r${_VCS_REVISION})
+.export VCS_REVISION
+. endif
+.endif
+.endif
+
+.if !defined(GIT_CMD) || empty(GIT_CMD)
+. for _P in /usr/bin /usr/local/bin
+. if exists(${_P}/git)
+GIT_CMD= ${_P}/git
+. endif
+. endfor
+.export GIT_CMD
+.endif
+
+.if !defined(OSRELDATE)
+.if exists(/usr/include/osreldate.h)
+OSRELDATE!= awk '/^\#define[[:space:]]*__FreeBSD_version/ { print $$3 }' \
+ /usr/include/osreldate.h
+.else
+OSRELDATE= 0
+.endif
+.export OSRELDATE
+.endif
+
+# Set VERSION for CTFMERGE to use via the default CTFFLAGS=-L VERSION.
+.for _V in BRANCH REVISION TYPE
+.if !defined(_${_V})
+_${_V}!= eval $$(awk '/^${_V}=/{print}' ${SRCTOP}/sys/conf/newvers.sh); echo $$${_V}
+.export _${_V}
+.endif
+.endfor
+.if !defined(SRCRELDATE)
+SRCRELDATE!= awk '/^\#define[[:space:]]*__FreeBSD_version/ { print $$3 }' \
+ ${SRCDIR}/sys/sys/param.h
+.export SRCRELDATE
+.endif
+.if !defined(VERSION)
+VERSION= FreeBSD ${_REVISION}-${_BRANCH:C/-p[0-9]+$//} ${TARGET_ARCH} ${SRCRELDATE}
+.export VERSION
+.endif
+MAJOR_REVISION= ${_REVISION:R}
+
+.if !defined(PKG_VERSION)
+_STRTIMENOW= %Y%m%d%H%M%S
+_TIMENOW= ${_STRTIMENOW:gmtime}
+.if ${_BRANCH:MCURRENT*} || ${_BRANCH:MSTABLE*} || ${_BRANCH:MPRERELEASE*}
+EXTRA_REVISION= .snap${_TIMENOW}
+.elif ${_BRANCH:MALPHA*}
+EXTRA_REVISION= .a${_BRANCH:C/ALPHA([0-9]+).*/\1/}.${_TIMENOW}
+.elif ${_BRANCH:MBETA*}
+EXTRA_REVISION= .b${_BRANCH:C/BETA([0-9]+).*/\1/}.${_TIMENOW}
+.elif ${_BRANCH:MRC*}
+EXTRA_REVISION= .rc${_BRANCH:C/RC([0-9]+).*/\1/}.${_TIMENOW}
+.elif ${_BRANCH:M*-p*}
+EXTRA_REVISION= p${_BRANCH:C/.*-p([0-9]+$)/\1/}
+.endif
+PKG_VERSION:= ${MAJOR_REVISION}${EXTRA_REVISION:C/[[:space:]]//g}
+.endif
+.endif # !defined(PKG_VERSION)
+
+.if !defined(PKG_TIMESTAMP)
+TIMEEPOCHNOW= %s
+SOURCE_DATE_EPOCH= ${TIMEEPOCHNOW:gmtime}
+.else
+SOURCE_DATE_EPOCH= ${PKG_TIMESTAMP}
+.endif
+
+PKG_NAME_PREFIX?= FreeBSD
+PKG_MAINTAINER?= re@FreeBSD.org
+PKG_WWW?= https://www.FreeBSD.org
+.export PKG_NAME_PREFIX
+.export PKG_MAINTAINER
+.export PKG_WWW
+
+.if !defined(_MKSHOWCONFIG)
+_CPUTYPE!= MAKEFLAGS= CPUTYPE=${_TARGET_CPUTYPE} ${MAKE} -f /dev/null \
+ -m ${.CURDIR}/share/mk MK_AUTO_OBJ=no -V CPUTYPE
+.if ${_CPUTYPE} != ${_TARGET_CPUTYPE}
+.error CPUTYPE global should be set with ?=.
+.endif
+.endif
+.if make(buildworld)
+BUILD_ARCH!= uname -p
+# On some Linux systems uname -p returns "unknown" so skip this check there.
+# This check only exists to tell people to use TARGET_ARCH instead of
+# MACHINE_ARCH so skipping it when crossbuilding on non-FreeBSD should be fine.
+.if ${MACHINE_ARCH} != ${BUILD_ARCH} && ${.MAKE.OS} == "FreeBSD"
+.error To cross-build, set TARGET_ARCH.
+.endif
+.endif
+WORLDTMP?= ${OBJTOP}/tmp
+BPATH= ${CCACHE_WRAPPER_PATH_PFX}${WORLDTMP}/legacy/usr/sbin:${WORLDTMP}/legacy/usr/bin:${WORLDTMP}/legacy/bin:${WORLDTMP}/legacy/usr/libexec
+XPATH= ${WORLDTMP}/bin:${WORLDTMP}/usr/sbin:${WORLDTMP}/usr/bin
+
+# When building we want to find the cross tools before the host tools in ${BPATH}.
+# We also need to add UNIVERSE_TOOLCHAIN_PATH so that we can find the shared
+# toolchain files (clang, lld, etc.) during make universe/tinderbox
+STRICTTMPPATH= ${XPATH}:${BPATH}:${UNIVERSE_TOOLCHAIN_PATH}
+# We should not be using tools from /usr/bin accidentally since this could cause
+# the build to break on other systems that don't have that tool. For now we
+# still allow using the old behaviour (inheriting $PATH) if
+# BUILD_WITH_STRICT_TMPPATH is set to 0 but this will eventually be removed.
+
+# Currently strict $PATH can cause build failures. Once the remaining issues
+# have been resolved it will be turned on by default.
+BUILD_WITH_STRICT_TMPPATH?=0
+.if defined(CROSSBUILD_HOST)
+# When building on non-FreeBSD we can't rely on the tools in /usr/bin being compatible
+# with what FreeBSD expects. Therefore we only use tools from STRICTTMPPATH
+# during the world build stage. We build most tools during the bootstrap-tools
+# phase but symlink host tools that are known to work instead of building them
+BUILD_WITH_STRICT_TMPPATH:=1
+.endif
+.if ${BUILD_WITH_STRICT_TMPPATH} != 0
+TMPPATH= ${STRICTTMPPATH}
+.else
+TMPPATH= ${STRICTTMPPATH}:${PATH}
+.endif
+
+#
+# Avoid running mktemp(1) unless actually needed.
+# It may not be functional, e.g., due to new ABI
+# when in the middle of installing over this system.
+#
+.if make(distributeworld) || make(installworld) || make(stageworld)
+.if ${BUILD_WITH_STRICT_TMPPATH} != 0
+MKTEMP=${WORLDTMP}/legacy/usr/bin/mktemp
+.if !exists(${MKTEMP})
+.error mktemp binary doesn't exist in expected location: ${MKTEMP}
+.endif
+.else
+MKTEMP=mktemp
+.endif
+INSTALLTMP!= ${MKTEMP} -d -u -t install
+
+.if ${.MAKE.OS} == "FreeBSD"
+# When building on FreeBSD we always copy the host tools instead of linking
+# into INSTALLTMP to avoid issues with incompatible libraries (see r364030).
+# Note: we could create links if we don't intend to update the current machine.
+INSTALLTMP_COPY_HOST_TOOL=cp
+.else
+# However, this is not necessary on Linux/macOS. Additionally, copying the host
+# tools to another directory with cp results in AMFI Launch Constraint
+# Violations on macOS Ventura as part of its System Integrity Protection.
+INSTALLTMP_COPY_HOST_TOOL=ln -s
+.endif
+.endif
+
+.if make(stagekernel) || make(distributekernel)
+TAGS+= kernel
+PACKAGE= kernel
+.endif
+
+#
+# Building a world goes through the following stages
+#
+# 1. legacy stage [BMAKE]
+# This stage is responsible for creating compatibility
+# shims that are needed by the bootstrap-tools,
+# build-tools and cross-tools stages. These are generally
+# APIs that tools from one of those three stages need to
+# build that aren't present on the host.
+# 1. bootstrap-tools stage [BMAKE]
+# This stage is responsible for creating programs that
+# are needed for backward compatibility reasons. They
+# are not built as cross-tools.
+# 2. build-tools stage [TMAKE]
+# This stage is responsible for creating the object
+# tree and building any tools that are needed during
+# the build process. Some programs are listed during
+# this phase because they build binaries to generate
+# files needed to build these programs. This stage also
+# builds the 'build-tools' target rather than 'all'.
+# 3. cross-tools stage [XMAKE]
+# This stage is responsible for creating any tools that
+# are needed for building the system. A cross-compiler is one
+# of them. This differs from build tools in two ways:
+# 1. the 'all' target is built rather than 'build-tools'
+# 2. these tools are installed into TMPPATH for stage 4.
+# 4. world stage [WMAKE]
+# This stage actually builds the world.
+# 5. install stage (optional) [IMAKE]
+# This stage installs a previously built world.
+#
+
+BOOTSTRAPPING?= 0
+# Keep these in sync
+MINIMUM_SUPPORTED_OSREL?= 1104001
+MINIMUM_SUPPORTED_REL?= 11.4
+
+# Common environment for world related stages
+CROSSENV+= \
+ MACHINE_ARCH=${TARGET_ARCH} \
+ MACHINE=${TARGET} \
+ CPUTYPE=${TARGET_CPUTYPE}
+.if ${MK_META_MODE} != "no"
+# Don't rebuild build-tools targets during normal build.
+CROSSENV+= BUILD_TOOLS_META=.NOMETA
+.endif
+.if defined(TARGET_CFLAGS)
+CROSSENV+= ${TARGET_CFLAGS}
+.endif
+.if (${TARGET} != ${MACHINE} && !defined(WITH_LOCAL_MODULES)) || \
+ defined(WITHOUT_LOCAL_MODULES)
+CROSSENV+= LOCAL_MODULES=
+.endif
+
+BOOTSTRAPPING_OSRELDATE?=${OSRELDATE}
+
+# bootstrap-tools stage
+BMAKEENV= INSTALL="sh ${.CURDIR}/tools/install.sh" \
+ TOOLS_PREFIX=${TOOLS_PREFIX_UNDEF:U${WORLDTMP}} \
+ PATH=${BPATH:Q}:${PATH:Q} \
+ WORLDTMP=${WORLDTMP} \
+ MAKEFLAGS="-m ${.CURDIR}/tools/build/mk ${.MAKEFLAGS}"
+# need to keep this in sync with targets/pseudo/bootstrap-tools/Makefile
+BSARGS= DESTDIR= \
+ OBJTOP='${WORLDTMP}/obj-tools' \
+ OBJROOT='$${OBJTOP}/' \
+ UNIVERSE_TOOLCHAIN_PATH=${UNIVERSE_TOOLCHAIN_PATH} \
+ MAKEOBJDIRPREFIX= \
+ BOOTSTRAPPING=${BOOTSTRAPPING_OSRELDATE} \
+ BWPHASE=${.TARGET:C,^_,,} \
+ -DNO_CPU_CFLAGS \
+ -DNO_LINT \
+ -DNO_PIC \
+ -DNO_SHARED \
+ MK_ASAN=no \
+ MK_CTF=no \
+ MK_CLANG_EXTRAS=no \
+ MK_CLANG_FORMAT=no \
+ MK_CLANG_FULL=no \
+ MK_HTML=no \
+ MK_MAN=no \
+ MK_PROFILE=no \
+ MK_RETPOLINE=no \
+ MK_SSP=no \
+ MK_TESTS=no \
+ MK_UBSAN=no \
+ MK_WERROR=no \
+ MK_INCLUDES=yes \
+ MK_MAN_UTILS=yes
+
+BMAKE= \
+ ${TIME_ENV} ${BMAKEENV} ${MAKE} ${WORLD_FLAGS} -f Makefile.inc1 \
+ ${BSARGS}
+.if empty(.MAKEOVERRIDES:MMK_LLVM_TARGET_ALL)
+BMAKE+= MK_LLVM_TARGET_ALL=no
+.endif
+
+# build-tools stage
+TMAKE= \
+ ${TIME_ENV} ${BMAKEENV} ${MAKE} ${WORLD_FLAGS} -f Makefile.inc1 \
+ TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \
+ DESTDIR= \
+ BOOTSTRAPPING=${BOOTSTRAPPING_OSRELDATE} \
+ BWPHASE=${.TARGET:C,^_,,} \
+ -DNO_CPU_CFLAGS \
+ -DNO_LINT \
+ MK_ASAN=no \
+ MK_CTF=no \
+ MK_CLANG_EXTRAS=no \
+ MK_CLANG_FORMAT=no \
+ MK_CLANG_FULL=no \
+ MK_LLDB=no \
+ MK_RETPOLINE=no \
+ MK_SSP=no \
+ MK_TESTS=no \
+ MK_UBSAN=no \
+ MK_WERROR=no
+
+# cross-tools stage
+# TOOLS_PREFIX set in BMAKE
+XMAKE= ${BMAKE} \
+ TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \
+ MK_LLDB=no \
+ MK_LLVM_BINUTILS=no \
+ MK_TESTS=no
+
+# kernel-tools stage
+KTMAKEENV= INSTALL="sh ${.CURDIR}/tools/install.sh" \
+ PATH=${BPATH:Q}:${PATH:Q} \
+ WORLDTMP=${WORLDTMP} \
+ MAKEFLAGS="-m ${.CURDIR}/tools/build/mk ${.MAKEFLAGS}"
+
+KTMAKE= ${TIME_ENV} \
+ TOOLS_PREFIX=${TOOLS_PREFIX_UNDEF:U${WORLDTMP}} \
+ ${KTMAKEENV} ${MAKE} ${WORLD_FLAGS} -f Makefile.inc1 \
+ DESTDIR= \
+ OBJTOP='${WORLDTMP}/obj-kernel-tools' \
+ OBJROOT='$${OBJTOP}/' \
+ UNIVERSE_TOOLCHAIN_PATH=${UNIVERSE_TOOLCHAIN_PATH} \
+ MAKEOBJDIRPREFIX= \
+ BOOTSTRAPPING=${BOOTSTRAPPING_OSRELDATE} \
+ -DNO_CPU_CFLAGS \
+ -DNO_LINT \
+ -DNO_PIC \
+ -DNO_SHARED \
+ MK_CTF=no \
+ MK_HTML=no \
+ MK_MAN=no \
+ MK_PROFILE=no \
+ MK_SSP=no \
+ MK_RETPOLINE=no \
+ MK_WERROR=no
+
+# world stage
*** 23342 LINES SKIPPED ***