diff --git a/crosstool/cc_toolchain_config.bzl b/crosstool/cc_toolchain_config.bzl index e9162281..312d4017 100644 --- a/crosstool/cc_toolchain_config.bzl +++ b/crosstool/cc_toolchain_config.bzl @@ -911,6 +911,38 @@ please file an issue at https://github.com/bazelbuild/apple_support/issues/new ], ) + link_dylib_feature = feature( + name = "link_dylib", + flag_sets = [ + flag_set( + actions = _DYNAMIC_LINK_ACTIONS, + flag_groups = [ + flag_group( + flags = [ + "-dynamiclib", + ], + ), + ], + ), + ], + ) + + link_bundle_feature = feature( + name = "link_bundle", + flag_sets = [ + flag_set( + actions = _DYNAMIC_LINK_ACTIONS, + flag_groups = [ + flag_group( + flags = [ + "-bundle", + ], + ), + ], + ), + ], + ) + no_deduplicate_feature = feature( name = "no_deduplicate", enabled = True, @@ -2400,6 +2432,8 @@ please file an issue at https://github.com/bazelbuild/apple_support/issues/new reproducible_linker_flag_feature, layering_check_feature, external_include_paths_feature, + link_dylib_feature, + link_bundle_feature, ] if (ctx.attr.cpu == "darwin_x86_64" or diff --git a/test/linking_support.bzl b/test/linking_support.bzl index 057a8a5a..d6e9eabf 100644 --- a/test/linking_support.bzl +++ b/test/linking_support.bzl @@ -415,12 +415,13 @@ def _register_configuration_specific_link_actions_with_objc_variables( else: return binary -def _build_feature_configuration(common_variables): +def _build_feature_configuration(common_variables, extra_requested_features): ctx = common_variables.ctx enabled_features = [] enabled_features.extend(ctx.features) enabled_features.extend(common_variables.extra_enabled_features) + enabled_features.extend(extra_requested_features) disabled_features = [] disabled_features.extend(ctx.disabled_features) @@ -452,9 +453,13 @@ def _register_configuration_specific_link_actions( user_variable_extensions, additional_outputs, extra_link_inputs, - attr_linkopts): + attr_linkopts, + extra_requested_features): ctx = common_variables.ctx - feature_configuration = _build_feature_configuration(common_variables) + feature_configuration = _build_feature_configuration( + common_variables, + extra_requested_features, + ) if _emit_builtin_objc_strip_action(ctx): binary = ctx.actions.declare_shareable_artifact( @@ -501,13 +506,14 @@ def _register_configuration_specific_link_actions( attr_linkopts, ) -def link_multi_arch_binary(*, ctx, cc_toolchains, stamp = -1): +def link_multi_arch_binary(*, ctx, cc_toolchains, stamp = -1, extra_requested_features): """Copied from rules_apple. Args: ctx: rule ctx cc_toolchains: split toolchain attr stamp: See upstream docs + extra_requested_features: Additional C++ toolchain features to request Returns: struct of linking info @@ -623,6 +629,7 @@ def link_multi_arch_binary(*, ctx, cc_toolchains, stamp = -1): additional_outputs = additional_outputs, extra_link_inputs = [], attr_linkopts = attr_linkopts, + extra_requested_features = extra_requested_features, ) output = { @@ -660,7 +667,10 @@ def _build_fully_linked_variable_extensions(*, archive, libs): def _register_fully_link_action(*, cc_linking_context, common_variables, name): ctx = common_variables.ctx - feature_configuration = _build_feature_configuration(common_variables) + feature_configuration = _build_feature_configuration( + common_variables, + extra_requested_features = [], + ) libraries_to_link = _libraries_from_linking_context(cc_linking_context).to_list() libraries = _get_libraries_for_linking(libraries_to_link) diff --git a/test/linking_tests.bzl b/test/linking_tests.bzl index 23a0cf73..978574ac 100644 --- a/test/linking_tests.bzl +++ b/test/linking_tests.bzl @@ -621,3 +621,35 @@ def linking_test_suite(name): mnemonic = "CppArchive", target_under_test = "//test/test_data:static_lib", ) + + default_test( + name = "{}_dylib_test".format(name), + tags = [name], + expected_argv = [ + "-Xlinker", + "-objc_abi_version", + "-Xlinker", + "2", + "-ObjC", + "-dynamiclib", + ], + not_expected_argv = ["-bundle"], + mnemonic = "ObjcLink", + target_under_test = "//test/test_data:macos_dylib", + ) + + default_test( + name = "{}_loadable_bundle_test".format(name), + tags = [name], + expected_argv = [ + "-Xlinker", + "-objc_abi_version", + "-Xlinker", + "2", + "-ObjC", + "-bundle", + ], + not_expected_argv = ["-dynamiclib"], + mnemonic = "ObjcLink", + target_under_test = "//test/test_data:macos_loadable_bundle", + ) diff --git a/test/starlark_apple_binary.bzl b/test/starlark_apple_binary.bzl index 496522c0..60869616 100644 --- a/test/starlark_apple_binary.bzl +++ b/test/starlark_apple_binary.bzl @@ -4,10 +4,17 @@ load("//test:linking_support.bzl", "link_multi_arch_binary") load("//test:transitions.bzl", "apple_platform_split_transition") def _starlark_apple_binary_impl(ctx): + extra_requested_features = [] + if ctx.attr.binary_type == "dylib": + extra_requested_features.append("link_dylib") + elif ctx.attr.binary_type == "loadable_bundle": + extra_requested_features.append("link_bundle") + link_result = link_multi_arch_binary( ctx = ctx, cc_toolchains = ctx.split_attr._cc_toolchain_forwarder, stamp = ctx.attr.stamp, + extra_requested_features = extra_requested_features, ) processed_binary = ctx.actions.declare_file( "{}_lipobin".format(ctx.label.name), @@ -62,7 +69,10 @@ starlark_apple_binary = rule( name = "xcode_config_label", ), ), - "binary_type": attr.string(default = "executable"), + "binary_type": attr.string( + default = "executable", + values = ["dylib", "executable", "loadable_bundle"], + ), "bundle_loader": attr.label(), "deps": attr.label_list( cfg = apple_platform_split_transition, diff --git a/test/test_data/BUILD b/test/test_data/BUILD index 57ab4a4d..a9ffe2f2 100644 --- a/test/test_data/BUILD +++ b/test/test_data/BUILD @@ -78,6 +78,24 @@ objc_library( tags = TARGETS_UNDER_TEST_TAGS, ) +starlark_apple_binary( + name = "macos_dylib", + binary_type = "dylib", + minimum_os_version = "13.0", + platform_type = "macos", + tags = TARGETS_UNDER_TEST_TAGS, + deps = [":cc_lib"], +) + +starlark_apple_binary( + name = "macos_loadable_bundle", + binary_type = "loadable_bundle", + minimum_os_version = "13.0", + platform_type = "macos", + tags = TARGETS_UNDER_TEST_TAGS, + deps = [":cc_lib"], +) + objc_library( name = "objc_lib", srcs = ["objc_lib.m"], diff --git a/test/test_data/toolchain_configs/darwin_arm64.json b/test/test_data/toolchain_configs/darwin_arm64.json index f168e5bc..a06b499f 100644 --- a/test/test_data/toolchain_configs/darwin_arm64.json +++ b/test/test_data/toolchain_configs/darwin_arm64.json @@ -3134,6 +3134,98 @@ "requires": [], "type_name": "feature" }, + { + "enabled": true, + "env_sets": [], + "flag_sets": [ + { + "actions": [ + "c++-link-dynamic-library", + "c++-link-executable", + "c++-link-nodeps-dynamic-library", + "lto-index-for-dynamic-library", + "lto-index-for-executable", + "lto-index-for-nodeps-dynamic-library", + "objc-executable" + ], + "flag_groups": [ + { + "expand_if_available": null, + "expand_if_equal": null, + "expand_if_false": null, + "expand_if_not_available": null, + "expand_if_true": null, + "flag_groups": [], + "flags": [ + "-dynamiclib" + ], + "iterate_over": null, + "type_name": "flag_group" + } + ], + "type_name": "flag_set", + "with_features": [] + } + ], + "implies": [], + "name": "__link_dylib_wrapper", + "provides": [], + "requires": [ + { + "features": [ + "link_dylib" + ], + "type_name": "feature_set" + } + ], + "type_name": "feature" + }, + { + "enabled": true, + "env_sets": [], + "flag_sets": [ + { + "actions": [ + "c++-link-dynamic-library", + "c++-link-executable", + "c++-link-nodeps-dynamic-library", + "lto-index-for-dynamic-library", + "lto-index-for-executable", + "lto-index-for-nodeps-dynamic-library", + "objc-executable" + ], + "flag_groups": [ + { + "expand_if_available": null, + "expand_if_equal": null, + "expand_if_false": null, + "expand_if_not_available": null, + "expand_if_true": null, + "flag_groups": [], + "flags": [ + "-bundle" + ], + "iterate_over": null, + "type_name": "flag_group" + } + ], + "type_name": "flag_set", + "with_features": [] + } + ], + "implies": [], + "name": "__link_bundle_wrapper", + "provides": [], + "requires": [ + { + "features": [ + "link_bundle" + ], + "type_name": "feature_set" + } + ], + "type_name": "feature" + }, { "enabled": true, "env_sets": [], @@ -5284,6 +5376,26 @@ "requires": [], "type_name": "feature" }, + { + "enabled": false, + "env_sets": [], + "flag_sets": [], + "implies": [], + "name": "link_dylib", + "provides": [], + "requires": [], + "type_name": "feature" + }, + { + "enabled": false, + "env_sets": [], + "flag_sets": [], + "implies": [], + "name": "link_bundle", + "provides": [], + "requires": [], + "type_name": "feature" + }, { "enabled": false, "env_sets": [], diff --git a/test/test_data/toolchain_configs/darwin_arm64e.json b/test/test_data/toolchain_configs/darwin_arm64e.json index 51f52618..b452539d 100644 --- a/test/test_data/toolchain_configs/darwin_arm64e.json +++ b/test/test_data/toolchain_configs/darwin_arm64e.json @@ -3138,6 +3138,98 @@ "requires": [], "type_name": "feature" }, + { + "enabled": true, + "env_sets": [], + "flag_sets": [ + { + "actions": [ + "c++-link-dynamic-library", + "c++-link-executable", + "c++-link-nodeps-dynamic-library", + "lto-index-for-dynamic-library", + "lto-index-for-executable", + "lto-index-for-nodeps-dynamic-library", + "objc-executable" + ], + "flag_groups": [ + { + "expand_if_available": null, + "expand_if_equal": null, + "expand_if_false": null, + "expand_if_not_available": null, + "expand_if_true": null, + "flag_groups": [], + "flags": [ + "-dynamiclib" + ], + "iterate_over": null, + "type_name": "flag_group" + } + ], + "type_name": "flag_set", + "with_features": [] + } + ], + "implies": [], + "name": "__link_dylib_wrapper", + "provides": [], + "requires": [ + { + "features": [ + "link_dylib" + ], + "type_name": "feature_set" + } + ], + "type_name": "feature" + }, + { + "enabled": true, + "env_sets": [], + "flag_sets": [ + { + "actions": [ + "c++-link-dynamic-library", + "c++-link-executable", + "c++-link-nodeps-dynamic-library", + "lto-index-for-dynamic-library", + "lto-index-for-executable", + "lto-index-for-nodeps-dynamic-library", + "objc-executable" + ], + "flag_groups": [ + { + "expand_if_available": null, + "expand_if_equal": null, + "expand_if_false": null, + "expand_if_not_available": null, + "expand_if_true": null, + "flag_groups": [], + "flags": [ + "-bundle" + ], + "iterate_over": null, + "type_name": "flag_group" + } + ], + "type_name": "flag_set", + "with_features": [] + } + ], + "implies": [], + "name": "__link_bundle_wrapper", + "provides": [], + "requires": [ + { + "features": [ + "link_bundle" + ], + "type_name": "feature_set" + } + ], + "type_name": "feature" + }, { "enabled": true, "env_sets": [], @@ -5288,6 +5380,26 @@ "requires": [], "type_name": "feature" }, + { + "enabled": false, + "env_sets": [], + "flag_sets": [], + "implies": [], + "name": "link_dylib", + "provides": [], + "requires": [], + "type_name": "feature" + }, + { + "enabled": false, + "env_sets": [], + "flag_sets": [], + "implies": [], + "name": "link_bundle", + "provides": [], + "requires": [], + "type_name": "feature" + }, { "enabled": false, "env_sets": [], diff --git a/test/test_data/toolchain_configs/darwin_x86_64.json b/test/test_data/toolchain_configs/darwin_x86_64.json index ac4aa9be..e362259a 100644 --- a/test/test_data/toolchain_configs/darwin_x86_64.json +++ b/test/test_data/toolchain_configs/darwin_x86_64.json @@ -3138,6 +3138,98 @@ "requires": [], "type_name": "feature" }, + { + "enabled": true, + "env_sets": [], + "flag_sets": [ + { + "actions": [ + "c++-link-dynamic-library", + "c++-link-executable", + "c++-link-nodeps-dynamic-library", + "lto-index-for-dynamic-library", + "lto-index-for-executable", + "lto-index-for-nodeps-dynamic-library", + "objc-executable" + ], + "flag_groups": [ + { + "expand_if_available": null, + "expand_if_equal": null, + "expand_if_false": null, + "expand_if_not_available": null, + "expand_if_true": null, + "flag_groups": [], + "flags": [ + "-dynamiclib" + ], + "iterate_over": null, + "type_name": "flag_group" + } + ], + "type_name": "flag_set", + "with_features": [] + } + ], + "implies": [], + "name": "__link_dylib_wrapper", + "provides": [], + "requires": [ + { + "features": [ + "link_dylib" + ], + "type_name": "feature_set" + } + ], + "type_name": "feature" + }, + { + "enabled": true, + "env_sets": [], + "flag_sets": [ + { + "actions": [ + "c++-link-dynamic-library", + "c++-link-executable", + "c++-link-nodeps-dynamic-library", + "lto-index-for-dynamic-library", + "lto-index-for-executable", + "lto-index-for-nodeps-dynamic-library", + "objc-executable" + ], + "flag_groups": [ + { + "expand_if_available": null, + "expand_if_equal": null, + "expand_if_false": null, + "expand_if_not_available": null, + "expand_if_true": null, + "flag_groups": [], + "flags": [ + "-bundle" + ], + "iterate_over": null, + "type_name": "flag_group" + } + ], + "type_name": "flag_set", + "with_features": [] + } + ], + "implies": [], + "name": "__link_bundle_wrapper", + "provides": [], + "requires": [ + { + "features": [ + "link_bundle" + ], + "type_name": "feature_set" + } + ], + "type_name": "feature" + }, { "enabled": true, "env_sets": [], @@ -5288,6 +5380,26 @@ "requires": [], "type_name": "feature" }, + { + "enabled": false, + "env_sets": [], + "flag_sets": [], + "implies": [], + "name": "link_dylib", + "provides": [], + "requires": [], + "type_name": "feature" + }, + { + "enabled": false, + "env_sets": [], + "flag_sets": [], + "implies": [], + "name": "link_bundle", + "provides": [], + "requires": [], + "type_name": "feature" + }, { "enabled": false, "env_sets": [], diff --git a/test/test_data/toolchain_configs/ios_arm64.json b/test/test_data/toolchain_configs/ios_arm64.json index ef57893a..90a63898 100644 --- a/test/test_data/toolchain_configs/ios_arm64.json +++ b/test/test_data/toolchain_configs/ios_arm64.json @@ -3136,6 +3136,98 @@ "requires": [], "type_name": "feature" }, + { + "enabled": true, + "env_sets": [], + "flag_sets": [ + { + "actions": [ + "c++-link-dynamic-library", + "c++-link-executable", + "c++-link-nodeps-dynamic-library", + "lto-index-for-dynamic-library", + "lto-index-for-executable", + "lto-index-for-nodeps-dynamic-library", + "objc-executable" + ], + "flag_groups": [ + { + "expand_if_available": null, + "expand_if_equal": null, + "expand_if_false": null, + "expand_if_not_available": null, + "expand_if_true": null, + "flag_groups": [], + "flags": [ + "-dynamiclib" + ], + "iterate_over": null, + "type_name": "flag_group" + } + ], + "type_name": "flag_set", + "with_features": [] + } + ], + "implies": [], + "name": "__link_dylib_wrapper", + "provides": [], + "requires": [ + { + "features": [ + "link_dylib" + ], + "type_name": "feature_set" + } + ], + "type_name": "feature" + }, + { + "enabled": true, + "env_sets": [], + "flag_sets": [ + { + "actions": [ + "c++-link-dynamic-library", + "c++-link-executable", + "c++-link-nodeps-dynamic-library", + "lto-index-for-dynamic-library", + "lto-index-for-executable", + "lto-index-for-nodeps-dynamic-library", + "objc-executable" + ], + "flag_groups": [ + { + "expand_if_available": null, + "expand_if_equal": null, + "expand_if_false": null, + "expand_if_not_available": null, + "expand_if_true": null, + "flag_groups": [], + "flags": [ + "-bundle" + ], + "iterate_over": null, + "type_name": "flag_group" + } + ], + "type_name": "flag_set", + "with_features": [] + } + ], + "implies": [], + "name": "__link_bundle_wrapper", + "provides": [], + "requires": [ + { + "features": [ + "link_bundle" + ], + "type_name": "feature_set" + } + ], + "type_name": "feature" + }, { "enabled": true, "env_sets": [], @@ -5264,6 +5356,26 @@ "requires": [], "type_name": "feature" }, + { + "enabled": false, + "env_sets": [], + "flag_sets": [], + "implies": [], + "name": "link_dylib", + "provides": [], + "requires": [], + "type_name": "feature" + }, + { + "enabled": false, + "env_sets": [], + "flag_sets": [], + "implies": [], + "name": "link_bundle", + "provides": [], + "requires": [], + "type_name": "feature" + }, { "enabled": false, "env_sets": [], diff --git a/test/test_data/toolchain_configs/ios_arm64e.json b/test/test_data/toolchain_configs/ios_arm64e.json index 6dd00718..a00e2629 100644 --- a/test/test_data/toolchain_configs/ios_arm64e.json +++ b/test/test_data/toolchain_configs/ios_arm64e.json @@ -3136,6 +3136,98 @@ "requires": [], "type_name": "feature" }, + { + "enabled": true, + "env_sets": [], + "flag_sets": [ + { + "actions": [ + "c++-link-dynamic-library", + "c++-link-executable", + "c++-link-nodeps-dynamic-library", + "lto-index-for-dynamic-library", + "lto-index-for-executable", + "lto-index-for-nodeps-dynamic-library", + "objc-executable" + ], + "flag_groups": [ + { + "expand_if_available": null, + "expand_if_equal": null, + "expand_if_false": null, + "expand_if_not_available": null, + "expand_if_true": null, + "flag_groups": [], + "flags": [ + "-dynamiclib" + ], + "iterate_over": null, + "type_name": "flag_group" + } + ], + "type_name": "flag_set", + "with_features": [] + } + ], + "implies": [], + "name": "__link_dylib_wrapper", + "provides": [], + "requires": [ + { + "features": [ + "link_dylib" + ], + "type_name": "feature_set" + } + ], + "type_name": "feature" + }, + { + "enabled": true, + "env_sets": [], + "flag_sets": [ + { + "actions": [ + "c++-link-dynamic-library", + "c++-link-executable", + "c++-link-nodeps-dynamic-library", + "lto-index-for-dynamic-library", + "lto-index-for-executable", + "lto-index-for-nodeps-dynamic-library", + "objc-executable" + ], + "flag_groups": [ + { + "expand_if_available": null, + "expand_if_equal": null, + "expand_if_false": null, + "expand_if_not_available": null, + "expand_if_true": null, + "flag_groups": [], + "flags": [ + "-bundle" + ], + "iterate_over": null, + "type_name": "flag_group" + } + ], + "type_name": "flag_set", + "with_features": [] + } + ], + "implies": [], + "name": "__link_bundle_wrapper", + "provides": [], + "requires": [ + { + "features": [ + "link_bundle" + ], + "type_name": "feature_set" + } + ], + "type_name": "feature" + }, { "enabled": true, "env_sets": [], @@ -5264,6 +5356,26 @@ "requires": [], "type_name": "feature" }, + { + "enabled": false, + "env_sets": [], + "flag_sets": [], + "implies": [], + "name": "link_dylib", + "provides": [], + "requires": [], + "type_name": "feature" + }, + { + "enabled": false, + "env_sets": [], + "flag_sets": [], + "implies": [], + "name": "link_bundle", + "provides": [], + "requires": [], + "type_name": "feature" + }, { "enabled": false, "env_sets": [], diff --git a/test/test_data/toolchain_configs/ios_sim_arm64.json b/test/test_data/toolchain_configs/ios_sim_arm64.json index 11df2fad..aded3e10 100644 --- a/test/test_data/toolchain_configs/ios_sim_arm64.json +++ b/test/test_data/toolchain_configs/ios_sim_arm64.json @@ -3136,6 +3136,98 @@ "requires": [], "type_name": "feature" }, + { + "enabled": true, + "env_sets": [], + "flag_sets": [ + { + "actions": [ + "c++-link-dynamic-library", + "c++-link-executable", + "c++-link-nodeps-dynamic-library", + "lto-index-for-dynamic-library", + "lto-index-for-executable", + "lto-index-for-nodeps-dynamic-library", + "objc-executable" + ], + "flag_groups": [ + { + "expand_if_available": null, + "expand_if_equal": null, + "expand_if_false": null, + "expand_if_not_available": null, + "expand_if_true": null, + "flag_groups": [], + "flags": [ + "-dynamiclib" + ], + "iterate_over": null, + "type_name": "flag_group" + } + ], + "type_name": "flag_set", + "with_features": [] + } + ], + "implies": [], + "name": "__link_dylib_wrapper", + "provides": [], + "requires": [ + { + "features": [ + "link_dylib" + ], + "type_name": "feature_set" + } + ], + "type_name": "feature" + }, + { + "enabled": true, + "env_sets": [], + "flag_sets": [ + { + "actions": [ + "c++-link-dynamic-library", + "c++-link-executable", + "c++-link-nodeps-dynamic-library", + "lto-index-for-dynamic-library", + "lto-index-for-executable", + "lto-index-for-nodeps-dynamic-library", + "objc-executable" + ], + "flag_groups": [ + { + "expand_if_available": null, + "expand_if_equal": null, + "expand_if_false": null, + "expand_if_not_available": null, + "expand_if_true": null, + "flag_groups": [], + "flags": [ + "-bundle" + ], + "iterate_over": null, + "type_name": "flag_group" + } + ], + "type_name": "flag_set", + "with_features": [] + } + ], + "implies": [], + "name": "__link_bundle_wrapper", + "provides": [], + "requires": [ + { + "features": [ + "link_bundle" + ], + "type_name": "feature_set" + } + ], + "type_name": "feature" + }, { "enabled": true, "env_sets": [], @@ -5291,6 +5383,26 @@ "requires": [], "type_name": "feature" }, + { + "enabled": false, + "env_sets": [], + "flag_sets": [], + "implies": [], + "name": "link_dylib", + "provides": [], + "requires": [], + "type_name": "feature" + }, + { + "enabled": false, + "env_sets": [], + "flag_sets": [], + "implies": [], + "name": "link_bundle", + "provides": [], + "requires": [], + "type_name": "feature" + }, { "enabled": false, "env_sets": [], diff --git a/test/test_data/toolchain_configs/ios_x86_64.json b/test/test_data/toolchain_configs/ios_x86_64.json index 7d35cfbe..7f5f02d8 100644 --- a/test/test_data/toolchain_configs/ios_x86_64.json +++ b/test/test_data/toolchain_configs/ios_x86_64.json @@ -3136,6 +3136,98 @@ "requires": [], "type_name": "feature" }, + { + "enabled": true, + "env_sets": [], + "flag_sets": [ + { + "actions": [ + "c++-link-dynamic-library", + "c++-link-executable", + "c++-link-nodeps-dynamic-library", + "lto-index-for-dynamic-library", + "lto-index-for-executable", + "lto-index-for-nodeps-dynamic-library", + "objc-executable" + ], + "flag_groups": [ + { + "expand_if_available": null, + "expand_if_equal": null, + "expand_if_false": null, + "expand_if_not_available": null, + "expand_if_true": null, + "flag_groups": [], + "flags": [ + "-dynamiclib" + ], + "iterate_over": null, + "type_name": "flag_group" + } + ], + "type_name": "flag_set", + "with_features": [] + } + ], + "implies": [], + "name": "__link_dylib_wrapper", + "provides": [], + "requires": [ + { + "features": [ + "link_dylib" + ], + "type_name": "feature_set" + } + ], + "type_name": "feature" + }, + { + "enabled": true, + "env_sets": [], + "flag_sets": [ + { + "actions": [ + "c++-link-dynamic-library", + "c++-link-executable", + "c++-link-nodeps-dynamic-library", + "lto-index-for-dynamic-library", + "lto-index-for-executable", + "lto-index-for-nodeps-dynamic-library", + "objc-executable" + ], + "flag_groups": [ + { + "expand_if_available": null, + "expand_if_equal": null, + "expand_if_false": null, + "expand_if_not_available": null, + "expand_if_true": null, + "flag_groups": [], + "flags": [ + "-bundle" + ], + "iterate_over": null, + "type_name": "flag_group" + } + ], + "type_name": "flag_set", + "with_features": [] + } + ], + "implies": [], + "name": "__link_bundle_wrapper", + "provides": [], + "requires": [ + { + "features": [ + "link_bundle" + ], + "type_name": "feature_set" + } + ], + "type_name": "feature" + }, { "enabled": true, "env_sets": [], @@ -5291,6 +5383,26 @@ "requires": [], "type_name": "feature" }, + { + "enabled": false, + "env_sets": [], + "flag_sets": [], + "implies": [], + "name": "link_dylib", + "provides": [], + "requires": [], + "type_name": "feature" + }, + { + "enabled": false, + "env_sets": [], + "flag_sets": [], + "implies": [], + "name": "link_bundle", + "provides": [], + "requires": [], + "type_name": "feature" + }, { "enabled": false, "env_sets": [], diff --git a/test/test_data/toolchain_configs/tvos_arm64.json b/test/test_data/toolchain_configs/tvos_arm64.json index a896dea4..547069d5 100644 --- a/test/test_data/toolchain_configs/tvos_arm64.json +++ b/test/test_data/toolchain_configs/tvos_arm64.json @@ -3110,6 +3110,98 @@ "requires": [], "type_name": "feature" }, + { + "enabled": true, + "env_sets": [], + "flag_sets": [ + { + "actions": [ + "c++-link-dynamic-library", + "c++-link-executable", + "c++-link-nodeps-dynamic-library", + "lto-index-for-dynamic-library", + "lto-index-for-executable", + "lto-index-for-nodeps-dynamic-library", + "objc-executable" + ], + "flag_groups": [ + { + "expand_if_available": null, + "expand_if_equal": null, + "expand_if_false": null, + "expand_if_not_available": null, + "expand_if_true": null, + "flag_groups": [], + "flags": [ + "-dynamiclib" + ], + "iterate_over": null, + "type_name": "flag_group" + } + ], + "type_name": "flag_set", + "with_features": [] + } + ], + "implies": [], + "name": "__link_dylib_wrapper", + "provides": [], + "requires": [ + { + "features": [ + "link_dylib" + ], + "type_name": "feature_set" + } + ], + "type_name": "feature" + }, + { + "enabled": true, + "env_sets": [], + "flag_sets": [ + { + "actions": [ + "c++-link-dynamic-library", + "c++-link-executable", + "c++-link-nodeps-dynamic-library", + "lto-index-for-dynamic-library", + "lto-index-for-executable", + "lto-index-for-nodeps-dynamic-library", + "objc-executable" + ], + "flag_groups": [ + { + "expand_if_available": null, + "expand_if_equal": null, + "expand_if_false": null, + "expand_if_not_available": null, + "expand_if_true": null, + "flag_groups": [], + "flags": [ + "-bundle" + ], + "iterate_over": null, + "type_name": "flag_group" + } + ], + "type_name": "flag_set", + "with_features": [] + } + ], + "implies": [], + "name": "__link_bundle_wrapper", + "provides": [], + "requires": [ + { + "features": [ + "link_bundle" + ], + "type_name": "feature_set" + } + ], + "type_name": "feature" + }, { "enabled": true, "env_sets": [], @@ -5238,6 +5330,26 @@ "requires": [], "type_name": "feature" }, + { + "enabled": false, + "env_sets": [], + "flag_sets": [], + "implies": [], + "name": "link_dylib", + "provides": [], + "requires": [], + "type_name": "feature" + }, + { + "enabled": false, + "env_sets": [], + "flag_sets": [], + "implies": [], + "name": "link_bundle", + "provides": [], + "requires": [], + "type_name": "feature" + }, { "enabled": false, "env_sets": [], diff --git a/test/test_data/toolchain_configs/tvos_sim_arm64.json b/test/test_data/toolchain_configs/tvos_sim_arm64.json index 310739dc..1729d35a 100644 --- a/test/test_data/toolchain_configs/tvos_sim_arm64.json +++ b/test/test_data/toolchain_configs/tvos_sim_arm64.json @@ -3110,6 +3110,98 @@ "requires": [], "type_name": "feature" }, + { + "enabled": true, + "env_sets": [], + "flag_sets": [ + { + "actions": [ + "c++-link-dynamic-library", + "c++-link-executable", + "c++-link-nodeps-dynamic-library", + "lto-index-for-dynamic-library", + "lto-index-for-executable", + "lto-index-for-nodeps-dynamic-library", + "objc-executable" + ], + "flag_groups": [ + { + "expand_if_available": null, + "expand_if_equal": null, + "expand_if_false": null, + "expand_if_not_available": null, + "expand_if_true": null, + "flag_groups": [], + "flags": [ + "-dynamiclib" + ], + "iterate_over": null, + "type_name": "flag_group" + } + ], + "type_name": "flag_set", + "with_features": [] + } + ], + "implies": [], + "name": "__link_dylib_wrapper", + "provides": [], + "requires": [ + { + "features": [ + "link_dylib" + ], + "type_name": "feature_set" + } + ], + "type_name": "feature" + }, + { + "enabled": true, + "env_sets": [], + "flag_sets": [ + { + "actions": [ + "c++-link-dynamic-library", + "c++-link-executable", + "c++-link-nodeps-dynamic-library", + "lto-index-for-dynamic-library", + "lto-index-for-executable", + "lto-index-for-nodeps-dynamic-library", + "objc-executable" + ], + "flag_groups": [ + { + "expand_if_available": null, + "expand_if_equal": null, + "expand_if_false": null, + "expand_if_not_available": null, + "expand_if_true": null, + "flag_groups": [], + "flags": [ + "-bundle" + ], + "iterate_over": null, + "type_name": "flag_group" + } + ], + "type_name": "flag_set", + "with_features": [] + } + ], + "implies": [], + "name": "__link_bundle_wrapper", + "provides": [], + "requires": [ + { + "features": [ + "link_bundle" + ], + "type_name": "feature_set" + } + ], + "type_name": "feature" + }, { "enabled": true, "env_sets": [], @@ -5265,6 +5357,26 @@ "requires": [], "type_name": "feature" }, + { + "enabled": false, + "env_sets": [], + "flag_sets": [], + "implies": [], + "name": "link_dylib", + "provides": [], + "requires": [], + "type_name": "feature" + }, + { + "enabled": false, + "env_sets": [], + "flag_sets": [], + "implies": [], + "name": "link_bundle", + "provides": [], + "requires": [], + "type_name": "feature" + }, { "enabled": false, "env_sets": [], diff --git a/test/test_data/toolchain_configs/tvos_x86_64.json b/test/test_data/toolchain_configs/tvos_x86_64.json index d400927c..a44ec5ea 100644 --- a/test/test_data/toolchain_configs/tvos_x86_64.json +++ b/test/test_data/toolchain_configs/tvos_x86_64.json @@ -3110,6 +3110,98 @@ "requires": [], "type_name": "feature" }, + { + "enabled": true, + "env_sets": [], + "flag_sets": [ + { + "actions": [ + "c++-link-dynamic-library", + "c++-link-executable", + "c++-link-nodeps-dynamic-library", + "lto-index-for-dynamic-library", + "lto-index-for-executable", + "lto-index-for-nodeps-dynamic-library", + "objc-executable" + ], + "flag_groups": [ + { + "expand_if_available": null, + "expand_if_equal": null, + "expand_if_false": null, + "expand_if_not_available": null, + "expand_if_true": null, + "flag_groups": [], + "flags": [ + "-dynamiclib" + ], + "iterate_over": null, + "type_name": "flag_group" + } + ], + "type_name": "flag_set", + "with_features": [] + } + ], + "implies": [], + "name": "__link_dylib_wrapper", + "provides": [], + "requires": [ + { + "features": [ + "link_dylib" + ], + "type_name": "feature_set" + } + ], + "type_name": "feature" + }, + { + "enabled": true, + "env_sets": [], + "flag_sets": [ + { + "actions": [ + "c++-link-dynamic-library", + "c++-link-executable", + "c++-link-nodeps-dynamic-library", + "lto-index-for-dynamic-library", + "lto-index-for-executable", + "lto-index-for-nodeps-dynamic-library", + "objc-executable" + ], + "flag_groups": [ + { + "expand_if_available": null, + "expand_if_equal": null, + "expand_if_false": null, + "expand_if_not_available": null, + "expand_if_true": null, + "flag_groups": [], + "flags": [ + "-bundle" + ], + "iterate_over": null, + "type_name": "flag_group" + } + ], + "type_name": "flag_set", + "with_features": [] + } + ], + "implies": [], + "name": "__link_bundle_wrapper", + "provides": [], + "requires": [ + { + "features": [ + "link_bundle" + ], + "type_name": "feature_set" + } + ], + "type_name": "feature" + }, { "enabled": true, "env_sets": [], @@ -5265,6 +5357,26 @@ "requires": [], "type_name": "feature" }, + { + "enabled": false, + "env_sets": [], + "flag_sets": [], + "implies": [], + "name": "link_dylib", + "provides": [], + "requires": [], + "type_name": "feature" + }, + { + "enabled": false, + "env_sets": [], + "flag_sets": [], + "implies": [], + "name": "link_bundle", + "provides": [], + "requires": [], + "type_name": "feature" + }, { "enabled": false, "env_sets": [], diff --git a/test/test_data/toolchain_configs/visionos_arm64.json b/test/test_data/toolchain_configs/visionos_arm64.json index 1a6bea0e..87fef7f5 100644 --- a/test/test_data/toolchain_configs/visionos_arm64.json +++ b/test/test_data/toolchain_configs/visionos_arm64.json @@ -3110,6 +3110,98 @@ "requires": [], "type_name": "feature" }, + { + "enabled": true, + "env_sets": [], + "flag_sets": [ + { + "actions": [ + "c++-link-dynamic-library", + "c++-link-executable", + "c++-link-nodeps-dynamic-library", + "lto-index-for-dynamic-library", + "lto-index-for-executable", + "lto-index-for-nodeps-dynamic-library", + "objc-executable" + ], + "flag_groups": [ + { + "expand_if_available": null, + "expand_if_equal": null, + "expand_if_false": null, + "expand_if_not_available": null, + "expand_if_true": null, + "flag_groups": [], + "flags": [ + "-dynamiclib" + ], + "iterate_over": null, + "type_name": "flag_group" + } + ], + "type_name": "flag_set", + "with_features": [] + } + ], + "implies": [], + "name": "__link_dylib_wrapper", + "provides": [], + "requires": [ + { + "features": [ + "link_dylib" + ], + "type_name": "feature_set" + } + ], + "type_name": "feature" + }, + { + "enabled": true, + "env_sets": [], + "flag_sets": [ + { + "actions": [ + "c++-link-dynamic-library", + "c++-link-executable", + "c++-link-nodeps-dynamic-library", + "lto-index-for-dynamic-library", + "lto-index-for-executable", + "lto-index-for-nodeps-dynamic-library", + "objc-executable" + ], + "flag_groups": [ + { + "expand_if_available": null, + "expand_if_equal": null, + "expand_if_false": null, + "expand_if_not_available": null, + "expand_if_true": null, + "flag_groups": [], + "flags": [ + "-bundle" + ], + "iterate_over": null, + "type_name": "flag_group" + } + ], + "type_name": "flag_set", + "with_features": [] + } + ], + "implies": [], + "name": "__link_bundle_wrapper", + "provides": [], + "requires": [ + { + "features": [ + "link_bundle" + ], + "type_name": "feature_set" + } + ], + "type_name": "feature" + }, { "enabled": true, "env_sets": [], @@ -5237,6 +5329,26 @@ "requires": [], "type_name": "feature" }, + { + "enabled": false, + "env_sets": [], + "flag_sets": [], + "implies": [], + "name": "link_dylib", + "provides": [], + "requires": [], + "type_name": "feature" + }, + { + "enabled": false, + "env_sets": [], + "flag_sets": [], + "implies": [], + "name": "link_bundle", + "provides": [], + "requires": [], + "type_name": "feature" + }, { "enabled": false, "env_sets": [], diff --git a/test/test_data/toolchain_configs/visionos_sim_arm64.json b/test/test_data/toolchain_configs/visionos_sim_arm64.json index fbf2b79b..3ae660ab 100644 --- a/test/test_data/toolchain_configs/visionos_sim_arm64.json +++ b/test/test_data/toolchain_configs/visionos_sim_arm64.json @@ -3110,6 +3110,98 @@ "requires": [], "type_name": "feature" }, + { + "enabled": true, + "env_sets": [], + "flag_sets": [ + { + "actions": [ + "c++-link-dynamic-library", + "c++-link-executable", + "c++-link-nodeps-dynamic-library", + "lto-index-for-dynamic-library", + "lto-index-for-executable", + "lto-index-for-nodeps-dynamic-library", + "objc-executable" + ], + "flag_groups": [ + { + "expand_if_available": null, + "expand_if_equal": null, + "expand_if_false": null, + "expand_if_not_available": null, + "expand_if_true": null, + "flag_groups": [], + "flags": [ + "-dynamiclib" + ], + "iterate_over": null, + "type_name": "flag_group" + } + ], + "type_name": "flag_set", + "with_features": [] + } + ], + "implies": [], + "name": "__link_dylib_wrapper", + "provides": [], + "requires": [ + { + "features": [ + "link_dylib" + ], + "type_name": "feature_set" + } + ], + "type_name": "feature" + }, + { + "enabled": true, + "env_sets": [], + "flag_sets": [ + { + "actions": [ + "c++-link-dynamic-library", + "c++-link-executable", + "c++-link-nodeps-dynamic-library", + "lto-index-for-dynamic-library", + "lto-index-for-executable", + "lto-index-for-nodeps-dynamic-library", + "objc-executable" + ], + "flag_groups": [ + { + "expand_if_available": null, + "expand_if_equal": null, + "expand_if_false": null, + "expand_if_not_available": null, + "expand_if_true": null, + "flag_groups": [], + "flags": [ + "-bundle" + ], + "iterate_over": null, + "type_name": "flag_group" + } + ], + "type_name": "flag_set", + "with_features": [] + } + ], + "implies": [], + "name": "__link_bundle_wrapper", + "provides": [], + "requires": [ + { + "features": [ + "link_bundle" + ], + "type_name": "feature_set" + } + ], + "type_name": "feature" + }, { "enabled": true, "env_sets": [], @@ -5264,6 +5356,26 @@ "requires": [], "type_name": "feature" }, + { + "enabled": false, + "env_sets": [], + "flag_sets": [], + "implies": [], + "name": "link_dylib", + "provides": [], + "requires": [], + "type_name": "feature" + }, + { + "enabled": false, + "env_sets": [], + "flag_sets": [], + "implies": [], + "name": "link_bundle", + "provides": [], + "requires": [], + "type_name": "feature" + }, { "enabled": false, "env_sets": [], diff --git a/test/test_data/toolchain_configs/watchos_arm64.json b/test/test_data/toolchain_configs/watchos_arm64.json index 0d7e44e8..ee8d737f 100644 --- a/test/test_data/toolchain_configs/watchos_arm64.json +++ b/test/test_data/toolchain_configs/watchos_arm64.json @@ -3110,6 +3110,98 @@ "requires": [], "type_name": "feature" }, + { + "enabled": true, + "env_sets": [], + "flag_sets": [ + { + "actions": [ + "c++-link-dynamic-library", + "c++-link-executable", + "c++-link-nodeps-dynamic-library", + "lto-index-for-dynamic-library", + "lto-index-for-executable", + "lto-index-for-nodeps-dynamic-library", + "objc-executable" + ], + "flag_groups": [ + { + "expand_if_available": null, + "expand_if_equal": null, + "expand_if_false": null, + "expand_if_not_available": null, + "expand_if_true": null, + "flag_groups": [], + "flags": [ + "-dynamiclib" + ], + "iterate_over": null, + "type_name": "flag_group" + } + ], + "type_name": "flag_set", + "with_features": [] + } + ], + "implies": [], + "name": "__link_dylib_wrapper", + "provides": [], + "requires": [ + { + "features": [ + "link_dylib" + ], + "type_name": "feature_set" + } + ], + "type_name": "feature" + }, + { + "enabled": true, + "env_sets": [], + "flag_sets": [ + { + "actions": [ + "c++-link-dynamic-library", + "c++-link-executable", + "c++-link-nodeps-dynamic-library", + "lto-index-for-dynamic-library", + "lto-index-for-executable", + "lto-index-for-nodeps-dynamic-library", + "objc-executable" + ], + "flag_groups": [ + { + "expand_if_available": null, + "expand_if_equal": null, + "expand_if_false": null, + "expand_if_not_available": null, + "expand_if_true": null, + "flag_groups": [], + "flags": [ + "-bundle" + ], + "iterate_over": null, + "type_name": "flag_group" + } + ], + "type_name": "flag_set", + "with_features": [] + } + ], + "implies": [], + "name": "__link_bundle_wrapper", + "provides": [], + "requires": [ + { + "features": [ + "link_bundle" + ], + "type_name": "feature_set" + } + ], + "type_name": "feature" + }, { "enabled": true, "env_sets": [], @@ -5265,6 +5357,26 @@ "requires": [], "type_name": "feature" }, + { + "enabled": false, + "env_sets": [], + "flag_sets": [], + "implies": [], + "name": "link_dylib", + "provides": [], + "requires": [], + "type_name": "feature" + }, + { + "enabled": false, + "env_sets": [], + "flag_sets": [], + "implies": [], + "name": "link_bundle", + "provides": [], + "requires": [], + "type_name": "feature" + }, { "enabled": false, "env_sets": [], diff --git a/test/test_data/toolchain_configs/watchos_arm64_32.json b/test/test_data/toolchain_configs/watchos_arm64_32.json index 3721acd2..cf240217 100644 --- a/test/test_data/toolchain_configs/watchos_arm64_32.json +++ b/test/test_data/toolchain_configs/watchos_arm64_32.json @@ -3110,6 +3110,98 @@ "requires": [], "type_name": "feature" }, + { + "enabled": true, + "env_sets": [], + "flag_sets": [ + { + "actions": [ + "c++-link-dynamic-library", + "c++-link-executable", + "c++-link-nodeps-dynamic-library", + "lto-index-for-dynamic-library", + "lto-index-for-executable", + "lto-index-for-nodeps-dynamic-library", + "objc-executable" + ], + "flag_groups": [ + { + "expand_if_available": null, + "expand_if_equal": null, + "expand_if_false": null, + "expand_if_not_available": null, + "expand_if_true": null, + "flag_groups": [], + "flags": [ + "-dynamiclib" + ], + "iterate_over": null, + "type_name": "flag_group" + } + ], + "type_name": "flag_set", + "with_features": [] + } + ], + "implies": [], + "name": "__link_dylib_wrapper", + "provides": [], + "requires": [ + { + "features": [ + "link_dylib" + ], + "type_name": "feature_set" + } + ], + "type_name": "feature" + }, + { + "enabled": true, + "env_sets": [], + "flag_sets": [ + { + "actions": [ + "c++-link-dynamic-library", + "c++-link-executable", + "c++-link-nodeps-dynamic-library", + "lto-index-for-dynamic-library", + "lto-index-for-executable", + "lto-index-for-nodeps-dynamic-library", + "objc-executable" + ], + "flag_groups": [ + { + "expand_if_available": null, + "expand_if_equal": null, + "expand_if_false": null, + "expand_if_not_available": null, + "expand_if_true": null, + "flag_groups": [], + "flags": [ + "-bundle" + ], + "iterate_over": null, + "type_name": "flag_group" + } + ], + "type_name": "flag_set", + "with_features": [] + } + ], + "implies": [], + "name": "__link_bundle_wrapper", + "provides": [], + "requires": [ + { + "features": [ + "link_bundle" + ], + "type_name": "feature_set" + } + ], + "type_name": "feature" + }, { "enabled": true, "env_sets": [], @@ -5238,6 +5330,26 @@ "requires": [], "type_name": "feature" }, + { + "enabled": false, + "env_sets": [], + "flag_sets": [], + "implies": [], + "name": "link_dylib", + "provides": [], + "requires": [], + "type_name": "feature" + }, + { + "enabled": false, + "env_sets": [], + "flag_sets": [], + "implies": [], + "name": "link_bundle", + "provides": [], + "requires": [], + "type_name": "feature" + }, { "enabled": false, "env_sets": [], diff --git a/test/test_data/toolchain_configs/watchos_device_arm64.json b/test/test_data/toolchain_configs/watchos_device_arm64.json index 0d148796..982a2540 100644 --- a/test/test_data/toolchain_configs/watchos_device_arm64.json +++ b/test/test_data/toolchain_configs/watchos_device_arm64.json @@ -3110,6 +3110,98 @@ "requires": [], "type_name": "feature" }, + { + "enabled": true, + "env_sets": [], + "flag_sets": [ + { + "actions": [ + "c++-link-dynamic-library", + "c++-link-executable", + "c++-link-nodeps-dynamic-library", + "lto-index-for-dynamic-library", + "lto-index-for-executable", + "lto-index-for-nodeps-dynamic-library", + "objc-executable" + ], + "flag_groups": [ + { + "expand_if_available": null, + "expand_if_equal": null, + "expand_if_false": null, + "expand_if_not_available": null, + "expand_if_true": null, + "flag_groups": [], + "flags": [ + "-dynamiclib" + ], + "iterate_over": null, + "type_name": "flag_group" + } + ], + "type_name": "flag_set", + "with_features": [] + } + ], + "implies": [], + "name": "__link_dylib_wrapper", + "provides": [], + "requires": [ + { + "features": [ + "link_dylib" + ], + "type_name": "feature_set" + } + ], + "type_name": "feature" + }, + { + "enabled": true, + "env_sets": [], + "flag_sets": [ + { + "actions": [ + "c++-link-dynamic-library", + "c++-link-executable", + "c++-link-nodeps-dynamic-library", + "lto-index-for-dynamic-library", + "lto-index-for-executable", + "lto-index-for-nodeps-dynamic-library", + "objc-executable" + ], + "flag_groups": [ + { + "expand_if_available": null, + "expand_if_equal": null, + "expand_if_false": null, + "expand_if_not_available": null, + "expand_if_true": null, + "flag_groups": [], + "flags": [ + "-bundle" + ], + "iterate_over": null, + "type_name": "flag_group" + } + ], + "type_name": "flag_set", + "with_features": [] + } + ], + "implies": [], + "name": "__link_bundle_wrapper", + "provides": [], + "requires": [ + { + "features": [ + "link_bundle" + ], + "type_name": "feature_set" + } + ], + "type_name": "feature" + }, { "enabled": true, "env_sets": [], @@ -5238,6 +5330,26 @@ "requires": [], "type_name": "feature" }, + { + "enabled": false, + "env_sets": [], + "flag_sets": [], + "implies": [], + "name": "link_dylib", + "provides": [], + "requires": [], + "type_name": "feature" + }, + { + "enabled": false, + "env_sets": [], + "flag_sets": [], + "implies": [], + "name": "link_bundle", + "provides": [], + "requires": [], + "type_name": "feature" + }, { "enabled": false, "env_sets": [], diff --git a/test/test_data/toolchain_configs/watchos_device_arm64e.json b/test/test_data/toolchain_configs/watchos_device_arm64e.json index 0810e184..806233eb 100644 --- a/test/test_data/toolchain_configs/watchos_device_arm64e.json +++ b/test/test_data/toolchain_configs/watchos_device_arm64e.json @@ -3110,6 +3110,98 @@ "requires": [], "type_name": "feature" }, + { + "enabled": true, + "env_sets": [], + "flag_sets": [ + { + "actions": [ + "c++-link-dynamic-library", + "c++-link-executable", + "c++-link-nodeps-dynamic-library", + "lto-index-for-dynamic-library", + "lto-index-for-executable", + "lto-index-for-nodeps-dynamic-library", + "objc-executable" + ], + "flag_groups": [ + { + "expand_if_available": null, + "expand_if_equal": null, + "expand_if_false": null, + "expand_if_not_available": null, + "expand_if_true": null, + "flag_groups": [], + "flags": [ + "-dynamiclib" + ], + "iterate_over": null, + "type_name": "flag_group" + } + ], + "type_name": "flag_set", + "with_features": [] + } + ], + "implies": [], + "name": "__link_dylib_wrapper", + "provides": [], + "requires": [ + { + "features": [ + "link_dylib" + ], + "type_name": "feature_set" + } + ], + "type_name": "feature" + }, + { + "enabled": true, + "env_sets": [], + "flag_sets": [ + { + "actions": [ + "c++-link-dynamic-library", + "c++-link-executable", + "c++-link-nodeps-dynamic-library", + "lto-index-for-dynamic-library", + "lto-index-for-executable", + "lto-index-for-nodeps-dynamic-library", + "objc-executable" + ], + "flag_groups": [ + { + "expand_if_available": null, + "expand_if_equal": null, + "expand_if_false": null, + "expand_if_not_available": null, + "expand_if_true": null, + "flag_groups": [], + "flags": [ + "-bundle" + ], + "iterate_over": null, + "type_name": "flag_group" + } + ], + "type_name": "flag_set", + "with_features": [] + } + ], + "implies": [], + "name": "__link_bundle_wrapper", + "provides": [], + "requires": [ + { + "features": [ + "link_bundle" + ], + "type_name": "feature_set" + } + ], + "type_name": "feature" + }, { "enabled": true, "env_sets": [], @@ -5238,6 +5330,26 @@ "requires": [], "type_name": "feature" }, + { + "enabled": false, + "env_sets": [], + "flag_sets": [], + "implies": [], + "name": "link_dylib", + "provides": [], + "requires": [], + "type_name": "feature" + }, + { + "enabled": false, + "env_sets": [], + "flag_sets": [], + "implies": [], + "name": "link_bundle", + "provides": [], + "requires": [], + "type_name": "feature" + }, { "enabled": false, "env_sets": [], diff --git a/test/test_data/toolchain_configs/watchos_x86_64.json b/test/test_data/toolchain_configs/watchos_x86_64.json index db080fdd..518756b9 100644 --- a/test/test_data/toolchain_configs/watchos_x86_64.json +++ b/test/test_data/toolchain_configs/watchos_x86_64.json @@ -3110,6 +3110,98 @@ "requires": [], "type_name": "feature" }, + { + "enabled": true, + "env_sets": [], + "flag_sets": [ + { + "actions": [ + "c++-link-dynamic-library", + "c++-link-executable", + "c++-link-nodeps-dynamic-library", + "lto-index-for-dynamic-library", + "lto-index-for-executable", + "lto-index-for-nodeps-dynamic-library", + "objc-executable" + ], + "flag_groups": [ + { + "expand_if_available": null, + "expand_if_equal": null, + "expand_if_false": null, + "expand_if_not_available": null, + "expand_if_true": null, + "flag_groups": [], + "flags": [ + "-dynamiclib" + ], + "iterate_over": null, + "type_name": "flag_group" + } + ], + "type_name": "flag_set", + "with_features": [] + } + ], + "implies": [], + "name": "__link_dylib_wrapper", + "provides": [], + "requires": [ + { + "features": [ + "link_dylib" + ], + "type_name": "feature_set" + } + ], + "type_name": "feature" + }, + { + "enabled": true, + "env_sets": [], + "flag_sets": [ + { + "actions": [ + "c++-link-dynamic-library", + "c++-link-executable", + "c++-link-nodeps-dynamic-library", + "lto-index-for-dynamic-library", + "lto-index-for-executable", + "lto-index-for-nodeps-dynamic-library", + "objc-executable" + ], + "flag_groups": [ + { + "expand_if_available": null, + "expand_if_equal": null, + "expand_if_false": null, + "expand_if_not_available": null, + "expand_if_true": null, + "flag_groups": [], + "flags": [ + "-bundle" + ], + "iterate_over": null, + "type_name": "flag_group" + } + ], + "type_name": "flag_set", + "with_features": [] + } + ], + "implies": [], + "name": "__link_bundle_wrapper", + "provides": [], + "requires": [ + { + "features": [ + "link_bundle" + ], + "type_name": "feature_set" + } + ], + "type_name": "feature" + }, { "enabled": true, "env_sets": [], @@ -5265,6 +5357,26 @@ "requires": [], "type_name": "feature" }, + { + "enabled": false, + "env_sets": [], + "flag_sets": [], + "implies": [], + "name": "link_dylib", + "provides": [], + "requires": [], + "type_name": "feature" + }, + { + "enabled": false, + "env_sets": [], + "flag_sets": [], + "implies": [], + "name": "link_bundle", + "provides": [], + "requires": [], + "type_name": "feature" + }, { "enabled": false, "env_sets": [], diff --git a/toolchain/BUILD b/toolchain/BUILD index 9a9d47c0..37757fa4 100644 --- a/toolchain/BUILD +++ b/toolchain/BUILD @@ -556,6 +556,18 @@ negatable_feature( requires_not_none = "@rules_cc//cc/toolchains/variables:output_execpath", ) +enableable_feature( + name = "link_dylib", + actions = ["@rules_cc//cc/toolchains/actions:link_actions"], + args = ["-dynamiclib"], +) + +enableable_feature( + name = "link_bundle", + actions = ["@rules_cc//cc/toolchains/actions:link_actions"], + args = ["-bundle"], +) + # As of Xcode 15, linker warnings are emitted if duplicate `-l` options are # present. Until such linkopts can be deduped by bazel itself, we disable these # warnings. @@ -844,6 +856,8 @@ cc_toolchain( "//toolchain/pgo:fdo_optimize_wrapper", "//toolchain/pgo:autofdo_wrapper", ":lto_object_path", + ":link_dylib_wrapper", + ":link_bundle_wrapper", "//toolchain/coverage:llvm_coverage_map_format_wrapper", "//toolchain/coverage:gcc_coverage_map_format_wrapper", "//toolchain/coverage:coverage_prefix_map", @@ -895,6 +909,8 @@ cc_toolchain( "//toolchain/sanitizers:ubsan", ":generate_dsym_file", ":generate_linkmap", + ":link_dylib", + ":link_bundle", ":link_cocoa", ":dead_strip", ":suppress_warnings",