Skip to content

Commit 433db70

Browse files
mxpvaaronsky
andauthored
Simplify apple_metal_library (#2747)
Closes: #2502 There is no need to generate an air file for each metal file. Metal CLI can do it behind the scene (as per Apple's [docs](https://developer.apple.com/documentation/metal/generating-and-loading-a-metal-library-symbol-file?language=objc#Generate-a-Symbol-File-with-a-Single-Command)), so just one CLI call is sufficient to build entire metallib. The new implementation a much simpler as well as makes it easier to pass additional flags (such as "generate debug symbols" as described in the original issue). Signed-off-by: Maksym Pavlenko <pavlenko.maksym@gmail.com> Co-authored-by: Aaron Sky <aaronsky@skyaaron.com>
1 parent 717c51e commit 433db70

2 files changed

Lines changed: 7 additions & 34 deletions

File tree

apple/internal/resource_rules/apple_metal_library.bzl

Lines changed: 6 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,6 @@ load(
1818
"@bazel_skylib//lib:dicts.bzl",
1919
"dicts",
2020
)
21-
load(
22-
"@bazel_skylib//lib:paths.bzl",
23-
"paths",
24-
)
2521
load(
2622
"@build_bazel_apple_support//lib:apple_support.bzl",
2723
"apple_support",
@@ -70,7 +66,6 @@ def _metal_apple_target_triple(platform_prerequisites):
7066

7167
def _apple_metal_library_impl(ctx):
7268
"""Implementation of the apple_metal_library rule."""
73-
air_files = []
7469

7570
platform_prerequisites = platform_support.platform_prerequisites(
7671
apple_fragment = ctx.fragments.apple,
@@ -88,46 +83,23 @@ def _apple_metal_library_impl(ctx):
8883
uses_swift = False,
8984
xcode_version_config = ctx.attr._xcode_config[apple_common.XcodeVersionConfig],
9085
)
91-
target = _metal_apple_target_triple(platform_prerequisites)
92-
93-
for src in ctx.files.srcs:
94-
air_file = ctx.actions.declare_file(
95-
paths.replace_extension(src.basename, ".air"),
96-
)
97-
air_files.append(air_file)
98-
99-
args = ctx.actions.args()
100-
args.add("metal")
101-
args.add("-c")
102-
args.add("-target", target)
103-
args.add("-o", air_file)
104-
args.add_all(ctx.attr.copts)
105-
args.add(src.path)
106-
107-
apple_support.run(
108-
actions = ctx.actions,
109-
apple_fragment = platform_prerequisites.apple_fragment,
110-
arguments = [args],
111-
executable = "/usr/bin/xcrun",
112-
inputs = [src] + ctx.files.hdrs,
113-
mnemonic = "MetalCompile",
114-
outputs = [air_file],
115-
xcode_config = platform_prerequisites.xcode_version_config,
116-
)
11786

87+
target = _metal_apple_target_triple(platform_prerequisites)
11888
out = ctx.actions.declare_file(ctx.attr.out)
11989

12090
args = ctx.actions.args()
121-
args.add("metallib")
91+
args.add("metal")
92+
args.add("-target", target)
12293
args.add("-o", out.path)
123-
args.add_all(air_files)
94+
args.add_all(ctx.attr.copts)
95+
args.add_all(ctx.files.srcs)
12496

12597
apple_support.run(
12698
actions = ctx.actions,
12799
apple_fragment = platform_prerequisites.apple_fragment,
128100
arguments = [args],
129101
executable = "/usr/bin/xcrun",
130-
inputs = air_files,
102+
inputs = ctx.files.srcs + ctx.files.hdrs,
131103
mnemonic = "MetallibCompile",
132104
outputs = [out],
133105
xcode_config = platform_prerequisites.xcode_version_config,

test/apple_metal_library_test.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ apple_metal_library(
3737
name = "SampleMetal",
3838
hdrs = ["@build_bazel_rules_apple//test/testdata/resources:metal_hdrs"],
3939
srcs = ["@build_bazel_rules_apple//test/testdata/resources:metal_srcs"],
40+
copts = ["-frecord-sources"]
4041
)
4142
4243
objc_library(

0 commit comments

Comments
 (0)