blob: 89399e29245455076a5fa3c0dd6ffb897e267b60 [file] [log] [blame]
# Copyright 2024 The Bazel Authors. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""The provider ObjcInfo for ObjC rules. For more context see doc param of provider() call."""
def _objcinfo_init(
j2objc_library = depset(),
module_map = depset(),
source = depset(),
strict_include = depset(),
umbrella_header = depset(),
providers = []): # List of depended-on ObjcInfo providers
direct_module_maps = module_map.to_list()
direct_sources = source.to_list()
j2objc_library_transitive = []
module_map_transitive = []
source_transitive = []
umbrella_header_transitive = []
for p in providers:
j2objc_library_transitive.append(p.j2objc_library)
module_map_transitive.append(p.module_map)
source_transitive.append(p.source)
umbrella_header_transitive.append(p.umbrella_header)
j2objc_library = depset(
direct = j2objc_library.to_list(),
transitive = j2objc_library_transitive,
)
module_map = depset(
direct = direct_module_maps,
transitive = module_map_transitive,
)
source = depset(
direct = direct_sources,
transitive = source_transitive,
)
umbrella_header = depset(
direct = umbrella_header.to_list(),
transitive = umbrella_header_transitive,
)
return {
"direct_module_maps": direct_module_maps,
"direct_sources": direct_sources,
"j2objc_library": j2objc_library,
"module_map": module_map,
"source": source,
"strict_include": strict_include,
"umbrella_header": umbrella_header,
}
ObjcInfo, _new_objcinfo = provider(
"""
A provider that provides all linking and miscellaneous information in the transitive closure of
its deps that are needed for building Objective-C rules. Most of the compilation information has
been migrated to {@code CcInfo}. The objc proto strict dependency include paths are still here
and stored in a field {@code strict_include} that is not propagated to any dependent ObjcInfo
provders and does not contain info from depended-on ObjcInfo providers.
The fields {@code direct_module_maps} and {@code direct_sources} only contain info from this target
whereas the fields {@code j2objc_library}, {@code module_map}, {@code source} and
{@code umbrella_header} are propagated to and from dependent and depended-on ObjcInfo providers
passed in via {@code providers} into the {@code _objcinfo_init} constructor.""",
fields = {
"direct_module_maps": """Module map files from this target directly
(no transitive module maps).
Used to enforce proper use of private header files and for Swift compilation.
List<Artifact>""",
"direct_sources": """All direct source files from this target (no transitive files),
including any headers in the 'srcs' attribute. List<Artifact>""",
"j2objc_library": """Static libraries that are built from J2ObjC-translated Java code.
Depset<Artifact>""",
"module_map": """Clang module maps, used to enforce proper use of private header files.
Depset<Artifact>""",
"source": "All transitive source files. Depset<Artifact>",
"strict_include": """Non-propagated include search paths specified with '-I' on the
command line. Also known as header search paths (and distinct from <em>user</em>
header search paths). Depset<PathFragment>""",
"umbrella_header": """Clang umbrella header. Public headers are #included in umbrella
headers to be compatible with J2ObjC segmented headers. Depset<Artifact>""",
},
init = _objcinfo_init,
)