Revert "Revert "Add define to use customize vulkan header.""

This reverts commit b351817588baf94ac725e35f10ee1d5ff8178834.

Reason for revert: Relanding with android fixes

Original change's description:
> Revert "Add define to use customize vulkan header."
>
> This reverts commit a492eb0e1f08311bfa47f46c660144e7bc8a6c0e.
>
> Reason for revert: Breaking Android roll (b/c builds tools?)
>
> Original change's description:
> > Add define to use customize vulkan header.
> >
> > Bug: skia:
> > Change-Id: Ia87c81a54603a02b2f8f51a735bf173a49afe6c7
> > Reviewed-on: https://skia-review.googlesource.com/81121
> > Commit-Queue: Greg Daniel <egdaniel@google.com>
> > Reviewed-by: Brian Salomon <bsalomon@google.com>
>
> TBR=egdaniel@google.com,bsalomon@google.com
>
> Change-Id: I80a685bf88af909865f274ffc61686be57e8c313
> No-Presubmit: true
> No-Tree-Checks: true
> No-Try: true
> Bug: skia:
> Reviewed-on: https://skia-review.googlesource.com/81740
> Reviewed-by: Brian Salomon <bsalomon@google.com>
> Commit-Queue: Brian Salomon <bsalomon@google.com>

TBR=egdaniel@google.com,bsalomon@google.com

Change-Id: Ia701e884bfa3799dc73002f892feb2ecafe9da12
Reviewed-on: https://skia-review.googlesource.com/81742
Reviewed-by: Derek Sollenberger <djsollen@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Greg Daniel <egdaniel@google.com>
diff --git a/BUILD.gn b/BUILD.gn
index cffa2c2..131bf0b 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -40,6 +40,7 @@
   skia_enable_spirv_validation = is_skia_dev_build && is_debug
   skia_enable_tools = is_skia_dev_build
   skia_enable_vulkan_debug_layers = is_skia_dev_build && is_debug
+  skia_vulkan_header = ""
   skia_vulkan_sdk = getenv("VULKAN_SDK")
   skia_qt_path = getenv("QT_PATH")
   skia_compile_processors = false
@@ -63,13 +64,13 @@
   }
 }
 declare_args() {
-  skia_vulkan_headers = ""
+  skia_tools_vulkan_header_dir = ""
   if (skia_use_vulkan) {
     # When buliding on Android we get the header via the NDK so no need for any extra path.
     if (is_fuchsia) {
-      skia_vulkan_headers = "$fuchsia_vulkan_sdk/include"
+      skia_tools_vulkan_header_dir = "$fuchsia_vulkan_sdk/include"
     } else if (is_linux || is_win) {
-      skia_vulkan_headers = "$skia_vulkan_sdk/include"
+      skia_tools_vulkan_header_dir = "$skia_vulkan_sdk/include"
     }
   }
 }
