From nobody Thu Jan 29 15:39:57 2026 X-Original-To: dev-commits-src-branches@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 4f23HL11rMz6Qrk3 for ; Thu, 29 Jan 2026 15:39: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 "R13" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4f23HK69x5z3y04 for ; Thu, 29 Jan 2026 15:39:57 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1769701197; 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=wAQaFKmbK9gWOIt7rhqbFxWotyswCSrkdrSeMzb9pzk=; b=ov4tlw6BXKOTFeg16LgVUre7a5+815uhIGWINkSsz+sj+tRbKpVYfWxsYxAKp1ynY3CCc4 L63sYBKYSjRtYASWbKGJrm4IRgWhG3Qop+HbrYvtnyozWR65FAO69w2XQ76HQuMqtLczqY zW1bshaSiM/ms4N0zNbdxCboPo2tgQx1xqvVZyo+c9ncSedGm5CdBtYkGR8q+U0fXijCaY zeSg2NYdx+9UsLwHA0ZTZvt+9V12StBhAi1n8MtywocgBJMyII0jwR09TSAtgd0YLa5vJO L8ZdOZrW2oKrZetr3D0AGEs3IfndNckc3sCv/Qbdd29mjnS0TqMXFyBgDiBU/w== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1769701197; a=rsa-sha256; cv=none; b=aMeNtNNssGCGJtnX78RdaJvbckCEWSdFFHHPbzQOYotR8RtmjEwQnaHT/lA4aK95JjHv/W yRGk8EzmkrJZg7sOsMie4KzNZyY50jzw8kIxf3PkMie33F9iTRota4bGaF5bAGRJaIuHcZ ocjJpwoTjOTGf6bweUSmYaoeT8oHvoVV1lCTI9XoYyErQN9Bd3qJ6x2IVcFSoiF1mdNwC2 oykJ0w0nzzyXLjIvle6uwu57EePRjumDz1yAtID5qG0LmBhvxiEVGbp/qr0RPZwehOnSn8 XHFcS2LlJbSwwpSCd4hqNT89zUhsn44jOiSP1ogWSx8blqXjMVQxLUJzc0+rdw== 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=1769701197; 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=wAQaFKmbK9gWOIt7rhqbFxWotyswCSrkdrSeMzb9pzk=; b=glwBTcOIUdwuvnF2l/gXjWiwmOWTsD6JcvhU7sPE+2hmOn4q9+Zl2SKyM1t55HD3wO7ZP3 WPcQ/4S4sYapbZULJPkVj3wkptv2vMk3qUTwbMqV+drK7T170ssxqh9qMEoS0PgV9f1ly1 5SMPMRiun8m+74ZoaVpfzDRS2adLi9mXdb0qMYXahDH2yLtIsoTxfbHI2MRPSfa7Oxn1i/ lyfzdgp9ro+Film3zyovsIUbVKXJ90KzEpYPBqUYC2ZdBhvHGSVL3Ofn2br8dLwg6NP953 oxDzM5eCO6Xav8jFJsQojpqxLQhCpuXltSTw14dSswkyKXpVzz7hr6x0eGwIrA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4f23HK5bK0zkmL for ; Thu, 29 Jan 2026 15:39:57 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 38c6c by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Thu, 29 Jan 2026 15:39:57 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: John Baldwin Subject: git: 244f79497737 - stable/14 - cross-build make.py: Handle lld brew packages on macOS List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-branches@freebsd.org Sender: owner-dev-commits-src-branches@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: 244f79497737cd358c832c849d2d98e01dc37fb7 Auto-Submitted: auto-generated Date: Thu, 29 Jan 2026 15:39:57 +0000 Message-Id: <697b7f4d.38c6c.35ce93d4@gitrepo.freebsd.org> The branch stable/14 has been updated by jhb: URL: https://cgit.FreeBSD.org/src/commit/?id=244f79497737cd358c832c849d2d98e01dc37fb7 commit 244f79497737cd358c832c849d2d98e01dc37fb7 Author: John Baldwin AuthorDate: 2025-08-06 20:13:13 +0000 Commit: John Baldwin CommitDate: 2026-01-29 15:23:35 +0000 cross-build make.py: Handle lld brew packages on macOS Homebrew uses separate packages for llvm and lld starting with llvm19. To handle this case automatically, pass the binary_name to default_cross_toolchain() and only use the automatic path for a given binary if the binary is found in the path (not just if the directory exists). Add a second clause for ld.lld that looks for a lld package if lld wasn't found in the llvm directory. Note that manually specifying the path cannot use a single --cross-bindir option. Instead, XLD must be manually set in addition to --cross-bindir when requesting a specific version. Reviewed by: arichardson Differential Revision: https://reviews.freebsd.org/D51653 (cherry picked from commit e68d702b3a1fc52145e70d861db89a0f20bfc3a0) --- tools/build/make.py | 42 ++++++++++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/tools/build/make.py b/tools/build/make.py index ec42cb70dd21..618a2aa7abb0 100755 --- a/tools/build/make.py +++ b/tools/build/make.py @@ -40,6 +40,7 @@ # --cross-bindir=/path/to/cross/compiler buildworld -DWITH_FOO TARGET=foo # TARGET_ARCH=bar` import argparse +import functools import os import shlex import shutil @@ -178,24 +179,41 @@ def check_xtool_make_env_var(varname, binary_name): return global parsed_args if parsed_args.cross_bindir is None: - parsed_args.cross_bindir = default_cross_toolchain() + cross_bindir = default_cross_toolchain(binary_name) + else: + cross_bindir = parsed_args.cross_bindir return check_required_make_env_var(varname, binary_name, - parsed_args.cross_bindir) + cross_bindir) + + +@functools.cache +def brew_prefix(package: str) -> str: + path = subprocess.run(["brew", "--prefix", package], stdout=subprocess.PIPE, + stderr=subprocess.PIPE).stdout.strip() + debug("Inferred", package, "dir as", path) + return path.decode("utf-8") +def binary_path(bindir: str, binary_name: str) -> "Optional[str]": + try: + if bindir and Path(bindir, "bin", binary_name).exists(): + return str(Path(bindir, "bin")) + except OSError: + pass + return None -def default_cross_toolchain(): +def default_cross_toolchain(binary_name: str) -> str: # default to homebrew-installed clang on MacOS if available if sys.platform.startswith("darwin"): if shutil.which("brew"): - llvm_dir = subprocess.run([ - "brew", "--prefix", "llvm"], - stdout=subprocess.PIPE, stderr=subprocess.PIPE).stdout.strip() - debug("Inferred LLVM dir as", llvm_dir) - try: - if llvm_dir and Path(llvm_dir.decode("utf-8"), "bin").exists(): - return str(Path(llvm_dir.decode("utf-8"), "bin")) - except OSError: - return None + bindir = binary_path(brew_prefix("llvm"), 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) + if bindir: + return bindir return None