[pytorch] BUCK build for Vulkan backend
Summary:
Introducing `//xplat/caffe2:aten_vulkan` target which contains pytorch Vulkan backend and its ops.
`//xplat/caffe2:aten_vulkan` depends on ` //xplat/caffe2:aten_cpu`
Just inclusion it to linking registers Vulkan Backend and its ops.
**Code generation:**
1. `VulkanType.h`, `VulkanType.cpp`
Tensor Types for Vulkan backend are generated by `//xplat/caffe2:gen_aten_vulkan` which runs aten code generation (`aten/src/ATen/gen.py`) with `--vulkan` argument.
2. Shaders compilation
`//xplat/caffe2:gen_aten_vulkan_spv` genrule runs `//xplat/caffe2:gen_aten_vulkan_spv_bin` which is a wrapper on `aten/src/ATen/native/vulkan/gen_spv.py`
GLSL files are listed in `aten/src/ATen/native/vulkan/glsl/*` and to compile them `glslc` (glsl compiler) is required.
`glslc` is in opensource https://github.com/google/shaderc , that also has a few dependencies on other libraries, that porting this build to BUCK will take significant amount of time.
To use `glslc` in BUCK introducing
dotslash `xplat/caffe2/fb/vulkan/dotslash/glslc` which is stored on manifold the latest prebuilt binaries of `glslc` from ANDROID_NDK for linux, macos and windows.
Not using it from ANDROID_NDK directly allows to update it without dependency on ndk.
Test Plan:
Building aten_vulkan target:
```
buck build //xplat/caffe2:aten_vulkan
```
Building vulkan_test that contains vulkan unittests for android:
```
buck build //xplat/caffe2:pt_vulkan_test_binAndroid#android-armv7
```
And running it on the device with vulkan support.
Reviewed By: iseeyuan
Differential Revision: D22770299
fbshipit-source-id: 843af8df226d4b5395b8e480eb47b233d57201df