Bazel rules for using the Vulkan SDK.
Include the following configuration in your project's WORKSPACE file.
load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")
git_repository(
name = "rules_vulkan",
remote = "https://github.com/jadarve/rules_vulkan.git",
tag = "v0.0.11"
)
load("@rules_vulkan//vulkan:repositories.bzl", "vulkan_repositories")
vulkan_repositories(
sdk_path = 'OPTIONAL: path to the host Vulkan SDK, otherwise use VULKAN_SDK env variable',
android_use_host_vulkan_sdk = True, # For android, whether or not use the Vulkan headers provided by the NDK.
)By calling vulkan_repositories(), the package will look for the Vulkan SDK installed in your Operating System and create the following extra repositories:
| Repository | Defined Targets |
|---|---|
vulkan_windows |
* vulkan_cc_library for compiling C/C++ targets that depend on Vulkan. * glslc filegroup for the GLSL compiler, used internally to compile shaders. |
vulkan_linux |
Nothing at the moment. The GLSL compiler is accessed directly from the system. |
vulkan_macos |
* vulkan_cc_library for compiling C/C++ targets that depend on Vulkan. * glslc filegroup for the GLSL compiler, used internally to compile shaders. |
vulkan_android |
* EXPERIMENTAL vulkan_cc_library for compiling C/C++ targets that depend on Vulkan. * glslc is assumed to be available in the host platform. |
A GLSL header library defines a collection of .glsl files that can be included during compilation of a glsl_shader:
load("@rules_vulkan//glsl:defs.bzl", "glsl_header_library")
glsl_header_library(
name = "mylib_glsl_library",
hdrs = [
"mylib/mylib.glsl",
"mylib/color/color.glsl",
],
# path from the repository's root that will be stripped
strip_include_prefix = "shader_lib",
visibility = ["//visibility:public"]
)A glsl_shader compiles a shader file (.vert, .frag, .tesc, .tese, .geom, .comp) to SPIR-V representation:
load("@rules_vulkan//glsl:defs.bzl", "glsl_shader")
glsl_shader(
name = "assign_shader",
shader = "assign.comp",
deps = [
"//shader_lib:mylib_glsl_library"
],
visibility = ["//visibility:public"]
)See the examples folder to see how to use the rules.