Disable use_libcxx_modules for the transitive rdeps of common_config.

The dxc_module template defines common_config in `public_configs`. This means that anything that transitively depends on :common_config cannot use libcxx_modules.

It is currently configured to compile the libraries correctly, but cannot compile the executable targets that depend on them correctly.

Bug: 425537956
Change-Id: If2d1ad66a100c02af6be0f785b051f0bfe1497d2
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/258434
Commit-Queue: James Price <jrprice@google.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: James Price <jrprice@google.com>
diff --git a/third_party/gn/dxc/BUILD.gn b/third_party/gn/dxc/BUILD.gn
index c35731c..f503eeb 100644
--- a/third_party/gn/dxc/BUILD.gn
+++ b/third_party/gn/dxc/BUILD.gn
@@ -463,6 +463,13 @@
 ## Common config shared by all targets
 #######################################################################
 
+# `:common_config` sets exceptions and RTTI and that is incompatible with
+# libc++ clang modules.
+# Unfortunately, we cannot set use_libcxx_modules = false in a config target,
+# so it can't propogate to transitive dependencies - we have to do this
+# manually.
+use_libcxx_modules = false
+
 config("common_config") {
   warning_flags = []
   if (is_clang) {
@@ -589,9 +596,7 @@
       configs -= [ "//build/config/compiler:chromium_code" ]
       configs += [ "//build/config/compiler:no_chromium_code" ]
 
-      # `:common_config` sets exceptions and RTTI and that is incompatible with
-      # libc++ clang modules.
-      use_libcxx_modules = false
+      use_libcxx_modules = use_libcxx_modules
     }
     if (is_win) {
       # DXC is built with multibyte character set, so it expects Win32 functions to map the ANSI ones, not the UNICODE ones.
@@ -739,6 +744,10 @@
 source_set("TableGen") {
   public_deps = [ ":Support" ]
 
+  if (dawn_has_build) {
+    use_libcxx_modules = use_libcxx_modules
+  }
+
   sources = [
     "$dawn_dxc_dir/lib/TableGen/Error.cpp",
     "$dawn_dxc_dir/lib/TableGen/Main.cpp",
@@ -754,6 +763,10 @@
 executable("llvm-tblgen") {
   deps = [ ":TableGen" ]
 
+  if (dawn_has_build) {
+    use_libcxx_modules = use_libcxx_modules
+  }
+
   sources = [
     "$dawn_dxc_dir/utils/TableGen/AsmMatcherEmitter.cpp",
     "$dawn_dxc_dir/utils/TableGen/AsmWriterEmitter.cpp",
@@ -789,6 +802,10 @@
 executable("clang-tblgen") {
   deps = [ ":TableGen" ]
 
+  if (dawn_has_build) {
+    use_libcxx_modules = use_libcxx_modules
+  }
+
   sources = [
     "$dawn_dxc_dir/tools/clang/utils/TableGen/ClangASTNodesEmitter.cpp",
     "$dawn_dxc_dir/tools/clang/utils/TableGen/ClangAttrEmitter.cpp",
@@ -2392,6 +2409,8 @@
   if (dawn_has_build) {
     configs -= [ "//build/config/compiler:chromium_code" ]
     configs += [ "//build/config/compiler:no_chromium_code" ]
+
+    use_libcxx_modules = use_libcxx_modules
   }
 
   if (is_win) {