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

difftreelog

ci bindings launch helper

Yaroslav Bolyukin2024-05-28parent: #c6e9f5b.patch.diff
in: master

2 files changed

modifiedCargo.lockdiffbeforeafterboth
507507
508[[package]]508[[package]]
509name = "jrsonnet-gcmodule"509name = "jrsonnet-gcmodule"
510version = "0.3.6"510version = "0.3.7"
511source = "registry+https://github.com/rust-lang/crates.io-index"511source = "registry+https://github.com/rust-lang/crates.io-index"
512checksum = "c11fb98940a7f8b419619e98ccbf2e094671a5fdd0e277f05acd373071186d57"512checksum = "47975473b24b4503acee0d449fd5eda04ae18828f9811828a6cc99abbbbc38c8"
513dependencies = [513dependencies = [
514 "jrsonnet-gcmodule-derive",514 "jrsonnet-gcmodule-derive",
515 "parking_lot",515 "parking_lot",
516]516]
517517
518[[package]]518[[package]]
519name = "jrsonnet-gcmodule-derive"519name = "jrsonnet-gcmodule-derive"
520version = "0.3.6"520version = "0.3.7"
521source = "registry+https://github.com/rust-lang/crates.io-index"521source = "registry+https://github.com/rust-lang/crates.io-index"
522checksum = "6bee774b7ba86fc86ee84482cd6732aa860ae3559f9827c65efd75c51e66ac76"522checksum = "4782d1d76731f5e5bb4bdeff26ed3350f21d662f178ce6dee7b4da810e7a8f72"
523dependencies = [523dependencies = [
524 "proc-macro2",524 "proc-macro2",
525 "quote",525 "quote",
526 "syn 1.0.109",526 "syn 2.0.64",
527]527]
528528
529[[package]]529[[package]]
635dependencies = [635dependencies = [
636 "jrsonnet-evaluator",636 "jrsonnet-evaluator",
637 "jrsonnet-gcmodule",637 "jrsonnet-gcmodule",
638 "jrsonnet-interner",
638 "jrsonnet-parser",639 "jrsonnet-parser",
639 "jrsonnet-stdlib",640 "jrsonnet-stdlib",
640]641]
780781
781[[package]]782[[package]]
782name = "parking_lot"783name = "parking_lot"
783version = "0.12.2"784version = "0.12.3"
784source = "registry+https://github.com/rust-lang/crates.io-index"785source = "registry+https://github.com/rust-lang/crates.io-index"
785checksum = "7e4af0ca4f6caed20e900d564c242b8e5d4903fdacf31d3daf527b66fe6f42fb"786checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27"
786dependencies = [787dependencies = [
787 "lock_api",788 "lock_api",
788 "parking_lot_core",789 "parking_lot_core",
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(())
+		}
 	}
 }