From nobody Wed Aug 6 20:14:58 2025 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 4by1jt4HcPz649DB; Wed, 06 Aug 2025 20:14:58 +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 "R10" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4by1jt1xljz44WD; Wed, 06 Aug 2025 20:14:58 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1754511298; 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=ZwQmnKd1eU1NTmRmTGREHmZ8lAb1LNyWIj2/+811tSI=; b=Q8JNNTZy1xTGikW4jOH4eBJUz0txEVeC4tKweQ8UkvIzkQqGCIL/r0vCIoFda8fdFFxcqj HPXJPeECGQ9dy0dfEXnYoyQeZ3jHzksnKIOXNqnOH4O/DPNIzrUM5vAbjnPpA5o6QJMTwZ R9kac2N1ov+V2g02CSBZVuJkj/E+/tNtnGjkjXDClqLHseSx1Gy30nfZ+a8BH2eG8OKxaO mnjP6Kecr9ng7oJRlG13Y5r1c6hTxAGtJkvO2RlEDXWGq/By4Aoq6iILCyn/kzC/oITpmq m2BK7+JzScpvv4XJlmSy3WRzjqkDsqjHGERGw+wWzJ2uo12Sf9IBhqdx9N/8eQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1754511298; 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=ZwQmnKd1eU1NTmRmTGREHmZ8lAb1LNyWIj2/+811tSI=; b=oYUGLUZRK3t/u4YXxid/26q5wSy2F5SEVtYsOho30LXgrYmbhChet3OYd+o4S7M6qXu4kS WPwPRhigDU+m72sHkTcjK75//bUn0M8TXvm+b7OASYtp93yM4MyjB9kGe7JhrFq5proSr8 n9KI/wP2sT+6LDiwfIkHN2oE3XM3xe1IV1OKAh29AIoBo7co+9Tl/bXHneLMaLX4nuXO2B 1ASXCZUKBFGMapQbMi4F2+nz1jm+uhzC7K8gA/AUhmTfxuhiI04Zg6rRDiBRs8VewGCv92 fGCef/4TPqCmJHLFz6Ors3l1Wcf88sS6IcoNbQkyaEhzWVQq17nayvInRpU0Cg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1754511298; a=rsa-sha256; cv=none; b=d9Y5wmdkhFT7Cn7WZG0iD1zBrFx7CRuw5UqxNFcpkiDZAWEKbg+GmxJkfb6rEJHHqwdc9X GjsVDQiKOK6vVv0Ql8ZxUUzYkmPDJ5hGx6y+jzbVbtWRo6Nktod+8Jk6aPF7oxo2sahjND XmSpTYTInpy8gpPBblOn/h23OM79g1AZPa58ghbi/ktqKyi7vNabVgh9lhawDj94g7cJ0W 2c3pwQgFDz/v19fYkbg8aOmWcXCXXbH97NS0ZMMbFr+ljngj6gQ8x+AXtQ8HNTfR+ttoXV OLXeYI4b1V7mXkBwjdVbvsHfrIrg82KIKCggVZH0dP3kc0bxWw3AlR6CgKtSPg== 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 4by1jt1PGQzcKM; Wed, 06 Aug 2025 20:14:58 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 576KEwPA076914; Wed, 6 Aug 2025 20:14:58 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 576KEwif076911; Wed, 6 Aug 2025 20:14:58 GMT (envelope-from git) Date: Wed, 6 Aug 2025 20:14:58 GMT Message-Id: <202508062014.576KEwif076911@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: John Baldwin Subject: git: 81fc74fd26da - main - 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/main X-Git-Reftype: branch X-Git-Commit: 81fc74fd26da2f75c3010595db7a706c3e28d95b Auto-Submitted: auto-generated The branch main has been updated by jhb: URL: https://cgit.FreeBSD.org/src/commit/?id=81fc74fd26da2f75c3010595db7a706c3e28d95b commit 81fc74fd26da2f75c3010595db7a706c3e28d95b Author: John Baldwin AuthorDate: 2025-08-06 20:14:01 +0000 Commit: John Baldwin CommitDate: 2025-08-06 20:14:01 +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 --- 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 "