Fix linker errors for android webgpu library

- The android build failed because `webgpu_dawn` was changed into a shared
  library in https://dawn-review.googlesource.com/c/dawn/+/194920. As a
  result, `bundle_libraries` failed to enumerate it's objects and
  dependencies correctly.

- In order to avoid having two bundled libraries for android, the `webgpu_dawn`
  library is no longer built in favor of the `webgpu_c_bundled` library which
  gets built in tools/android/webgpu/src/main/cpp/CMakeLists.txt.

- This CL adapts the logic for the android library in light of recent
  updates to the CMake code.

- The intermediate `native_dawn` library is removed and it's sources
  along with `webgpu_dawn_native_proc.cpp` are directly sent to the
  `webgpu_c_bundled` library.

- Finally, `webgpu_c_bundled` links with `dawn_public_config` in order
  to inherit the public include directories for `dawn/webgpu.h`.

- Since `webgpu_dawn` is no longer built for android, this CL changes
  the custom copy command to depend upon `dawncpp_headers` which
  generates the `dawn/webgpu.h` header.

Change-Id: I5440f37fac26c977b3ee09cce14b8ecfbad0e14d
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/196394
Reviewed-by: dan sinclair <dsinclair@chromium.org>
Commit-Queue: Jaswant Panchumarti <jaswant.panchumarti@kitware.com>
Reviewed-by: Jim Blackler <jimblackler@google.com>
Reviewed-by: Alex Benton <bentonian@google.com>
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 53e997d..f99e0f9 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -53,11 +53,11 @@
 
 include(DawnSetIfNotDefined)
 
-set(DAWN_BUILD_GEN_DIR "${Dawn_BINARY_DIR}/gen")
-set(DAWN_GENERATOR_DIR "${Dawn_SOURCE_DIR}/generator")
-set(DAWN_SRC_DIR "${Dawn_SOURCE_DIR}/src")
-set(DAWN_INCLUDE_DIR "${Dawn_SOURCE_DIR}/include")
-set(DAWN_TEMPLATE_DIR "${DAWN_GENERATOR_DIR}/templates")
+set(DAWN_BUILD_GEN_DIR "${Dawn_BINARY_DIR}/gen" CACHE PATH "Directory that contains generated source files")
+set(DAWN_GENERATOR_DIR "${Dawn_SOURCE_DIR}/generator" CACHE PATH "Directory that contains scripts to generate sources and headers")
+set(DAWN_SRC_DIR "${Dawn_SOURCE_DIR}/src" CACHE PATH "Directory that contains source files for dawn")
+set(DAWN_INCLUDE_DIR "${Dawn_SOURCE_DIR}/include" CACHE PATH "Directory that contains public headers for dawn")
+set(DAWN_TEMPLATE_DIR "${DAWN_GENERATOR_DIR}/templates" CACHE PATH "Directory that contains templates for generators")
 
 function (install_if_enabled target)
     if(NOT DAWN_ENABLE_INSTALL)
diff --git a/src/dawn/native/CMakeLists.txt b/src/dawn/native/CMakeLists.txt
index 32b3509..6e36756 100644
--- a/src/dawn/native/CMakeLists.txt
+++ b/src/dawn/native/CMakeLists.txt
@@ -819,26 +819,28 @@
 # "{{.*}}_dawn" when you rename it.
 ###############################################################################
 
-DawnJSONGenerator(
-  TARGET "webgpu_dawn_native_proc"
-  PRINT_NAME "Dawn native WebGPU procs"
-  OUTPUT_SOURCES WEBGPU_DAWN_NATIVE_PROC_GEN_SOURCES
-)
+if (NOT CMAKE_SYSTEM_NAME STREQUAL "Android")
+    DawnJSONGenerator(
+        TARGET "webgpu_dawn_native_proc"
+        PRINT_NAME "Dawn native WebGPU procs"
+        OUTPUT_SOURCES WEBGPU_DAWN_NATIVE_PROC_GEN_SOURCES
+    )
 
