Don't build headers for provider

This commit is contained in:
Fedor Indutny 2024-10-18 16:04:08 -07:00
parent 7704614fd7
commit 3a451f704d
3 changed files with 19 additions and 43 deletions

View File

@ -26,8 +26,5 @@ rand_core = { version = "0.6.4", "default-features" = false, features = ["getran
sha2 = { version = "0.10.8", "default-features" = false }
signal-tokenizer = { git = "https://github.com/signalapp/Signal-FTS5-Extension" }
[features]
extension = ["signal-tokenizer/extension"]
[build-dependencies]
cbindgen = "0.27.0"

View File

@ -22,14 +22,8 @@ RUSTFLAGS="--cfg aes_armv8" cargo build --release
# Usage
Cryptography provider needs to be registered right before opening the database:
```c
int status = signal_register_crypto_provider();
assert(status == SQLITE_OK);
status = sqlite3_open_v2("path", &db, ...);
assert(status == SQLITE_OK);
```
The resulting `.a`/`.lib` file needs to be linked with sqlcipher, and built with
`-DSQLCIPHER_CRYPTO_CUSTOM=signal_crypto_provider_setup`.
# Legal things

View File

@ -1,12 +1,12 @@
extern crate cbindgen;
use cbindgen::{Config, EnumConfig, ItemType, Language, Style};
use cbindgen::{Config, EnumConfig, ExportConfig, ItemType, Language, Style};
use std::env;
fn main() {
let crate_dir = env::var("CARGO_MANIFEST_DIR").unwrap();
let config = Config {
let mut config = Config {
language: Language::C,
header: Some(
"/*\nCopyright (C) 2024 Signal Messenger, LLC.\nSPDX-License-Identifier: AGPL-3.0-only\n*/"
@ -18,54 +18,39 @@ fn main() {
prefix_with_name: true,
..Default::default()
},
include_guard: Some("SIGNAL_FTS5_TOKENIZER_H_".into()),
export: ExportConfig {
item_types: vec![
ItemType::Functions,
ItemType::OpaqueItems,
ItemType::Structs,
ItemType::Typedefs,
],
..Default::default()
},
..Default::default()
};
let mut ext_config = config.clone();
ext_config.include_guard = Some("SIGNAL_SQLCIPHER_EXTENSION_H".into());
ext_config.export.exclude = vec![
"sqlcipher_malloc".into(),
"sqlcipher_register_provider".into(),
"SqlCipherProvider".into(),
];
ext_config.export.item_types = vec![ItemType::Functions];
cbindgen::Builder::new()
.with_crate(crate_dir.clone())
.with_config(ext_config)
.generate()
.expect("Unable to generate bindings")
.write_to_file("target/signal-sqlcipher-ext.h");
let mut fts5_config = config.clone();
fts5_config.include_guard = Some("SIGNAL_FTS5_TOKENIZER_H_".into());
fts5_config.export.item_types = vec![
ItemType::Functions,
ItemType::OpaqueItems,
ItemType::Structs,
ItemType::Typedefs,
];
fts5_config
config
.export
.rename
.insert("Sqlite3".into(), "sqlite3".into());
fts5_config
config
.export
.rename
.insert("SqliteAPIRoutines3".into(), "sqlite3_api_routines".into());
fts5_config
config
.export
.rename
.insert("TokenFunction".into(), "sqlite3__fts5_token_fn".into());
fts5_config.defines.insert(
config.defines.insert(
"feature = extension".into(),
"SIGNAL_FTS5_TOKENIZER_EXTENSION_H_".into(),
);
cbindgen::Builder::new()
.with_crate_and_name(crate_dir, "signal-tokenizer")
.with_config(fts5_config)
.with_config(config)
.generate()
.expect("Unable to generate bindings")
.write_to_file("target/signal-tokenizer.h");