Skip to content

Commit cb38f50

Browse files
committed
Add default objc_fully_link config
The objc-fully-link action looks very very similar to cpp_link_static_library. The only difference is a few variable names. This adds objc-fully-link to ar_actions, and sets up the default arguments for it. Users may want to add `-arch_only` but this is better than nothing.
1 parent 62a7164 commit cb38f50

5 files changed

Lines changed: 72 additions & 5 deletions

File tree

cc/toolchains/actions/BUILD

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,10 @@ cc_action_type(
201201

202202
cc_action_type_set(
203203
name = "ar_actions",
204-
actions = [":cpp_link_static_library"],
204+
actions = [
205+
":cpp_link_static_library",
206+
":objc_fully_link",
207+
],
205208
)
206209

207210
cc_action_type_set(

cc/toolchains/args/archiver_flags/BUILD

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,11 @@ cc_args_list(
3131
args = [
3232
":create_static_archive",
3333
":output_execpath",
34+
":objc_fully_link_archive_path",
3435
":libraries_to_link",
36+
":objc_fully_link_objc_library_exec_paths",
37+
":objc_fully_link_cc_library_exec_paths",
38+
":objc_fully_link_imported_library_exec_paths",
3539
],
3640
visibility = ["//visibility:public"],
3741
)
@@ -47,12 +51,11 @@ cc_args(
4751
],
4852
"//conditions:default": ["rcsD"],
4953
}),
50-
requires_not_none = "//cc/toolchains/variables:output_execpath",
5154
)
5255

5356
cc_args(
5457
name = "output_execpath",
55-
actions = ["//cc/toolchains/actions:ar_actions"],
58+
actions = ["//cc/toolchains/actions:cpp_link_static_library"],
5659
args = select({
5760
":use_libtool_on_macos_setting": ["-o"],
5861
"//conditions:default": [],
@@ -63,7 +66,7 @@ cc_args(
6366

6467
cc_args(
6568
name = "libraries_to_link",
66-
actions = ["//cc/toolchains/actions:ar_actions"],
69+
actions = ["//cc/toolchains/actions:cpp_link_static_library"],
6770
nested = ["libraries_to_link_expansion"],
6871
requires_not_none = "//cc/toolchains/variables:libraries_to_link",
6972
)
@@ -93,3 +96,30 @@ cc_nested_args(
9396
requires_equal = "//cc/toolchains/variables:libraries_to_link.type",
9497
requires_equal_value = "object_file_group",
9598
)
99+
100+
cc_args(
101+
name = "objc_fully_link_archive_path",
102+
actions = ["//cc/toolchains/actions:objc_fully_link"],
103+
args = select({
104+
":use_libtool_on_macos_setting": ["-o"],
105+
"//conditions:default": [],
106+
}) + ["{fully_linked_archive_path}"],
107+
format = {"fully_linked_archive_path": "//cc/toolchains/variables:fully_linked_archive_path"},
108+
requires_not_none = "//cc/toolchains/variables:fully_linked_archive_path",
109+
)
110+
111+
[
112+
cc_args(
113+
name = "objc_fully_link_" + variable,
114+
actions = ["@rules_cc//cc/toolchains/actions:objc_fully_link"],
115+
args = ["{var}"],
116+
format = {"var": "@rules_cc//cc/toolchains/variables:" + variable},
117+
iterate_over = "@rules_cc//cc/toolchains/variables:" + variable,
118+
requires_not_none = "@rules_cc//cc/toolchains/variables:" + variable,
119+
)
120+
for variable in [
121+
"objc_library_exec_paths",
122+
"cc_library_exec_paths",
123+
"imported_library_exec_paths",
124+
]
125+
]

cc/toolchains/variables/BUILD

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ cc_variable(
268268
cc_variable(
269269
name = "linker_param_file",
270270
actions = [
271-
"//cc/toolchains/actions:cpp_link_static_library",
271+
"//cc/toolchains/actions:ar_actions",
272272
"//cc/toolchains/actions:link_actions",
273273
],
274274
type = types.option(types.file),

tests/rule_based_toolchain/legacy_features_as_args/goldens/macos/archiver_flags.textproto

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
enabled: false
22
flag_sets {
33
actions: "c++-link-static-library"
4+
actions: "objc-fully-link"
45
flag_groups {
56
expand_if_available: "output_execpath"
67
flags: "-D"
@@ -16,6 +17,14 @@ flag_sets {
1617
flags: "%{output_execpath}"
1718
}
1819
}
20+
flag_sets {
21+
actions: "objc-fully-link"
22+
flag_groups {
23+
expand_if_available: "fully_linked_archive_path"
24+
flags: "-o"
25+
flags: "%{fully_linked_archive_path}"
26+
}
27+
}
1928
flag_sets {
2029
actions: "c++-link-static-library"
2130
flag_groups {
@@ -40,4 +49,28 @@ flag_sets {
4049
}
4150
}
4251
}
52+
flag_sets {
53+
actions: "objc-fully-link"
54+
flag_groups {
55+
expand_if_available: "objc_library_exec_paths"
56+
flags: "%{objc_library_exec_paths}"
57+
iterate_over: "objc_library_exec_paths"
58+
}
59+
}
60+
flag_sets {
61+
actions: "objc-fully-link"
62+
flag_groups {
63+
expand_if_available: "cc_library_exec_paths"
64+
flags: "%{cc_library_exec_paths}"
65+
iterate_over: "cc_library_exec_paths"
66+
}
67+
}
68+
flag_sets {
69+
actions: "objc-fully-link"
70+
flag_groups {
71+
expand_if_available: "imported_library_exec_paths"
72+
flags: "%{imported_library_exec_paths}"
73+
iterate_over: "imported_library_exec_paths"
74+
}
75+
}
4376
name: "archiver_flags_test"

tests/rule_based_toolchain/legacy_features_as_args/goldens/unix/linker_param_file.textproto

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ flag_sets {
88
actions: "lto-index-for-executable"
99
actions: "lto-index-for-nodeps-dynamic-library"
1010
actions: "objc-executable"
11+
actions: "objc-fully-link"
1112
flag_groups {
1213
expand_if_available: "linker_param_file"
1314
flags: "@%{linker_param_file}"

0 commit comments

Comments
 (0)