-include(BundleLibraries)
-bundle_libraries(webgpu_dawn dawn_native)
-add_library(dawn::webgpu ALIAS webgpu_dawn)
-target_sources(webgpu_dawn
-  PRIVATE
-    ${WEBGPU_DAWN_NATIVE_PROC_GEN_SOURCES}
-)
-target_link_libraries(webgpu_dawn
-  PRIVATE
-    dawn_internal_config
-    ${conditional_private_platform_depends}
-)
-target_compile_definitions(webgpu_dawn PRIVATE "WGPU_IMPLEMENTATION")
-target_compile_definitions(webgpu_dawn PUBLIC "WGPU_SHARED_LIBRARY")
+    include(BundleLibraries)
+    bundle_libraries(webgpu_dawn dawn_native)
+    add_library(dawn::webgpu ALIAS webgpu_dawn)
+    target_sources(webgpu_dawn
+    PRIVATE
+        ${WEBGPU_DAWN_NATIVE_PROC_GEN_SOURCES}
+    )
+    target_link_libraries(webgpu_dawn
+    PRIVATE
+        dawn_internal_config
+        ${conditional_private_platform_depends}
+    )
+    target_compile_definitions(webgpu_dawn PRIVATE "WGPU_IMPLEMENTATION")
+    target_compile_definitions(webgpu_dawn PUBLIC "WGPU_SHARED_LIBRARY")
+endif ()
 
 # Linking with dxcompiler after bundling so that the bundling process
 # doesn't see the dxcompiler and end up with unresolved linker errors.
diff --git a/tools/android/webgpu/src/main/cpp/CMakeLists.txt b/tools/android/webgpu/src/main/cpp/CMakeLists.txt
index a58b3b3..44033e0 100644
--- a/tools/android/webgpu/src/main/cpp/CMakeLists.txt
+++ b/tools/android/webgpu/src/main/cpp/CMakeLists.txt
@@ -41,19 +41,27 @@
 
 set(C_BINDINGS_PATH ../../../../../../out/Debug/gen/cpp)
 
-add_library(native_dawn ${C_BINDINGS_PATH}/methods.cpp ${C_BINDINGS_PATH}/structures.cpp Util.cpp ${CMAKE_SOURCE_DIR}/gen/include/dawn/webgpu.h)
-
-target_link_libraries(native_dawn webgpu_dawn)
+find_package(Python3 REQUIRED)
+DawnJSONGenerator(
+        TARGET "webgpu_dawn_native_proc"
+        PRINT_NAME "Dawn native WebGPU procs"
+        OUTPUT_SOURCES WEBGPU_DAWN_NATIVE_PROC_GEN_SOURCES)
 
 list(INSERT CMAKE_MODULE_PATH 0 "${Dawn_SOURCE_DIR}/src/cmake")
 include(BundleLibraries)
-bundle_libraries(webgpu_c_bundled native_dawn)
+bundle_libraries(webgpu_c_bundled dawn_native)
+target_sources(webgpu_c_bundled PRIVATE
+        Util.cpp
+        ${WEBGPU_DAWN_NATIVE_PROC_GEN_SOURCES}
+        ${C_BINDINGS_PATH}/methods.cpp
+        ${C_BINDINGS_PATH}/structures.cpp
+        ${CMAKE_SOURCE_DIR}/gen/include/dawn/webgpu.h)
 
 find_library(log-lib log)
 
-target_link_libraries(webgpu_c_bundled ${log-lib} android)
+target_link_libraries(webgpu_c_bundled ${log-lib} android dawn_public_config)
 
-add_custom_command(DEPENDS webgpu_dawn POST_BUILD
+add_custom_command(DEPENDS dawncpp_headers POST_BUILD
                    OUTPUT ${CMAKE_SOURCE_DIR}/gen/include/dawn/webgpu.h
                    COMMAND rm -r "${CMAKE_SOURCE_DIR}/gen" || echo
                    COMMAND ${CMAKE_COMMAND} -E copy