Get Objc compile info from CcCompilationContext
Note strict includes still come from ObjcProvider.
Step 2 of 3-step plan:
1. Migrate the definitions.
2. Migrate the uses.
3. Delete old ObjcProvider definitions.
See https://github.com/bazelbuild/bazel/issues/10674.
PiperOrigin-RevId: 307870523
diff --git a/src/TulsiGenerator/Bazel/tulsi/tulsi_aspects.bzl b/src/TulsiGenerator/Bazel/tulsi/tulsi_aspects.bzl
index 2d8d4ba..3d0e35c 100644
--- a/src/TulsiGenerator/Bazel/tulsi/tulsi_aspects.bzl
+++ b/src/TulsiGenerator/Bazel/tulsi/tulsi_aspects.bzl
@@ -266,7 +266,7 @@
)
def _depset_to_file_metadata_list(a_depset):
- """"Converts a depset of files into a list of _file_metadata structs."""
+ """Converts a depset of files into a list of _file_metadata structs."""
return [_file_metadata(f) for f in a_depset.to_list()]
def _collect_artifacts(obj, attr_path, exclude_xcdatamodel = False, exclude_xcassets = False):
@@ -569,11 +569,14 @@
def _extract_generated_sources(target):
"""Returns (source_metadatas, includes) generated by the given target."""
- file_metadatas = []
+ transitive_depsets = []
objc_provider = _get_opt_provider(target, ObjcInfo)
- if hasattr(objc_provider, "source") and hasattr(objc_provider, "header"):
- all_files = depset(transitive = [objc_provider.source, objc_provider.header])
- file_metadatas = _depset_to_file_metadata_list(all_files)
+ if hasattr(objc_provider, "source"):
+ transitive_depsets.append(objc_provider.source)
+ cc_info = _get_opt_provider(target, CcInfo)
+ if cc_info:
+ transitive_depsets.append(cc_info.compilation_context.headers)
+ file_metadatas = _depset_to_file_metadata_list(depset(transitive = transitive_depsets))
return file_metadatas
@@ -650,25 +653,13 @@
depsets.append(objc.strict_include)
return depset(transitive = depsets)
-def _collect_objc_defines(objc_provider, cc_provider, rule_attr):
- """Returns a depset of C-compiler defines."""
- if cc_provider and not objc_provider:
- return cc_provider.compilation_context.defines
- depsets = [objc_provider.define] if objc_provider else []
- for dep in _collect_dependencies(rule_attr, "deps"):
- if CcInfo in dep:
- compilation_context = dep[CcInfo].compilation_context
- depsets.append(compilation_context.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."""
- # swift_* targets put the generated header into their objc provider HEADER
- # field.
- if SwiftInfo in target and ObjcInfo in target:
- return target[ObjcInfo].header
+ # swift_* targets put the generated header into CcInfo.
+ if SwiftInfo in target and CcInfo in target:
+ return target[CcInfo].compilation_context.headers
return depset()
def _target_filtering_info(ctx):
@@ -826,21 +817,19 @@
objc_strict_includes = _collect_objc_strict_includes(target, rule_attr)
- objc_provider = _get_opt_provider(target, ObjcInfo)
cc_provider = _get_opt_provider(target, CcInfo)
objc_defines = []
- includes_depsets = []
- if objc_provider:
+ if cc_provider:
+ cc_ctx = cc_provider.compilation_context
includes_depsets = [
objc_strict_includes,
- objc_provider.include,
- objc_provider.iquote,
- objc_provider.include_system,
+ cc_ctx.includes,
+ cc_ctx.quote_includes,
+ cc_ctx.system_includes,
]
- elif cc_provider:
- cc_ctx = cc_provider.compilation_context
- includes_depsets = [cc_ctx.includes, cc_ctx.quote_includes, cc_ctx.system_includes]
+ else:
+ includes_depsets = [objc_strict_includes]
if includes_depsets:
# Use a depset here to remove duplicates which is possible since
@@ -852,7 +841,8 @@
else:
target_includes = []
- objc_defines = _collect_objc_defines(objc_provider, cc_provider, rule_attr).to_list()
+ if cc_provider:
+ objc_defines = cc_provider.compilation_context.defines.to_list()
platform_type, os_deployment_target = _get_deployment_info(target, ctx)
non_arc_srcs = _collect_files(rule, "attr.non_arc_srcs")
@@ -1089,9 +1079,11 @@
all_files_depsets = []
if target_kind in _SOURCE_GENERATING_RULES + _NON_ARC_SOURCE_GENERATING_RULES:
objc_provider = _get_opt_provider(target, ObjcInfo)
- if hasattr(objc_provider, "source") and hasattr(objc_provider, "header"):
+ if hasattr(objc_provider, "source"):
all_files_depsets.append(objc_provider.source)
- all_files_depsets.append(objc_provider.header)
+ cc_info = _get_opt_provider(target, CcInfo)
+ if cc_info:
+ all_files_depsets.append(cc_info.compilation_context.headers)
all_files_depsets.append(_collect_swift_header(target))
all_files_depsets.append(_collect_swift_modules(target))