Skip to content

Commit 2857747

Browse files
nglevinluispadron
authored andcommitted
Begin reducing the "avoid deps" support for linking down to strictly relaying linking contexts per os/"platform_type" + environment, starting by removing where compilation contexts are propagated and left unused.
Cherry-pick: 14bf4bd
1 parent 4544e14 commit 2857747

File tree

3 files changed

+64
-18
lines changed

3 files changed

+64
-18
lines changed

apple/internal/BUILD

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,6 @@ bzl_library(
344344
name = "linking_support",
345345
srcs = [
346346
"linking_support.bzl",
347-
"multi_arch_binary_support.bzl",
348347
],
349348
visibility = [
350349
"//apple:__subpackages__",

apple/internal/compilation_support.bzl

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,14 @@ def _build_fully_linked_variable_extensions(*, archive, libs):
6363
extensions["imported_library_exec_paths"] = []
6464
return extensions
6565

66+
def _get_static_library_for_linking(library_to_link):
67+
if library_to_link.static_library:
68+
return library_to_link.static_library
69+
elif library_to_link.pic_static_library:
70+
return library_to_link.pic_static_library
71+
else:
72+
return None
73+
6674
def _get_library_for_linking(library_to_link):
6775
if library_to_link.static_library:
6876
return library_to_link.static_library
@@ -73,6 +81,53 @@ def _get_library_for_linking(library_to_link):
7381
else:
7482
return library_to_link.dynamic_library
7583

84+
def _build_avoid_library_set(avoid_dep_linking_contexts):
85+
avoid_library_set = dict()
86+
for linking_context in avoid_dep_linking_contexts:
87+
for linker_input in linking_context.linker_inputs.to_list():
88+
for library_to_link in linker_input.libraries:
89+
library_artifact = _get_static_library_for_linking(library_to_link)
90+
if library_artifact:
91+
avoid_library_set[library_artifact.short_path] = True
92+
return avoid_library_set
93+
94+
def _subtract_linking_contexts(owner, linking_contexts, avoid_dep_linking_contexts):
95+
"""Subtracts the libraries in avoid_dep_linking_contexts from linking_contexts.
96+
97+
Args:
98+
owner: The label of the target currently being analyzed.
99+
linking_contexts: An iterable of CcLinkingContext objects.
100+
avoid_dep_linking_contexts: An iterable of CcLinkingContext objects.
101+
102+
Returns:
103+
A CcLinkingContext object.
104+
"""
105+
libraries = []
106+
user_link_flags = []
107+
additional_inputs = []
108+
linkstamps = []
109+
avoid_library_set = _build_avoid_library_set(avoid_dep_linking_contexts)
110+
for linking_context in linking_contexts:
111+
for linker_input in linking_context.linker_inputs.to_list():
112+
for library_to_link in linker_input.libraries:
113+
library_artifact = _get_library_for_linking(library_to_link)
114+
if library_artifact.short_path not in avoid_library_set:
115+
libraries.append(library_to_link)
116+
user_link_flags.extend(linker_input.user_link_flags)
117+
additional_inputs.extend(linker_input.additional_inputs)
118+
linkstamps.extend(linker_input.linkstamps)
119+
linker_input = cc_common.create_linker_input(
120+
owner = owner,
121+
libraries = depset(libraries, order = "topological"),
122+
user_link_flags = user_link_flags,
123+
additional_inputs = depset(additional_inputs),
124+
linkstamps = depset(linkstamps),
125+
)
126+
return cc_common.create_linking_context(
127+
linker_inputs = depset([linker_input]),
128+
owner = owner,
129+
)
130+
76131
def _libraries_from_linking_context(linking_context):
77132
libraries = []
78133
for linker_input in linking_context.linker_inputs.to_list():
@@ -316,4 +371,5 @@ compilation_support = struct(
316371
# TODO(b/331163513): Move apple_common.compliation_support.build_common_variables here, too.
317372
register_fully_link_action = _register_fully_link_action,
318373
register_configuration_specific_link_actions = _register_configuration_specific_link_actions,
374+
subtract_linking_contexts = _subtract_linking_contexts,
319375
)

apple/internal/linking_support.bzl

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,6 @@ load(
3333
"//apple/internal:intermediates.bzl",
3434
"intermediates",
3535
)
36-
load(
37-
"//apple/internal:multi_arch_binary_support.bzl",
38-
"subtract_linking_contexts",
39-
)
4036
load(
4137
"//apple/internal:outputs.bzl",
4238
"outputs",
@@ -91,21 +87,16 @@ def _archive_multi_arch_static_library(
9187
deps = split_deps[split_transition_key],
9288
)
9389

94-
avoid_objc_providers = []
95-
avoid_cc_providers = []
9690
avoid_cc_linking_contexts = []
9791

9892
if len(split_avoid_deps.keys()):
9993
for dep in split_avoid_deps[split_transition_key]:
100-
if apple_common.Objc in dep:
101-
avoid_objc_providers.append(dep[apple_common.Objc])
10294
if CcInfo in dep:
103-
avoid_cc_providers.append(dep[CcInfo])
10495
avoid_cc_linking_contexts.append(dep[CcInfo].linking_context)
10596

10697
name = ctx.label.name + "-" + cc_toolchain.target_gnu_system_name + "-fl"
10798

108-
cc_linking_context = subtract_linking_contexts(
99+
cc_linking_context = compilation_support.subtract_linking_contexts(
109100
owner = ctx.label,
110101
linking_contexts = common_variables.objc_linking_context.cc_linking_contexts,
111102
avoid_dep_linking_contexts = avoid_cc_linking_contexts,
@@ -239,11 +230,15 @@ def _link_multi_arch_binary(
239230
avoid_cc_linking_contexts = [dep.linking_context for dep in avoid_cc_infos]
240231

241232
linker_outputs = []
242-
cc_infos = []
243-
legacy_debug_outputs = {}
244233

234+
# TODO(b/220185798): Refocus this on cc_linking_context providers, and merge those instead of
235+
# CcInfo providers. Refactor the AppleExecutableBinaryInfo and AppleDynamicFrameworkInfo
236+
# providers to provide cc_linking_contexts instead of cc_infos as well.
237+
cc_infos = []
245238
cc_infos.extend(avoid_cc_infos)
246239

240+
legacy_debug_outputs = {}
241+
247242
# $(location...) is only used in one test, and tokenize only affects linkopts in one target
248243
additional_linker_inputs = getattr(ctx.attr, "additional_linker_inputs", [])
249244
attr_linkopts = [
@@ -267,16 +262,12 @@ def _link_multi_arch_binary(
267262
)
268263

269264
cc_infos.append(CcInfo(
270-
compilation_context = cc_common.merge_compilation_contexts(
271-
compilation_contexts =
272-
common_variables.objc_compilation_context.cc_compilation_contexts,
273-
),
274265
linking_context = cc_common.merge_linking_contexts(
275266
linking_contexts = common_variables.objc_linking_context.cc_linking_contexts,
276267
),
277268
))
278269

279-
cc_linking_context = subtract_linking_contexts(
270+
cc_linking_context = compilation_support.subtract_linking_contexts(
280271
owner = ctx.label,
281272
linking_contexts = common_variables.objc_linking_context.cc_linking_contexts +
282273
avoid_cc_linking_contexts,

0 commit comments

Comments
 (0)