about summary refs log tree commit diff
path: root/tvix/build/build.rs
diff options
context:
space:
mode:
authorFlorian Klink <flokli@flokli.de>2023-12-09T08·49+0200
committerclbot <clbot@tvl.fyi>2023-12-11T21·43+0000
commitfd27d8ddc3a27fd89a3a132343c6a1ad8da3671c (patch)
treeaf891877cb4a0ca5e45f8bc59b29a0f7906dba69 /tvix/build/build.rs
parent3c0a9a949ab71545de23102a8309ad0bea591c1f (diff)
feat(tvix/build): init r/7151
This adds the tvix-build crate, currently only containing a
`tvix_build::proto` module, exposing the data structures defined in
tvix/build/protos.

Change-Id: I75f5d9196969ed0877b1fe640cacfecba0fb2e03
Reviewed-on: https://cl.tvl.fyi/c/depot/+/10235
Autosubmit: flokli <flokli@flokli.de>
Reviewed-by: raitobezarius <tvl@lahfa.xyz>
Tested-by: BuildkiteCI
Diffstat (limited to 'tvix/build/build.rs')
-rw-r--r--tvix/build/build.rs38
1 files changed, 38 insertions, 0 deletions
diff --git a/tvix/build/build.rs b/tvix/build/build.rs
new file mode 100644
index 000000000000..d75ebf714338
--- /dev/null
+++ b/tvix/build/build.rs
@@ -0,0 +1,38 @@
+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)
+        .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(),
+            }],
+        )?;
+    Ok(())
+}