diff options
Diffstat (limited to 'src/ext/equix/build.rs')
-rw-r--r-- | src/ext/equix/build.rs | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/src/ext/equix/build.rs b/src/ext/equix/build.rs new file mode 100644 index 0000000000..b53f08e899 --- /dev/null +++ b/src/ext/equix/build.rs @@ -0,0 +1,53 @@ +fn main() { + cc::Build::new() + .files(vec![ + "src/context.c", + "src/equix.c", + "src/solver.c", + "hashx/src/blake2.c", + "hashx/src/compiler.c", + "hashx/src/compiler_a64.c", + "hashx/src/compiler_x86.c", + "hashx/src/context.c", + "hashx/src/hashx.c", + "hashx/src/program.c", + "hashx/src/program_exec.c", + "hashx/src/siphash.c", + "hashx/src/siphash_rng.c", + "hashx/src/virtual_memory.c", + ]) + // Activate our patch for hashx_rng_callback + .define("HASHX_RNG_CALLBACK", "1") + // Equi-X always uses HashX size 8 (64-bit output) + .define("HASHX_SIZE", "8") + // Avoid shared library API declarations, link statically + .define("HASHX_STATIC", "1") + .define("EQUIX_STATIC", "1") + .includes(vec!["include", "src", "hashx/include", "hashx/src"]) + .compile("equix"); + + // Run bindgen to automatically extract types and functions. This time set + // HASHX_SHARED and EQUIX_SHARED, so the function symbols are not hidden. + let out_path = std::path::PathBuf::from(std::env::var("OUT_DIR").unwrap()); + bindgen::Builder::default() + .header_contents( + "wrapper.h", + r#" + #define HASHX_RNG_CALLBACK 1 + #define HASHX_SIZE 8 + #define HASHX_SHARED 1 + #define EQUIX_SHARED 1 + #include "hashx/include/hashx.h" + #include "include/equix.h" + "#, + ) + .parse_callbacks(Box::new(bindgen::CargoCallbacks)) + .default_enum_style(bindgen::EnumVariation::Rust { + non_exhaustive: true, + }) + .bitfield_enum(".*_flags") + .generate() + .unwrap() + .write_to_file(out_path.join("bindings.rs")) + .unwrap(); +} |