diff --git a/prelude/apple/apple_bundle_resources.bzl b/prelude/apple/apple_bundle_resources.bzl index 408ad1b9ba63..46b099385929 100644 --- a/prelude/apple/apple_bundle_resources.bzl +++ b/prelude/apple/apple_bundle_resources.bzl @@ -131,6 +131,7 @@ def get_apple_bundle_resource_part_list(ctx: AnalysisContext) -> AppleBundleReso parts.extend(_copy_resources(ctx, resource_specs)) parts.extend(_copy_first_level_bundles(ctx)) parts.extend(_copy_public_headers(ctx)) + parts.extend(_copy_module_map(ctx)) return AppleBundleResourcePartListOutput( resource_parts = parts, @@ -198,6 +199,15 @@ def _copy_public_headers(ctx: AnalysisContext) -> list[AppleBundlePart]: return bundle_parts +def _copy_module_map(ctx: AnalysisContext) -> list[AppleBundlePart]: + extension = get_extension_attr(ctx) + if not extension == "framework": + return [] + module_map = ctx.attrs.module_map + if not module_map: + return [] + return [AppleBundlePart(source = module_map, destination = AppleBundleDestination("modules"))] + def _copy_resources(ctx: AnalysisContext, specs: list[AppleResourceSpec]) -> list[AppleBundlePart]: result = [] diff --git a/prelude/apple/apple_resource_bundle.bzl b/prelude/apple/apple_resource_bundle.bzl index 3c4605209790..db6ccbc89ed6 100644 --- a/prelude/apple/apple_resource_bundle.bzl +++ b/prelude/apple/apple_resource_bundle.bzl @@ -51,6 +51,7 @@ _RESOURCE_BUNDLE_FIELDS = [ "ibtool_module_flag", "info_plist", "info_plist_substitutions", + "module_map", "product_name", "privacy_manifest", "resource_group", diff --git a/prelude/apple/apple_rules_impl_utility.bzl b/prelude/apple/apple_rules_impl_utility.bzl index a14095a4772a..8485e98d659c 100644 --- a/prelude/apple/apple_rules_impl_utility.bzl +++ b/prelude/apple/apple_rules_impl_utility.bzl @@ -140,6 +140,7 @@ def apple_bundle_extra_attrs(): "binary": attrs.option(attrs.split_transition_dep(cfg = cpu_split_transition), default = None), "bundle_type": attrs.option(attrs.enum(AppleBundleTypeAttributeType.values()), default = None), "copy_public_framework_headers": attrs.option(attrs.bool(), default = None), + "module_map": attrs.option(attrs.source(), default = None), "resource_group_map": RESOURCE_GROUP_MAP_ATTR, "selective_debugging": attrs.option(attrs.dep(providers = [AppleSelectiveDebuggingInfo]), default = None), "split_arch_dsym": attrs.bool(default = False), diff --git a/prelude/apple/user/apple_resource_bundle.bzl b/prelude/apple/user/apple_resource_bundle.bzl index 8ff4c44b13d0..92295309cfc3 100644 --- a/prelude/apple/user/apple_resource_bundle.bzl +++ b/prelude/apple/user/apple_resource_bundle.bzl @@ -38,6 +38,7 @@ def _apple_resource_bundle_attrs(): "info_plist": attrs.source(), "info_plist_substitutions": attrs.dict(key = attrs.string(), value = attrs.string(), sorted = False, default = {}), "labels": attrs.list(attrs.string(), default = []), + "module_map": attrs.option(attrs.source(), default = None), "privacy_manifest": attrs.option(attrs.source(), default = None), "product_name": attrs.option(attrs.string(), default = None), "resource_group": attrs.option(attrs.string(), default = None),