|  | # Copyright 2019 Google LLC | 
|  | # | 
|  | # Licensed under the Apache License, Version 2.0 (the "License"); | 
|  | # you may not use this file except in compliance with the License. | 
|  | # You may obtain a copy of the License at | 
|  | # | 
|  | #      https://www.apache.org/licenses/LICENSE-2.0 | 
|  | # | 
|  | # Unless required by applicable law or agreed to in writing, software | 
|  | # distributed under the License is distributed on an "AS IS" BASIS, | 
|  | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | # See the License for the specific language governing permissions and | 
|  | # limitations under the License. | 
|  |  | 
|  | """Repository rule to statically link against the Vulkan SDK. | 
|  |  | 
|  | Requires installing the Vulkan SDK from https://vulkan.lunarg.com/. | 
|  |  | 
|  | If the Vulkan SDK is not installed, this generates an empty rule and you may | 
|  | encounter linker errors like `error: undefined reference to 'vkCreateInstance'`. | 
|  | """ | 
|  |  | 
|  | def _impl(repository_ctx): | 
|  | if "VULKAN_SDK" in repository_ctx.os.environ: | 
|  | sdk_path = repository_ctx.os.environ["VULKAN_SDK"] | 
|  | repository_ctx.symlink(sdk_path, "vulkan-sdk") | 
|  |  | 
|  | repository_ctx.file("BUILD", """ | 
|  | cc_library( | 
|  | name = "sdk", | 
|  | srcs = select({ | 
|  | "@bazel_tools//src/conditions:windows": [ | 
|  | "vulkan-sdk/Lib/vulkan-1.lib" | 
|  | ], | 
|  | "//conditions:default": [ | 
|  | "vulkan-sdk/lib/libvulkan.so.1", | 
|  | ], | 
|  | }), | 
|  | visibility = ["//visibility:public"], | 
|  | )""") | 
|  | else: | 
|  | # Empty rule. Will fail to link for just targets that use Vulkan. | 
|  | repository_ctx.file("BUILD", """ | 
|  | cc_library( | 
|  | name = "sdk", | 
|  | srcs = [], | 
|  | visibility = ["//visibility:public"], | 
|  | )""") | 
|  |  | 
|  | vulkan_sdk_setup = repository_rule( | 
|  | implementation = _impl, | 
|  | local = True, | 
|  | ) |