Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix compatibility with --incompatible_objc_provider_remove_linking_info #2356

Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions apple/apple_binary.bzl
Original file line number Diff line number Diff line change
@@ -116,10 +116,10 @@ Resolved Xcode is version {xcode_version}.
# so that bundles can use it as their loader.
if binary_type == "executable":
providers.append(
apple_common.new_executable_binary_provider(
linking_support.new_executable_binary_provider(
binary = binary_artifact,
cc_info = link_result.cc_info,
objc = link_result.objc,
binary = binary_artifact,
),
)

2 changes: 1 addition & 1 deletion apple/internal/apple_framework_import.bzl
Original file line number Diff line number Diff line change
@@ -289,7 +289,7 @@ def _apple_dynamic_framework_import_impl(ctx):
# Create AppleDynamicFramework provider.
framework_groups = _grouped_framework_files(framework_imports)
framework_dirs_set = depset(framework_groups.keys())
providers.append(apple_common.new_dynamic_framework_provider(
providers.append(framework_import_support.new_dynamic_framework_provider(
objc = objc_provider,
cc_info = cc_info,
framework_dirs = framework_dirs_set,
2 changes: 1 addition & 1 deletion apple/internal/apple_xcframework_import.bzl
Original file line number Diff line number Diff line change
@@ -528,7 +528,7 @@ def _apple_dynamic_xcframework_import_impl(ctx):
providers.append(cc_info)

# Create AppleDynamicFrameworkInfo provider
apple_dynamic_framework_info = apple_common.new_dynamic_framework_provider(
apple_dynamic_framework_info = framework_import_support.new_dynamic_framework_provider(
objc = objc_provider,
cc_info = cc_info,
)
26 changes: 26 additions & 0 deletions apple/internal/framework_import_support.bzl
Original file line number Diff line number Diff line change
@@ -26,6 +26,9 @@ load(
)
load("@bazel_skylib//lib:paths.bzl", "paths")

# TODO: Remove once we drop bazel 7.x
_OBJC_PROVIDER_LINKING = hasattr(apple_common.new_objc_provider(), "linkopt")

def _cc_info_with_dependencies(
*,
actions,
@@ -457,8 +460,30 @@ def _objc_provider_with_dependencies(
objc_provider_fields["weak_sdk_framework"] = depset(weak_sdk_framework)

objc_provider_fields.update(**additional_objc_provider_fields)
if not _OBJC_PROVIDER_LINKING:
objc_provider_fields = {"providers": additional_objc_providers}

return apple_common.new_objc_provider(**objc_provider_fields)

def _new_dynamic_framework_provider(*, cc_info, **kwargs):
"""A wrapper API for the Bazel API of the same name to better support multiple Bazel versions

Args:
cc_info: CcInfo provider for the dynamic framework.
**kwargs: Additional arguments to pass if supported.
"""

test_provider = apple_common.new_dynamic_framework_provider(
cc_info = cc_info,
)

processed_args = {"cc_info": cc_info}
for key, value in kwargs.items():
if hasattr(test_provider, key):
processed_args[key] = value

return apple_common.new_dynamic_framework_provider(**processed_args)

def _swift_info_from_module_interface(
*,
actions,
@@ -530,6 +555,7 @@ framework_import_support = struct(
framework_import_info_with_dependencies = _framework_import_info_with_dependencies,
get_swift_module_files_with_target_triplet = _get_swift_module_files_with_target_triplet,
has_versioned_framework_files = _has_versioned_framework_files,
new_dynamic_framework_provider = _new_dynamic_framework_provider,
objc_provider_with_dependencies = _objc_provider_with_dependencies,
swift_info_from_module_interface = _swift_info_from_module_interface,
swift_interop_info_with_dependencies = _swift_interop_info_with_dependencies,
7 changes: 4 additions & 3 deletions apple/internal/ios_rules.bzl
Original file line number Diff line number Diff line change
@@ -494,7 +494,7 @@ def _ios_application_impl(ctx):
processor_result.output_groups,
)
),
apple_common.new_executable_binary_provider(
linking_support.new_executable_binary_provider(
binary = binary_artifact,
cc_info = link_result.cc_info,
objc = link_result.objc,
@@ -785,7 +785,7 @@ def _ios_app_clip_impl(ctx):
processor_result.output_groups,
)
),
apple_common.new_executable_binary_provider(
linking_support.new_executable_binary_provider(
binary = binary_artifact,
cc_info = link_result.cc_info,
objc = link_result.objc,
@@ -1327,8 +1327,9 @@ def _ios_extension_impl(ctx):
DefaultInfo(
files = processor_result.output_files,
),
apple_common.new_executable_binary_provider(
linking_support.new_executable_binary_provider(
binary = binary_artifact,
cc_info = link_result.cc_info,
objc = link_result.objc,
),
new_iosextensionbundleinfo(),
24 changes: 24 additions & 0 deletions apple/internal/linking_support.bzl
Original file line number Diff line number Diff line change
@@ -24,6 +24,9 @@ load(
"cc_toolchain_info_support",
)

# TODO: Remove once we drop bazel 7.x
_OBJC_PROVIDER_LINKING = hasattr(apple_common.new_objc_provider(), "linkopt")

def _debug_outputs_by_architecture(link_outputs):
"""Returns debug outputs indexed by architecture from `register_binary_linking_action` output.

@@ -51,6 +54,26 @@ def _debug_outputs_by_architecture(link_outputs):
linkmaps = linkmaps,
)

def _new_executable_binary_provider(*, binary, cc_info, objc):
"""Wrap the apple_common API of the same name to better support multiple Bazel versions.

Args:
binary: The `File` representing the binary.
cc_info: The `CcInfo` provider for the binary.
objc: The `apple_common.Objc` provider for the binary.
"""
if _OBJC_PROVIDER_LINKING:
return apple_common.new_executable_binary_provider(
binary = binary,
cc_info = cc_info,
objc = objc,
)
else:
return apple_common.new_executable_binary_provider(
binary = binary,
cc_info = cc_info,
)

def _sectcreate_objc_provider(label, segname, sectname, file):
"""Returns an objc provider that propagates a section in a linked binary.

@@ -444,6 +467,7 @@ linking_support = struct(
debug_outputs_by_architecture = _debug_outputs_by_architecture,
link_multi_arch_binary = _link_multi_arch_binary,
lipo_or_symlink_inputs = _lipo_or_symlink_inputs,
new_executable_binary_provider = _new_executable_binary_provider,
register_binary_linking_action = _register_binary_linking_action,
register_static_library_linking_action = _register_static_library_linking_action,
sectcreate_objc_provider = _sectcreate_objc_provider,
9 changes: 5 additions & 4 deletions apple/internal/macos_rules.bzl
Original file line number Diff line number Diff line change
@@ -435,7 +435,7 @@ def _macos_application_impl(ctx):
processor_result.output_groups,
)
),
apple_common.new_executable_binary_provider(
linking_support.new_executable_binary_provider(
binary = binary_artifact,
cc_info = link_result.cc_info,
objc = link_result.objc,
@@ -930,8 +930,9 @@ def _macos_extension_impl(ctx):
DefaultInfo(
files = processor_result.output_files,
),
apple_common.new_executable_binary_provider(
linking_support.new_executable_binary_provider(
binary = binary_artifact,
cc_info = link_result.cc_info,
objc = link_result.objc,
),
new_macosextensionbundleinfo(),
@@ -2024,8 +2025,8 @@ def _macos_command_line_application_impl(ctx):
processor_result.output_groups,
)
),
apple_common.new_executable_binary_provider(
binary = output_file,
linking_support.new_executable_binary_provider(
binary = binary_artifact,
cc_info = link_result.cc_info,
objc = link_result.objc,
),
6 changes: 5 additions & 1 deletion apple/internal/partials/framework_provider.bzl
Original file line number Diff line number Diff line change
@@ -22,6 +22,10 @@ load(
"@bazel_skylib//lib:paths.bzl",
"paths",
)
load(
"@build_bazel_rules_apple//apple/internal:framework_import_support.bzl",
"framework_import_support",
)

def _framework_provider_partial_impl(
*,
@@ -84,7 +88,7 @@ def _framework_provider_partial_impl(
],
)

framework_provider = apple_common.new_dynamic_framework_provider(
framework_provider = framework_import_support.new_dynamic_framework_provider(
binary = binary_artifact,
cc_info = wrapper_cc_info,
framework_dirs = depset([absolute_framework_dir]),
2 changes: 1 addition & 1 deletion apple/internal/tvos_rules.bzl
Original file line number Diff line number Diff line change
@@ -430,7 +430,7 @@ def _tvos_application_impl(ctx):
)
),
new_tvosapplicationbundleinfo(),
apple_common.new_executable_binary_provider(
linking_support.new_executable_binary_provider(
binary = binary_artifact,
cc_info = link_result.cc_info,
objc = link_result.objc,
5 changes: 3 additions & 2 deletions apple/internal/visionos_rules.bzl
Original file line number Diff line number Diff line change
@@ -432,7 +432,7 @@ Resolved Xcode is version {xcode_version}.
)
),
new_visionosapplicationbundleinfo(),
apple_common.new_executable_binary_provider(
linking_support.new_executable_binary_provider(
binary = binary_artifact,
cc_info = link_result.cc_info,
objc = link_result.objc,
@@ -1240,8 +1240,9 @@ def _visionos_extension_impl(ctx):
processor_result.output_groups,
)
),
apple_common.new_executable_binary_provider(
linking_support.new_executable_binary_provider(
binary = binary_artifact,
cc_info = link_result.cc_info,
objc = link_result.objc,
),
new_visionosextensionbundleinfo(),