tools

various tools I have been using throughout the years
Log | Files | Refs | README | LICENSE

rust.bzl (3227B)


      1 load("@rules_rust//rust:defs.bzl", "rust_binary", "rust_clippy", "rust_library", "rust_test")
      2 load("//bazel:local-deploy.bzl", "local_deploy")
      3 
      4 def _clippy(name, crates):
      5     """
      6     Defines a `<name>_clippy` target that runs clippy over `crates`.
      7 
      8     Tagged `manual` so it is skipped by `//...` wildcard builds; run it
      9     explicitly (e.g. `bazel build //dam:dam_clippy`) or via the clippy aspect.
     10     """
     11     rust_clippy(
     12         name = name + "_clippy",
     13         deps = crates,
     14         tags = ["manual"],
     15     )
     16 
     17 def rust_app(
     18         name,
     19         srcs = None,
     20         deps = [],
     21         test_deps = [],
     22         edition = "2024",
     23         rustc_flags = [],
     24         visibility = ["//visibility:public"],
     25         **kwargs):
     26     """
     27     Defines a standard Rust application with optimized, debug, and profiling builds,
     28     along with unit tests, a clippy target, and a local deployment target.
     29     """
     30     if srcs == None:
     31         srcs = native.glob(["src/**/*.rs"])
     32 
     33     common_flags = [
     34         "-Ctarget-cpu=native",
     35     ] + rustc_flags
     36 
     37     rust_binary(
     38         name = name,
     39         srcs = srcs,
     40         edition = edition,
     41         rustc_flags = common_flags + [
     42             "-Copt-level=3",
     43             "-Ccodegen-units=1",
     44         ],
     45         visibility = visibility,
     46         deps = deps,
     47         **kwargs
     48     )
     49 
     50     rust_binary(
     51         name = name + "-debug",
     52         srcs = srcs,
     53         edition = edition,
     54         rustc_flags = common_flags,
     55         visibility = visibility,
     56         deps = deps,
     57         **kwargs
     58     )
     59 
     60     rust_binary(
     61         name = name + "-profiling",
     62         srcs = srcs,
     63         edition = edition,
     64         rustc_flags = common_flags + [
     65             "-Copt-level=3",
     66             "-Cdebuginfo=2",
     67             "-Ccodegen-units=64",
     68             "-Clto=off",
     69         ],
     70         visibility = visibility,
     71         deps = deps,
     72         **kwargs
     73     )
     74 
     75     rust_test(
     76         name = name + "_test",
     77         crate = ":" + name,
     78         edition = edition,
     79         rustc_flags = common_flags,
     80         deps = test_deps,
     81     )
     82 
     83     _clippy(name, [":" + name])
     84 
     85     local_deploy(
     86         name = "deploy",
     87         srcs = [":" + name],
     88     )
     89 
     90 def rust_lib(
     91         name,
     92         crate_name = None,
     93         srcs = None,
     94         deps = [],
     95         test_deps = [],
     96         edition = "2024",
     97         rustc_flags = [],
     98         visibility = ["//visibility:public"],
     99         **kwargs):
    100     """
    101     Defines a standard Rust library with optimized and debug builds,
    102     along with unit tests and a clippy target.
    103     """
    104     if srcs == None:
    105         srcs = native.glob(["src/**/*.rs"])
    106 
    107     if crate_name == None:
    108         crate_name = name
    109 
    110     common_flags = [
    111         "-Ctarget-cpu=native",
    112     ] + rustc_flags
    113 
    114     rust_library(
    115         name = name,
    116         crate_name = crate_name,
    117         srcs = srcs,
    118         edition = edition,
    119         rustc_flags = common_flags + [
    120             "-Copt-level=3",
    121             "-Ccodegen-units=1",
    122         ],
    123         visibility = visibility,
    124         deps = deps,
    125         **kwargs
    126     )
    127 
    128     rust_test(
    129         name = name + "_test",
    130         crate = ":" + name,
    131         edition = edition,
    132         rustc_flags = common_flags,
    133         deps = test_deps,
    134     )
    135 
    136     _clippy(name, [":" + name])