1# Copyright 2019 The Bazel Authors. All rights reserved. 2# 3# Licensed under the Apache License, Version 2.0 (the "License"); 4# you may not use this file except in compliance with the License. 5# You may obtain a copy of the License at 6# 7# http://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, 11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12# See the License for the specific language governing permissions and 13# limitations under the License. 14 15"""Dependencies for the Rust `bindgen` rules""" 16 17load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") 18load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe") 19load("//bindgen/3rdparty/crates:defs.bzl", "crate_repositories") 20 21BINDGEN_VERSION = "0.69.1" 22 23# buildifier: disable=unnamed-macro 24def rust_bindgen_dependencies(): 25 """Declare dependencies needed for bindgen. 26 27 Returns: 28 list[struct(repo=str, is_dev_dep=bool)]: A list of the repositories 29 defined by this macro. 30 """ 31 32 maybe( 33 http_archive, 34 name = "llvm-raw", 35 urls = ["https://github.com/llvm/llvm-project/releases/download/llvmorg-14.0.6/llvm-project-14.0.6.src.tar.xz"], 36 strip_prefix = "llvm-project-14.0.6.src", 37 sha256 = "8b3cfd7bc695bd6cea0f37f53f0981f34f87496e79e2529874fd03a2f9dd3a8a", 38 build_file_content = "# empty", 39 patch_args = ["-p1"], 40 patches = [ 41 Label("//bindgen/3rdparty/patches:llvm-project.cxx17.patch"), 42 Label("//bindgen/3rdparty/patches:llvm-project.incompatible_disallow_empty_glob.patch"), 43 ], 44 ) 45 46 bindgen_name = "rules_rust_bindgen__bindgen-cli-{}".format(BINDGEN_VERSION) 47 maybe( 48 http_archive, 49 name = bindgen_name, 50 integrity = "sha256-iFZe4JEQqZ54KZiX+/7VA7mqAwZThu6MGBl/yvIotQE=", 51 type = "tar.gz", 52 urls = ["https://static.crates.io/crates/bindgen-cli/bindgen-cli-{}.crate".format(BINDGEN_VERSION)], 53 strip_prefix = "bindgen-cli-{}".format(BINDGEN_VERSION), 54 build_file = Label("//bindgen/3rdparty:BUILD.bindgen-cli.bazel"), 55 ) 56 57 direct_deps = [ 58 struct(repo = "llvm-raw", is_dev_dep = False), 59 struct(repo = bindgen_name, is_dev_dep = False), 60 ] 61 direct_deps.extend(crate_repositories()) 62 return direct_deps 63 64# buildifier: disable=unnamed-macro 65def rust_bindgen_register_toolchains(register_toolchains = True): 66 """Registers the default toolchains for the `rules_rust` [bindgen][bg] rules. 67 68 [bg]: https://rust-lang.github.io/rust-bindgen/ 69 70 Args: 71 register_toolchains (bool, optional): Whether or not to register toolchains. 72 """ 73 if register_toolchains: 74 native.register_toolchains(str(Label("//bindgen:default_bindgen_toolchain"))) 75