Delegate blst build to crate in preparation for windows bindings (#274)
This commit is contained in:
parent
feb4037de5
commit
34f4fa1609
|
@ -52,6 +52,16 @@ version = "1.3.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
|
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "blst"
|
||||||
|
version = "0.3.10"
|
||||||
|
dependencies = [
|
||||||
|
"cc",
|
||||||
|
"glob",
|
||||||
|
"threadpool",
|
||||||
|
"zeroize",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bumpalo"
|
name = "bumpalo"
|
||||||
version = "3.12.0"
|
version = "3.12.0"
|
||||||
|
@ -63,6 +73,7 @@ name = "c-kzg"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bindgen",
|
"bindgen",
|
||||||
|
"blst",
|
||||||
"criterion",
|
"criterion",
|
||||||
"glob",
|
"glob",
|
||||||
"hex",
|
"hex",
|
||||||
|
@ -78,6 +89,12 @@ version = "0.3.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5"
|
checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "cc"
|
||||||
|
version = "1.0.79"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cexpr"
|
name = "cexpr"
|
||||||
version = "0.6.0"
|
version = "0.6.0"
|
||||||
|
@ -659,6 +676,15 @@ version = "0.16.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
|
checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "threadpool"
|
||||||
|
version = "1.8.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa"
|
||||||
|
dependencies = [
|
||||||
|
"num_cpus",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tinytemplate"
|
name = "tinytemplate"
|
||||||
version = "1.2.1"
|
version = "1.2.1"
|
||||||
|
@ -802,3 +828,23 @@ name = "winapi-x86_64-pc-windows-gnu"
|
||||||
version = "0.4.0"
|
version = "0.4.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
|
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "zeroize"
|
||||||
|
version = "1.6.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9"
|
||||||
|
dependencies = [
|
||||||
|
"zeroize_derive",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "zeroize_derive"
|
||||||
|
version = "1.4.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn 2.0.8",
|
||||||
|
]
|
||||||
|
|
|
@ -14,6 +14,7 @@ minimal-spec = []
|
||||||
hex = "0.4.2"
|
hex = "0.4.2"
|
||||||
libc = "0.2"
|
libc = "0.2"
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
|
blst = { path = "../../blst/bindings/rust" }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
criterion = "0.4"
|
criterion = "0.4"
|
||||||
|
|
|
@ -15,22 +15,13 @@ fn move_file(src: &Path, dst: &Path) -> Result<(), String> {
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let cargo_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap());
|
let cargo_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap());
|
||||||
let root_dir = cargo_dir.join("../../");
|
let root_dir = cargo_dir
|
||||||
|
.parent()
|
||||||
|
.expect("rust dir is nested")
|
||||||
|
.parent()
|
||||||
|
.expect("bindings dir is nested");
|
||||||
let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap());
|
let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap());
|
||||||
|
|
||||||
// Ensure libblst exists in `OUT_DIR`
|
|
||||||
// Assuming blst submodule exists
|
|
||||||
Command::new("make")
|
|
||||||
.current_dir(root_dir.join("src"))
|
|
||||||
.arg("blst")
|
|
||||||
.status()
|
|
||||||
.unwrap();
|
|
||||||
move_file(
|
|
||||||
root_dir.join("lib/libblst.a").as_path(),
|
|
||||||
out_dir.join("libblst.a").as_path(),
|
|
||||||
)
|
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
let field_elements_per_blob = if cfg!(feature = "minimal-spec") {
|
let field_elements_per_blob = if cfg!(feature = "minimal-spec") {
|
||||||
MINIMAL_FIELD_ELEMENTS_PER_BLOB
|
MINIMAL_FIELD_ELEMENTS_PER_BLOB
|
||||||
} else {
|
} else {
|
||||||
|
@ -41,7 +32,7 @@ fn main() {
|
||||||
|
|
||||||
// Deleting any existing assembly and object files to ensure that compiling with a different
|
// Deleting any existing assembly and object files to ensure that compiling with a different
|
||||||
// feature flag changes the final linked library file.
|
// feature flag changes the final linked library file.
|
||||||
let obj_file = root_dir.join("src/c_kzg_4844.o");
|
let obj_file = root_dir.join("src").join("c_kzg_4844.o");
|
||||||
if obj_file.exists() {
|
if obj_file.exists() {
|
||||||
std::fs::remove_file(obj_file).unwrap();
|
std::fs::remove_file(obj_file).unwrap();
|
||||||
}
|
}
|
||||||
|
@ -63,7 +54,7 @@ fn main() {
|
||||||
.status()
|
.status()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
move_file(
|
move_file(
|
||||||
root_dir.join("src/libckzg.a").as_path(),
|
root_dir.join("src").join("libckzg.a").as_path(),
|
||||||
out_dir.join("libckzg.a").as_path(),
|
out_dir.join("libckzg.a").as_path(),
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
@ -71,22 +62,31 @@ fn main() {
|
||||||
println!("cargo:rustc-link-search={}", out_dir.display());
|
println!("cargo:rustc-link-search={}", out_dir.display());
|
||||||
println!("cargo:rustc-link-search={}", out_dir.display());
|
println!("cargo:rustc-link-search={}", out_dir.display());
|
||||||
println!("cargo:rustc-link-lib=static=ckzg");
|
println!("cargo:rustc-link-lib=static=ckzg");
|
||||||
|
// Tell cargo to search for the static blst exposed by the blst-bindings' crate.
|
||||||
println!("cargo:rustc-link-lib=static=blst");
|
println!("cargo:rustc-link-lib=static=blst");
|
||||||
|
|
||||||
let bindings_out_path = cargo_dir.join("src/bindings/generated.rs");
|
let bindings_out_path = cargo_dir.join("src").join("bindings").join("generated.rs");
|
||||||
let build_target = env::var("TARGET").unwrap();
|
let build_target = env::var("TARGET").unwrap();
|
||||||
let snapshot_path = cargo_dir.join("snapshots").join(format!(
|
let snapshot_path = cargo_dir.join("snapshots").join(format!(
|
||||||
"bindings_{build_target}_{field_elements_per_blob}.rs"
|
"bindings_{build_target}_{field_elements_per_blob}.rs"
|
||||||
));
|
));
|
||||||
|
|
||||||
|
let header_file_path = root_dir.join("src").join("c_kzg_4844.h");
|
||||||
|
let header_file = header_file_path.to_str().expect("valid header file");
|
||||||
|
|
||||||
|
// Obtain the header files exposed by blst-bindings' crate.
|
||||||
|
let blst_headers_dir =
|
||||||
|
std::env::var_os("DEP_BLST_BINDINGS").expect("BLST exposes header files for bindings");
|
||||||
make_bindings(
|
make_bindings(
|
||||||
field_elements_per_blob,
|
field_elements_per_blob,
|
||||||
&root_dir,
|
header_file,
|
||||||
|
&blst_headers_dir.to_string_lossy(),
|
||||||
bindings_out_path,
|
bindings_out_path,
|
||||||
snapshot_path,
|
snapshot_path,
|
||||||
);
|
);
|
||||||
|
|
||||||
// Cleanup
|
// Cleanup
|
||||||
let obj_file = root_dir.join("src/c_kzg_4844.o");
|
let obj_file = root_dir.join("src").join("c_kzg_4844.o");
|
||||||
if obj_file.exists() {
|
if obj_file.exists() {
|
||||||
std::fs::remove_file(obj_file).unwrap();
|
std::fs::remove_file(obj_file).unwrap();
|
||||||
}
|
}
|
||||||
|
@ -94,7 +94,8 @@ fn main() {
|
||||||
|
|
||||||
fn make_bindings<P>(
|
fn make_bindings<P>(
|
||||||
field_elements_per_blob: usize,
|
field_elements_per_blob: usize,
|
||||||
root_dir: &Path,
|
header_path: &str,
|
||||||
|
blst_headers_dir: &str,
|
||||||
bindings_out_path: P,
|
bindings_out_path: P,
|
||||||
snapshot_path: P,
|
snapshot_path: P,
|
||||||
) where
|
) where
|
||||||
|
@ -120,12 +121,6 @@ fn make_bindings<P>(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let header_file_path = root_dir.join("src/c_kzg_4844.h");
|
|
||||||
let header_file = header_file_path.to_str().expect("valid header file");
|
|
||||||
|
|
||||||
let inc_dir_path = root_dir.join("inc");
|
|
||||||
let inc_dir = inc_dir_path.to_str().expect("valid inc dir");
|
|
||||||
|
|
||||||
let bindings = Builder::default()
|
let bindings = Builder::default()
|
||||||
/*
|
/*
|
||||||
* Header definitions.
|
* Header definitions.
|
||||||
|
@ -136,12 +131,12 @@ fn make_bindings<P>(
|
||||||
"consts",
|
"consts",
|
||||||
&format!("#define FIELD_ELEMENTS_PER_BLOB {field_elements_per_blob}"),
|
&format!("#define FIELD_ELEMENTS_PER_BLOB {field_elements_per_blob}"),
|
||||||
)
|
)
|
||||||
.header(header_file)
|
.header(header_path)
|
||||||
.clang_args([format!("-I{inc_dir}")])
|
.clang_args([format!("-I{blst_headers_dir}")])
|
||||||
// Since this is not part of the header file, needs to be allowed explicitly.
|
// Since this is not part of the header file, needs to be allowed explicitly.
|
||||||
.allowlist_var("FIELD_ELEMENTS_PER_BLOB")
|
.allowlist_var("FIELD_ELEMENTS_PER_BLOB")
|
||||||
// Get bindings only for the header file.
|
// Get bindings only for the header file.
|
||||||
.allowlist_file(".*/c_kzg_4844.h")
|
.allowlist_file(".*c_kzg_4844.h")
|
||||||
/*
|
/*
|
||||||
* Cleanup instructions.
|
* Cleanup instructions.
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue