Split generation of dawncpp headers from libdawncpp

libdawn_native also requires the dawncpp headers. When we separated
libdawn_cpp from the dawn_headers, libdawn_native lost the cpp headers
and caused a compile failure. This patch separates the dawncpp headers
as a separate target so both libdawncpp and libdawn_native can depend
on them.

Bug: dawn:22
Change-Id: I4172f1654377afac8c4314123ee8b5b81dc7c928
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/12300
Reviewed-by: David Turner <digit@google.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
diff --git a/BUILD.gn b/BUILD.gn
index 0963538..24c21ca 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -89,7 +89,7 @@
 # dependencies of libdawn_native
 source_set("libdawn_native_headers") {
   public_deps = [
-    "${dawn_root}/src/dawn:dawn_headers",
+    "${dawn_root}/src/dawn:dawncpp_headers",
   ]
   all_dependent_configs = [ "${dawn_root}/src/common:dawn_public_include_dirs" ]
   sources = [
@@ -669,7 +669,7 @@
   }
 
   public_deps = [
-    "${dawn_root}/src/dawn:dawn_headers",
+    "${dawn_root}/src/dawn:dawncpp_headers",
   ]
 
   deps = [
diff --git a/generator/dawn_json_generator.py b/generator/dawn_json_generator.py
index f92ad92..0d37a33 100644
--- a/generator/dawn_json_generator.py
+++ b/generator/dawn_json_generator.py
@@ -459,7 +459,7 @@
         return 'Generates code for various target from Dawn.json.'
 
     def add_commandline_arguments(self, parser):
-        allowed_targets = ['dawn_headers', 'dawncpp', 'dawn_proc', 'mock_dawn', 'dawn_wire', "dawn_native_utils"]
+        allowed_targets = ['dawn_headers', 'dawncpp_headers', 'dawncpp', 'dawn_proc', 'mock_dawn', 'dawn_wire', "dawn_native_utils"]
 
         parser.add_argument('--dawn-json', required=True, type=str, help ='The DAWN JSON definition to use.')
         parser.add_argument('--wire-json', default=None, type=str, help='The DAWN WIRE JSON definition to use.')
@@ -504,11 +504,13 @@
             renders.append(FileRender('api.h', 'src/include/dawn/dawn.h', [base_params, api_params, c_params]))
             renders.append(FileRender('api_proc_table.h', 'src/include/dawn/dawn_proc_table.h', [base_params, api_params, c_params]))
 
+        if 'dawncpp_headers' in targets:
+            renders.append(FileRender('apicpp.h', 'src/include/dawn/dawncpp.h', [base_params, api_params, cpp_params]))
+
         if 'dawn_proc' in targets:
             renders.append(FileRender('api_proc.c', 'src/dawn/dawn_proc.c', [base_params, api_params, c_params]))
 
         if 'dawncpp' in targets:
-            renders.append(FileRender('apicpp.h', 'src/include/dawn/dawncpp.h', [base_params, api_params, cpp_params]))
             renders.append(FileRender('apicpp.cpp', 'src/dawn/dawncpp.cpp', [base_params, api_params, cpp_params]))
 
         if 'mock_dawn' in targets:
diff --git a/src/dawn/BUILD.gn b/src/dawn/BUILD.gn
index 98fc975..b0c449e 100644
--- a/src/dawn/BUILD.gn
+++ b/src/dawn/BUILD.gn
@@ -51,6 +51,27 @@
 }
 
 ###############################################################################
+# Dawn C++ headers
+###############################################################################
+
+dawn_json_generator("dawncpp_headers_gen") {
+  target = "dawncpp_headers"
+  outputs = [
+    "src/include/dawn/dawncpp.h",
+  ]
+}
+
+source_set("dawncpp_headers") {
+  public_deps = [
+    ":dawn_headers",
+    ":dawncpp_headers_gen",
+  ]
+
+  sources = get_target_outputs(":dawncpp_headers_gen")
+  sources += [ "${dawn_root}/src/include/dawn/EnumClassBitmasks.h" ]
+}
+
+###############################################################################
 # Dawn C++ wrapper
 ###############################################################################
 
@@ -58,17 +79,15 @@
   target = "dawncpp"
   outputs = [
     "src/dawn/dawncpp.cpp",
-    "src/include/dawn/dawncpp.h",
   ]
 }
 
 source_set("dawncpp") {
   deps = [
-    ":dawn_headers",
     ":dawncpp_gen",
+    ":dawncpp_headers",
   ]
   sources = get_target_outputs(":dawncpp_gen")
-  sources += [ "${dawn_root}/src/include/dawn/EnumClassBitmasks.h" ]
 }
 
 ###############################################################################