First Version
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
// Build script for skald-relay-common.
|
||||
//
|
||||
// Compiles the v2 relay protocol schema (proto/skald/relay/v2/relay_frame.proto)
|
||||
// into Rust types using prost-build. The generated module is named after the
|
||||
// proto package (`skald.relay.v2`) and lands in OUT_DIR; `src/proto.rs`
|
||||
// `include!`s it under a `v2` submodule.
|
||||
//
|
||||
// We intentionally use `Config::new()` (no `extern_path`, no `include_file`)
|
||||
// so the generated code is self-contained — `proto.rs` is the single
|
||||
// integration point and downstream crates depend on `skald_relay_common::proto`
|
||||
// without having to plumb any extra paths through their own `build.rs`.
|
||||
|
||||
fn main() -> std::io::Result<()> {
|
||||
// Point prost-build at a vendored `protoc` so the build needs no system
|
||||
// protoc installed (this is what lets the musl / container distribution
|
||||
// build run in a bare toolchain image — see docs/build-and-distribution.md).
|
||||
// An explicit PROTOC in the environment still wins.
|
||||
if std::env::var_os("PROTOC").is_none() {
|
||||
let protoc = protoc_bin_vendored::protoc_bin_path()
|
||||
.expect("vendored protoc unavailable for this build host");
|
||||
// SAFETY: build scripts run single-threaded before any other code, so
|
||||
// there is no concurrent env access. `set_var` is `unsafe` in edition 2024.
|
||||
unsafe { std::env::set_var("PROTOC", protoc); }
|
||||
}
|
||||
|
||||
let mut config = prost_build::Config::new();
|
||||
// Default for `bytes` fields is `Vec<u8>`, but state it explicitly so a
|
||||
// future prost default change can't silently flip the wire encoding.
|
||||
config.bytes(["."]);
|
||||
|
||||
config.compile_protos(
|
||||
&["proto/skald/relay/v2/relay_frame.proto"],
|
||||
&["proto"],
|
||||
)?;
|
||||
|
||||
// Rerun if the schema (or this build script) changes.
|
||||
println!("cargo:rerun-if-changed=proto/skald/relay/v2/relay_frame.proto");
|
||||
println!("cargo:rerun-if-changed=build.rs");
|
||||
|
||||
Ok(())
|
||||
}
|
||||
Reference in New Issue
Block a user