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])