fdf9657654
`build.rs` emits rerun-if-changed statements for all proto files, as well as all include paths we pass it. Unfortunately, due to protobufs include path rules, we need to specify the path to the depot root itself as an include path, at least when building impurely with `cargo`. This causes cargo to essentially always rebuild, as it also puts its own temporary files in there. Unfortunately, tonic-build does not chase down to individual .proto files that are included. Disable emitting these `rerun-if-changed` statements for now. This could cause cargo to not rebuild protos every time, causing stale data until the next local `cargo clean`, but considering the protos change not that frequently, and it'll immediately surface if trying to build via Nix (either locally or in CI), it's a good-enough compromise. Change-Id: Ifd279a2216222ef3fc0e70c5a2fe6f87997f562e Reviewed-on: https://cl.tvl.fyi/c/depot/+/11157 Autosubmit: flokli <flokli@flokli.de> Reviewed-by: sterni <sternenseemann@systemli.org> Tested-by: BuildkiteCI
38 lines
1.3 KiB
Rust
38 lines
1.3 KiB
Rust
use std::io::Result;
|
|
|
|
fn main() -> Result<()> {
|
|
#[allow(unused_mut)]
|
|
let mut builder = tonic_build::configure();
|
|
|
|
#[cfg(feature = "tonic-reflection")]
|
|
{
|
|
let out_dir = std::path::PathBuf::from(std::env::var("OUT_DIR").unwrap());
|
|
let descriptor_path = out_dir.join("tvix.build.v1.bin");
|
|
|
|
builder = builder.file_descriptor_set_path(descriptor_path);
|
|
};
|
|
|
|
// https://github.com/hyperium/tonic/issues/908
|
|
let mut config = prost_build::Config::new();
|
|
config.bytes(["."]);
|
|
config.extern_path(".tvix.castore.v1", "::tvix_castore::proto");
|
|
|
|
builder
|
|
.build_server(true)
|
|
.build_client(true)
|
|
.emit_rerun_if_changed(false)
|
|
.compile_with_config(
|
|
config,
|
|
&[
|
|
"tvix/build/protos/build.proto",
|
|
"tvix/build/protos/rpc_build.proto",
|
|
],
|
|
// If we are in running `cargo build` manually, using `../..` works fine,
|
|
// but in case we run inside a nix build, we need to instead point PROTO_ROOT
|
|
// to a sparseTree containing that structure.
|
|
&[match std::env::var_os("PROTO_ROOT") {
|
|
Some(proto_root) => proto_root.to_str().unwrap().to_owned(),
|
|
None => "../..".to_string(),
|
|
}],
|
|
)
|
|
}
|