Skip to content

Commit

Permalink
Add support for macos in apple_*_xcframework rules
Browse files Browse the repository at this point in the history
  • Loading branch information
luispadron committed May 26, 2024
1 parent d4b6341 commit 83af71b
Show file tree
Hide file tree
Showing 5 changed files with 53 additions and 9 deletions.
11 changes: 6 additions & 5 deletions apple/internal/resource_actions/plist.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
15 changes: 13 additions & 2 deletions apple/internal/transition_support.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down Expand Up @@ -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,
Expand Down
5 changes: 5 additions & 0 deletions apple/internal/xcframework_rules.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down
5 changes: 3 additions & 2 deletions doc/rules-apple.md
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,7 @@ The `lipo` tool is used to combine built binaries of multiple architectures.
<pre>
apple_xcframework(<a href="#apple_xcframework-name">name</a>, <a href="#apple_xcframework-deps">deps</a>, <a href="#apple_xcframework-data">data</a>, <a href="#apple_xcframework-additional_linker_inputs">additional_linker_inputs</a>, <a href="#apple_xcframework-bundle_id">bundle_id</a>, <a href="#apple_xcframework-bundle_name">bundle_name</a>,
<a href="#apple_xcframework-codesign_inputs">codesign_inputs</a>, <a href="#apple_xcframework-codesignopts">codesignopts</a>, <a href="#apple_xcframework-exported_symbols_lists">exported_symbols_lists</a>, <a href="#apple_xcframework-extension_safe">extension_safe</a>,
<a href="#apple_xcframework-families_required">families_required</a>, <a href="#apple_xcframework-infoplists">infoplists</a>, <a href="#apple_xcframework-ios">ios</a>, <a href="#apple_xcframework-linkopts">linkopts</a>, <a href="#apple_xcframework-minimum_deployment_os_versions">minimum_deployment_os_versions</a>,
<a href="#apple_xcframework-families_required">families_required</a>, <a href="#apple_xcframework-infoplists">infoplists</a>, <a href="#apple_xcframework-ios">ios</a>, <a href="#apple_xcframework-linkopts">linkopts</a>, <a href="#apple_xcframework-macos">macos</a>, <a href="#apple_xcframework-minimum_deployment_os_versions">minimum_deployment_os_versions</a>,
<a href="#apple_xcframework-minimum_os_versions">minimum_os_versions</a>, <a href="#apple_xcframework-public_hdrs">public_hdrs</a>, <a href="#apple_xcframework-stamp">stamp</a>, <a href="#apple_xcframework-tvos">tvos</a>, <a href="#apple_xcframework-umbrella_header">umbrella_header</a>, <a href="#apple_xcframework-version">version</a>)
</pre>

Expand All @@ -304,6 +304,7 @@ Builds and bundles an XCFramework for third-party distribution.
| <a id="apple_xcframework-infoplists"></a>infoplists | A list of .plist files that will be merged to form the Info.plist for each of the embedded frameworks. At least one file must be specified. Please see [Info.plist Handling](https://github.com/bazelbuild/rules_apple/blob/master/doc/common_info.md#infoplist-handling) for what is supported. | <a href="https://bazel.build/concepts/labels">List of labels</a> | required | |
| <a id="apple_xcframework-ios"></a>ios | A dictionary of strings indicating which platform variants should be built for the iOS 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. | <a href="https://bazel.build/rules/lib/dict">Dictionary: String -> List of strings</a> | optional | `{}` |
| <a id="apple_xcframework-linkopts"></a>linkopts | A list of strings representing extra flags that should be passed to the linker. | List of strings | optional | `[]` |
| <a id="apple_xcframework-macos"></a>macos | A list of strings indicating which architecture should be built for the macOS platform (for example, `x86_64`, `arm64`). | List of strings | optional | `[]` |
| <a id="apple_xcframework-minimum_deployment_os_versions"></a>minimum_deployment_os_versions | A dictionary of strings indicating the minimum deployment OS version supported by the target, represented as a dotted version number (for example, "9.0") as values, with their respective platforms such as `ios` as keys. This is different from `minimum_os_versions`, which is effective at compile time. Ensure version specific APIs are guarded with `available` clauses. | <a href="https://bazel.build/rules/lib/dict">Dictionary: String -> String</a> | optional | `{}` |
| <a id="apple_xcframework-minimum_os_versions"></a>minimum_os_versions | A dictionary of strings indicating the minimum OS version supported by the target, represented as a dotted version number (for example, "8.0") as values, with their respective platforms such as `ios`, or `tvos` as keys:<br><br> minimum_os_versions = { "ios": "13.0", "tvos": "15.0", } | <a href="https://bazel.build/rules/lib/dict">Dictionary: String -> String</a> | required | |
| <a id="apple_xcframework-public_hdrs"></a>public_hdrs | A list of files directly referencing header files to be used as the publicly visible interface for each of these embedded frameworks. These header files will be embedded within each bundle, typically in a subdirectory such as `Headers`. | <a href="https://bazel.build/concepts/labels">List of labels</a> | optional | `[]` |
Expand Down Expand Up @@ -488,7 +489,7 @@ This repository rule depends on the following environment variables:
## provisioning_profile_repository_extension

<pre>
provisioning_profile_repository_extension = use_extension("@rules_apple//apple:apple.bzl", "provisioning_profile_repository_extension")
provisioning_profile_repository_extension = use_extension("@build_bazel_rules_apple//apple:apple.bzl", "provisioning_profile_repository_extension")
provisioning_profile_repository_extension.setup(<a href="#provisioning_profile_repository_extension.setup-fallback_profiles">fallback_profiles</a>)
</pre>

Expand Down
26 changes: 26 additions & 0 deletions test/starlark_tests/targets_under_test/apple/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -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"],
)

0 comments on commit 83af71b

Please sign in to comment.