Improve support for auto-generated module maps
PiperOrigin-RevId: 221343129
diff --git a/src/TulsiGenerator/Bazel/tulsi/tulsi_aspects.bzl b/src/TulsiGenerator/Bazel/tulsi/tulsi_aspects.bzl
index 9aea119..3f6a9ef 100644
--- a/src/TulsiGenerator/Bazel/tulsi/tulsi_aspects.bzl
+++ b/src/TulsiGenerator/Bazel/tulsi/tulsi_aspects.bzl
@@ -23,6 +23,7 @@
"AppleBundleInfo",
"AppleTestInfo",
"IosExtensionBundleInfo",
+ "SwiftClangModuleInfo",
"SwiftInfo",
)
load("@bazel_tools//tools/cpp:toolchain_utils.bzl", "find_cpp_toolchain")
@@ -597,14 +598,32 @@
return swift_info.transitive_swiftmodules
return depset()
-def _collect_module_maps(target):
+def _collect_module_maps(target, rule_attr):
"""Returns a depset of Clang module maps found on the given target."""
if SwiftInfo in target and apple_common.Objc in target:
+ depsets = []
objc = target[apple_common.Objc]
if hasattr(objc, "module_map"):
- return objc.module_map
+ depsets.append(objc.module_map)
+
+ for dep in _collect_dependencies(rule_attr, "deps"):
+ if SwiftClangModuleInfo in dep:
+ module_info = dep[SwiftClangModuleInfo]
+ if hasattr(module_info, "transitive_modulemaps"):
+ depsets.append(module_info.transitive_modulemaps)
+ return depset(transitive = depsets)
return depset()
+def _collect_objc_defines(objc_provider, rule_attr):
+ """Returns a depset of C-compiler defines."""
+ depsets = [objc_provider.define] if objc_provider else []
+ for dep in _collect_dependencies(rule_attr, "deps"):
+ if SwiftClangModuleInfo in dep:
+ module_info = dep[SwiftClangModuleInfo]
+ if hasattr(module_info, "transitive_defines"):
+ depsets.append(module_info.transitive_defines)
+ return depset(transitive = depsets)
+
# TODO(b/64490743): Add these files to the Xcode project.
def _collect_swift_header(target):
"""Returns a depset of Swift generated headers found on the given target."""
@@ -673,7 +692,7 @@
# Collect ObjC module maps dependencies for Swift targets.
objc_module_maps = depset(
- _depset_to_file_metadata_list(_collect_module_maps(target)),
+ _depset_to_file_metadata_list(_collect_module_maps(target, rule_attr)),
)
# Collect the dependencies of this rule, dropping any .jar files (which may be
@@ -784,7 +803,7 @@
_convert_outpath_to_symlink_path(x)
for x in objc_provider.include
]
- objc_defines = objc_provider.define.to_list()
+ objc_defines = _collect_objc_defines(objc_provider, rule_attr).to_list()
platform_type, os_deployment_target = _get_deployment_info(target, ctx)
non_arc_srcs = _collect_files(rule, "attr.non_arc_srcs")
@@ -1026,7 +1045,7 @@
all_files_depsets.append(_collect_swift_header(target))
all_files_depsets.append(_collect_swift_modules(target))
- all_files_depsets.append(_collect_module_maps(target))
+ all_files_depsets.append(_collect_module_maps(target, rule_attr))
source_files = [
x
diff --git a/src/TulsiGenerator/Bazel/tulsi/tulsi_aspects_paths.bzl b/src/TulsiGenerator/Bazel/tulsi/tulsi_aspects_paths.bzl
index a79a7c5..706591f 100644
--- a/src/TulsiGenerator/Bazel/tulsi/tulsi_aspects_paths.bzl
+++ b/src/TulsiGenerator/Bazel/tulsi/tulsi_aspects_paths.bzl
@@ -28,6 +28,7 @@
)
load(
"@build_bazel_rules_swift//swift:swift.bzl",
+ _SwiftClangModuleInfo = "SwiftClangModuleInfo",
_SwiftInfo = "SwiftInfo",
)
@@ -38,4 +39,6 @@
IosExtensionBundleInfo = _IosExtensionBundleInfo
+SwiftClangModuleInfo = _SwiftClangModuleInfo
+
SwiftInfo = _SwiftInfo