git.delta.rocks / jrsonnet / refs/commits / c3d1c4f39003

difftreelog

ci bindings launch helper

Yaroslav Bolyukin2024-06-18parent: #c6e9f5b.patch.diff
in: master

2 files changed

modifiedCargo.lockdiffbeforeafterboth
after · Cargo.lock
149 packageslockfile v3
modifiedxtask/src/main.rsdiffbeforeafterboth
--- a/xtask/src/main.rs
+++ b/xtask/src/main.rs
@@ -26,6 +26,11 @@
 		#[arg(long)]
 		fix: bool,
 	},
+	TestCBindings {
+		#[arg(long, default_value = "x86_64-unknown-linux-gnu")]
+		target: String,
+		args: Vec<String>,
+	},
 }
 
 fn main() -> Result<()> {
@@ -73,5 +78,26 @@
 			cmd!(sh, "cargo fmt {fmt_check...}").run()?;
 			Ok(())
 		}
+		Opts::TestCBindings { target, args } => {
+			cmd!(
+				sh,
+				"cargo build -p libjsonnet --target={target} --release --no-default-features --features=interop-common,interop-threading"
+			)
+			.run()?;
+			let built = format!("./target/{target}/release/libjsonnet.a");
+			let c_bindings = "./bindings/c/";
+			let test_file = "libjsonnet_test_file";
+			cmd!(sh, "cp {built} {c_bindings}").run()?;
+			sh.change_dir(c_bindings);
+
+			// TODO: Pass target to gcc?
+			cmd!(sh, "gcc -c {test_file}.c").run()?;
+			cmd!(sh, "gcc -o {test_file} -lc -lm {test_file}.o libjsonnet.a").run()?;
+			let sh = Shell::new()?;
+
+			cmd!(sh, "{c_bindings}{test_file} {args...}").run()?;
+
+			Ok(())
+		}
 	}
 }