From nobody Wed Aug 6 20:14:56 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 4by1js1rSQz649Y3; Wed, 06 Aug 2025 20:14:57 +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 4by1js17WSz44NB; Wed, 06 Aug 2025 20:14:57 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1754511297; 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=XSx8r0JtPhhnTkIIaPv/2DgOazq/ThHiqrMYRQMFAA0=; b=fs/kF3v60JPvHUoRPZi6FBtCgDBzHBnxYoo10YO3NS85lc+GnIhpaDs4ySHu+UVc8BNVA/ obvRahLMCJD3MGtQ+1K8WwD95sj1EG/xPLhteekgchHH9QcySqQ94A/rvxipR50mPpgbyK 0iAnzkS8IeCWeE61clf9oxNbYRQW1B4kDKTw3ntVVV6EQ82atlQVmLsY7cP6g73vrBeLHC 6lLZoF9NeohuxuwNN7t1v8i0aWltvud/CuEXOrXIpC1i9XZXaJjKFbwQxfP3yRLDnSS+Qj URivJ99YYf/xPdP486ldF/foD1iIp3k2Axg3Kl5igguGL2ynMk+JsM9Hvfl7UA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1754511297; 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=XSx8r0JtPhhnTkIIaPv/2DgOazq/ThHiqrMYRQMFAA0=; b=EAhKCE4fvxwSdDKwRdOLy3V9A9MII0u9c2a2HkCx3IC0NtcPiYx9F/keUfiT57cy4Sm5ww lPcU6xCeKFZdex6gDvrtVYjcU3gCLplH1bGP2xE8m6AM6wrlVRb1tLk6bdrDJOqt59T5NM almlNRVEAJVUvKzH4BGKYDSrTBWvote3Kg0f2Mny/IFL//ncpXLtjolq9ZpVgN6oLd9fF3 YuAD4kFyaEruNWlSrNayJr029XSyoaHBhHum4khS7uC/qHPq2ifp64vt31IV/eVqF5129W muKzsdbTSxpU3uHhCKeH9KIaX6nfSWUPn9qo5v+nHWvCwz0VOKo7ZJvVBxbznw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1754511297; a=rsa-sha256; cv=none; b=ncAuDDdJbg0FNNyQ0RqlP7Dg4LRuz9ujdWGAtjjNUGaosJ9fyduILpSmeWMOIXoZRjVzKf bRTnxAamOLzuQIll6VrIDS7pbsNQWWB0DaHGtfJMmVVlOOn/VUStvceDnWp9YNxNrTC7BB 4b7+iSMcUKJqZi2pjFrALf3gXNXO42PPPhLkau0KYVDqfmcHyVLptDYs1UBtsRS8WJuphR 0j3baQktN5sEQNjECJN86ouUIkHBSIaaXRmKqnczRgvvOq2h77Tjj+QOEtzZaebCkocWaD Q5y8DYGh81LLIWjW8DngxLoPP8ZW8UzKDsBuRq5/5BWvDoWxowabyFT0nFEvJg== 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 4by1js0f96zcBc; Wed, 06 Aug 2025 20:14:57 +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 576KEu5n076880; Wed, 6 Aug 2025 20:14:56 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 576KEuN4076877; Wed, 6 Aug 2025 20:14:56 GMT (envelope-from git) Date: Wed, 6 Aug 2025 20:14:56 GMT Message-Id: <202508062014.576KEuN4076877@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: e68d702b3a1f - main - cross-build make.py: Handle lld brew packages on macOS 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: e68d702b3a1fc52145e70d861db89a0f20bfc3a0 Auto-Submitted: auto-generated The branch main has been updated by jhb: URL: https://cgit.FreeBSD.org/src/commit/?id=e68d702b3a1fc52145e70d861db89a0f20bfc3a0 commit e68d702b3a1fc52145e70d861db89a0f20bfc3a0 Author: John Baldwin AuthorDate: 2025-08-06 20:13:13 +0000 Commit: John Baldwin CommitDate: 2025-08-06 20:13:13 +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 --- 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