From 962309652423a31d328c735546de73e0ac82e556 Mon Sep 17 00:00:00 2001 From: Fabian Meumertzheim Date: Sat, 1 Nov 2025 06:34:34 +0100 Subject: [PATCH 1/3] Boring fixes --- cc/private/cc_info.bzl | 32 ++++++++++++++++++++++++++++++-- cc/private/compile/compile.bzl | 23 +++++++++++------------ 2 files changed, 41 insertions(+), 14 deletions(-) diff --git a/cc/private/cc_info.bzl b/cc/private/cc_info.bzl index 1703406d..5ab8d735 100644 --- a/cc/private/cc_info.bzl +++ b/cc/private/cc_info.bzl @@ -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\") " + @@ -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(), ) @@ -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( @@ -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 = []): @@ -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( @@ -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 = []): diff --git a/cc/private/compile/compile.bzl b/cc/private/compile/compile.bzl index 6ff55246..89f9b438 100644 --- a/cc/private/compile/compile.bzl +++ b/cc/private/compile/compile.bzl @@ -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") @@ -390,7 +395,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, @@ -520,7 +525,6 @@ def _create_scan_deps_action( label, common_toolchain_variables, language, - native_cc_semantics, source_artifact, source_label, use_pic, @@ -528,7 +532,7 @@ def _create_scan_deps_action( 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( @@ -563,20 +567,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( @@ -683,7 +687,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] @@ -741,7 +744,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, @@ -825,7 +827,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, @@ -925,7 +926,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, @@ -974,7 +974,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, From 716b9bea37fc6aead69cb6fb812826f192611d71 Mon Sep 17 00:00:00 2001 From: Fabian Meumertzheim Date: Sat, 1 Nov 2025 12:36:25 +0100 Subject: [PATCH 2/3] More interesting fixes --- cc/common/cc_helper_internal.bzl | 4 +--- cc/private/compile/compile.bzl | 7 ++----- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/cc/common/cc_helper_internal.bzl b/cc/common/cc_helper_internal.bzl index 968aac00..946b1606 100644 --- a/cc/common/cc_helper_internal.bzl +++ b/cc/common/cc_helper_internal.bzl @@ -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"), diff --git a/cc/private/compile/compile.bzl b/cc/private/compile/compile.bzl index 89f9b438..5b674768 100644 --- a/cc/private/compile/compile.bzl +++ b/cc/private/compile/compile.bzl @@ -48,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]) @@ -1540,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: @@ -1684,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, From 320b8b8185efc3f20ac27293aa2fa45114262177 Mon Sep 17 00:00:00 2001 From: Fabian Meumertzheim Date: Sat, 1 Nov 2025 13:43:58 +0100 Subject: [PATCH 3/3] Allow multiple module interfaces per target --- cc/private/compile/compile.bzl | 3 --- 1 file changed, 3 deletions(-) diff --git a/cc/private/compile/compile.bzl b/cc/private/compile/compile.bzl index 5b674768..492b0801 100644 --- a/cc/private/compile/compile.bzl +++ b/cc/private/compile/compile.bzl @@ -244,9 +244,6 @@ def compile( if module_interfaces and not feature_configuration.is_enabled("cpp_modules"): fail("to use C++20 Modules, the feature cpp_modules must be enabled") - if module_interfaces and len(module_interfaces) > 1: - fail("module_interfaces must be a list of files with exactly one file " + - "due to implementation limitation. see https://github.com/bazelbuild/bazel/pull/22553") language_normalized = "c++" if language == None else language language_normalized = language_normalized.replace("+", "p").upper()