Skip to content

Commit d8e41b8

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 d8e41b8

5 files changed

Lines changed: 72 additions & 4 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 & 2 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
)
@@ -52,7 +56,7 @@ cc_args(
5256

5357
cc_args(
5458
name = "output_execpath",
55-
actions = ["//cc/toolchains/actions:ar_actions"],
59+
actions = ["//cc/toolchains/actions:cpp_link_static_library"],
5660
args = select({
5761
":use_libtool_on_macos_setting": ["-o"],
5862
"//conditions:default": [],
@@ -63,7 +67,7 @@ cc_args(
6367

6468
cc_args(
6569
name = "libraries_to_link",
66-
actions = ["//cc/toolchains/actions:ar_actions"],
70+
actions = ["//cc/toolchains/actions:cpp_link_static_library"],
6771
nested = ["libraries_to_link_expansion"],
6872
requires_not_none = "//cc/toolchains/variables:libraries_to_link",
6973
)
@@ -93,3 +97,30 @@ cc_nested_args(
9397
requires_equal = "//cc/toolchains/variables:libraries_to_link.type",
9498
requires_equal_value = "object_file_group",
9599
)
100+
101+
cc_args(
102+
name = "objc_fully_link_archive_path",
103+
actions = ["//cc/toolchains/actions:objc_fully_link"],
104+
args = select({
105+
":use_libtool_on_macos_setting": ["-o"],
106+
"//conditions:default": [],
107+
}) + ["{fully_linked_archive_path}"],
108+
format = {"fully_linked_archive_path": "//cc/toolchains/variables:fully_linked_archive_path"},
109+
requires_not_none = "//cc/toolchains/variables:fully_linked_archive_path",
110+
)
111+
112+
[
113+
cc_args(
114+
name = "objc_fully_link_" + variable,
115+
actions = ["@rules_cc//cc/toolchains/actions:objc_fully_link"],
116+
args = ["{var}"],
117+
format = {"var": "@rules_cc//cc/toolchains/variables:" + variable},
118+
iterate_over = "@rules_cc//cc/toolchains/variables:" + variable,
119+
requires_not_none = "@rules_cc//cc/toolchains/variables:" + variable,
120+
)
121+
for variable in [
122+
"objc_library_exec_paths",
123+
"cc_library_exec_paths",
124+
"imported_library_exec_paths",
125+
]
126+
]

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)