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