Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions cc/common/cc_helper_internal.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -180,9 +180,7 @@ _artifact_categories = [
_ArtifactCategoryInfo("SERIALIZED_DIAGNOSTICS_FILE", "", ".dia"),
_ArtifactCategoryInfo("OBJECT_FILE", "", ".o", ".obj"),
_ArtifactCategoryInfo("PIC_OBJECT_FILE", "", ".pic.o"),
_ArtifactCategoryInfo("CPP_MODULE", "", ".pcm"),
_ArtifactCategoryInfo("CPP_MODULE_GCM", "", ".gcm"),
_ArtifactCategoryInfo("CPP_MODULE_IFC", "", ".ifc"),
_ArtifactCategoryInfo("CPP_MODULE", "", ".pcm", ".gcm", ".ifc"),
_ArtifactCategoryInfo("CPP_MODULES_INFO", "", ".CXXModules.json"),
_ArtifactCategoryInfo("CPP_MODULES_DDI", "", ".ddi"),
_ArtifactCategoryInfo("CPP_MODULES_MODMAP", "", ".modmap"),
Expand Down
32 changes: 30 additions & 2 deletions cc/private/cc_info.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,10 @@ CcCompilationContextInfo = provider(
"_transitive_pic_modules": "Internal",
"_module_map": "Internal",
"_virtual_to_original_headers": "Internal",
"_modules_info_files": "Internal",
"_pic_modules_info_files": "Internal",
"_module_files": "Internal",
"_pic_module_files": "Internal",
# duplicated HeaderInfo fields
"direct_headers": "Returns the list of modular headers that are declared by this target. " +
"This includes both public headers (such as those listed in \"hdrs\") " +
Expand Down Expand Up @@ -122,6 +126,10 @@ EMPTY_COMPILATION_CONTEXT = CcCompilationContextInfo(
_transitive_modules = depset(),
_transitive_pic_modules = depset(),
_direct_module_maps = depset(),
_modules_info_files = depset(),
_pic_modules_info_files = depset(),
_module_files = depset(),
_pic_module_files = depset(),
_header_info = _cc_internal.create_header_info(),
)

Expand Down Expand Up @@ -366,6 +374,10 @@ def create_compilation_context(
_transitive_pic_modules = depset(),
_direct_module_maps = depset(),
_header_info = header_info,
_modules_info_files = depset(),
_pic_modules_info_files = depset(),
_module_files = depset(),
_pic_module_files = depset(),
)

return _merge_compilation_contexts(
Expand Down Expand Up @@ -485,6 +497,18 @@ def _merge_compilation_contexts(*, compilation_context = EMPTY_COMPILATION_CONTE
transitive_pic_modules_artifacts,
transitive = [dep._transitive_pic_modules for dep in all_deps],
),
_modules_info_files = depset(
transitive = [compilation_context._modules_info_files] + [dep._modules_info_files for dep in all_deps],
),
_pic_modules_info_files = depset(
transitive = [compilation_context._pic_modules_info_files] + [dep._pic_modules_info_files for dep in all_deps],
),
_module_files = depset(
transitive = [compilation_context._module_files] + [dep._module_files for dep in all_deps],
),
_pic_module_files = depset(
transitive = [compilation_context._pic_module_files] + [dep._pic_module_files for dep in all_deps],
),
)

def merge_compilation_contexts(*, compilation_contexts = []):
Expand Down Expand Up @@ -536,6 +560,10 @@ def create_compilation_context_with_extra_header_tokens(
_transitive_pic_modules = cc_compilation_context._transitive_pic_modules,
_direct_module_maps = cc_compilation_context._direct_module_maps,
_header_info = cc_compilation_context._header_info,
_modules_info_files = cc_compilation_context._modules_info_files,
_pic_modules_info_files = cc_compilation_context._pic_modules_info_files,
_module_files = cc_compilation_context._module_files,
_pic_module_files = cc_compilation_context._pic_module_files,
)

def create_cc_compilation_context_with_cpp20_modules(
Expand Down Expand Up @@ -583,8 +611,8 @@ def create_cc_compilation_context_with_cpp20_modules(
_header_info = cc_compilation_context._header_info,
_module_files = depset(cpp_module_files, transitive = [cc_compilation_context._module_files]),
_pic_module_files = depset(pic_cpp_module_files, transitive = [cc_compilation_context._pic_module_files]),
_module_info_files = depset(cpp_modules_info_file, transitive = [cc_compilation_context._module_info_files]),
_pic_module_info_files = depset(pic_cpp_modules_info_file, transitive = [cc_compilation_context._pic_module_info_files]),
_modules_info_files = depset([cpp_modules_info_file], transitive = [cc_compilation_context._modules_info_files]),
_pic_modules_info_files = depset([pic_cpp_modules_info_file], transitive = [cc_compilation_context._pic_modules_info_files]),
)

def merge_cc_infos(*, direct_cc_infos = [], cc_infos = []):
Expand Down
30 changes: 13 additions & 17 deletions cc/private/compile/compile.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,12 @@ load(
artifact_category = "artifact_category_names",
)
load("//cc/common:semantics.bzl", _starlark_cc_semantics = "semantics")
load("//cc/private:cc_info.bzl", "create_compilation_context_with_extra_header_tokens", "create_separate_module_map")
load(
"//cc/private:cc_info.bzl",
"create_cc_compilation_context_with_cpp20_modules",
"create_compilation_context_with_extra_header_tokens",
"create_separate_module_map",
)
load("//cc/private:cc_internal.bzl", _cc_internal = "cc_internal")
load("//cc/private/compile:cc_compilation_helper.bzl", "cc_compilation_helper", "dotd_files_enabled", "serialized_diagnostics_file_enabled")
load("//cc/private/compile:cc_compilation_outputs.bzl", "create_compilation_outputs_internal")
Expand All @@ -43,7 +48,6 @@ load(
"setup_common_compile_build_variables",
)
load("//cc/private/compile:lto_compilation_context.bzl", "create_lto_compilation_context")
load("//cc/private/rules_impl:native.bzl", _cc_common_internal = "native_cc_common")

_VALID_CPP_SOURCE_TYPES = set([CPP_SOURCE_TYPE_SOURCE, CPP_SOURCE_TYPE_HEADER, CPP_SOURCE_TYPE_CLIF_INPUT_PROTO])

Expand Down Expand Up @@ -390,7 +394,7 @@ def compile(
)
compilation_outputs = create_compilation_outputs_internal(**compilation_outputs_dict)
if feature_configuration.is_enabled("cpp_modules"):
public_compilation_context = _cc_internal.create_cc_compilation_context_with_cpp20_modules(
public_compilation_context = create_cc_compilation_context_with_cpp20_modules(
cc_compilation_context = public_compilation_context,
cpp_module_files = compilation_outputs.cpp_module_files,
pic_cpp_module_files = compilation_outputs.pic_cpp_module_files,
Expand Down Expand Up @@ -520,15 +524,14 @@ def _create_scan_deps_action(
label,
common_toolchain_variables,
language,
native_cc_semantics,
source_artifact,
source_label,
use_pic,
ddi_file,
ddi_output_name):
dotd_file = None
if (
dotd_files_enabled(native_cc_semantics, configuration, feature_configuration) and
dotd_files_enabled(language, cpp_configuration, feature_configuration) and
_use_dotd_file(feature_configuration, source_artifact)
):
dotd_file = _get_compile_output_file(
Expand Down Expand Up @@ -563,20 +566,20 @@ def _create_scan_deps_action(
common_toolchain_variables,
specific_compile_build_variables,
)
_cc_internal.create_cpp_compile_action(
_cc_internal.create_cc_compile_action(
action_construction_context = action_construction_context,
cc_compilation_context = cc_compilation_context,
cc_toolchain = cc_toolchain,
configuration = configuration,
copts_filter = copts_filter,
feature_configuration = feature_configuration,
cpp_semantics = native_cc_semantics,
source_artifact = source_artifact,
source = source_artifact,
additional_compilation_inputs = additional_compilation_inputs,
output_file = ddi_file,
dotd_file = dotd_file,
compile_build_variables = compile_variables,
action_name = ACTION_NAMES.cpp_module_deps_scanning,
toolchain_type = _starlark_cc_semantics.toolchain,
)

def _create_aggregate_ddi_action(
Expand Down Expand Up @@ -683,7 +686,6 @@ def _create_cc_compile_actions_with_cpp20_module_helper(
else:
outputs["cpp_modules_info_file"] = modules_info_file

native_cc_semantics = _cc_common_internal.get_cpp_semantics(language = language)
for cpp_source in module_interfaces_sources.values():
source_artifact = cpp_source.file
output_name = output_name_map[source_artifact]
Expand Down Expand Up @@ -741,7 +743,6 @@ def _create_cc_compile_actions_with_cpp20_module_helper(
label = label,
common_toolchain_variables = common_compile_build_variables,
language = language,
native_cc_semantics = native_cc_semantics,
source_artifact = source_artifact,
source_label = source_label,
use_pic = use_pic,
Expand Down Expand Up @@ -825,7 +826,6 @@ def _create_cc_compile_actions_with_cpp20_module_helper(
feature_configuration = feature_configuration,
configuration = configuration,
cpp_configuration = cpp_configuration,
cpp_semantics = native_cc_semantics,
language = language,
conlyopts = conlyopts,
copts = copts,
Expand Down Expand Up @@ -925,7 +925,6 @@ def _create_cc_compile_actions_with_cpp20_module_helper(
label = label,
common_toolchain_variables = common_compile_build_variables,
language = language,
native_cc_semantics = native_cc_semantics,
source_artifact = source_artifact,
source_label = source_label,
use_pic = use_pic,
Expand Down Expand Up @@ -974,7 +973,6 @@ def _create_cc_compile_actions_with_cpp20_module_helper(
feature_configuration = feature_configuration,
configuration = configuration,
cpp_configuration = cpp_configuration,
cpp_semantics = native_cc_semantics,
language = language,
conlyopts = conlyopts,
copts = copts,
Expand Down Expand Up @@ -1541,11 +1539,9 @@ def _create_compile_source_action(
category = artifact_category.PIC_FILE,
output_name = output_name,
)
cpp20_module_compile_enabled = False
if not action_name:
if output_category == artifact_category.CPP_MODULE:
action_name = "c++-module-compile"
cpp20_module_compile_enabled = True
else:
ext = "." + source_artifact.extension
if ext in extensions.C_SOURCE:
Expand Down Expand Up @@ -1685,8 +1681,8 @@ def _create_compile_source_action(
if add_object and fdo_context_has_artifacts:
additional_inputs = additional_compilation_inputs + auxiliary_fdo_inputs.to_list()

# Until a new enough Bazel supports C++20 Modules, these argument names are invalid.
if cpp20_module_compile_enabled:
# Provide these args conditionally as they require a recent version of Bazel.
if modmap_file:
module_args = {
"additional_outputs": additional_outputs,
"module_files": module_files,
Expand Down