Add GN build option to build using generated files.

This CL hooks the generated files into the GN build
behind a `tint_build_use_generator` flag.

Change-Id: I4926b2c9c1a349f26be8a1f8a4508e1e31dab813
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/108041
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Ben Clayton <bclayton@chromium.org>
Commit-Queue: Dan Sinclair <dsinclair@chromium.org>
diff --git a/src/tint/BUILD.gn b/src/tint/BUILD.gn
index 54baaad..a7c7d1f 100644
--- a/src/tint/BUILD.gn
+++ b/src/tint/BUILD.gn
@@ -177,10 +177,6 @@
 
 libtint_source_set("libtint_core_all_src") {
   sources = [
-    "ast/access.cc",
-    "ast/access.h",
-    "ast/address_space.cc",
-    "ast/address_space.h",
     "ast/alias.cc",
     "ast/alias.h",
     "ast/array.cc",
@@ -210,8 +206,6 @@
     "ast/break_statement.h",
     "ast/builtin_attribute.cc",
     "ast/builtin_attribute.h",
-    "ast/builtin_value.cc",
-    "ast/builtin_value.h",
     "ast/call_expression.cc",
     "ast/call_expression.h",
     "ast/call_statement.cc",
@@ -238,8 +232,6 @@
     "ast/enable.h",
     "ast/expression.cc",
     "ast/expression.h",
-    "ast/extension.cc",
-    "ast/extension.h",
     "ast/external_texture.cc",
     "ast/external_texture.h",
     "ast/f16.cc",
@@ -272,8 +264,6 @@
     "ast/int_literal_expression.h",
     "ast/internal_attribute.cc",
     "ast/internal_attribute.h",
-    "ast/interpolate_attribute.cc",
-    "ast/interpolate_attribute.h",
     "ast/invariant_attribute.cc",
     "ast/invariant_attribute.h",
     "ast/let.cc",
@@ -333,8 +323,6 @@
     "ast/struct_member_size_attribute.h",
     "ast/switch_statement.cc",
     "ast/switch_statement.h",
-    "ast/texel_format.cc",
-    "ast/texel_format.h",
     "ast/texture.cc",
     "ast/texture.h",
     "ast/traverse_expressions.h",
@@ -400,11 +388,8 @@
     "resolver/const_eval.h",
     "resolver/dependency_graph.cc",
     "resolver/dependency_graph.h",
-    "resolver/init_conv_intrinsic.cc",
-    "resolver/init_conv_intrinsic.h",
     "resolver/intrinsic_table.cc",
     "resolver/intrinsic_table.h",
-    "resolver/intrinsic_table.inl",
     "resolver/resolver.cc",
     "resolver/resolver.h",
     "resolver/sem_helper.cc",
@@ -424,7 +409,6 @@
     "sem/bool.h",
     "sem/break_if_statement.h",
     "sem/builtin.h",
-    "sem/builtin_type.h",
     "sem/call.h",
     "sem/call_target.h",
     "sem/constant.h",
@@ -446,7 +430,6 @@
     "sem/module.h",
     "sem/multisampled_texture.h",
     "sem/node.h",
-    "sem/parameter_usage.h",
     "sem/pipeline_stage_set.h",
     "sem/pointer.h",
     "sem/reference.h",
@@ -609,6 +592,51 @@
     "writer/writer.h",
   ]
 
+  deps = []
+
+  if (!tint_build_use_generator) {
+    sources += [
+      "ast/access.cc",
+      "ast/access.h",
+      "ast/address_space.cc",
+      "ast/address_space.h",
+      "ast/builtin_value.cc",
+      "ast/builtin_value.h",
+      "ast/extension.cc",
+      "ast/extension.h",
+      "ast/interpolate_attribute.cc",
+      "ast/interpolate_attribute.h",
+      "ast/texel_format.cc",
+      "ast/texel_format.h",
+      "resolver/init_conv_intrinsic.cc",
+      "resolver/init_conv_intrinsic.h",
+      "resolver/intrinsic_table.inl",
+      "sem/builtin_type.h",
+      "sem/parameter_usage.h",
+    ]
+  } else {
+    sources += [
+      "${target_gen_dir}/ast/access.cc",
+      "${target_gen_dir}/ast/access.h",
+      "${target_gen_dir}/ast/address_space.cc",
+      "${target_gen_dir}/ast/address_space.h",
+      "${target_gen_dir}/ast/builtin_value.cc",
+      "${target_gen_dir}/ast/builtin_value.h",
+      "${target_gen_dir}/ast/extension.cc",
+      "${target_gen_dir}/ast/extension.h",
+      "${target_gen_dir}/ast/interpolate_attribute.cc",
+      "${target_gen_dir}/ast/interpolate_attribute.h",
+      "${target_gen_dir}/ast/texel_format.cc",
+      "${target_gen_dir}/ast/texel_format.h",
+      "${target_gen_dir}/resolver/init_conv_intrinsic.cc",
+      "${target_gen_dir}/resolver/init_conv_intrinsic.h",
+      "${target_gen_dir}/resolver/intrinsic_table.inl",
+      "${target_gen_dir}/sem/builtin_type.h",
+      "${target_gen_dir}/sem/parameter_usage.h",
+    ]
+    deps += [ ":tint_gen_deps" ]
+  }
+
   if (is_linux) {
     sources += [ "diagnostic/printer_linux.cc" ]
   } else if (is_win) {
@@ -640,8 +668,6 @@
     "sem/break_if_statement.h",
     "sem/builtin.cc",
     "sem/builtin.h",
-    "sem/builtin_type.cc",
-    "sem/builtin_type.h",
     "sem/call.cc",
     "sem/call.h",
     "sem/call_target.cc",
@@ -685,8 +711,6 @@
     "sem/multisampled_texture.h",
     "sem/node.cc",
     "sem/node.h",
-    "sem/parameter_usage.cc",
-    "sem/parameter_usage.h",
     "sem/pipeline_stage_set.h",
     "sem/pointer.cc",
     "sem/pointer.h",
@@ -724,6 +748,23 @@
     "sem/while_statement.h",
   ]
 
+  deps = []
+  if (!tint_build_use_generator) {
+    sources += [
+      "sem/builtin_type.cc",
+      "sem/builtin_type.h",
+      "sem/parameter_usage.cc",
+      "sem/parameter_usage.h",
+    ]
+  } else {
+    sources += [
+      "${target_gen_dir}/sem/builtin_type.cc",
+      "${target_gen_dir}/sem/builtin_type.h",
+      "${target_gen_dir}/sem/parameter_usage.cc",
+      "${target_gen_dir}/sem/parameter_usage.h",
+    ]
+    deps += [ ":tint_gen_deps" ]
+  }
   public_deps = [ ":libtint_core_all_src" ]
 }
 
