From nobody Sat May 14 11:49:39 2022 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 253A61ACBA59; Sat, 14 May 2022 11:49:44 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4L0kMW1XwXz3rdm; Sat, 14 May 2022 11:49:43 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1652528984; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Cmhez2t9J3OVtDCdV4lkzEn9tH8WwB0VZQGOYSGn0lo=; b=Z65zf6kt0yatUavqZEv4lkJeqGavUs9iFBB7STKXa535UDZUVFnWKp66DNhUDIeSjJiSTc GLd8wBZE69KAuUIJhYLKJodWGDcCpDnL7Qmg1dgXXw69pORPbGCCt6jWKD7/ybZA6x8ukd 1c24V/Y27CA1uX2qhzWkXu8/OuYATKmFNwMc03sG9VJzXRJLV/J5CQV9ha6/fxzg5xpTXr vwR4l8Ik56Znnc2XBDuCtSw4rrfKvudXC+9Y/m82l5VPZA6WJBYAfJhgbsaBCQamen4AIS J6RadVKKG24avcLKspXFzdkfrbl3Ha9QDB9Yv8xR4emZl6WwrxCGo7MeHRq5qQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 7526816C9D; Sat, 14 May 2022 11:49:42 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 24EBng04015962; Sat, 14 May 2022 11:49:42 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 24EBnd7S015961; Sat, 14 May 2022 11:49:39 GMT (envelope-from git) Date: Sat, 14 May 2022 11:49:39 GMT Message-Id: <202205141149.24EBnd7S015961@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Dimitry Andric Subject: git: 1838bd0f4839 - main - Merge llvm-project release/14.x llvmorg-14-init-18315-g190be5457c90 List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-main@freebsd.org X-BeenThere: dev-commits-src-main@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: dim X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 1838bd0f4839006b42d41a02a787b7f578655223 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1652528984; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Cmhez2t9J3OVtDCdV4lkzEn9tH8WwB0VZQGOYSGn0lo=; b=LATYdbouW5/inCm4Ifd/z3CPmf9yrQcYWbBjfuGAsL5UY7HP/bld+pKMK3Nb5Idl8qfKRe JtZyUVDsT0wHrUNlxePiiDb4pXT3E3Nt/hzitNpZCEh7lMl4LdYtO1eazuz8V/0cU4PKVt UZhuCK2k1oFkFtTzffiMvI5ufPYPfLgougkV8U5b56OoTyJST+C/bn0je/gfYByhb+BOyg 0GFiabz+F/1JduOfFzLOBwds03qtWf174HRlPwe+sFBfpuGOPxb2maXKBHByX7uhHfXmWw fuw5a+09/9Sj+xgvWOOJEaCZmYSWCwDjh83t0iGqG4Enl9Lz5UssXjvc24wD3Q== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1652528984; a=rsa-sha256; cv=none; b=V9zOc1Leve/h/6dhQCeM7i1v2yONcTtzVLT/p+yosuSrpgX8GNHePr5+flCfKJJw7ke797 JBGXzS3aafb2GTDqNkNWOucMOnbSwP9d8wKnbyeTHwexK4VBB9gYnP9qPpRwDWR+yGE6cx HEyoQhfnuZC37Oj4YQOf6WXNmXm3mB3sdZ2ymvuRgEg7xPOcG+vJ0L9PuBSut8OuILCnNS URxmrUvPYYUlRgEyx6kHNuTRMBr7BDmDx44g4vzByg3+uegxU+qjFHY/tRXy1WB+OnLdci 6DQ0U0zl8ChoUeTKoec0gZ0DWZOogBSP5J901AARlDECzNHnPYIsd4g+wm9Lyg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by dim: URL: https://cgit.FreeBSD.org/src/commit/?id=1838bd0f4839006b42d41a02a787b7f578655223 commit 1838bd0f4839006b42d41a02a787b7f578655223 Merge: 1fd87a682ad7 1e9a9d6d0565 Author: Dimitry Andric AuthorDate: 2022-02-05 22:51:07 +0000 Commit: Dimitry Andric CommitDate: 2022-05-14 11:45:25 +0000 Merge llvm-project release/14.x llvmorg-14-init-18315-g190be5457c90 This updates llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp to llvmorg-14-init-18315-g190be5457c90. PR: 261742 MFC after: 2 weeks Makefile.inc1 | 9 ++-- .../clang/lib/Driver/ToolChains/Linux.cpp | 2 +- .../sanitizer_platform_limits_posix.cpp | 2 +- .../libcxx/include/__algorithm/in_in_out_result.h | 12 ++++-- .../libcxx/include/__algorithm/in_in_result.h | 10 ++++- .../libcxx/include/__algorithm/in_out_result.h | 2 + .../libcxx/include/__chrono/duration.h | 2 +- .../__compare/compare_partial_order_fallback.h | 4 +- .../__compare/compare_strong_order_fallback.h | 4 +- .../libcxx/include/__compare/compare_three_way.h | 4 +- .../__compare/compare_weak_order_fallback.h | 4 +- .../libcxx/include/__compare/partial_order.h | 4 +- .../libcxx/include/__compare/strong_order.h | 4 +- .../libcxx/include/__compare/synth_three_way.h | 4 +- .../include/__compare/three_way_comparable.h | 4 +- .../libcxx/include/__compare/weak_order.h | 4 +- .../libcxx/include/__concepts/arithmetic.h | 4 +- .../libcxx/include/__concepts/assignable.h | 4 +- .../libcxx/include/__concepts/boolean_testable.h | 4 +- .../libcxx/include/__concepts/class_or_enum.h | 4 +- .../include/__concepts/common_reference_with.h | 4 +- .../libcxx/include/__concepts/common_with.h | 4 +- .../libcxx/include/__concepts/constructible.h | 4 +- .../libcxx/include/__concepts/convertible_to.h | 4 +- .../libcxx/include/__concepts/copyable.h | 4 +- .../libcxx/include/__concepts/derived_from.h | 4 +- .../libcxx/include/__concepts/destructible.h | 4 +- .../libcxx/include/__concepts/different_from.h | 4 +- .../include/__concepts/equality_comparable.h | 4 +- .../libcxx/include/__concepts/invocable.h | 4 +- .../libcxx/include/__concepts/movable.h | 4 +- .../libcxx/include/__concepts/predicate.h | 4 +- .../libcxx/include/__concepts/regular.h | 4 +- .../libcxx/include/__concepts/relation.h | 4 +- .../libcxx/include/__concepts/same_as.h | 4 +- .../libcxx/include/__concepts/semiregular.h | 4 +- .../libcxx/include/__concepts/swappable.h | 4 +- .../libcxx/include/__concepts/totally_ordered.h | 4 +- contrib/llvm-project/libcxx/include/__config | 2 +- .../libcxx/include/__iterator/distance.h | 4 +- .../include/__iterator/indirectly_comparable.h | 4 +- .../libcxx/include/__iterator/insert_iterator.h | 2 +- .../libcxx/include/__iterator/reverse_iterator.h | 2 +- .../__random/uniform_random_bit_generator.h | 4 +- .../llvm-project/libcxx/include/__ranges/access.h | 15 +++++-- .../include/__ranges/enable_borrowed_range.h | 4 +- .../include/__ranges/non_propagating_cache.h | 2 +- .../llvm-project/libcxx/include/__utility/cmp.h | 2 +- .../llvm-project/libcxx/include/__utility/pair.h | 6 +-- .../llvm-project/libcxx/include/module.modulemap | 3 +- contrib/llvm-project/libcxx/include/numbers | 4 +- contrib/llvm-project/libcxx/include/ranges | 4 +- contrib/llvm-project/libcxx/include/string | 15 ------- contrib/llvm-project/libcxx/include/string_view | 8 ++-- contrib/llvm-project/libcxx/include/tuple | 6 +-- contrib/llvm-project/libcxx/include/type_traits | 4 +- contrib/llvm-project/libcxx/src/string.cpp | 21 +++++++--- .../libunwind/src/DwarfInstructions.hpp | 2 - .../llvm/lib/Debuginfod/HTTPClient.cpp | 3 +- .../llvm-project/llvm/lib/ObjectYAML/ELFYAML.cpp | 3 ++ .../llvm/lib/Target/AVR/AVRFrameLowering.cpp | 4 +- .../llvm/lib/Target/PowerPC/PPCISelLowering.cpp | 2 + lib/clang/include/VCSVersion.inc | 10 ++--- lib/clang/include/lld/Common/Version.inc | 5 ++- lib/clang/include/llvm/Support/VCSRevision.h | 2 +- lib/clang/libclang/Makefile | 3 ++ lib/clang/liblldb/LLDBWrapLua.cpp | 11 +---- lib/clang/libllvm/Makefile | 2 +- lib/libgcc_eh/Makefile | 2 + lib/libomp/kmp_config.h | 49 +++++++++++++++++++++- lib/libomp/kmp_i18n_default.inc | 16 +++++-- lib/libomp/kmp_i18n_id.inc | 12 +++++- lib/libomp/omp-tools.h | 1 - lib/libomp/omp.h | 1 - 74 files changed, 240 insertions(+), 163 deletions(-) diff --cc Makefile.inc1 index e3081594ec77,000000000000..5aaa9a414473 mode 100644,000000..100644 --- a/Makefile.inc1 +++ b/Makefile.inc1 @@@ -1,3590 -1,0 +1,3589 @@@ +# +# $FreeBSD$ +# +# 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(/usr/share/toolchains/${CROSS_TOOLCHAIN}.mk) +.include "/usr/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}" +.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_ARCH:Marmv[67]*} != "" && ${TARGET_CPUTYPE:M*soft*} == "" +TARGET_ABI= gnueabihf +.else +TARGET_ABI= gnueabi +.endif +.endif +MACHINE_ABI?= unknown +MACHINE_TRIPLE?=${MACHINE_ARCH:S/amd64/x86_64/:C/sf$//}-${MACHINE_ABI}-freebsd${OS_REVISION} +TARGET_ABI?= unknown +TARGET_TRIPLE?= ${TARGET_ARCH:S/amd64/x86_64/:C/sf$//}-${TARGET_ABI}-freebsd${OS_REVISION} +KNOWN_ARCHES?= aarch64/arm64 \ + amd64 \ + armv6/arm \ + armv7/arm \ + i386 \ + powerpc \ + powerpc64/powerpc \ + powerpc64le/powerpc \ + powerpcspe/powerpc \ + riscv64/riscv \ + riscv64sf/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 ${.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/VCSVersion.inc - _WANT_LINKER_FREEBSD_VERSION!= \ - awk '$$2 == "LLD_REVISION" {gsub(/"/, "", $$3); print $$3}' \ ++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_FREEBSD_VERSION=${_WANT_LINKER_FREEBSD_VERSION:C/.*-(.*)/\1/} +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]}' \ ++ 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 + +.if !defined(PKG_VERSION) +_STRTIMENOW= %Y%m%d%H%M%S +_TIMENOW= ${_STRTIMENOW:gmtime} +.if ${_BRANCH:MCURRENT*} || ${_BRANCH:MSTABLE*} || ${_BRANCH:MPRERELEASE*} +_REVISION:= ${_REVISION:R} +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:= ${_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 and does not work yet with +# USING_SYSTEM_LINKER/USING_SYSTEM_COMPILER. Once these 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 +.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}:${PATH} \ + 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}/' \ + 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_CLANG_IS_CC=${MK_CLANG_BOOTSTRAP} \ + MK_LLDB=no \ + MK_LLVM_BINUTILS=no \ + MK_TESTS=no + +# kernel-tools stage +KTMAKEENV= INSTALL="sh ${.CURDIR}/tools/install.sh" \ + PATH=${BPATH}:${PATH} \ + 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}/' \ + 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 +WMAKEENV= ${CROSSENV} \ + INSTALL="${INSTALL_CMD} -U" \ + PATH=${TMPPATH} \ + SYSROOT=${WORLDTMP} + +# make hierarchy +HMAKE= PATH=${TMPPATH} ${MAKE} LOCAL_MTREE=${LOCAL_MTREE:Q} +.if defined(NO_ROOT) +HMAKE+= PATH=${TMPPATH} METALOG=${METALOG} -DNO_ROOT +.endif + +CROSSENV+= CC="${XCC} ${XCFLAGS}" CXX="${XCXX} ${XCXXFLAGS} ${XCFLAGS}" \ + CPP="${XCPP} ${XCFLAGS}" \ + AS="${XAS}" AR="${XAR}" ELFCTL="${XELFCTL}" LD="${XLD}" \ + LLVM_LINK="${XLLVM_LINK}" NM=${XNM} OBJCOPY="${XOBJCOPY}" \ + RANLIB=${XRANLIB} STRINGS=${XSTRINGS} \ + SIZE="${XSIZE}" STRIPBIN="${XSTRIPBIN}" + +.if defined(CROSS_BINUTILS_PREFIX) && exists(${CROSS_BINUTILS_PREFIX}) +# In the case of xdev-build tools, CROSS_BINUTILS_PREFIX won't be a +# directory, but the compiler will look in the right place for its +# tools so we don't need to tell it where to look. +BFLAGS+= -B${CROSS_BINUTILS_PREFIX} +.endif + + +# The internal bootstrap compiler has a default sysroot set by TOOLS_PREFIX +# and target set by TARGET/TARGET_ARCH. However, there are several needs to +# always pass an explicit --sysroot and -target. +# - External compiler needs sysroot and target flags. +# - External ld needs sysroot. +# - To be clear about the use of a sysroot when using the internal compiler. +# - Easier debugging. +# - Allowing WITH_SYSTEM_COMPILER+WITH_META_MODE to work together due to +# the flip-flopping build command when sometimes using external and +# sometimes using internal. +# - Allow using lld which has no support for default paths. +.if !defined(CROSS_BINUTILS_PREFIX) || !exists(${CROSS_BINUTILS_PREFIX}) +BFLAGS+= -B${WORLDTMP}/usr/bin +.endif +.if ${WANT_COMPILER_TYPE} == gcc || \ + (defined(X_COMPILER_TYPE) && ${X_COMPILER_TYPE} == gcc) +.elif ${WANT_COMPILER_TYPE} == clang || \ + (defined(X_COMPILER_TYPE) && ${X_COMPILER_TYPE} == clang) +XCFLAGS+= -target ${TARGET_TRIPLE} +.endif +XCFLAGS+= --sysroot=${WORLDTMP} + +.if !empty(BFLAGS) +XCFLAGS+= ${BFLAGS} +.endif + +.if ${MK_LIB32} == "yes" +_LIBCOMPAT= 32 +.include "Makefile.libcompat" +.endif + +# META_MODE normally ignores host file changes since every build updates +# timestamps (see NO_META_IGNORE_HOST in sys.mk). There are known times +# when the ABI breaks though that we want to force rebuilding WORLDTMP +# to get updated host tools. +.if ${MK_META_MODE} == "yes" && ${MK_CLEAN} == "no" && \ + !defined(NO_META_IGNORE_HOST) && !defined(NO_META_IGNORE_HOST_HEADERS) && \ + !defined(_MKSHOWCONFIG) +# r318736 - ino64 major ABI breakage +META_MODE_BAD_ABI_VERS+= 1200031 + +.if !defined(OBJDIR_HOST_OSRELDATE) +.if exists(${OBJTOP}/host-osreldate.h) +OBJDIR_HOST_OSRELDATE!= \ + awk '/^\#define[[:space:]]*__FreeBSD_version/ { print $$3 }' \ + ${OBJTOP}/host-osreldate.h +.elif exists(${WORLDTMP}/usr/include/osreldate.h) +OBJDIR_HOST_OSRELDATE= 0 +.endif +.export OBJDIR_HOST_OSRELDATE +.endif + +# Note that this logic is the opposite of normal BOOTSTRAP handling. We want +# to compare the WORLDTMP's OSRELDATE to the host's OSRELDATE. If the WORLDTMP +# is older than the ABI-breakage OSRELDATE of the HOST then we rebuild. +.if defined(OBJDIR_HOST_OSRELDATE) +.for _ver in ${META_MODE_BAD_ABI_VERS} +.if ${OSRELDATE} >= ${_ver} && ${OBJDIR_HOST_OSRELDATE} < ${_ver} +_meta_mode_need_rebuild= ${_ver} +.endif +.endfor +.if defined(_meta_mode_need_rebuild) *** 82571 LINES SKIPPED ***