Move some linkopts to features
https://github.com/bazelbuild/rules_apple/pull/2214
diff --git a/crosstool/cc_toolchain_config.bzl b/crosstool/cc_toolchain_config.bzl
index 6ff64f8..00295d5 100644
--- a/crosstool/cc_toolchain_config.bzl
+++ b/crosstool/cc_toolchain_config.bzl
@@ -993,6 +993,38 @@
],
)
+ 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,
@@ -2511,6 +2543,8 @@
ubsan_feature,
default_sanitizer_flags_feature,
treat_warnings_as_errors_feature,
+ link_dylib_feature,
+ link_bundle_feature,
]
if (ctx.attr.cpu == "darwin_x86_64" or
diff --git a/test/linking_tests.bzl b/test/linking_tests.bzl
index ed1032f..236ceea 100644
--- a/test/linking_tests.bzl
+++ b/test/linking_tests.bzl
@@ -64,3 +64,19 @@
mnemonic = "ObjcLink",
target_under_test = "//test/test_data:macos_binary",
)
+
+ default_test(
+ name = "{}_dylib_test".format(name),
+ tags = [name],
+ expected_argv = [
+ "-Xlinker",
+ "-objc_abi_version",
+ "-Xlinker",
+ "2",
+ "-ObjC",
+ "-dynamiclib",
+ ],
+ not_expected_argv = [],
+ mnemonic = "ObjcLink",
+ target_under_test = "//test/test_data:macos_dylib",
+ )
diff --git a/test/starlark_apple_binary.bzl b/test/starlark_apple_binary.bzl
index f9437c5..a8700b4 100644
--- a/test/starlark_apple_binary.bzl
+++ b/test/starlark_apple_binary.bzl
@@ -2,10 +2,28 @@
load("//test:transitions.bzl", "apple_platform_split_transition")
+_supports_extra_requested_features = hasattr(apple_common.platform_type, "visionos")
+
def _starlark_apple_binary_impl(ctx):
+ extra_requested_features = []
+ bazel_6_linkopts = []
+ if ctx.attr.binary_type == "dylib":
+ extra_requested_features.append("link_dylib")
+ bazel_6_linkopts = ["-dynamiclib"]
+ elif ctx.attr.binary_type == "loadable_bundle":
+ extra_requested_features.append("link_bundle")
+ bazel_6_linkopts = ["-bundle"]
+
+ kwargs = {}
+ if _supports_extra_requested_features:
+ kwargs["extra_requested_features"] = extra_requested_features
+ else:
+ kwargs["extra_linkopts"] = bazel_6_linkopts
+
link_result = apple_common.link_multi_arch_binary(
ctx = ctx,
stamp = ctx.attr.stamp,
+ **kwargs
)
processed_binary = ctx.actions.declare_file(
"{}_lipobin".format(ctx.label.name),
@@ -65,7 +83,10 @@
default = Label("@bazel_tools//tools/objc:xcrunwrapper"),
executable = True,
),
- "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 26b9bb4..dea5964 100644
--- a/test/test_data/BUILD
+++ b/test/test_data/BUILD
@@ -52,6 +52,15 @@
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"],
+)
+
objc_library(
name = "objc_lib",
srcs = ["objc_lib.m"],