Automated rollback of commit ca1d20fdfa95dad533c64aba08ba9d7d98be41b7. *** Reason for rollback *** Breaks targets in nightly with include scanning errors. *** Original change description *** Rewrite Objective-C compilation support RELNOTES:none PiperOrigin-RevId: 383608944
diff --git a/src/main/starlark/builtins_bzl/common/cc/cc_helper.bzl b/src/main/starlark/builtins_bzl/common/cc/cc_helper.bzl index 7da7993..cb7224c 100644 --- a/src/main/starlark/builtins_bzl/common/cc/cc_helper.bzl +++ b/src/main/starlark/builtins_bzl/common/cc/cc_helper.bzl
@@ -14,8 +14,7 @@ """Utility functions for C++ rules.""" -CcInfo = _builtins.toplevel.CcInfo -cc_common = _builtins.toplevel.cc_common +load("@_builtins//:blaze/common/toplevel_aliases.bzl", "CcInfo", "cc_common") def _merge_cc_debug_contexts(compilation_outputs, dep_cc_infos): debug_context = cc_common.create_debug_context(compilation_outputs) @@ -86,146 +85,10 @@ # We didn't find anything. fail("In order to use find_cpp_toolchain, you must define the '_cc_toolchain' attribute on your rule or aspect.") -def _build_output_groups_for_emitting_compile_providers( - compilation_outputs, - compilation_context, - cpp_configuration, - cc_toolchain, - feature_configuration, - ctx, - generate_hidden_top_level_group): - output_groups_builder = {} - process_hdrs = cpp_configuration.process_headers_in_dependencies() - use_pic = cc_toolchain.needs_pic_for_dynamic_libraries(feature_configuration = feature_configuration) - output_groups_builder["temp_files_INTERNAL_"] = compilation_outputs.temps() - files_to_compile = compilation_outputs.files_to_compile( - parse_headers = process_hdrs, - use_pic = use_pic, - ) - output_groups_builder["compilation_outputs"] = files_to_compile - output_groups_builder["compilation_prerequisites_INTERNAL_"] = _collect_compilation_prerequisites(ctx, compilation_context) - - if generate_hidden_top_level_group: - output_groups_builder["_hidden_top_level_INTERNAL_"] = _collect_library_hidden_top_level_artifacts( - ctx, - files_to_compile, - ) - - _create_save_feature_state_artifacts( - output_groups_builder, - cpp_configuration, - feature_configuration, - ctx, - ) - - return output_groups_builder - -CC_SOURCE = [".cc", ".cpp", ".cxx", ".c++", ".C", ".cu", ".cl"] -C_SOURCE = [".c"] -OBJC_SOURCE = [".m"] -OBJCPP_SOURCE = [".mm"] -CLIF_INPUT_PROTO = [".ipb"] -CLIF_OUTPUT_PROTO = [".opb"] -CC_AND_OBJC_EXTENSIONS = [] -CC_AND_OBJC_EXTENSIONS.extend(CC_SOURCE) -CC_AND_OBJC_EXTENSIONS.extend(C_SOURCE) -CC_AND_OBJC_EXTENSIONS.extend(OBJC_SOURCE) -CC_AND_OBJC_EXTENSIONS.extend(OBJCPP_SOURCE) -CC_AND_OBJC_EXTENSIONS.extend(CLIF_INPUT_PROTO) -CC_AND_OBJC_EXTENSIONS.extend(CLIF_OUTPUT_PROTO) - -def _collect_compilation_prerequisites(ctx, compilation_context): - # This doesn't go through the same code path as the native one. The native - # method accesses other fields in compilation_context. So far this has not - # been a problem for any migrated rule. - direct = [] - for src in ctx.files.srcs: - if src.extension in CC_AND_OBJC_EXTENSIONS: - direct.append(src) - return depset(direct = direct, transitive = [compilation_context.transitive_compilation_prerequisites()]) - -def _collect_header_tokens( - ctx, - cpp_configuration, - compilation_outputs, - process_hdrs, - add_self_tokens): - header_tokens_transitive = [] - for dep in ctx.attr.deps: - if "_hidden_header_tokens_INTERNAL_" in dep[OutputGroupInfo]: - header_tokens_transitive.append(dep[OutputGroupInfo]["_hidden_header_tokens_INTERNAL_"]) - else: - header_tokens_transitive.append(depset([])) - - header_tokens_direct = [] - if add_self_tokens and process_hdrs: - header_tokens_direct.extend(compilation_outputs.header_tokens()) - - return depset(direct = header_tokens_direct, transitive = header_tokens_transitive) - -def _collect_library_hidden_top_level_artifacts( - ctx, - files_to_compile): - artifacts_to_force_builder = [files_to_compile] - for dep in ctx.attr.deps: - artifacts_to_force_builder.append(dep[OutputGroupInfo]["_hidden_top_level_INTERNAL_"]) - - return depset(transitive = artifacts_to_force_builder) - -def _create_save_feature_state_artifacts( - output_groups_builder, - cpp_configuration, - feature_configuration, - ctx): - if cpp_configuration.save_feature_state(): - feature_state_file = ctx.actions.declare_file(ctx.label.name + "_feature_state.txt") - - ctx.actions.write(feature_state_file, str(feature_configuration)) - output_groups_builder["default"] = depset(direct = [feature_state_file]) - -def _merge_output_groups(output_groups): - merged_output_groups_builder = {} - for output_group in output_groups: - for output_key, output_value in output_group.items(): - depset_list = merged_output_groups_builder.get(output_key, []) - depset_list.append(output_value) - merged_output_groups_builder[output_key] = depset_list - - merged_output_group = {} - for k, v in merged_output_groups_builder.items(): - merged_output_group[k] = depset(transitive = v) - - return merged_output_group - -def _rule_error(msg): - fail(msg) - -def _attribute_error(attr_name, msg): - fail("in attribute '" + attr_name + "': " + msg) - -def _get_linking_contexts_from_deps(deps): - linking_contexts = [] - for dep in deps: - if CcInfo in dep: - linking_contexts.append(dep[CcInfo].linking_context) - return linking_contexts - -def _is_test_target(ctx): - if hasattr(ctx.attr, "testonly"): - return ctx.attr.testonly - - return False - cc_helper = struct( merge_cc_debug_contexts = _merge_cc_debug_contexts, is_code_coverage_enabled = _is_code_coverage_enabled, get_dynamic_libraries_for_runtime = _get_dynamic_libraries_for_runtime, get_dynamic_library_for_runtime_or_none = _get_dynamic_library_for_runtime_or_none, find_cpp_toolchain = _find_cpp_toolchain, - build_output_groups_for_emitting_compile_providers = _build_output_groups_for_emitting_compile_providers, - merge_output_groups = _merge_output_groups, - rule_error = _rule_error, - attribute_error = _attribute_error, - get_linking_contexts_from_deps = _get_linking_contexts_from_deps, - is_test_target = _is_test_target, )
diff --git a/src/main/starlark/builtins_bzl/common/objc/attrs.bzl b/src/main/starlark/builtins_bzl/common/objc/attrs.bzl index 61a1377..cf2965b 100644 --- a/src/main/starlark/builtins_bzl/common/objc/attrs.bzl +++ b/src/main/starlark/builtins_bzl/common/objc/attrs.bzl
@@ -49,7 +49,7 @@ "non_arc_srcs": attr.label_list( allow_files = [".m", ".mm"], ), - "pch": attr.label(allow_single_file = [".pch"]), + "pch": attr.label(allow_files = [".pch"]), "deps": attr.label_list( providers = [ObjcInfo], allow_rules = [ @@ -66,8 +66,6 @@ "enable_modules": attr.bool(), "module_map": attr.label(allow_files = [".modulemap"]), "module_name": attr.string(), - # How many rules use this in the depot? - "stamp": attr.bool(), } _COMPILE_DEPENDENCY_RULE = {
diff --git a/src/main/starlark/builtins_bzl/common/objc/compilation_support.bzl b/src/main/starlark/builtins_bzl/common/objc/compilation_support.bzl deleted file mode 100644 index d0c694a..0000000 --- a/src/main/starlark/builtins_bzl/common/objc/compilation_support.bzl +++ /dev/null
@@ -1,520 +0,0 @@ -# Copyright 2020 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. - -"""Utility methods used for creating objc_* rules actions""" - -load("@_builtins//:common/cc/cc_helper.bzl", "cc_helper") - -objc_internal = _builtins.internal.objc_internal -cc_common = _builtins.toplevel.cc_common - -def _build_variable_extensions( - common_variables, - ctx, - intermediate_artifacts, - variable_categories, - arc_enabled): - extensions = {} - if hasattr(ctx.attr, "pch") and ctx.attr.pch != None: - extensions["pch_file"] = ctx.file.pch.path - - extensions["module_maps_dir"] = intermediate_artifacts.swift_module_map.file().path - - extensions["modules_cache_path"] = ctx.genfiles_dir.path + "/" + "_objc_module_cache" - - if "ARCHIVE_VARIABLE" in variable_categories: - extensions["obj_list_path"] = intermediate_artifacts.archive_obj_list.path - - if arc_enabled: - extensions["objc_arc"] = "" - else: - extensions["no_objc_arc"] = "" - - return extensions - -def _build_common_variables( - ctx, - toolchain, - use_pch, - disable_layering_check, - disable_parse_hdrs, - empty_compilation_artifacts, - deps, - runtime_deps, - extra_import_libraries): - compilation_attributes = objc_internal.create_compilation_attributes(ctx = ctx) - intermediate_artifacts = objc_internal.create_intermediate_artifacts(ctx = ctx) - if empty_compilation_artifacts: - compilation_artifacts = objc_internal.create_compilation_artifacts() - else: - compilation_artifacts = objc_internal.create_compilation_artifacts(ctx = ctx) - objc_common = objc_internal.create_common( - purpose = "COMPILE_AND_LINK", - ctx = ctx, - compilation_attributes = compilation_attributes, - compilation_artifacts = compilation_artifacts, - deps = deps, - runtime_deps = runtime_deps, - intermediate_artifacts = intermediate_artifacts, - alwayslink = ctx.attr.alwayslink, - has_module_map = True, - extra_import_libraries = extra_import_libraries, - ) - - return objc_common, struct( - ctx = ctx, - intermediate_artifacts = intermediate_artifacts, - compilation_attributes = compilation_attributes, - compilation_artifacts = compilation_artifacts, - objc_compilation_context = objc_common.objc_compilation_context, - toolchain = toolchain, - use_pch = use_pch, - disable_layering_check = disable_layering_check, - disable_parse_headers = disable_parse_hdrs, - objc_config = ctx.fragments.objc, - ) - -def _build_feature_configuration(common_variables, for_swift_module_map, support_parse_headers): - activated_crosstool_selectables = [] - ctx = common_variables.ctx - OBJC_ACTIONS = [ - "objc-compile", - "objc++-compile", - "objc-archive", - "objc-fully-link", - "objc-executable", - "objc++-executable", - ] - activated_crosstool_selectables.extend(ctx.features) - activated_crosstool_selectables.extend(OBJC_ACTIONS) - activated_crosstool_selectables.append("lang_objc") - if common_variables.objc_config.should_strip_binary: - activated_crosstool_selectables.append("dead_strip") - - if common_variables.objc_config.generate_linkmap: - activated_crosstool_selectables.append("generate_linkmap") - - disabled_features = [] - disabled_features.extend(ctx.disabled_features) - if common_variables.disable_parse_headers: - disabled_features.append("parse_headers") - - if common_variables.disable_layering_check: - disabled_features.append("layering_check") - - if not support_parse_headers: - disabled_features.append("parse_headers") - - if for_swift_module_map: - activated_crosstool_selectables.append("module_maps") - activated_crosstool_selectables.append("compile_all_modules") - activated_crosstool_selectables.append("only_doth_headers_in_module_maps") - activated_crosstool_selectables.append("exclude_private_headers_in_module_maps") - activated_crosstool_selectables.append("module_map_without_extern_module") - disabled_features.append("generate_submodules") - - return cc_common.configure_features( - ctx = common_variables.ctx, - cc_toolchain = common_variables.toolchain, - requested_features = activated_crosstool_selectables, - unsupported_features = disabled_features, - ) - -def _compile( - common_variables, - feature_configuration, - extension, - extra_compile_args, - priority_headers, - srcs, - private_hdrs, - public_hdrs, - pch_hdr, - module_map, - purpose, - generate_module_map, - should_process_headers): - objc_compilation_context = common_variables.objc_compilation_context - includes = [] - includes.extend(priority_headers) - includes.extend(objc_compilation_context.includes) - - user_compile_flags = [] - user_compile_flags.extend(_get_compile_rule_copts(common_variables)) - user_compile_flags.extend(common_variables.objc_config.copts_for_current_compilation_mode) - user_compile_flags.extend(extra_compile_args) - user_compile_flags.extend(_paths_to_include_args(objc_compilation_context.strict_dependency_includes)) - - textual_hdrs = [] - textual_hdrs.extend(objc_compilation_context.public_textual_hdrs) - if pch_hdr != None: - textual_hdrs.append(pch_hdr) - - return cc_common.compile( - actions = common_variables.ctx.actions, - feature_configuration = feature_configuration, - cc_toolchain = common_variables.toolchain, - name = common_variables.ctx.label.name, - srcs = srcs, - public_hdrs = public_hdrs, - private_hdrs = private_hdrs, - textual_hdrs = textual_hdrs, - defines = objc_compilation_context.defines, - includes = objc_compilation_context.includes, - system_includes = objc_compilation_context.system_includes, - quote_includes = objc_compilation_context.quote_includes, - compilation_contexts = objc_compilation_context.cc_compilation_contexts, - user_compile_flags = user_compile_flags, - module_map = module_map, - propagate_module_map_to_compile_action = True, - variables_extension = extension, - language = "objc", - code_coverage_enabled = cc_helper.is_code_coverage_enabled(ctx = common_variables.ctx), - hdrs_checking_mode = "strict", - do_not_generate_module_map = module_map.file().is_source or not generate_module_map, - purpose = purpose, - ) - -def _validate_attributes(common_variables): - for include in common_variables.compilation_attributes.includes.to_list(): - if include.startswith("/"): - cc_helper.rule_error("The path '{}' is absolute, but only relative paths are allowed.".format(include)) - - ctx = common_variables.ctx - if hasattr(ctx.attr, "srcs"): - srcs = {} - for src in ctx.files.srcs: - srcs[src.path] = True - for src in ctx.files.non_arc_srcs: - if src.path in srcs: - cc_helper.attribute_error( - "srcs", - "File '{}' is present in both srcs and non_arc_srcs which is forbidden.".format(src.path), - ) - - if ctx.attr.module_name != "" and ctx.attr.module_map != None: - cc_helper.attribute_error("module_name", "Specifying both module_name and module_map is invalid, please remove one of them.") - -def _get_compile_rule_copts(common_variables): - attributes = common_variables.compilation_attributes - copts = [] - copts.extend(common_variables.objc_config.copts) - copts.extend(attributes.copts) - - if attributes.enable_modules and common_variables.ctx.file.module_map == None: - copts.append("-fmodules") - - if "-fmodules" in copts: - cache_path = common_variables.ctx.genfiles_dir.path + "/" + "_objc_module_cache" - copts.append("-fmodules-cache-path=" + cache_path) - - return copts - -def _register_obj_file_list_action(common_variables, obj_files, obj_list): - args = common_variables.ctx.actions.args() - args.set_param_file_format("multiline") - args.add_all(obj_files) - common_variables.ctx.actions.write(obj_list, args) - -def _paths_to_include_args(paths): - new_paths = [] - for path in paths: - new_paths.append("-I" + path) - return new_paths - -def _register_compile_and_archive_actions( - common_variables, - extra_compile_args, - priority_headers): - compilation_result = None - - if common_variables.compilation_artifacts.archive != None: - obj_list = common_variables.intermediate_artifacts.archive_obj_list - - compilation_result = _cc_compile_and_link( - common_variables, - extra_compile_args, - priority_headers, - "OBJC_ARCHIVE", - obj_list, - ["ARCHIVE_VARIABLE"], - ) - - _register_obj_file_list_action( - common_variables, - compilation_result[1].objects, - obj_list, - ) - else: - compilation_result = _cc_compile_and_link( - common_variables, - extra_compile_args, - priority_headers, - None, - None, - [], - ) - - return compilation_result - -def _cc_compile_and_link( - common_variables, - extra_compile_args, - priority_headers, - link_type, - link_action_input, - variable_categories): - compilation_artifacts = common_variables.compilation_artifacts - intermediate_artifacts = common_variables.intermediate_artifacts - compilation_attributes = common_variables.compilation_attributes - ctx = common_variables.ctx - (objects, pic_objects) = _get_object_files(common_variables.ctx) - public_hdrs = [] - public_hdrs.extend(compilation_attributes.hdrs.to_list()) - public_hdrs.extend(compilation_artifacts.additional_hdrs.to_list()) - pch_header = _get_pch_file(common_variables) - feature_configuration = _build_feature_configuration(common_variables, False, True) - - # Generate up to two module maps, while minimizing the number of actions created. If - # module_map feature is off, generate a swift module map. If module_map feature is on, - # generate a layering check and a swift module map. In the latter case, the layering check - # module map must be the primary one. - # - # TODO(waltl): Delete this logic when swift module map is migrated to swift_library. - - primary_module_map = None - arc_primary_module_map_fc = None - non_arc_primary_module_map_fc = None - extra_module_map = None - extra_module_map_fc = None - fc_for_swift_module_map = _build_feature_configuration( - common_variables, - True, - True, - ) - if cc_common.is_enabled(feature_configuration = feature_configuration, feature_name = "module_maps"): - primary_module_map = intermediate_artifacts.internal_module_map - arc_primary_module_map_fc = feature_configuration - non_arc_primary_module_map_fc = _build_feature_configuration( - common_variables, - True, - False, - ) - extra_module_map = intermediate_artifacts.swift_module_map - extra_module_map_fc = fc_for_swift_module_map - else: - primary_module_map = intermediate_artifacts.swift_module_map - arc_primary_module_map_fc = fc_for_swift_module_map - non_arc_primary_module_map_fc = _build_feature_configuration( - common_variables, - True, - False, - ) - extra_module_map = None - extra_module_map_fc = None - - purpose = "%s_objc_arc".format(_get_purpose(common_variables)) - arc_extensions = _build_variable_extensions( - common_variables, - ctx, - intermediate_artifacts, - variable_categories, - True, - ) - - (arc_compilation_context, arc_compilation_outputs) = _compile( - common_variables, - arc_primary_module_map_fc, - arc_extensions, - extra_compile_args, - priority_headers, - compilation_artifacts.srcs, - compilation_artifacts.private_hdrs, - public_hdrs, - pch_header, - primary_module_map, - purpose, - True, - True, - ) - purpose = "%s_non_objc_arc".format(_get_purpose(common_variables)) - non_arc_extensions = _build_variable_extensions( - common_variables, - ctx, - intermediate_artifacts, - variable_categories, - False, - ) - (non_arc_compilation_context, non_arc_compilation_outputs) = _compile( - common_variables, - non_arc_primary_module_map_fc, - non_arc_extensions, - extra_compile_args, - priority_headers, - compilation_artifacts.non_arc_srcs, - compilation_artifacts.private_hdrs, - public_hdrs, - pch_header, - primary_module_map, - purpose, - False, - False, - ) - - objc_compilation_context = common_variables.objc_compilation_context - - if extra_module_map != None and not extra_module_map.file().is_source: - _generate_extra_module_map( - common_variables, - extra_module_map, - public_hdrs, - compilation_artifacts.private_hdrs, - objc_compilation_context.public_textual_hdrs, - pch_header, - objc_compilation_context.cc_compilation_contexts, - extra_module_map_fc, - ) - - if link_type == "OBJC_ARCHIVE": - language = "objc" - else: - language = "c++" - - additional_inputs = [] - if link_action_input != None: - additional_inputs.append(link_action_input) - - cc_compilation_context = cc_common.merge_compilation_contexts( - compilation_contexts = [arc_compilation_context, non_arc_compilation_context], - ) - - precompiled_compilation_outputs = cc_common.create_compilation_outputs( - pic_objects = depset(pic_objects), - objects = depset(objects), - ) - - compilation_outputs = cc_common.merge_compilation_outputs( - compilation_outputs = [ - precompiled_compilation_outputs, - arc_compilation_outputs, - non_arc_compilation_outputs, - ], - ) - - cc_common.create_linking_context_from_compilation_outputs( - actions = ctx.actions, - feature_configuration = feature_configuration, - cc_toolchain = common_variables.toolchain, - compilation_outputs = compilation_outputs, - linking_contexts = cc_helper.get_linking_contexts_from_deps(common_variables.ctx.attr.deps), - name = common_variables.ctx.label.name + intermediate_artifacts.archive_file_name_suffix, - language = language, - disallow_dynamic_library = True, - additional_inputs = additional_inputs, - grep_includes = ctx.executable._grep_includes, - variables_extension = non_arc_extensions, - ) - - arc_output_groups = cc_helper.build_output_groups_for_emitting_compile_providers( - arc_compilation_outputs, - arc_compilation_context, - ctx.fragments.cpp, - common_variables.toolchain, - feature_configuration, - ctx, - True, - ) - non_arc_output_groups = cc_helper.build_output_groups_for_emitting_compile_providers( - non_arc_compilation_outputs, - non_arc_compilation_context, - ctx.fragments.cpp, - common_variables.toolchain, - feature_configuration, - ctx, - True, - ) - - merged_output_groups = cc_helper.merge_output_groups( - [arc_output_groups, non_arc_output_groups], - ) - - return (cc_compilation_context, compilation_outputs, OutputGroupInfo(**merged_output_groups)) - -def _get_object_files(ctx): - if not hasattr(ctx.attr, "srcs"): - return ([], []) - - pic_objects = [] - for src in ctx.files.srcs: - path = src.path - if path.endswith(".pic.o") or path.endswith(".o") and not path.endswith(".nopic.o"): - pic_objects.append(src) - - objects = [] - for src in ctx.files.srcs: - path = src.path - if path.endswith(".o") and not path.endswith(".pic.o"): - objects.append(src) - - return (objects, pic_objects) - -def _get_pch_file(common_variables): - if not common_variables.use_pch: - return None - - pch_hdr = None - if hasattr(common_variables.ctx.attr, "pch"): - pch_hdr = common_variables.ctx.file.pch - - return pch_hdr - -def _get_purpose(common_variables): - suffix = common_variables.intermediate_artifacts.archive_file_name_suffix - config = common_variables.ctx.bin_dir.path.split("/")[1] - return "Objc_build_arch_" + config + "_with_suffix_" + suffix - -def _generate_extra_module_map( - common_variables, - module_map, - public_hdrs, - private_hdrs, - textual_hdrs, - pch_header, - compilation_contexts, - feature_configuration): - purpose = "%s_extra_module_map".format(_get_purpose(common_variables)) - all_textual_hdrs = [] - all_textual_hdrs.extend(textual_hdrs) - if pch_header != None: - all_textual_hdrs.append(pch_header) - cc_common.compile( - actions = common_variables.ctx.actions, - feature_configuration = feature_configuration, - cc_toolchain = common_variables.toolchain, - public_hdrs = public_hdrs, - textual_hdrs = textual_hdrs, - private_hdrs = private_hdrs, - compilation_contexts = compilation_contexts, - module_map = module_map, - purpose = purpose, - name = common_variables.ctx.label.name, - grep_includes = common_variables.ctx.executable._grep_includes, - ) - -compilation_support = struct( - register_compile_and_archive_actions = _register_compile_and_archive_actions, - build_common_variables = _build_common_variables, - build_feature_configuration = _build_feature_configuration, - validate_attributes = _validate_attributes, -)
diff --git a/src/main/starlark/builtins_bzl/common/objc/objc_library.bzl b/src/main/starlark/builtins_bzl/common/objc/objc_library.bzl index d647d0d..574556f 100644 --- a/src/main/starlark/builtins_bzl/common/objc/objc_library.bzl +++ b/src/main/starlark/builtins_bzl/common/objc/objc_library.bzl
@@ -15,15 +15,12 @@ """objc_library Starlark implementation replacing native""" load("@_builtins//:common/objc/semantics.bzl", "semantics") -load("@_builtins//:common/objc/compilation_support.bzl", "compilation_support") load("@_builtins//:common/objc/attrs.bzl", "common_attrs") -load("@_builtins//:common/cc/cc_helper.bzl", "cc_helper") objc_internal = _builtins.internal.objc_internal CcInfo = _builtins.toplevel.CcInfo cc_common = _builtins.toplevel.cc_common transition = _builtins.toplevel.transition -coverage_common = _builtins.toplevel.coverage_common def _rule_error(msg): fail(msg) @@ -35,10 +32,27 @@ if ctx.label.name.find("/") != -1: _attribute_error("name", "this attribute has unsupported character '/'") -def _build_linking_context(ctx, feature_configuration, cc_toolchain, objc_provider, common_variables): +def _create_common(ctx): + compilation_attributes = objc_internal.create_compilation_attributes(ctx = ctx) + intermediate_artifacts = objc_internal.create_intermediate_artifacts(ctx = ctx) + compilation_artifacts = objc_internal.create_compilation_artifacts(ctx = ctx) + common = objc_internal.create_common( + purpose = "COMPILE_AND_LINK", + ctx = ctx, + compilation_attributes = compilation_attributes, + compilation_artifacts = compilation_artifacts, + deps = ctx.attr.deps, + runtime_deps = ctx.attr.runtime_deps, + intermediate_artifacts = intermediate_artifacts, + alwayslink = ctx.attr.alwayslink, + has_module_map = True, + ) + return (common, compilation_artifacts) + +def _build_linking_context(ctx, feature_configuration, cc_toolchain, objc_provider, compilation_artifacts, compilation_attributes): libraries = [] - if common_variables.compilation_artifacts.archive != None: - library_to_link = _static_library(ctx, feature_configuration, cc_toolchain, common_variables.compilation_artifacts.archive) + if compilation_artifacts.archive != None: + library_to_link = _static_library(ctx, feature_configuration, cc_toolchain, compilation_artifacts.archive) libraries.append(library_to_link) libraries.extend(objc_provider.cc_library.to_list()) @@ -102,56 +116,39 @@ def _objc_library_impl(ctx): _validate_attributes(ctx) - - cc_toolchain = cc_helper.find_cpp_toolchain(ctx) - - (objc_common, common_variables) = compilation_support.build_common_variables( - ctx, - cc_toolchain, - True, - False, - False, - False, - ctx.attr.deps, - ctx.attr.runtime_deps, - [], - ) + (common, compilation_artifacts) = _create_common(ctx) files = [] - if objc_common.compiled_archive != None: - files.append(objc_common.compiled_archive) - - (cc_compilation_context, compilation_outputs, output_group_info) = compilation_support.register_compile_and_archive_actions( - common_variables, - [], - [], + if common.compiled_archive != None: + files.append(common.compiled_archive) + compilation_attributes = objc_internal.create_compilation_attributes(ctx = ctx) + compilation_support = objc_internal.create_compilation_support( + ctx = ctx, + semantics = semantics.get_semantics(), + compilation_attributes = compilation_attributes, ) - compilation_support.validate_attributes(common_variables) + compilation_support.register_compile_and_archive_actions(common = common) + compilation_support.validate_attributes() j2objc_providers = objc_internal.j2objc_providers_from_deps(ctx = ctx) - objc_provider = objc_common.objc_provider - feature_configuration = compilation_support.build_feature_configuration(common_variables, False, True) - linking_context = _build_linking_context(ctx, feature_configuration, cc_toolchain, objc_provider, common_variables) + objc_provider = common.objc_provider + feature_configuration = compilation_support.feature_configuration + cc_toolchain = compilation_support.cc_toolchain + linking_context = _build_linking_context(ctx, feature_configuration, cc_toolchain, objc_provider, compilation_artifacts, compilation_attributes) cc_info = CcInfo( - compilation_context = cc_compilation_context, + compilation_context = compilation_support.compilation_context, linking_context = linking_context, ) - instrumented_files_info = coverage_common.instrumented_files_info( - ctx = ctx, - source_attributes = ["srcs", "non_arc_srcs", "hdrs"], - dependency_attributes = ["deps", "data", "binary", "xctest_app"], - ) - return [ DefaultInfo(files = depset(files), data_runfiles = ctx.runfiles(files = files)), cc_info, - objc_provider, + common.objc_provider, j2objc_providers[0], j2objc_providers[1], - instrumented_files_info, - output_group_info, + compilation_support.instrumented_files_info, + compilation_support.output_group_info, ] def _cpu_string(platform_type, settings):