@@ -114,8 +115,8 @@
 # Skia public API, generally provided by :skia.
 config("skia_public") {
   include_dirs = skia_public_includes
-  if (skia_vulkan_headers != "") {
-    include_dirs += [ skia_vulkan_headers ]
+  if (skia_tools_vulkan_header_dir != "") {
+    include_dirs += [ skia_tools_vulkan_header_dir ]
   }
   defines = []
   if (is_component_build) {
@@ -178,6 +179,9 @@
   lib_dirs = []
   if (skia_enable_gpu) {
     include_dirs += [ "src/gpu" ]
+    if (is_skia_dev_build && skia_use_vulkan) {
+      include_dirs += [ "tools/gpu/vk" ]
+    }
   }
   if (skia_use_angle) {
     defines += [ "SK_ANGLE" ]
@@ -581,6 +585,13 @@
     if (skia_enable_vulkan_debug_layers) {
       public_defines += [ "SK_ENABLE_VK_LAYERS" ]
     }
+    if (skia_vulkan_header != "") {
+      public_defines += [ "SK_VULKAN_HEADER=\"$skia_vulkan_header\"" ]
+    } else {
+      if (is_skia_dev_build) {
+        public_defines += [ "SK_VULKAN_HEADER=\"GrVulkanDefines.h\"" ]
+      }
+    }
   }
   if (skia_enable_spirv_validation) {
     deps += [ "//third_party/spirv-tools" ]
@@ -887,6 +898,10 @@
 
   config("skia.h_config") {
     include_dirs = [ "$target_gen_dir" ]
+    if (skia_use_vulkan) {
+      # So we can get the header which includes vulkan
+      include_dirs += [ "tools/gpu/vk" ]
+    }
   }
   action("skia.h") {
     public_configs = [ ":skia.h_config" ]
diff --git a/gn/gn_to_bp.py b/gn/gn_to_bp.py
index 2026092..3a1238b 100644
--- a/gn/gn_to_bp.py
+++ b/gn/gn_to_bp.py
@@ -177,6 +177,7 @@
   'skia_use_vulkan':    'true',
   'target_cpu':         '"none"',
   'target_os':          '"android"',
+  'skia_vulkan_header': '"Skia_Vulkan_Android.h"',
 }
 gn_args = ' '.join(sorted('%s=%s' % (k,v) for (k,v) in gn_args.iteritems()))
 
@@ -241,6 +242,11 @@
 cflags = sorted(cflags)
 cflags.insert(0, "-U_FORTIFY_SOURCE")
 
+# We need to add the include path to the vulkan defines and header file set in
+# then skia_vulkan_header gn arg that is used for framework builds.
+local_includes.add("platform_tools/android/vulkan")
+export_includes.add("platform_tools/android/vulkan")
+
 # Most defines go into SkUserConfig.h, where they're seen by Skia and its users.
 defines = [str(d) for d in js['targets']['//:skia']['defines']]
 defines.remove('NDEBUG')                 # Let the Android build control this.
diff --git a/include/gpu/vk/GrVkDefines.h b/include/gpu/vk/GrVkDefines.h
index 058ac23..be269e6 100644
--- a/include/gpu/vk/GrVkDefines.h
+++ b/include/gpu/vk/GrVkDefines.h
@@ -11,33 +11,40 @@
 
 #ifdef SK_VULKAN
 
-#if defined(SK_BUILD_FOR_WIN) || defined(SK_BUILD_FOR_WIN32)
-#   if !defined(VK_USE_PLATFORM_WIN32_KHR)
-#      define VK_USE_PLATFORM_WIN32_KHR
-#   endif
-#elif defined(SK_BUILD_FOR_ANDROID)
-#   if !defined(VK_USE_PLATFORM_ANDROID_KHR)
-#      define VK_USE_PLATFORM_ANDROID_KHR
-#   endif
-#elif defined(SK_BUILD_FOR_UNIX)
-#   if defined(__Fuchsia__)
-#     if !defined(VK_USE_PLATFORM_MAGMA_KHR)
-#       define VK_USE_PLATFORM_MAGMA_KHR
+#ifdef SK_VULKAN_HEADER
+#include SK_VULKAN_HEADER
+#else
+// This is deprecated and all clients should define their own custum header shim that sets up
+// defines and includes the vulkan.h header. Then they should define SK_VULKAN_HEADER or set the
+// skia_vulkan_header in gn to point to their custom header.
+#  if defined(SK_BUILD_FOR_WIN) || defined(SK_BUILD_FOR_WIN32)
+#     if !defined(VK_USE_PLATFORM_WIN32_KHR)
+#        define VK_USE_PLATFORM_WIN32_KHR
 #     endif
-#   else
-#     if !defined(VK_USE_PLATFORM_XCB_KHR)
-#        define VK_USE_PLATFORM_XCB_KHR
+#  elif defined(SK_BUILD_FOR_ANDROID)
+#     if !defined(VK_USE_PLATFORM_ANDROID_KHR)
+#        define VK_USE_PLATFORM_ANDROID_KHR
 #     endif
-#   endif
-#endif
+#  elif defined(SK_BUILD_FOR_UNIX)
+#     if defined(__Fuchsia__)
+#       if !defined(VK_USE_PLATFORM_MAGMA_KHR)
+#         define VK_USE_PLATFORM_MAGMA_KHR
+#       endif
+#     else
+#       if !defined(VK_USE_PLATFORM_XCB_KHR)
+#          define VK_USE_PLATFORM_XCB_KHR
+#       endif
+#     endif
+#  endif
 
 // We create our own function table and never directly call any functions via vk*(). So no need to
 // include the prototype functions.
-#if !defined(VK_NO_PROTOTYPES) && !defined(SK_BUILD_FOR_ANDROID_FRAMEWORK)
-#define VK_NO_PROTOTYPES
-#endif
+#  if !defined(VK_NO_PROTOTYPES) && !defined(SK_BUILD_FOR_ANDROID_FRAMEWORK)
+#    define VK_NO_PROTOTYPES
+#  endif
 
-#include <vulkan/vulkan.h>
+#  include <vulkan/vulkan.h>
+#endif // SK_VULKAN_HEADER
 
 #define SKIA_REQUIRED_VULKAN_HEADER_VERSION 17
 #if VK_HEADER_VERSION < SKIA_REQUIRED_VULKAN_HEADER_VERSION
diff --git a/platform_tools/android/vulkan/Skia_Vulkan_Android.h b/platform_tools/android/vulkan/Skia_Vulkan_Android.h
new file mode 100644
index 0000000..b074981
--- /dev/null
+++ b/platform_tools/android/vulkan/Skia_Vulkan_Android.h
@@ -0,0 +1,23 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef Skia_Vulkan_Android_DEFINED
+#define Skia_Vulkan_Android_DEFINED
+
+#if !defined(SK_BUILD_FOR_ANDROID)
+#error "Must be building for android to use this header"
+#endif
+#if !defined(VK_USE_PLATFORM_ANDROID_KHR)
+#  define VK_USE_PLATFORM_ANDROID_KHR
+#endif
+
+#include <vulkan/vulkan.h>
+
+#endif
+
+
+
diff --git a/tools/gpu/vk/GrVulkanDefines.h b/tools/gpu/vk/GrVulkanDefines.h
new file mode 100644
index 0000000..192f1c5
--- /dev/null
+++ b/tools/gpu/vk/GrVulkanDefines.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef GrVulkanDefines_DEFINED
+#define GrVulkanDefines_DEFINED
+
+#if defined(SK_BUILD_FOR_WIN) || defined(SK_BUILD_FOR_WIN32)
+#   if !defined(VK_USE_PLATFORM_WIN32_KHR)
+#      define VK_USE_PLATFORM_WIN32_KHR
+#   endif
+#elif defined(SK_BUILD_FOR_ANDROID)
+#   if !defined(VK_USE_PLATFORM_ANDROID_KHR)
+#      define VK_USE_PLATFORM_ANDROID_KHR
+#   endif
+#elif defined(SK_BUILD_FOR_UNIX)
+#   if !defined(VK_USE_PLATFORM_XCB_KHR)
+#      define VK_USE_PLATFORM_XCB_KHR
+#   endif
+#endif
+
+// We create our own function table and never directly call any functions via vk*(). So no need to
+// include the prototype functions.
+#if !defined(VK_NO_PROTOTYPES)
+#define VK_NO_PROTOTYPES
+#endif
+
+#include <vulkan/vulkan.h>
+
+#endif