diff --git a/cc/toolchains/actions/BUILD b/cc/toolchains/actions/BUILD index b231568c6..eb7f1c155 100644 --- a/cc/toolchains/actions/BUILD +++ b/cc/toolchains/actions/BUILD @@ -201,7 +201,10 @@ cc_action_type( cc_action_type_set( name = "ar_actions", - actions = [":cpp_link_static_library"], + actions = [ + ":cpp_link_static_library", + ":objc_fully_link", + ], ) cc_action_type_set( diff --git a/cc/toolchains/args/archiver_flags/BUILD b/cc/toolchains/args/archiver_flags/BUILD index 8a73c4db1..1d1fa4f37 100644 --- a/cc/toolchains/args/archiver_flags/BUILD +++ b/cc/toolchains/args/archiver_flags/BUILD @@ -31,7 +31,11 @@ cc_args_list( args = [ ":create_static_archive", ":output_execpath", + ":objc_fully_link_archive_path", ":libraries_to_link", + ":objc_fully_link_objc_library_exec_paths", + ":objc_fully_link_cc_library_exec_paths", + ":objc_fully_link_imported_library_exec_paths", ], visibility = ["//visibility:public"], ) @@ -47,12 +51,11 @@ cc_args( ], "//conditions:default": ["rcsD"], }), - requires_not_none = "//cc/toolchains/variables:output_execpath", ) cc_args( name = "output_execpath", - actions = ["//cc/toolchains/actions:ar_actions"], + actions = ["//cc/toolchains/actions:cpp_link_static_library"], args = select({ ":use_libtool_on_macos_setting": ["-o"], "//conditions:default": [], @@ -63,7 +66,7 @@ cc_args( cc_args( name = "libraries_to_link", - actions = ["//cc/toolchains/actions:ar_actions"], + actions = ["//cc/toolchains/actions:cpp_link_static_library"], nested = ["libraries_to_link_expansion"], requires_not_none = "//cc/toolchains/variables:libraries_to_link", ) @@ -93,3 +96,30 @@ cc_nested_args( requires_equal = "//cc/toolchains/variables:libraries_to_link.type", requires_equal_value = "object_file_group", ) + +cc_args( + name = "objc_fully_link_archive_path", + actions = ["//cc/toolchains/actions:objc_fully_link"], + args = select({ + ":use_libtool_on_macos_setting": ["-o"], + "//conditions:default": [], + }) + ["{fully_linked_archive_path}"], + format = {"fully_linked_archive_path": "//cc/toolchains/variables:fully_linked_archive_path"}, + requires_not_none = "//cc/toolchains/variables:fully_linked_archive_path", +) + +[ + cc_args( + name = "objc_fully_link_" + variable, + actions = ["@rules_cc//cc/toolchains/actions:objc_fully_link"], + args = ["{var}"], + format = {"var": "@rules_cc//cc/toolchains/variables:" + variable}, + iterate_over = "@rules_cc//cc/toolchains/variables:" + variable, + requires_not_none = "@rules_cc//cc/toolchains/variables:" + variable, + ) + for variable in [ + "objc_library_exec_paths", + "cc_library_exec_paths", + "imported_library_exec_paths", + ] +] diff --git a/cc/toolchains/variables/BUILD b/cc/toolchains/variables/BUILD index 9951929b1..600e3bec1 100644 --- a/cc/toolchains/variables/BUILD +++ b/cc/toolchains/variables/BUILD @@ -268,7 +268,7 @@ cc_variable( cc_variable( name = "linker_param_file", actions = [ - "//cc/toolchains/actions:cpp_link_static_library", + "//cc/toolchains/actions:ar_actions", "//cc/toolchains/actions:link_actions", ], type = types.option(types.file), diff --git a/tests/rule_based_toolchain/legacy_features_as_args/goldens/macos/archiver_flags.textproto b/tests/rule_based_toolchain/legacy_features_as_args/goldens/macos/archiver_flags.textproto index 566fbdfbd..9ea631d89 100644 --- a/tests/rule_based_toolchain/legacy_features_as_args/goldens/macos/archiver_flags.textproto +++ b/tests/rule_based_toolchain/legacy_features_as_args/goldens/macos/archiver_flags.textproto @@ -1,8 +1,8 @@ enabled: false flag_sets { actions: "c++-link-static-library" + actions: "objc-fully-link" flag_groups { - expand_if_available: "output_execpath" flags: "-D" flags: "-no_warning_for_no_symbols" flags: "-static" @@ -16,6 +16,14 @@ flag_sets { flags: "%{output_execpath}" } } +flag_sets { + actions: "objc-fully-link" + flag_groups { + expand_if_available: "fully_linked_archive_path" + flags: "-o" + flags: "%{fully_linked_archive_path}" + } +} flag_sets { actions: "c++-link-static-library" flag_groups { @@ -40,4 +48,28 @@ flag_sets { } } } +flag_sets { + actions: "objc-fully-link" + flag_groups { + expand_if_available: "objc_library_exec_paths" + flags: "%{objc_library_exec_paths}" + iterate_over: "objc_library_exec_paths" + } +} +flag_sets { + actions: "objc-fully-link" + flag_groups { + expand_if_available: "cc_library_exec_paths" + flags: "%{cc_library_exec_paths}" + iterate_over: "cc_library_exec_paths" + } +} +flag_sets { + actions: "objc-fully-link" + flag_groups { + expand_if_available: "imported_library_exec_paths" + flags: "%{imported_library_exec_paths}" + iterate_over: "imported_library_exec_paths" + } +} name: "archiver_flags_test" diff --git a/tests/rule_based_toolchain/legacy_features_as_args/goldens/unix/archiver_flags.textproto b/tests/rule_based_toolchain/legacy_features_as_args/goldens/unix/archiver_flags.textproto index 49f45624e..2d4820b56 100644 --- a/tests/rule_based_toolchain/legacy_features_as_args/goldens/unix/archiver_flags.textproto +++ b/tests/rule_based_toolchain/legacy_features_as_args/goldens/unix/archiver_flags.textproto @@ -1,8 +1,8 @@ enabled: false flag_sets { actions: "c++-link-static-library" + actions: "objc-fully-link" flag_groups { - expand_if_available: "output_execpath" flags: "rcsD" } } @@ -13,6 +13,13 @@ flag_sets { flags: "%{output_execpath}" } } +flag_sets { + actions: "objc-fully-link" + flag_groups { + expand_if_available: "fully_linked_archive_path" + flags: "%{fully_linked_archive_path}" + } +} flag_sets { actions: "c++-link-static-library" flag_groups { @@ -37,4 +44,28 @@ flag_sets { } } } +flag_sets { + actions: "objc-fully-link" + flag_groups { + expand_if_available: "objc_library_exec_paths" + flags: "%{objc_library_exec_paths}" + iterate_over: "objc_library_exec_paths" + } +} +flag_sets { + actions: "objc-fully-link" + flag_groups { + expand_if_available: "cc_library_exec_paths" + flags: "%{cc_library_exec_paths}" + iterate_over: "cc_library_exec_paths" + } +} +flag_sets { + actions: "objc-fully-link" + flag_groups { + expand_if_available: "imported_library_exec_paths" + flags: "%{imported_library_exec_paths}" + iterate_over: "imported_library_exec_paths" + } +} name: "archiver_flags_test" diff --git a/tests/rule_based_toolchain/legacy_features_as_args/goldens/unix/linker_param_file.textproto b/tests/rule_based_toolchain/legacy_features_as_args/goldens/unix/linker_param_file.textproto index 84a71e031..3f99c7420 100644 --- a/tests/rule_based_toolchain/legacy_features_as_args/goldens/unix/linker_param_file.textproto +++ b/tests/rule_based_toolchain/legacy_features_as_args/goldens/unix/linker_param_file.textproto @@ -8,6 +8,7 @@ flag_sets { actions: "lto-index-for-executable" actions: "lto-index-for-nodeps-dynamic-library" actions: "objc-executable" + actions: "objc-fully-link" flag_groups { expand_if_available: "linker_param_file" flags: "@%{linker_param_file}"