Skip to content

Commit 5a4f2ce

Browse files
nglevinluispadron
authored andcommitted
Handle "bundle" outputs from the crosstool primarily via the debug symbols partial.
Tests for other platforms and targets besides ios_application will arrive in a following commit. NOTE: includes manual addition of `dsym_variant_flag` since its not public in the upstream code Cherry-pick: 7a0ef14
1 parent 8138f9e commit 5a4f2ce

16 files changed

+464
-244
lines changed

apple/build_settings/build_settings.bzl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,14 @@ physical devices) or `xcrun simctl list devices` (for simulators).
5858
""",
5959
default = "",
6060
),
61+
"dsym_variant_flag": struct(
62+
doc = """
63+
Controls the output format for dSYM debug symbols. Valid values are:
64+
- "flat": Outputs individual dSYM files as additional outputs from the target.
65+
- "bundle": Outputs dSYM bundles as directories.
66+
""",
67+
default = "flat",
68+
),
6169
}
6270

6371
# List of all registered build settings without command line flags at

apple/internal/ios_rules.bzl

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -346,9 +346,8 @@ def _ios_application_impl(ctx):
346346
bundle_extension = bundle_extension,
347347
bundle_name = bundle_name,
348348
debug_dependencies = embeddable_targets + ctx.attr.deps,
349-
dsym_binaries = debug_outputs.dsym_binaries,
350349
dsym_info_plist_template = apple_mac_toolchain_info.dsym_info_plist_template,
351-
executable_name = executable_name,
350+
dsym_outputs = debug_outputs.dsym_outputs,
352351
label_name = label.name,
353352
linkmaps = debug_outputs.linkmaps,
354353
platform_prerequisites = platform_prerequisites,
@@ -412,7 +411,7 @@ def _ios_application_impl(ctx):
412411
actions = actions,
413412
binary_artifact = binary_artifact,
414413
dependency_targets = embeddable_targets + ctx.attr.deps,
415-
dsym_binaries = debug_outputs.dsym_binaries,
414+
dsym_outputs = debug_outputs.dsym_binaries,
416415
label_name = label.name,
417416
include_symbols_in_bundle = ctx.attr.include_symbols_in_bundle,
418417
platform_prerequisites = platform_prerequisites,
@@ -712,9 +711,8 @@ def _ios_app_clip_impl(ctx):
712711
bundle_extension = bundle_extension,
713712
bundle_name = bundle_name,
714713
debug_dependencies = embeddable_targets + ctx.attr.deps,
715-
dsym_binaries = debug_outputs.dsym_binaries,
714+
dsym_outputs = debug_outputs.dsym_outputs,
716715
dsym_info_plist_template = apple_mac_toolchain_info.dsym_info_plist_template,
717-
executable_name = executable_name,
718716
label_name = label.name,
719717
linkmaps = debug_outputs.linkmaps,
720718
platform_prerequisites = platform_prerequisites,
@@ -1027,9 +1025,8 @@ def _ios_framework_impl(ctx):
10271025
bundle_extension = bundle_extension,
10281026
bundle_name = bundle_name,
10291027
debug_dependencies = ctx.attr.frameworks + ctx.attr.deps,
1030-
dsym_binaries = debug_outputs.dsym_binaries,
1028+
dsym_outputs = debug_outputs.dsym_outputs,
10311029
dsym_info_plist_template = apple_mac_toolchain_info.dsym_info_plist_template,
1032-
executable_name = executable_name,
10331030
label_name = label.name,
10341031
linkmaps = debug_outputs.linkmaps,
10351032
platform_prerequisites = platform_prerequisites,
@@ -1091,7 +1088,7 @@ def _ios_framework_impl(ctx):
10911088
actions = actions,
10921089
binary_artifact = binary_artifact,
10931090
dependency_targets = ctx.attr.frameworks,
1094-
dsym_binaries = debug_outputs.dsym_binaries,
1091+
dsym_outputs = debug_outputs.dsym_outputs,
10951092
label_name = label.name,
10961093
include_symbols_in_bundle = False,
10971094
platform_prerequisites = platform_prerequisites,
@@ -1335,9 +1332,8 @@ def _ios_extension_impl(ctx):
13351332
bundle_extension = bundle_extension,
13361333
bundle_name = bundle_name,
13371334
debug_dependencies = ctx.attr.frameworks + ctx.attr.deps,
1338-
dsym_binaries = debug_outputs.dsym_binaries,
1335+
dsym_outputs = debug_outputs.dsym_outputs,
13391336
dsym_info_plist_template = apple_mac_toolchain_info.dsym_info_plist_template,
1340-
executable_name = executable_name,
13411337
label_name = label.name,
13421338
linkmaps = debug_outputs.linkmaps,
13431339
platform_prerequisites = platform_prerequisites,
@@ -1387,7 +1383,7 @@ def _ios_extension_impl(ctx):
13871383
actions = actions,
13881384
binary_artifact = binary_artifact,
13891385
dependency_targets = ctx.attr.frameworks,
1390-
dsym_binaries = debug_outputs.dsym_binaries,
1386+
dsym_outputs = debug_outputs.dsym_outputs,
13911387
label_name = label.name,
13921388
include_symbols_in_bundle = False,
13931389
platform_prerequisites = platform_prerequisites,
@@ -1621,9 +1617,8 @@ def _ios_dynamic_framework_impl(ctx):
16211617
bundle_extension = bundle_extension,
16221618
bundle_name = bundle_name,
16231619
debug_dependencies = ctx.attr.frameworks,
1624-
dsym_binaries = debug_outputs.dsym_binaries,
1620+
dsym_outputs = debug_outputs.dsym_binaries,
16251621
dsym_info_plist_template = apple_mac_toolchain_info.dsym_info_plist_template,
1626-
executable_name = executable_name,
16271622
label_name = label.name,
16281623
linkmaps = debug_outputs.linkmaps,
16291624
platform_prerequisites = platform_prerequisites,
@@ -2273,9 +2268,8 @@ def _ios_imessage_extension_impl(ctx):
22732268
bundle_extension = bundle_extension,
22742269
bundle_name = bundle_name,
22752270
debug_dependencies = ctx.attr.frameworks,
2276-
dsym_binaries = debug_outputs.dsym_binaries,
2271+
dsym_outputs = debug_outputs.dsym_outputs,
22772272
dsym_info_plist_template = apple_mac_toolchain_info.dsym_info_plist_template,
2278-
executable_name = executable_name,
22792273
label_name = label.name,
22802274
linkmaps = debug_outputs.linkmaps,
22812275
platform_prerequisites = platform_prerequisites,

apple/internal/linking_support.bzl

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ def _link_multi_arch_binary(
150150
extra_link_inputs = [],
151151
extra_requested_features = [],
152152
extra_disabled_features = [],
153+
rule_descriptor,
153154
stamp = -1,
154155
variables_extension = {}):
155156
"""Links a (potentially multi-architecture) binary targeting Apple platforms.
@@ -177,6 +178,9 @@ def _link_multi_arch_binary(
177178
to the linker action.
178179
extra_disabled_features: A list of strings: Extra disabled features to be passed
179180
to the linker action.
181+
rule_descriptor: The rule descriptor if one exists for the given rule. For convenience, This
182+
will define additional parameters required for linking, such as the dSYM bundle name. If
183+
`None`, these additional parameters will not be set on the linked binary.
180184
stamp: Whether to include build information in the linked binary. If 1, build
181185
information is always included. If 0, build information is always excluded.
182186
If -1 (the default), then the behavior is determined by the --[no]stamp
@@ -288,9 +292,18 @@ def _link_multi_arch_binary(
288292
if ctx.fragments.cpp.apple_generate_dsym:
289293
dsym_variants = build_settings.dsym_variant_flag
290294
if dsym_variants == "bundle":
291-
# TODO(b/391401130): Remove this once dsymutil generated bundle dSYM output is
292-
# supported.
293-
fail("dsymutil bundle dSYM output is not yet supported by the Apple BUILD Rules.")
295+
if rule_descriptor:
296+
dsym_bundle_name = ctx.label.name + rule_descriptor.bundle_extension
297+
else:
298+
dsym_bundle_name = ctx.label.name
299+
300+
# Avoiding "intermediates" as this will be the canonical dSYM in a single arch build
301+
dsym_output = ctx.actions.declare_directory(
302+
"{split_transition_key}/{dsym_bundle_name}.dSYM".format(
303+
split_transition_key = split_transition_key,
304+
dsym_bundle_name = dsym_bundle_name,
305+
),
306+
)
294307
elif dsym_variants != "flat":
295308
fail("""
296309
Internal Error: Found unsupported dsym_variant_flag: {dsym_variants}.
@@ -358,7 +371,7 @@ Please report this as a bug to the Apple BUILD Rules team.
358371
"platform": platform_info.target_os,
359372
"architecture": platform_info.target_arch,
360373
"environment": platform_info.target_environment,
361-
"dsym_binary": dsym_output,
374+
"dsym_output": dsym_output,
362375
"linkmap": linkmap,
363376
}
364377

@@ -389,20 +402,20 @@ def _debug_outputs_by_architecture(link_outputs):
389402
Returns:
390403
A `struct` containing three fields:
391404
392-
* `dsym_binaries`: A mapping of architectures to Files representing dSYM binary outputs
393-
for each architecture.
405+
* `dsym_outputs`: A mapping of architectures to Files representing dSYM outputs for each
406+
architecture.
394407
* `linkmaps`: A mapping of architectures to Files representing linkmaps for each
395408
architecture.
396409
"""
397-
dsym_binaries = {}
410+
dsym_outputs = {}
398411
linkmaps = {}
399412

400413
for link_output in link_outputs:
401-
dsym_binaries[link_output.architecture] = link_output.dsym_binary
414+
dsym_outputs[link_output.architecture] = link_output.dsym_output
402415
linkmaps[link_output.architecture] = link_output.linkmap
403416

404417
return struct(
405-
dsym_binaries = dsym_binaries,
418+
dsym_outputs = dsym_outputs,
406419
linkmaps = linkmaps,
407420
)
408421

@@ -589,6 +602,7 @@ def _register_binary_linking_action(
589602
# TODO(321109350): Disable include scanning to work around issue with GrepIncludes actions
590603
# being routed to the wrong exec platform.
591604
extra_disabled_features = extra_disabled_features + ["cc_include_scanning"],
605+
rule_descriptor = rule_descriptor,
592606
stamp = stamp,
593607
)
594608

apple/internal/macos_rules.bzl

Lines changed: 18 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -320,9 +320,8 @@ def _macos_application_impl(ctx):
320320
bundle_extension = bundle_extension,
321321
bundle_name = bundle_name,
322322
debug_dependencies = embedded_targets + ctx.attr.additional_contents.keys(),
323-
dsym_binaries = debug_outputs.dsym_binaries,
323+
dsym_outputs = debug_outputs.dsym_outputs,
324324
dsym_info_plist_template = apple_mac_toolchain_info.dsym_info_plist_template,
325-
executable_name = executable_name,
326325
label_name = label.name,
327326
linkmaps = debug_outputs.linkmaps,
328327
platform_prerequisites = platform_prerequisites,
@@ -384,7 +383,7 @@ def _macos_application_impl(ctx):
384383
actions = actions,
385384
binary_artifact = binary_artifact,
386385
dependency_targets = embedded_targets,
387-
dsym_binaries = debug_outputs.dsym_binaries,
386+
dsym_outputs = debug_outputs.dsym_outputs,
388387
label_name = label.name,
389388
include_symbols_in_bundle = ctx.attr.include_symbols_in_bundle,
390389
platform_prerequisites = platform_prerequisites,
@@ -627,9 +626,8 @@ def _macos_bundle_impl(ctx):
627626
bundle_extension = bundle_extension,
628627
bundle_name = bundle_name,
629628
debug_dependencies = ctx.attr.additional_contents.keys(),
630-
dsym_binaries = debug_outputs.dsym_binaries,
629+
dsym_outputs = debug_outputs.dsym_outputs,
631630
dsym_info_plist_template = apple_mac_toolchain_info.dsym_info_plist_template,
632-
executable_name = executable_name,
633631
label_name = label.name,
634632
linkmaps = debug_outputs.linkmaps,
635633
platform_prerequisites = platform_prerequisites,
@@ -892,9 +890,8 @@ def _macos_extension_impl(ctx):
892890
bundle_extension = bundle_extension,
893891
bundle_name = bundle_name,
894892
debug_dependencies = ctx.attr.frameworks + ctx.attr.additional_contents.keys(),
895-
dsym_binaries = debug_outputs.dsym_binaries,
896893
dsym_info_plist_template = apple_mac_toolchain_info.dsym_info_plist_template,
897-
executable_name = executable_name,
894+
dsym_outputs = debug_outputs.dsym_outputs,
898895
label_name = label.name,
899896
linkmaps = debug_outputs.linkmaps,
900897
platform_prerequisites = platform_prerequisites,
@@ -941,7 +938,7 @@ def _macos_extension_impl(ctx):
941938
actions = actions,
942939
binary_artifact = binary_artifact,
943940
dependency_targets = [],
944-
dsym_binaries = debug_outputs.dsym_binaries,
941+
dsym_outputs = debug_outputs.dsym_binaries,
945942
label_name = label.name,
946943
include_symbols_in_bundle = False,
947944
platform_prerequisites = platform_prerequisites,
@@ -1154,9 +1151,8 @@ def _macos_quick_look_plugin_impl(ctx):
11541151
bundle_extension = bundle_extension,
11551152
bundle_name = bundle_name,
11561153
debug_dependencies = ctx.attr.additional_contents.keys(),
1157-
dsym_binaries = debug_outputs.dsym_binaries,
1154+
dsym_outputs = debug_outputs.dsym_binaries,
11581155
dsym_info_plist_template = apple_mac_toolchain_info.dsym_info_plist_template,
1159-
executable_name = executable_name,
11601156
label_name = label.name,
11611157
linkmaps = debug_outputs.linkmaps,
11621158
platform_prerequisites = platform_prerequisites,
@@ -1199,7 +1195,7 @@ def _macos_quick_look_plugin_impl(ctx):
11991195
actions = actions,
12001196
binary_artifact = binary_artifact,
12011197
dependency_targets = [],
1202-
dsym_binaries = debug_outputs.dsym_binaries,
1198+
dsym_outputs = debug_outputs.dsym_outputs,
12031199
label_name = label.name,
12041200
include_symbols_in_bundle = False,
12051201
platform_prerequisites = platform_prerequisites,
@@ -1407,9 +1403,8 @@ def _macos_kernel_extension_impl(ctx):
14071403
bundle_extension = bundle_extension,
14081404
bundle_name = bundle_name,
14091405
debug_dependencies = ctx.attr.additional_contents.keys(),
1410-
dsym_binaries = debug_outputs.dsym_binaries,
1406+
dsym_outputs = debug_outputs.dsym_outputs,
14111407
dsym_info_plist_template = apple_mac_toolchain_info.dsym_info_plist_template,
1412-
executable_name = executable_name,
14131408
label_name = label.name,
14141409
linkmaps = debug_outputs.linkmaps,
14151410
platform_prerequisites = platform_prerequisites,
@@ -1452,7 +1447,7 @@ def _macos_kernel_extension_impl(ctx):
14521447
actions = actions,
14531448
binary_artifact = binary_artifact,
14541449
dependency_targets = [],
1455-
dsym_binaries = debug_outputs.dsym_binaries,
1450+
dsym_outputs = debug_outputs.dsym_outputs,
14561451
label_name = label.name,
14571452
include_symbols_in_bundle = False,
14581453
platform_prerequisites = platform_prerequisites,
@@ -1650,9 +1645,8 @@ def _macos_spotlight_importer_impl(ctx):
16501645
bundle_extension = bundle_extension,
16511646
bundle_name = bundle_name,
16521647
debug_dependencies = ctx.attr.additional_contents.keys(),
1653-
dsym_binaries = debug_outputs.dsym_binaries,
1648+
dsym_outputs = debug_outputs.dsym_outputs,
16541649
dsym_info_plist_template = apple_mac_toolchain_info.dsym_info_plist_template,
1655-
executable_name = executable_name,
16561650
label_name = label.name,
16571651
linkmaps = debug_outputs.linkmaps,
16581652
platform_prerequisites = platform_prerequisites,
@@ -1694,7 +1688,7 @@ def _macos_spotlight_importer_impl(ctx):
16941688
actions = actions,
16951689
binary_artifact = binary_artifact,
16961690
dependency_targets = [],
1697-
dsym_binaries = debug_outputs.dsym_binaries,
1691+
dsym_outputs = debug_outputs.dsym_outputs,
16981692
label_name = label.name,
16991693
include_symbols_in_bundle = False,
17001694
platform_prerequisites = platform_prerequisites,
@@ -1892,9 +1886,8 @@ def _macos_xpc_service_impl(ctx):
18921886
bundle_extension = bundle_extension,
18931887
bundle_name = bundle_name,
18941888
debug_dependencies = ctx.attr.additional_contents.keys(),
1895-
dsym_binaries = debug_outputs.dsym_binaries,
1889+
dsym_outputs = debug_outputs.dsym_outputs,
18961890
dsym_info_plist_template = apple_mac_toolchain_info.dsym_info_plist_template,
1897-
executable_name = executable_name,
18981891
label_name = label.name,
18991892
linkmaps = debug_outputs.linkmaps,
19001893
platform_prerequisites = platform_prerequisites,
@@ -1936,7 +1929,7 @@ def _macos_xpc_service_impl(ctx):
19361929
actions = actions,
19371930
binary_artifact = binary_artifact,
19381931
dependency_targets = [],
1939-
dsym_binaries = debug_outputs.dsym_binaries,
1932+
dsym_outputs = debug_outputs.dsym_outputs,
19401933
label_name = label.name,
19411934
include_symbols_in_bundle = False,
19421935
platform_prerequisites = platform_prerequisites,
@@ -2045,7 +2038,7 @@ def _macos_command_line_application_impl(ctx):
20452038
actions = actions,
20462039
bundle_extension = bundle_extension,
20472040
bundle_name = bundle_name,
2048-
dsym_binaries = debug_outputs.dsym_binaries,
2041+
dsym_outputs = debug_outputs.dsym_outputs,
20492042
dsym_info_plist_template = apple_mac_toolchain_info.dsym_info_plist_template,
20502043
label_name = label.name,
20512044
linkmaps = debug_outputs.linkmaps,
@@ -2189,7 +2182,7 @@ def _macos_dylib_impl(ctx):
21892182
actions = actions,
21902183
bundle_extension = bundle_extension,
21912184
bundle_name = bundle_name,
2192-
dsym_binaries = debug_outputs.dsym_binaries,
2185+
dsym_outputs = debug_outputs.dsym_outputs,
21932186
dsym_info_plist_template = apple_mac_toolchain_info.dsym_info_plist_template,
21942187
label_name = label.name,
21952188
linkmaps = debug_outputs.linkmaps,
@@ -2940,9 +2933,8 @@ def _macos_framework_impl(ctx):
29402933
bundle_extension = bundle_extension,
29412934
bundle_name = bundle_name,
29422935
debug_dependencies = ctx.attr.frameworks,
2943-
dsym_binaries = debug_outputs.dsym_binaries,
2936+
dsym_outputs = debug_outputs.dsym_binaries,
29442937
dsym_info_plist_template = apple_mac_toolchain_info.dsym_info_plist_template,
2945-
executable_name = executable_name,
29462938
label_name = label.name,
29472939
linkmaps = debug_outputs.linkmaps,
29482940
platform_prerequisites = platform_prerequisites,
@@ -3004,7 +2996,7 @@ def _macos_framework_impl(ctx):
30042996
actions = actions,
30052997
binary_artifact = binary_artifact,
30062998
dependency_targets = ctx.attr.frameworks,
3007-
dsym_binaries = debug_outputs.dsym_binaries,
2999+
dsym_outputs = debug_outputs.dsym_binaries,
30083000
label_name = label.name,
30093001
include_symbols_in_bundle = False,
30103002
platform_prerequisites = platform_prerequisites,
@@ -3221,9 +3213,8 @@ def _macos_dynamic_framework_impl(ctx):
32213213
bundle_extension = bundle_extension,
32223214
bundle_name = bundle_name,
32233215
debug_dependencies = ctx.attr.frameworks,
3224-
dsym_binaries = debug_outputs.dsym_binaries,
3216+
dsym_outputs = debug_outputs.dsym_binaries,
32253217
dsym_info_plist_template = apple_mac_toolchain_info.dsym_info_plist_template,
3226-
executable_name = executable_name,
32273218
label_name = label.name,
32283219
linkmaps = debug_outputs.linkmaps,
32293220
platform_prerequisites = platform_prerequisites,

apple/internal/partials/BUILD

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,11 +148,13 @@ bzl_library(
148148
deps = [
149149
"//apple:providers",
150150
"//apple/internal:intermediates",
151+
"//apple/internal:outputs",
151152
"//apple/internal:providers",
152153
"//apple/internal:resource_actions",
153154
"//apple/internal/providers:apple_debug_info",
154155
"//apple/internal/utils:defines",
155156
"@bazel_skylib//lib:partial",
157+
"@bazel_skylib//lib:paths",
156158
"@bazel_skylib//lib:shell",
157159
"@build_bazel_apple_support//lib:apple_support",
158160
],

0 commit comments

Comments
 (0)