From c94a2b360b8844d1b5d7fb0d7f25624f396f0cdd Mon Sep 17 00:00:00 2001 From: Patrick Linnane Date: Mon, 22 Dec 2025 20:17:32 -0800 Subject: [PATCH] extend/os/mac/system_config: show Metal Toolchain version Signed-off-by: Patrick Linnane --- Library/Homebrew/extend/os/mac/system_config.rb | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/Library/Homebrew/extend/os/mac/system_config.rb b/Library/Homebrew/extend/os/mac/system_config.rb index a6371cec60ed5..0a6077e191e10 100644 --- a/Library/Homebrew/extend/os/mac/system_config.rb +++ b/Library/Homebrew/extend/os/mac/system_config.rb @@ -47,11 +47,18 @@ def core_tap_config(out = $stdout) sig { returns(T.nilable(String)) } def metal_toolchain - @metal_toolchain ||= T.let(if MacOS::Xcode.installed? || MacOS::CLT.installed? - result = SystemCommand.run("xcrun", args: ["metal", "-v"], + return unless ::Hardware::CPU.arm64? + + @metal_toolchain ||= T.let(nil, T.nilable(String)) + @metal_toolchain ||= if MacOS::Xcode.installed? || MacOS::CLT.installed? + result = SystemCommand.run("xcrun", args: ["--find", "metal"], print_stderr: false, print_stdout: false) - "present" if result.success? - end, T.nilable(String)) + pattern = /MetalToolchain-v(?\d+)\.(?\d+)\.(?\d+)\.(?\d+)/ + if result.success? && (m = result.stdout.match(pattern)) + letter = ("A".ord - 1 + m[:letter].to_i).chr + "#{m[:major]}.#{m[:minor]} (#{m[:major]}#{letter}#{m[:build]})" + end + end end sig { params(out: T.any(File, StringIO, IO)).void } @@ -61,7 +68,7 @@ def dump_verbose_config(out = $stdout) out.puts "CLT: #{clt || "N/A"}" out.puts "Xcode: #{xcode || "N/A"}" # Metal Toolchain is a separate install starting with Xcode 26. - if MacOS::Xcode.installed? && MacOS::Xcode.version >= "26.0" + if ::Hardware::CPU.arm64? && MacOS::Xcode.installed? && MacOS::Xcode.version >= "26.0" out.puts "Metal Toolchain: #{metal_toolchain || "N/A"}" end out.puts "Rosetta 2: #{::Hardware::CPU.in_rosetta2?}" if ::Hardware::CPU.physical_cpu_arm64?