Skip to content

Commit a8f6a92

Browse files
fmeumcopybara-github
authored andcommitted
Fix C++20 module compilation
The merge of C++20 module support in 5c3e987 wasn't covered by tests and requires a number of fixes so that the test case in Bazel's `cc_integration_test` can pass. Closes #511 COPYBARA_INTEGRATE_REVIEW=#511 from fmeum:c++20-modules 716b9be PiperOrigin-RevId: 827424640 Change-Id: Iff433f2a9ec0b8ad9585805f7df7a86297731b92
1 parent 5c3e987 commit a8f6a92

File tree

3 files changed

+46
-39
lines changed

3 files changed

+46
-39
lines changed

cc/common/cc_helper_internal.bzl

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -180,9 +180,7 @@ _artifact_categories = [
180180
_ArtifactCategoryInfo("SERIALIZED_DIAGNOSTICS_FILE", "", ".dia"),
181181
_ArtifactCategoryInfo("OBJECT_FILE", "", ".o", ".obj"),
182182
_ArtifactCategoryInfo("PIC_OBJECT_FILE", "", ".pic.o"),
183-
_ArtifactCategoryInfo("CPP_MODULE", "", ".pcm"),
184-
_ArtifactCategoryInfo("CPP_MODULE_GCM", "", ".gcm"),
185-
_ArtifactCategoryInfo("CPP_MODULE_IFC", "", ".ifc"),
183+
_ArtifactCategoryInfo("CPP_MODULE", "", ".pcm", ".gcm", ".ifc"),
186184
_ArtifactCategoryInfo("CPP_MODULES_INFO", "", ".CXXModules.json"),
187185
_ArtifactCategoryInfo("CPP_MODULES_DDI", "", ".ddi"),
188186
_ArtifactCategoryInfo("CPP_MODULES_MODMAP", "", ".modmap"),

cc/private/cc_info.bzl

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,10 @@ CcCompilationContextInfo = provider(
5454
"_transitive_pic_modules": "Internal",
5555
"_module_map": "Internal",
5656
"_virtual_to_original_headers": "Internal",
57+
"_modules_info_files": "Internal",
58+
"_pic_modules_info_files": "Internal",
59+
"_module_files": "Internal",
60+
"_pic_module_files": "Internal",
5761
# duplicated HeaderInfo fields
5862
"direct_headers": "Returns the list of modular headers that are declared by this target. " +
5963
"This includes both public headers (such as those listed in \"hdrs\") " +
@@ -122,6 +126,10 @@ EMPTY_COMPILATION_CONTEXT = CcCompilationContextInfo(
122126
_transitive_modules = depset(),
123127
_transitive_pic_modules = depset(),
124128
_direct_module_maps = depset(),
129+
_modules_info_files = depset(),
130+
_pic_modules_info_files = depset(),
131+
_module_files = depset(),
132+
_pic_module_files = depset(),
125133
_header_info = _cc_internal.create_header_info(),
126134
)
127135

@@ -366,6 +374,10 @@ def create_compilation_context(
366374
_transitive_pic_modules = depset(),
367375
_direct_module_maps = depset(),
368376
_header_info = header_info,
377+
_modules_info_files = depset(),
378+
_pic_modules_info_files = depset(),
379+
_module_files = depset(),
380+
_pic_module_files = depset(),
369381
)
370382

371383
return _merge_compilation_contexts(
@@ -485,6 +497,18 @@ def _merge_compilation_contexts(*, compilation_context = EMPTY_COMPILATION_CONTE
485497
transitive_pic_modules_artifacts,
486498
transitive = [dep._transitive_pic_modules for dep in all_deps],
487499
),
500+
_modules_info_files = depset(
501+
transitive = [compilation_context._modules_info_files] + [dep._modules_info_files for dep in all_deps],
502+
),
503+
_pic_modules_info_files = depset(
504+
transitive = [compilation_context._pic_modules_info_files] + [dep._pic_modules_info_files for dep in all_deps],
505+
),
506+
_module_files = depset(
507+
transitive = [compilation_context._module_files] + [dep._module_files for dep in all_deps],
508+
),
509+
_pic_module_files = depset(
510+
transitive = [compilation_context._pic_module_files] + [dep._pic_module_files for dep in all_deps],
511+
),
488512
)
489513

490514
def merge_compilation_contexts(*, compilation_contexts = []):
@@ -536,6 +560,10 @@ def create_compilation_context_with_extra_header_tokens(
536560
_transitive_pic_modules = cc_compilation_context._transitive_pic_modules,
537561
_direct_module_maps = cc_compilation_context._direct_module_maps,
538562
_header_info = cc_compilation_context._header_info,
563+
_modules_info_files = cc_compilation_context._modules_info_files,
564+
_pic_modules_info_files = cc_compilation_context._pic_modules_info_files,
565+
_module_files = cc_compilation_context._module_files,
566+
_pic_module_files = cc_compilation_context._pic_module_files,
539567
)
540568

541569
def create_cc_compilation_context_with_cpp20_modules(
@@ -583,8 +611,8 @@ def create_cc_compilation_context_with_cpp20_modules(
583611
_header_info = cc_compilation_context._header_info,
584612
_module_files = depset(cpp_module_files, transitive = [cc_compilation_context._module_files]),
585613
_pic_module_files = depset(pic_cpp_module_files, transitive = [cc_compilation_context._pic_module_files]),
586-
_module_info_files = depset(cpp_modules_info_file, transitive = [cc_compilation_context._module_info_files]),
587-
_pic_module_info_files = depset(pic_cpp_modules_info_file, transitive = [cc_compilation_context._pic_module_info_files]),
614+
_modules_info_files = depset([cpp_modules_info_file], transitive = [cc_compilation_context._modules_info_files]),
615+
_pic_modules_info_files = depset([pic_cpp_modules_info_file], transitive = [cc_compilation_context._pic_modules_info_files]),
588616
)
589617

590618
def merge_cc_infos(*, direct_cc_infos = [], cc_infos = []):

cc/private/compile/compile.bzl

Lines changed: 15 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,12 @@ load(
3030
artifact_category = "artifact_category_names",
3131
)
3232
load("//cc/common:semantics.bzl", _starlark_cc_semantics = "semantics")
33-
load("//cc/private:cc_info.bzl", "create_compilation_context_with_extra_header_tokens", "create_separate_module_map")
33+
load(
34+
"//cc/private:cc_info.bzl",
35+
"create_cc_compilation_context_with_cpp20_modules",
36+
"create_compilation_context_with_extra_header_tokens",
37+
"create_separate_module_map",
38+
)
3439
load("//cc/private:cc_internal.bzl", _cc_internal = "cc_internal")
3540
load("//cc/private/compile:cc_compilation_helper.bzl", "cc_compilation_helper", "dotd_files_enabled", "serialized_diagnostics_file_enabled")
3641
load("//cc/private/compile:cc_compilation_outputs.bzl", "create_compilation_outputs_internal")
@@ -43,7 +48,6 @@ load(
4348
"setup_common_compile_build_variables",
4449
)
4550
load("//cc/private/compile:lto_compilation_context.bzl", "create_lto_compilation_context")
46-
load("//cc/private/rules_impl:native.bzl", _cc_common_internal = "native_cc_common")
4751

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

@@ -390,7 +394,7 @@ def compile(
390394
)
391395
compilation_outputs = create_compilation_outputs_internal(**compilation_outputs_dict)
392396
if feature_configuration.is_enabled("cpp_modules"):
393-
public_compilation_context = _cc_internal.create_cc_compilation_context_with_cpp20_modules(
397+
public_compilation_context = create_cc_compilation_context_with_cpp20_modules(
394398
cc_compilation_context = public_compilation_context,
395399
cpp_module_files = compilation_outputs.cpp_module_files,
396400
pic_cpp_module_files = compilation_outputs.pic_cpp_module_files,
@@ -520,15 +524,14 @@ def _create_scan_deps_action(
520524
label,
521525
common_toolchain_variables,
522526
language,
523-
native_cc_semantics,
524527
source_artifact,
525528
source_label,
526529
use_pic,
527530
ddi_file,
528531
ddi_output_name):
529532
dotd_file = None
530533
if (
531-
dotd_files_enabled(native_cc_semantics, configuration, feature_configuration) and
534+
dotd_files_enabled(language, cpp_configuration, feature_configuration) and
532535
_use_dotd_file(feature_configuration, source_artifact)
533536
):
534537
dotd_file = _get_compile_output_file(
@@ -563,20 +566,20 @@ def _create_scan_deps_action(
563566
common_toolchain_variables,
564567
specific_compile_build_variables,
565568
)
566-
_cc_internal.create_cpp_compile_action(
569+
_cc_internal.create_cc_compile_action(
567570
action_construction_context = action_construction_context,
568571
cc_compilation_context = cc_compilation_context,
569572
cc_toolchain = cc_toolchain,
570573
configuration = configuration,
571574
copts_filter = copts_filter,
572575
feature_configuration = feature_configuration,
573-
cpp_semantics = native_cc_semantics,
574-
source_artifact = source_artifact,
576+
source = source_artifact,
575577
additional_compilation_inputs = additional_compilation_inputs,
576578
output_file = ddi_file,
577579
dotd_file = dotd_file,
578580
compile_build_variables = compile_variables,
579581
action_name = ACTION_NAMES.cpp_module_deps_scanning,
582+
toolchain_type = _starlark_cc_semantics.toolchain,
580583
)
581584

582585
def _create_aggregate_ddi_action(
@@ -683,7 +686,6 @@ def _create_cc_compile_actions_with_cpp20_module_helper(
683686
else:
684687
outputs["cpp_modules_info_file"] = modules_info_file
685688

686-
native_cc_semantics = _cc_common_internal.get_cpp_semantics(language = language)
687689
for cpp_source in module_interfaces_sources.values():
688690
source_artifact = cpp_source.file
689691
output_name = output_name_map[source_artifact]
@@ -741,7 +743,6 @@ def _create_cc_compile_actions_with_cpp20_module_helper(
741743
label = label,
742744
common_toolchain_variables = common_compile_build_variables,
743745
language = language,
744-
native_cc_semantics = native_cc_semantics,
745746
source_artifact = source_artifact,
746747
source_label = source_label,
747748
use_pic = use_pic,
@@ -825,7 +826,6 @@ def _create_cc_compile_actions_with_cpp20_module_helper(
825826
feature_configuration = feature_configuration,
826827
configuration = configuration,
827828
cpp_configuration = cpp_configuration,
828-
cpp_semantics = native_cc_semantics,
829829
language = language,
830830
conlyopts = conlyopts,
831831
copts = copts,
@@ -925,7 +925,6 @@ def _create_cc_compile_actions_with_cpp20_module_helper(
925925
label = label,
926926
common_toolchain_variables = common_compile_build_variables,
927927
language = language,
928-
native_cc_semantics = native_cc_semantics,
929928
source_artifact = source_artifact,
930929
source_label = source_label,
931930
use_pic = use_pic,
@@ -974,7 +973,6 @@ def _create_cc_compile_actions_with_cpp20_module_helper(
974973
feature_configuration = feature_configuration,
975974
configuration = configuration,
976975
cpp_configuration = cpp_configuration,
977-
cpp_semantics = native_cc_semantics,
978976
language = language,
979977
conlyopts = conlyopts,
980978
copts = copts,
@@ -1541,25 +1539,8 @@ def _create_compile_source_action(
15411539
category = artifact_category.PIC_FILE,
15421540
output_name = output_name,
15431541
)
1544-
cpp20_module_compile_enabled = False
1545-
if not action_name:
1546-
if output_category == artifact_category.CPP_MODULE:
1547-
action_name = "c++-module-compile"
1548-
cpp20_module_compile_enabled = True
1549-
else:
1550-
ext = "." + source_artifact.extension
1551-
if ext in extensions.C_SOURCE:
1552-
action_name = "c-compile"
1553-
elif ext in extensions.OBJC_SOURCE:
1554-
action_name = "objc-compile"
1555-
elif ext in extensions.OBJCPP_SOURCE:
1556-
action_name = "objc++-compile"
1557-
elif ext in extensions.ASSESMBLER_WITH_C_PREPROCESSOR:
1558-
action_name = "preprocess-assemble"
1559-
elif ext in extensions.ASSEMBLER:
1560-
action_name = "assemble"
1561-
else:
1562-
action_name = "c++-compile"
1542+
if not action_name and output_category == artifact_category.CPP_MODULE:
1543+
action_name = "c++-module-compile"
15631544

15641545
object_file = _get_compile_output_file(
15651546
ctx = action_construction_context,
@@ -1685,8 +1666,8 @@ def _create_compile_source_action(
16851666
if add_object and fdo_context_has_artifacts:
16861667
additional_inputs = additional_compilation_inputs + auxiliary_fdo_inputs.to_list()
16871668

1688-
# Until a new enough Bazel supports C++20 Modules, these argument names are invalid.
1689-
if cpp20_module_compile_enabled:
1669+
# Provide these args conditionally as they require a recent version of Bazel.
1670+
if modmap_file:
16901671
module_args = {
16911672
"additional_outputs": additional_outputs,
16921673
"module_files": module_files,

0 commit comments

Comments
 (0)