This commit is contained in:
Simon Choi 2025-02-05 11:48:33 +01:00
parent e093d7db7b
commit 97f041d6be
2 changed files with 62 additions and 14 deletions

View File

@ -43,6 +43,10 @@ winsqlite3 = []
[dependencies]
openssl-sys = { version = "0.9", optional = true }
[target.wasm32-unknown-unknown.dependencies]
compiler-rt-builtins = "0.1"
wasm32-unknown-unknown-openbsd-libc = "0.2"
[build-dependencies]
bindgen = { version = "0.66", optional = true, default-features = false, features = ["runtime"] }
pkg-config = { version = "0.3.19", optional = true }

View File

@ -115,22 +115,15 @@ mod build_bundled {
.flag("-DSQLITE_CORE")
.flag("-DSQLITE_DEFAULT_FOREIGN_KEYS=1")
.flag("-DSQLITE_ENABLE_API_ARMOR")
.flag("-DSQLITE_ENABLE_COLUMN_METADATA")
.flag("-DSQLITE_ENABLE_DBSTAT_VTAB")
.flag("-DSQLITE_ENABLE_FTS3")
.flag("-DSQLITE_ENABLE_FTS3_PARENTHESIS")
.flag("-DSQLITE_ENABLE_FTS5")
.flag("-DSQLITE_ENABLE_JSON1")
.flag("-DSQLITE_ENABLE_LOAD_EXTENSION=1")
.flag("-DSQLITE_ENABLE_MEMORY_MANAGEMENT")
.flag("-DSQLITE_ENABLE_RTREE")
.flag("-DSQLITE_ENABLE_STAT2")
.flag("-DSQLITE_ENABLE_STAT4")
.flag("-DSQLITE_SOUNDEX")
.flag("-DSQLITE_THREADSAFE=1")
.flag("-DSQLITE_USE_URI")
.flag("-DHAVE_USLEEP=1")
.flag("-D_POSIX_THREAD_SAFE_FUNCTIONS") // cross compile with MinGW
.flag("-DSQLITE_DEFAULT_MEMSTATUS=0")
.flag("-DSQLITE_MAX_EXPR_DEPTH=0")
.flag("-DSQLITE_OMIT_DECLTYPE")
.flag("-DSQLITE_OMIT_DEPRECATED")
.flag("-DSQLITE_OMIT_PROGRESS_CALLBACK")
.flag("-DSQLITE_LIKE_DOESNT_MATCH_BLOBS")
.warnings(false);
if cfg!(feature = "bundled-sqlcipher") {
@ -234,7 +227,7 @@ mod build_bundled {
if vs_has_nan {
cfg.flag("-DHAVE_ISNAN");
}
} else {
} else if env::var("TARGET") != Ok("wasm32-unknown-unknown".to_string()) {
cfg.flag("-DHAVE_ISNAN");
}
if !win_target() {
@ -249,6 +242,57 @@ mod build_bundled {
cfg.file("sqlite3/wasm32-wasi-vfs.c");
}
}
if env::var("TARGET") == Ok("wasm32-unknown-unknown".to_string()) {
// Apple clang doesn't support wasm32, so use Homebrew clang by default.
if env::var("HOST") == Ok("x86_64-apple-darwin".to_string()) {
if env::var("CC").is_err() {
std::env::set_var("CC", "/usr/local/opt/llvm/bin/clang");
}
if env::var("AR").is_err() {
std::env::set_var("AR", "/usr/local/opt/llvm/bin/llvm-ar");
}
} else if env::var("HOST") == Ok("aarch64-apple-darwin".to_string()) {
if env::var("CC").is_err() {
std::env::set_var("CC", "/opt/homebrew/opt/llvm/bin/clang");
}
if env::var("AR").is_err() {
std::env::set_var("AR", "/opt/homebrew/opt/llvm/bin/llvm-ar");
}
}
cfg.flag("-DSQLITE_OS_OTHER")
.flag("-DSQLITE_TEMP_STORE=3")
.flag("-DSQLITE_OMIT_LOCALTIME")
.flag("-Wno-incompatible-library-redeclaration");
let supported_features = [
"atomics",
"bulk-memory",
"exception-handling",
"multivalue",
"mutable-globals",
"nontrapping-fptoint",
"reference-types",
"relaxed-simd",
"sign-ext",
"simd128",
];
for feature in env::var("CARGO_CFG_TARGET_FEATURE")
.unwrap_or_default()
.split(',')
{
if supported_features.contains(&feature) {
cfg.flag(&format!("-m{feature}"));
}
}
cfg.include(
std::env::var_os("DEP_WASM32_UNKNOWN_UNKNOWN_OPENBSD_LIBC_INCLUDE").unwrap(),
);
println!("cargo:rustc-link-lib=compiler-rt-builtins");
println!("cargo:rustc-link-lib=wasm32-unknown-unknown-openbsd-libc");
}
if cfg!(feature = "unlock_notify") {
cfg.flag("-DSQLITE_ENABLE_UNLOCK_NOTIFY");
}