Skip to content

Commit 114ee4e

Browse files
committed
fix: add missing bazel_features import to compilation_support.bzl
The bazel_features load and BUILD dep were dropped during rebase conflict resolution but are still needed for Bazel 8 compat checks.
1 parent c496d08 commit 114ee4e

2 files changed

Lines changed: 81 additions & 30 deletions

File tree

apple/internal/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,7 @@ bzl_library(
205205
":fragment_support",
206206
":outputs",
207207
":platform_support",
208+
"@bazel_features//:features",
208209
"@bazel_skylib//lib:paths",
209210
"@rules_cc//cc/common",
210211
],

apple/internal/compilation_support.bzl

Lines changed: 80 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
"""Utility methods used for creating objc_* rules actions"""
1616

17+
load("@bazel_features//:features.bzl", "bazel_features")
1718
load(
1819
"@bazel_skylib//lib:paths.bzl",
1920
"paths",
@@ -39,24 +40,10 @@ visibility([
3940
"//apple/...",
4041
])
4142

42-
def _build_feature_configuration(common_variables):
43-
ctx = common_variables.ctx
44-
45-
enabled_features = []
46-
enabled_features.extend(ctx.features)
47-
enabled_features.extend(common_variables.extra_enabled_features)
48-
49-
disabled_features = []
50-
disabled_features.extend(ctx.disabled_features)
51-
disabled_features.extend(common_variables.extra_disabled_features)
52-
disabled_features.append("parse_headers")
53-
54-
return cc_common.configure_features(
55-
ctx = common_variables.ctx,
56-
cc_toolchain = common_variables.toolchain,
43+
def _build_feature_configuration(*, cc_configured_features, cc_toolchain):
44+
return cc_configured_features.configure_features(
45+
cc_toolchain = cc_toolchain,
5746
language = "objc",
58-
requested_features = enabled_features,
59-
unsupported_features = disabled_features,
6047
)
6148

6249
def _build_fully_linked_variable_extensions(*, archive, libs):
@@ -85,6 +72,52 @@ def _get_library_for_linking(library_to_link):
8572
else:
8673
return library_to_link.dynamic_library
8774

75+
def _build_avoid_library_set(avoid_dep_linking_contexts):
76+
avoid_library_set = dict()
77+
for linking_context in avoid_dep_linking_contexts:
78+
for linker_input in linking_context.linker_inputs.to_list():
79+
for library_to_link in linker_input.libraries:
80+
library_artifact = _get_static_library_for_linking(library_to_link)
81+
if library_artifact:
82+
avoid_library_set[library_artifact.short_path] = True
83+
return avoid_library_set
84+
85+
def _subtract_linking_contexts(owner, linking_contexts, avoid_dep_linking_contexts):
86+
"""Subtracts the libraries in avoid_dep_linking_contexts from linking_contexts.
87+
88+
Args:
89+
owner: The label of the target currently being analyzed.
90+
linking_contexts: An iterable of CcLinkingContext objects.
91+
avoid_dep_linking_contexts: An iterable of CcLinkingContext objects.
92+
93+
Returns:
94+
A CcLinkingContext object.
95+
"""
96+
libraries = []
97+
user_link_flags = []
98+
additional_inputs = []
99+
linkstamps = []
100+
avoid_library_set = _build_avoid_library_set(avoid_dep_linking_contexts)
101+
for linking_context in linking_contexts:
102+
for linker_input in linking_context.linker_inputs.to_list():
103+
for library_to_link in linker_input.libraries:
104+
library_artifact = _get_library_for_linking(library_to_link)
105+
if library_artifact.short_path not in avoid_library_set:
106+
libraries.append(library_to_link)
107+
user_link_flags.extend(linker_input.user_link_flags)
108+
additional_inputs.extend(linker_input.additional_inputs)
109+
linkstamps.extend(linker_input.linkstamps)
110+
linker_input = cc_common.create_linker_input(
111+
owner = owner,
112+
libraries = depset(libraries, order = "topological"),
113+
user_link_flags = user_link_flags,
114+
additional_inputs = depset(additional_inputs),
115+
linkstamps = depset(linkstamps),
116+
)
117+
return cc_common.create_linking_context(
118+
linker_inputs = depset([linker_input]),
119+
)
120+
88121
def _libraries_from_linking_context(linking_context):
89122
libraries = []
90123
for linker_input in linking_context.linker_inputs.to_list():
@@ -97,13 +130,21 @@ def _get_libraries_for_linking(libraries_to_link):
97130
libraries.append(_get_library_for_linking(library_to_link))
98131
return libraries
99132

100-
def _register_fully_link_action(*, cc_linking_context, common_variables, name):
101-
ctx = common_variables.ctx
102-
feature_configuration = _build_feature_configuration(common_variables)
133+
def _register_fully_link_action(
134+
*,
135+
cc_configured_features,
136+
cc_linking_context,
137+
common_variables,
138+
name):
139+
feature_configuration = _build_feature_configuration(
140+
cc_configured_features = cc_configured_features,
141+
cc_toolchain = common_variables.toolchain,
142+
)
103143

104144
libraries_to_link = _libraries_from_linking_context(cc_linking_context).to_list()
105145
libraries = _get_libraries_for_linking(libraries_to_link)
106146

147+
ctx = common_variables.ctx
107148
output_archive = ctx.actions.declare_file(name + ".a")
108149
extensions = _build_fully_linked_variable_extensions(
109150
archive = output_archive,
@@ -149,6 +190,8 @@ def _register_binary_strip_action(
149190
ctx,
150191
apple_platform_info,
151192
binary,
193+
bundle_name,
194+
cc_toolchain,
152195
extra_link_args,
153196
feature_configuration,
154197
name):
@@ -173,7 +216,8 @@ def _register_binary_strip_action(
173216

174217
stripped_binary = outputs.main_binary(
175218
actions = ctx.actions,
176-
apple_platform_info = apple_platform_info,
219+
bundle_name = bundle_name,
220+
cc_toolchain = cc_toolchain,
177221
cpp_fragment = ctx.fragments.cpp,
178222
label = ctx.label,
179223
unstripped = False,
@@ -255,7 +299,9 @@ def _register_configuration_specific_link_actions(
255299
additional_outputs,
256300
apple_platform_info,
257301
attr_linkopts,
302+
bundle_name,
258303
common_variables,
304+
cc_configured_features,
259305
cc_linking_context,
260306
extra_link_args,
261307
extra_link_inputs,
@@ -272,8 +318,12 @@ def _register_configuration_specific_link_actions(
272318
Returns:
273319
(File) the linked binary
274320
"""
321+
feature_configuration = _build_feature_configuration(
322+
cc_configured_features = cc_configured_features,
323+
cc_toolchain = common_variables.toolchain,
324+
)
325+
275326
ctx = common_variables.ctx
276-
feature_configuration = _build_feature_configuration(common_variables)
277327

278328
# TODO: Remove when we drop Bazel 8
279329
if bazel_features.cc.objc_fragment_has_builtin_objc_strip_action:
@@ -283,7 +333,8 @@ def _register_configuration_specific_link_actions(
283333

284334
binary = outputs.main_binary(
285335
actions = ctx.actions,
286-
apple_platform_info = apple_platform_info,
336+
bundle_name = bundle_name,
337+
cc_toolchain = common_variables.toolchain,
287338
cpp_fragment = ctx.fragments.cpp,
288339
label = ctx.label,
289340
unstripped = unstripped,
@@ -299,6 +350,7 @@ def _register_configuration_specific_link_actions(
299350
apple_platform_info = apple_platform_info,
300351
attr_linkopts = attr_linkopts,
301352
binary = binary,
353+
bundle_name = bundle_name,
302354
cc_linking_context = cc_linking_context,
303355
common_variables = common_variables,
304356
extra_link_args = extra_link_args,
@@ -331,6 +383,7 @@ def _register_configuration_specific_link_actions_with_cpp_variables(
331383
apple_platform_info,
332384
attr_linkopts,
333385
binary,
386+
bundle_name,
334387
cc_linking_context,
335388
common_variables,
336389
extra_link_args,
@@ -387,6 +440,8 @@ def _register_configuration_specific_link_actions_with_cpp_variables(
387440
ctx = ctx,
388441
apple_platform_info = apple_platform_info,
389442
binary = binary,
443+
bundle_name = bundle_name,
444+
cc_toolchain = common_variables.toolchain,
390445
extra_link_args = extra_link_args,
391446
feature_configuration = feature_configuration,
392447
name = name,
@@ -448,14 +503,9 @@ def _create_deduped_linkopts_linking_context(*, cc_linking_context, owner, seen_
448503
libraries = depset(linker_input.libraries),
449504
owner = linker_input.owner,
450505
user_link_flags = new_flags,
506+
linkstamps = depset(linker_input.linkstamps),
451507
))
452508

453-
# Why does linker_input not expose linkstamp? This needs to be fixed.
454-
linker_inputs.append(cc_common.create_linker_input(
455-
linkstamps = cc_linking_context.linkstamps(),
456-
owner = owner,
457-
))
458-
459509
return cc_common.create_linking_context(linker_inputs = depset(linker_inputs))
460510

461511
# TODO: Delete when we drop Bazel 8 support (see f4a3fa40)
@@ -565,9 +615,9 @@ def _register_configuration_specific_link_actions_with_objc_variables(
565615
return binary
566616

567617
compilation_support = struct(
568-
# TODO(b/331163513): Move apple_common.compliation_support.build_common_variables here, too.
569618
get_library_for_linking = _get_library_for_linking,
570619
get_static_library_for_linking = _get_static_library_for_linking,
571620
register_fully_link_action = _register_fully_link_action,
572621
register_configuration_specific_link_actions = _register_configuration_specific_link_actions,
622+
subtract_linking_contexts = _subtract_linking_contexts,
573623
)

0 commit comments

Comments
 (0)