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
Show file tree
Hide file tree
Changes from all commits
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
Expand Up @@ -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,
),
)

Expand Down
2 changes: 1 addition & 1 deletion apple/internal/apple_framework_import.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
2 changes: 1 addition & 1 deletion apple/internal/apple_xcframework_import.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -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,
)
Expand Down
18 changes: 18 additions & 0 deletions apple/internal/framework_import_support.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -457,8 +460,22 @@ 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(**kwargs):
"""A wrapper API for the Bazel API of the same name to better support multiple Bazel versions

Args:
**kwargs: Arguments to pass if supported.
"""
if not _OBJC_PROVIDER_LINKING:
kwargs.pop("objc", None)

return apple_common.new_dynamic_framework_provider(**kwargs)

def _swift_info_from_module_interface(
*,
actions,
Expand Down Expand Up @@ -530,6 +547,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,
Expand Down
7 changes: 4 additions & 3 deletions apple/internal/ios_rules.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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(),
Expand Down
24 changes: 24 additions & 0 deletions apple/internal/linking_support.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -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.

Expand Down Expand Up @@ -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(
keith marked this conversation as resolved.
Show resolved Hide resolved
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.

Expand Down Expand Up @@ -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,
Expand Down
9 changes: 5 additions & 4 deletions apple/internal/macos_rules.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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(),
Expand Down Expand Up @@ -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,
),
Expand Down
1 change: 1 addition & 0 deletions apple/internal/partials/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,7 @@ bzl_library(
"//apple/internal:__pkg__",
],
deps = [
"//apple/internal:framework_import_support",
"@bazel_skylib//lib:partial",
"@bazel_skylib//lib:paths",
],
Expand Down
6 changes: 5 additions & 1 deletion apple/internal/partials/framework_provider.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -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(
*,
Expand Down Expand Up @@ -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]),
Expand Down
2 changes: 1 addition & 1 deletion apple/internal/tvos_rules.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
5 changes: 3 additions & 2 deletions apple/internal/visionos_rules.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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(),
Expand Down