nostrdb

an unfairly fast embedded nostr database backed by lmdb
git clone git://jb55.com/nostrdb
Log | Files | Refs | Submodules | README | LICENSE

commit 9ecdb5db088a1447e1f813de23674c17b0065f77
parent a0b7f76e59afa5662585fcd6ee2d7a8760d51fb0
Author: William Casarin <jb55@jb55.com>
Date:   Thu, 14 Dec 2023 10:58:55 -0800

rust: move to subfolder

so we don't pollute our root project too much

Diffstat:
M.gitignore | 2+-
MCargo.toml | 14++------------
Dbuild.rs | 122-------------------------------------------------------------------------------
CCargo.toml -> rust/Cargo.toml | 0
Arust/build.rs | 122+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Rsrc/lib.rs -> rust/src/lib.rs | 0
6 files changed, 125 insertions(+), 135 deletions(-)

diff --git a/.gitignore b/.gitignore @@ -25,7 +25,7 @@ deps/ testdata/db/*.mdb ndb -src/bindings.rs +rust/src/bindings.rs # Added by cargo diff --git a/Cargo.toml b/Cargo.toml @@ -1,12 +1,2 @@ -[package] -name = "nostrdb" -version = "0.1.0" -edition = "2021" -build = "build.rs" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[build-dependencies] -bindgen = "0.69.1" -cc = "1.0" - +[workspace] +members = [ "rust" ] diff --git a/build.rs b/build.rs @@ -1,122 +0,0 @@ -// build.rs -use cc::Build; -use std::env; -use std::path::PathBuf; - -fn secp256k1_build() { - // Actual build - let mut base_config = cc::Build::new(); - base_config - .include("deps/secp256k1/") - .include("deps/secp256k1/include") - .include("deps/secp256k1/src") - .flag_if_supported("-Wno-unused-function") // some ecmult stuff is defined but not used upstream - .flag_if_supported("-Wno-unused-parameter") // patching out printf causes this warning - //.define("SECP256K1_API", Some("")) - .define("ENABLE_MODULE_ECDH", Some("1")) - .define("ENABLE_MODULE_SCHNORRSIG", Some("1")) - .define("ENABLE_MODULE_EXTRAKEYS", Some("1")) - //.define("ENABLE_MODULE_ELLSWIFT", Some("0")) - // upstream sometimes introduces calls to printf, which we cannot compile - // with WASM due to its lack of libc. printf is never necessary and we can - // just #define it away. - .define("printf(...)", Some("")); - - //if cfg!(feature = "lowmemory") { - // base_config.define("ECMULT_WINDOW_SIZE", Some("4")); // A low-enough value to consume negligible memory - // base_config.define("ECMULT_GEN_PREC_BITS", Some("2")); - //} else { - // base_config.define("ECMULT_GEN_PREC_BITS", Some("4")); - // base_config.define("ECMULT_WINDOW_SIZE", Some("15")); // This is the default in the configure file (`auto`) - //} - - //base_config.define("USE_EXTERNAL_DEFAULT_CALLBACKS", Some("1")); - //#[cfg(feature = "recovery")] - //base_config.define("ENABLE_MODULE_RECOVERY", Some("1")); - - // WASM headers and size/align defines. - if env::var("CARGO_CFG_TARGET_ARCH").unwrap() == "wasm32" { - base_config.include("wasm/wasm-sysroot").file("wasm/wasm.c"); - } - - // secp256k1 - base_config - .file("deps/secp256k1/contrib/lax_der_parsing.c") - .file("deps/secp256k1/src/precomputed_ecmult_gen.c") - .file("deps/secp256k1/src/precomputed_ecmult.c") - .file("deps/secp256k1/src/secp256k1.c"); - - if base_config.try_compile("libsecp256k1.a").is_err() { - // Some embedded platforms may not have, eg, string.h available, so if the build fails - // simply try again with the wasm sysroot (but without the wasm type sizes) in the hopes - // that it works. - base_config.include("wasm/wasm-sysroot"); - base_config.compile("libsecp256k1.a"); - } -} - -fn main() { - // Compile the C file - let mut build = Build::new(); - - build - .files([ - "nostrdb.c", - "sha256.c", - "bech32.c", - "deps/flatcc/src/runtime/json_parser.c", - "deps/flatcc/src/runtime/verifier.c", - "deps/flatcc/src/runtime/builder.c", - "deps/flatcc/src/runtime/emitter.c", - "deps/flatcc/src/runtime/refmap.c", - "deps/lmdb/mdb.c", - "deps/lmdb/midl.c", - ]) - .include("deps/lmdb") - .include("deps/flatcc/include") - .include("deps/secp256k1/include") - // Add other include paths - //.flag("-Wall") - .flag("-Wno-misleading-indentation") - .flag("-Wno-unused-function") - //.flag("-Werror") - //.flag("-g") - .compile("libnostrdb.a"); - - secp256k1_build(); - - // Re-run the build script if any of the C files or headers change - for file in &[ - "src/nostrdb.c", - "src/sha256.c", - "src/bech32.c", - // Add all your C source files here - "include/nostrdb.h", - "include/sha256.h", - // Add all your header files here - ] { - println!("cargo:rerun-if-changed={}", file); - } - - //println!("cargo:rustc-link-search=native=deps/lmdb"); - //println!("cargo:rustc-link-lib=static=lmdb"); - //println!("cargo:rustc-link-search=native=deps/secp256k1/.libs"); - println!("cargo:rustc-link-lib=secp256k1"); - - // Print out the path to the compiled library - let out_path = PathBuf::from(env::var("OUT_DIR").unwrap()); - println!("cargo:rustc-link-search=native={}", out_path.display()); - println!("cargo:rustc-link-lib=static=nostrdb"); - - // The bindgen::Builder is the main entry point to bindgen, and lets you build up options for - // the resulting bindings. - let bindings = bindgen::Builder::default() - .header("nostrdb.h") - .generate() - .expect("Unable to generate bindings"); - - // Write the bindings to the $OUT_DIR/bindings.rs file. - bindings - .write_to_file("src/bindings.rs") - .expect("Couldn't write bindings!"); -} diff --git a/Cargo.toml b/rust/Cargo.toml diff --git a/rust/build.rs b/rust/build.rs @@ -0,0 +1,122 @@ +// build.rs +use cc::Build; +use std::env; +use std::path::PathBuf; + +fn secp256k1_build() { + // Actual build + let mut base_config = cc::Build::new(); + base_config + .include("../deps/secp256k1/") + .include("../deps/secp256k1/include") + .include("../deps/secp256k1/src") + .flag_if_supported("-Wno-unused-function") // some ecmult stuff is defined but not used upstream + .flag_if_supported("-Wno-unused-parameter") // patching out printf causes this warning + //.define("SECP256K1_API", Some("")) + .define("ENABLE_MODULE_ECDH", Some("1")) + .define("ENABLE_MODULE_SCHNORRSIG", Some("1")) + .define("ENABLE_MODULE_EXTRAKEYS", Some("1")) + //.define("ENABLE_MODULE_ELLSWIFT", Some("0")) + // upstream sometimes introduces calls to printf, which we cannot compile + // with WASM due to its lack of libc. printf is never necessary and we can + // just #define it away. + .define("printf(...)", Some("")); + + //if cfg!(feature = "lowmemory") { + // base_config.define("ECMULT_WINDOW_SIZE", Some("4")); // A low-enough value to consume negligible memory + // base_config.define("ECMULT_GEN_PREC_BITS", Some("2")); + //} else { + // base_config.define("ECMULT_GEN_PREC_BITS", Some("4")); + // base_config.define("ECMULT_WINDOW_SIZE", Some("15")); // This is the default in the configure file (`auto`) + //} + + //base_config.define("USE_EXTERNAL_DEFAULT_CALLBACKS", Some("1")); + //#[cfg(feature = "recovery")] + //base_config.define("ENABLE_MODULE_RECOVERY", Some("1")); + + // WASM headers and size/align defines. + if env::var("CARGO_CFG_TARGET_ARCH").unwrap() == "wasm32" { + base_config.include("wasm/wasm-sysroot").file("wasm/wasm.c"); + } + + // secp256k1 + base_config + .file("../deps/secp256k1/contrib/lax_der_parsing.c") + .file("../deps/secp256k1/src/precomputed_ecmult_gen.c") + .file("../deps/secp256k1/src/precomputed_ecmult.c") + .file("../deps/secp256k1/src/secp256k1.c"); + + if base_config.try_compile("libsecp256k1.a").is_err() { + // Some embedded platforms may not have, eg, string.h available, so if the build fails + // simply try again with the wasm sysroot (but without the wasm type sizes) in the hopes + // that it works. + base_config.include("wasm/wasm-sysroot"); + base_config.compile("libsecp256k1.a"); + } +} + +fn main() { + // Compile the C file + let mut build = Build::new(); + + build + .files([ + "../nostrdb.c", + "../sha256.c", + "../bech32.c", + "../deps/flatcc/src/runtime/json_parser.c", + "../deps/flatcc/src/runtime/verifier.c", + "../deps/flatcc/src/runtime/builder.c", + "../deps/flatcc/src/runtime/emitter.c", + "../deps/flatcc/src/runtime/refmap.c", + "../deps/lmdb/mdb.c", + "../deps/lmdb/midl.c", + ]) + .include("../deps/lmdb") + .include("../deps/flatcc/include") + .include("../deps/secp256k1/include") + // Add other include paths + //.flag("-Wall") + .flag("-Wno-misleading-indentation") + .flag("-Wno-unused-function") + //.flag("-Werror") + //.flag("-g") + .compile("libnostrdb.a"); + + secp256k1_build(); + + // Re-run the build script if any of the C files or headers change + for file in &[ + "../nostrdb.c", + "../sha256.c", + "../bech32.c", + // Add all your C source files here + "../nostrdb.h", + "../sha256.h", + // Add all your header files here + ] { + println!("cargo:rerun-if-changed={}", file); + } + + //println!("cargo:rustc-link-search=native=deps/lmdb"); + //println!("cargo:rustc-link-lib=static=lmdb"); + //println!("cargo:rustc-link-search=native=deps/secp256k1/.libs"); + println!("cargo:rustc-link-lib=secp256k1"); + + // Print out the path to the compiled library + let out_path = PathBuf::from(env::var("OUT_DIR").unwrap()); + println!("cargo:rustc-link-search=native={}", out_path.display()); + println!("cargo:rustc-link-lib=static=nostrdb"); + + // The bindgen::Builder is the main entry point to bindgen, and lets you build up options for + // the resulting bindings. + let bindings = bindgen::Builder::default() + .header("../nostrdb.h") + .generate() + .expect("Unable to generate bindings"); + + // Write the bindings to the $OUT_DIR/bindings.rs file. + bindings + .write_to_file("src/bindings.rs") + .expect("Couldn't write bindings!"); +} diff --git a/src/lib.rs b/rust/src/lib.rs