From d8a32826803beb15e22df5e50ec06642c81de4e8 Mon Sep 17 00:00:00 2001 From: Luis Padron Date: Sun, 26 May 2024 16:36:25 -0400 Subject: [PATCH] Add support for macos in apple_*_xcframework rules --- apple/internal/resource_actions/plist.bzl | 11 ++++---- apple/internal/transition_support.bzl | 15 +++++++++-- apple/internal/xcframework_rules.bzl | 5 ++++ .../targets_under_test/apple/BUILD | 26 +++++++++++++++++++ 4 files changed, 50 insertions(+), 7 deletions(-) diff --git a/apple/internal/resource_actions/plist.bzl b/apple/internal/resource_actions/plist.bzl index 2095b23847..ae6816d3d6 100644 --- a/apple/internal/resource_actions/plist.bzl +++ b/apple/internal/resource_actions/plist.bzl @@ -341,19 +341,20 @@ def merge_root_infoplists( else: plist_key = "MinimumOSVersion" - input_files.append(environment_plist) platform = platform_prerequisites.platform sdk_version = platform_prerequisites.sdk_version platform_with_version = platform.name_in_plist.lower() + str(sdk_version) - forced_plists.extend([ - environment_plist.path, + if environment_plist: + input_files.append(environment_plist) + forced_plists.append(environment_plist.path) + forced_plists.append( struct( CFBundleSupportedPlatforms = [platform.name_in_plist], DTPlatformName = platform.name_in_plist.lower(), DTSDKName = platform_with_version, **{plist_key: platform_prerequisites.minimum_deployment_os} - ), - ]) + ) + ) output_files = [output_plist] if output_pkginfo: diff --git a/apple/internal/transition_support.bzl b/apple/internal/transition_support.bzl index 113f23255a..398f67a5da 100644 --- a/apple/internal/transition_support.bzl +++ b/apple/internal/transition_support.bzl @@ -41,6 +41,10 @@ load( "@build_bazel_rules_apple//apple/build_settings:build_settings.bzl", "build_settings_labels", ) +load( + "@bazel_skylib//lib:types.bzl", + "types", +) _supports_visionos = hasattr(apple_common.platform_type, "visionos") _is_bazel_7 = not hasattr(apple_common, "apple_crosstool_transition") @@ -346,9 +350,16 @@ def _command_line_options_for_xcframework_platform( """ output_dictionary = {} for target_environment in target_environments: - if not platform_attr.get(target_environment): + is_platform_attr_dict = types.is_dict(platform_attr) + + if is_platform_attr_dict and not platform_attr.get(target_environment): continue - for arch in platform_attr[target_environment]: + elif is_platform_attr_dict: + platform_attr = platform_attr[target_environment] + else: + platform_attr = platform_attr + + for arch in platform_attr: resolved_environment_arch = _resolved_environment_arch_for_arch( arch = arch, environment = target_environment, diff --git a/apple/internal/xcframework_rules.bzl b/apple/internal/xcframework_rules.bzl index 4d053c441c..1558972e1a 100644 --- a/apple/internal/xcframework_rules.bzl +++ b/apple/internal/xcframework_rules.bzl @@ -864,6 +864,11 @@ built for those platform variants (for example, `x86_64`, `arm64`) as their valu A dictionary of strings indicating which platform variants should be built for the tvOS platform ( `device` or `simulator`) as keys, and arrays of strings listing which architectures should be built for those platform variants (for example, `x86_64`, `arm64`) as their values. +""", + ), + "macos": attr.string_list( + doc = """ +A list of strings indicating which architecture should be built for the macOS platform (for example, `x86_64`, `arm64`). """, ), "minimum_deployment_os_versions": attr.string_dict( diff --git a/test/starlark_tests/targets_under_test/apple/BUILD b/test/starlark_tests/targets_under_test/apple/BUILD index b32a5ef42c..000fdff83f 100644 --- a/test/starlark_tests/targets_under_test/apple/BUILD +++ b/test/starlark_tests/targets_under_test/apple/BUILD @@ -1530,3 +1530,29 @@ apple_metal_library( hdrs = ["@build_bazel_rules_apple//test/testdata/resources:metal_hdrs"], tags = common.fixture_tags, ) + +apple_xcframework( + name = "ios_and_macos_dynamic_xcframework", + bundle_id = "com.google.example", + extension_safe = True, + infoplists = [ + "//test/starlark_tests/resources:Info.plist", + ], + ios = { + "simulator": ["x86_64"], + "device": ["arm64"], + }, + macos = [ + "arm64", + "x86_64", + ], + minimum_os_versions = { + "ios": common.min_os_ios.baseline, + "macos": common.min_os_macos.baseline, + }, + public_hdrs = [ + "//test/starlark_tests/resources:shared.h", + ], + tags = common.fixture_tags, + deps = [":fmwk_lib"], +)