From nobody Thu Jan 29 15:39:58 2026 X-Original-To: dev-commits-src-all@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 4f23HM2sNrz6QrbW for ; Thu, 29 Jan 2026 15:39:59 +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 "R13" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4f23HL6qtzz3xkM for ; Thu, 29 Jan 2026 15:39:58 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1769701199; 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=UeCjSYzyXzt6t8eIiCiV6xu3aISSo0nyS7hoPbVL5sM=; b=vKhQ8GAnnGuCjmx9OkwBOvlHlAgKeihAjqlU6YOChrJHUo+FsgeTVbaX4NLC0Av9vw8MIf /+p6cno/b4PZV35o31x7g4G55+xSeADBBbWWjncpQ/ZcGlj/U1D0SF7McyK3xcU5fXPVAK a0q+FQwbJZaACiZs1VbiU+SqaLKcg7vXu/mex9bKSFo7LeGia9gTaptPkOOrrIrUvg9bSz /2/uGsWruaIUEu3mbYjBQSfWKhXFaV/x4c9hegyJX3XjY1ik+gbc8nGXIjvFi1h7oEh51F /i0EQtHW2diSJXXw0LoRQsfHgD89w/doTFUE/1bkLIsdvXfQ3a9yGxqlBK0vNg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1769701199; a=rsa-sha256; cv=none; b=AEUVF2kxeIKPUr1Oer/4rZG986PAJXRvojO1Szp5zMOZA39ZbPDeqD3LmU45QEK8Q9DwZp qvVCtdniGpMDJbymPvZ0kdy6JQ1zi/Fh/0FAPQ5BHKjFvYjQkSCawoveD6ZtmxPcL87dL4 RKvmplE2vqTkWFuULUoxdYTPRRuh1C1CPAxvmt2IZu+GLRcntTSqaCDwjiXiZjAENs8eHe /JMnQdwnlVNH7x/XQLPpgg+fhGxiASSDfoNzHYc/ABElNfwt6GYiIimwI9vacZSHaXMYrN 33vOeFXhO8YY0M7D3C42txvdG4q0i6fGmhzP5VwcRbORvB2zpNFu7Bon4fuw6Q== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1769701199; 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=UeCjSYzyXzt6t8eIiCiV6xu3aISSo0nyS7hoPbVL5sM=; b=caiy8ZRaTSqEzS3sWl8DQ8/WS8CG+9ihAEXOERlPG1qjGPXj9ppMHbYOruNx+26B1BEKxc Qx9xwlWaxIDbS1VHkRxvM3e1CfAgzrBWB5SHlJFw2mToc4PRhBw0nlLyep38PQtPblrP1P xor6LJIQ2qKodzZmAfG7drSsbSNdoPFuM3TXhL/PzdD+/5N5+ee5kyRJhcZTanA225c7/r DL3R2cG3ccMpy4EaQLnvaqxo5aD/SOGM6HTeO0HuwnWhlGU8VVxFTt9UW/CDuqfX+yv2qE M/rYQ5OkYfmFY1xS5HzANFEqh1iFGZPRMtC6EFME4TfyKoYSZWAQFzJ+xEZPiw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4f23HL6NclzkyC for ; Thu, 29 Jan 2026 15:39:58 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 39836 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Thu, 29 Jan 2026 15:39:58 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: John Baldwin Subject: git: 4af3e6cfd7c4 - stable/14 - cross-build make.py: Permit specifying cross toolchains by a package name List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: jhb X-Git-Repository: src X-Git-Refname: refs/heads/stable/14 X-Git-Reftype: branch X-Git-Commit: 4af3e6cfd7c48b402d737f7a01835d2dc61ea567 Auto-Submitted: auto-generated Date: Thu, 29 Jan 2026 15:39:58 +0000 Message-Id: <697b7f4e.39836.2ecd0647@gitrepo.freebsd.org> The branch stable/14 has been updated by jhb: URL: https://cgit.FreeBSD.org/src/commit/?id=4af3e6cfd7c48b402d737f7a01835d2dc61ea567 commit 4af3e6cfd7c48b402d737f7a01835d2dc61ea567 Author: John Baldwin AuthorDate: 2025-08-06 20:14:01 +0000 Commit: John Baldwin CommitDate: 2026-01-29 15:23:38 +0000 cross-build make.py: Permit specifying cross toolchains by a package name Add a --cross-toolchain option whose value is a package name. This is currently only supported with brew on macOS. A sample invocation is `--cross-toolchain=llvm@19`. Differential Revision: https://reviews.freebsd.org/D51741 (cherry picked from commit 81fc74fd26da2f75c3010595db7a706c3e28d95b) --- tools/build/make.py | 40 ++++++++++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/tools/build/make.py b/tools/build/make.py index 618a2aa7abb0..2f36a3e23e32 100755 --- a/tools/build/make.py +++ b/tools/build/make.py @@ -34,11 +34,22 @@ # On FreeBSD you can use it the same way as just calling make: # `MAKEOBJDIRPREFIX=~/obj ./tools/build/make.py buildworld -DWITH_FOO` # -# On Linux and MacOS you will either need to set XCC/XCXX/XLD/XCPP or pass -# --cross-bindir to specify the path to the cross-compiler bindir: -# `MAKEOBJDIRPREFIX=~/obj ./tools/build/make.py -# --cross-bindir=/path/to/cross/compiler buildworld -DWITH_FOO TARGET=foo -# TARGET_ARCH=bar` +# On Linux and MacOS you may need to explicitly indicate the cross toolchain +# to use. You can do this by: +# - setting XCC/XCXX/XLD/XCPP to the paths of each tool +# - using --cross-bindir to specify the path to the cross-compiler bindir: +# `MAKEOBJDIRPREFIX=~/obj ./tools/build/make.py +# --cross-bindir=/path/to/cross/compiler buildworld -DWITH_FOO TARGET=foo +# TARGET_ARCH=bar` +# - using --cross-toolchain to specify the package containing the cross-compiler +# (MacOS only currently): +# `MAKEOBJDIRPREFIX=~/obj ./tools/build/make.py +# --cross-toolchain=llvm@NN buildworld -DWITH_FOO TARGET=foo +# TARGET_ARCH=bar` +# +# On MacOS, this tool will search for an llvm toolchain installed via brew and +# use it as the cross toolchain if an explicit toolchain is not specified. + import argparse import functools import os @@ -160,7 +171,8 @@ def check_required_make_env_var(varname, binary_name, bindir): return if not bindir: sys.exit("Could not infer value for $" + varname + ". Either set $" + - varname + " or pass --cross-bindir=/cross/compiler/dir/bin") + varname + " or pass --cross-bindir=/cross/compiler/dir/bin" + + " or --cross-toolchain=") # try to infer the path to the tool guess = os.path.join(bindir, binary_name) if not os.path.isfile(guess): @@ -179,7 +191,8 @@ def check_xtool_make_env_var(varname, binary_name): return global parsed_args if parsed_args.cross_bindir is None: - cross_bindir = default_cross_toolchain(binary_name) + cross_bindir = cross_toolchain_bindir(binary_name, + parsed_args.cross_toolchain) else: cross_bindir = parsed_args.cross_bindir return check_required_make_env_var(varname, binary_name, @@ -201,17 +214,20 @@ def binary_path(bindir: str, binary_name: str) -> "Optional[str]": pass return None -def default_cross_toolchain(binary_name: str) -> str: +def cross_toolchain_bindir(binary_name: str, package: "Optional[str]") -> str: # default to homebrew-installed clang on MacOS if available if sys.platform.startswith("darwin"): if shutil.which("brew"): - bindir = binary_path(brew_prefix("llvm"), binary_name) + if not package: + package = "llvm" + bindir = binary_path(brew_prefix(package), binary_name) if bindir: return bindir # brew installs lld as a separate package for LLVM 19 and later if binary_name == "ld.lld": - bindir = binary_path(brew_prefix("lld"), binary_name) + lld_package = package.replace("llvm", "lld") + bindir = binary_path(brew_prefix(lld_package), binary_name) if bindir: return bindir return None @@ -233,6 +249,10 @@ if __name__ == "__main__": help="Compiler type to find in --cross-bindir (only " "needed if XCC/XCPP/XLD are not set)" "Note: using CC is currently highly experimental") + parser.add_argument("--cross-toolchain", default=None, + help="Name of package containing cc/c++/cpp/ld to build " + "target binaries (only needed if XCC/XCPP/XLD " + "are not set)") parser.add_argument("--host-compiler-type", choices=("cc", "clang", "gcc"), default="cc", help="Compiler type to find in --host-bindir (only "