@@ -904,16 +945,16 @@
   }
 
   source_set(target_name) {
-    deps = [
+    public_deps = [
       ":${target_name}_cc",
       ":${target_name}_h",
     ]
 
     if (defined(invoker.bench) && invoker.bench) {
-      deps += [ ":${target_name}_bench" ]
+      public_deps += [ ":${target_name}_bench" ]
     }
     if (defined(invoker.test) && invoker.test) {
-      deps += [ ":${target_name}_test" ]
+      public_deps += [ ":${target_name}_test" ]
     }
   }
 }
@@ -967,7 +1008,7 @@
 }
 
 libtint_source_set("tint_gen_deps") {
-  deps = [
+  public_deps = [
     ":tint_ast_access",
     ":tint_ast_address_space",
     ":tint_ast_builtin_value",
@@ -1147,7 +1188,6 @@
 
   tint_unittests_source_set("tint_unittests_ast_src") {
     sources = [
-      "ast/address_space_test.cc",
       "ast/alias_test.cc",
       "ast/array_test.cc",
       "ast/assignment_statement_test.cc",
@@ -1163,7 +1203,6 @@
       "ast/builtin_attribute_test.cc",
       "ast/builtin_texture_helper_test.cc",
       "ast/builtin_texture_helper_test.h",
-      "ast/builtin_value_test.cc",
       "ast/call_expression_test.cc",
       "ast/call_statement_test.cc",
       "ast/case_selector_test.cc",
@@ -1174,7 +1213,6 @@
       "ast/depth_texture_test.cc",
       "ast/discard_statement_test.cc",
       "ast/enable_test.cc",
-      "ast/extension_test.cc",
       "ast/external_texture_test.cc",
       "ast/f16_test.cc",
       "ast/f32_test.cc",
@@ -1215,7 +1253,6 @@
       "ast/struct_test.cc",
       "ast/switch_statement_test.cc",
       "ast/test_helper.h",
-      "ast/texel_format_test.cc",
       "ast/texture_test.cc",
       "ast/traverse_expressions_test.cc",
       "ast/u32_test.cc",
@@ -1226,6 +1263,23 @@
       "ast/while_statement_test.cc",
       "ast/workgroup_attribute_test.cc",
     ]
+
+    deps = []
+    if (!tint_build_use_generator) {
+      sources += [
+        "ast/address_space_test.cc",
+        "ast/builtin_value_test.cc",
+        "ast/extension_test.cc",
+        "ast/texel_format_test.cc",
+      ]
+    } else {
+      sources += [
+        "${target_gen_dir}/ast/address_space_test.cc",
+        "${target_gen_dir}/ast/builtin_value_test.cc",
+        "${target_gen_dir}/ast/extension_test.cc",
+      ]
+      deps += [ ":tint_gen_deps" ]
+    }
   }
 
   tint_unittests_source_set("tint_unittests_diagnostic_src") {
diff --git a/tint_overrides_with_defaults.gni b/tint_overrides_with_defaults.gni
index 9e39248..9f50c49 100644
--- a/tint_overrides_with_defaults.gni
+++ b/tint_overrides_with_defaults.gni
@@ -76,4 +76,9 @@
   if (!defined(tint_build_unittests)) {
     tint_build_unittests = true
   }
+
+  # Build with generated files
+  if (!defined(tint_build_use_generator)) {
+    tint_build_use_generator = false
+  }
 }