Output -fmodule-map-file as well as -fmodule-file for module dependencies.

Whenever we currently use modules, we have to write:

source_set("foo_pcm") {
  sources = ["foo.modulemap"]
}

config("foo_config") {
  cflags = ["-fmodule-map-file=foo.modulemap"]
}

group("foo") {
  public_deps = [":foo_pcm"]
  public_configs = [":foo_config"]
}

Change-Id: Ic48090a3a6cc5aaadb5feb95716d57f06a6a6964
Reviewed-on: https://gn-review.googlesource.com/c/gn/+/21280
Reviewed-by: Takuto Ikuta <tikuta@google.com>
Commit-Queue: Matt Stark <msta@google.com>
diff --git a/src/gn/compile_commands_writer.cc b/src/gn/compile_commands_writer.cc
index 17c7f75..29d2a5a 100644
--- a/src/gn/compile_commands_writer.cc
+++ b/src/gn/compile_commands_writer.cc
@@ -115,6 +115,10 @@
     std::ostringstream module_deps_no_self_out;
     for (const auto& module_dep : module_dep_info) {
       if (!module_dep.is_self) {
+        if (module_dep.modulemap) {
+          module_deps_no_self_out << " -fmodule-map-file=";
+          path_output.WriteFile(module_deps_no_self_out, *module_dep.modulemap);
+        }
         module_deps_no_self_out << " -fmodule-file=" << module_dep.module_name
                                 << "=";
         path_output.WriteFile(module_deps_no_self_out, module_dep.pcm);
diff --git a/src/gn/ninja_c_binary_target_writer.cc b/src/gn/ninja_c_binary_target_writer.cc
index e4e3bbe..12bec83 100644
--- a/src/gn/ninja_c_binary_target_writer.cc
+++ b/src/gn/ninja_c_binary_target_writer.cc
@@ -213,6 +213,10 @@
     out_ << substitution->ninja_name << " =";
     for (const auto& module_dep : module_dep_info) {
       if (!module_dep.is_self || include_self) {
+        if (module_dep.modulemap) {
+          out_ << " -fmodule-map-file=";
+          path_output_.WriteFile(out_, *module_dep.modulemap);
+        }
         out_ << " ";
         EscapeStringToStream(out_, "-fmodule-file=", options);
         EscapeStringToStream(out_, module_dep.module_name, options);
diff --git a/src/gn/ninja_c_binary_target_writer_unittest.cc b/src/gn/ninja_c_binary_target_writer_unittest.cc
index 3ad3274..083b3b2 100644
--- a/src/gn/ninja_c_binary_target_writer_unittest.cc
+++ b/src/gn/ninja_c_binary_target_writer_unittest.cc
@@ -2586,7 +2586,7 @@
 cflags =
 cflags_cc =
 cc_module_name = blah_a
-module_deps = -fmodule-file=blah_a=obj/blah/liba.a.pcm
+module_deps = -fmodule-map-file=../../blah/a.modulemap -fmodule-file=blah_a=obj/blah/liba.a.pcm
 module_deps_no_self =
 root_out_dir = withmodules
 target_out_dir = obj/blah
@@ -2632,8 +2632,8 @@
 cflags =
 cflags_cc =
 cc_module_name = b
-module_deps = -fmodule-file=blah_a=obj/blah/liba.a.pcm -fmodule-file=b=obj/stuff/libb.b.pcm
-module_deps_no_self = -fmodule-file=blah_a=obj/blah/liba.a.pcm
+module_deps = -fmodule-map-file=../../blah/a.modulemap -fmodule-file=blah_a=obj/blah/liba.a.pcm -fmodule-map-file=../../stuff/b.modulemap -fmodule-file=b=obj/stuff/libb.b.pcm
+module_deps_no_self = -fmodule-map-file=../../blah/a.modulemap -fmodule-file=blah_a=obj/blah/liba.a.pcm
 root_out_dir = withmodules
 target_out_dir = obj/stuff
 target_output_name = libb
@@ -2676,8 +2676,8 @@
 cflags =
 cflags_cc =
 cc_module_name = c
-module_deps = -fmodule-file=blah_a=obj/blah/liba.a.pcm -fmodule-file=b=obj/stuff/libb.b.pcm -fmodule-file=c=obj/stuff/libc.c.pcm
-module_deps_no_self = -fmodule-file=blah_a=obj/blah/liba.a.pcm -fmodule-file=b=obj/stuff/libb.b.pcm
+module_deps = -fmodule-map-file=../../blah/a.modulemap -fmodule-file=blah_a=obj/blah/liba.a.pcm -fmodule-map-file=../../stuff/b.modulemap -fmodule-file=b=obj/stuff/libb.b.pcm -fmodule-map-file=../../stuff/c.modulemap -fmodule-file=c=obj/stuff/libc.c.pcm
+module_deps_no_self = -fmodule-map-file=../../blah/a.modulemap -fmodule-file=blah_a=obj/blah/liba.a.pcm -fmodule-map-file=../../stuff/b.modulemap -fmodule-file=b=obj/stuff/libb.b.pcm
 root_out_dir = withmodules
 target_out_dir = obj/things
 target_output_name = libc
@@ -2716,8 +2716,8 @@
 cflags =
 cflags_cc =
 cc_module_name = c
-module_deps = -fmodule-file=blah_a=obj/blah/liba.a.pcm -fmodule-file=b=obj/stuff/libb.b.pcm
-module_deps_no_self = -fmodule-file=blah_a=obj/blah/liba.a.pcm -fmodule-file=b=obj/stuff/libb.b.pcm
+module_deps = -fmodule-map-file=../../blah/a.modulemap -fmodule-file=blah_a=obj/blah/liba.a.pcm -fmodule-map-file=../../stuff/b.modulemap -fmodule-file=b=obj/stuff/libb.b.pcm
+module_deps_no_self = -fmodule-map-file=../../blah/a.modulemap -fmodule-file=blah_a=obj/blah/liba.a.pcm -fmodule-map-file=../../stuff/b.modulemap -fmodule-file=b=obj/stuff/libb.b.pcm
 root_out_dir = withmodules
 target_out_dir = obj/zap
 target_output_name = c