Rename impl:$MODULE to $MODULE_Private. The latter is specifically hardcoded to be treated as a private module by clang. Change-Id: I6990356d8d318f42b6a266eb088273496a6a6964 Reviewed-on: https://gn-review.googlesource.com/c/gn/+/21941 Reviewed-by: Takuto Ikuta <tikuta@google.com> Commit-Queue: Matt Stark <msta@google.com>
diff --git a/src/gn/ninja_binary_target_writer.cc b/src/gn/ninja_binary_target_writer.cc index b93bd28..163141b 100644 --- a/src/gn/ninja_binary_target_writer.cc +++ b/src/gn/ninja_binary_target_writer.cc
@@ -135,7 +135,10 @@ const SourceDir& out_dir) { auto base = target_->modulemap_file()->GetDir(); auto module_name = target_->module_name(); - out << "module \"impl:" << module_name << "\" {\n"; + // Though it's not documented, clang special-cases modules suffixed with + // _Private. Private and public in the context of clang means basically the + // same thing as in the context of GN. + out << "module \"" << module_name << "_Private\" {\n"; if (!target_->all_headers_public()) { WriteModuleMapHeaders(out, out_dir, target_->sources(), settings_); }
diff --git a/src/gn/ninja_c_binary_target_writer_unittest.cc b/src/gn/ninja_c_binary_target_writer_unittest.cc index 623098a..81fb1ed 100644 --- a/src/gn/ninja_c_binary_target_writer_unittest.cc +++ b/src/gn/ninja_c_binary_target_writer_unittest.cc
@@ -3127,7 +3127,7 @@ .WritePrivateModuleMap(private_modulemap, out_dir); const char expected_private[] = - "module \"impl://foo:root\" {\n" + "module \"//foo:root_Private\" {\n" " textual header \"../../../foo/private_header.h\"\n" " extern module \"//foo:root\" \"root.modulemap\"\n" " use \"//foo:root\"\n"
diff --git a/src/gn/ninja_module_writer_util.cc b/src/gn/ninja_module_writer_util.cc index cfadb25..5190d4a 100644 --- a/src/gn/ninja_module_writer_util.cc +++ b/src/gn/ninja_module_writer_util.cc
@@ -78,7 +78,7 @@ if (has_generated_modulemap) { // Add the private modulemap as a dependency. ret.emplace(target->private_modulemap_file(), - base::StringPrintf("impl:%s", target->module_name().c_str()), + base::StringPrintf("%s_Private", target->module_name().c_str()), std::nullopt, true); } else { add_if_new(target, true, has_generated_modulemap);