more refactor

This commit is contained in:
LiBr
2026-04-10 20:34:14 +08:00
parent 8d31144741
commit 72123cc922
47 changed files with 868 additions and 365 deletions

View File

@@ -1 +1,3 @@
/target/
/binary/
/dist/

View File

@@ -16,9 +16,9 @@ checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb"
[[package]]
name = "cc"
version = "1.2.56"
version = "1.2.59"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aebf35691d1bfb0ac386a69bac2fde4dd276fb618cf8bf4f5318fe285e821bb2"
checksum = "b7a4d3ec6524d28a329fc53654bbadc9bdd7b0431f5d65f1a56ffb28a1ee5283"
dependencies = [
"find-msvc-tools",
"shlex",
@@ -53,15 +53,15 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
[[package]]
name = "itoa"
version = "1.0.17"
version = "1.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2"
checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
[[package]]
name = "js-sys"
version = "0.3.91"
version = "0.3.94"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b49715b7073f385ba4bc528e5747d02e66cb39c6146efb66b781f131f0fb399c"
checksum = "2e04e2ef80ce82e13552136fabeef8a5ed1f985a96805761cbb9a2c34e7664d9"
dependencies = [
"once_cell",
"wasm-bindgen",
@@ -79,9 +79,9 @@ checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
[[package]]
name = "once_cell"
version = "1.21.3"
version = "1.21.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
[[package]]
name = "openssl"
@@ -150,9 +150,9 @@ dependencies = [
[[package]]
name = "quote"
version = "1.0.44"
version = "1.0.45"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4"
checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924"
dependencies = [
"proc-macro2",
]
@@ -237,9 +237,9 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
[[package]]
name = "wasm-bindgen"
version = "0.2.114"
version = "0.2.117"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6532f9a5c1ece3798cb1c2cfdba640b9b3ba884f5db45973a6f442510a87d38e"
checksum = "0551fc1bb415591e3372d0bc4780db7e587d84e2a7e79da121051c5c4b89d0b0"
dependencies = [
"cfg-if",
"once_cell",
@@ -250,9 +250,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro"
version = "0.2.114"
version = "0.2.117"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "18a2d50fcf105fb33bb15f00e7a77b772945a2ee45dcf454961fd843e74c18e6"
checksum = "7fbdf9a35adf44786aecd5ff89b4563a90325f9da0923236f6104e603c7e86be"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@@ -260,9 +260,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro-support"
version = "0.2.114"
version = "0.2.117"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "03ce4caeaac547cdf713d280eda22a730824dd11e6b8c3ca9e42247b25c631e3"
checksum = "dca9693ef2bab6d4e6707234500350d8dad079eb508dca05530c85dc3a529ff2"
dependencies = [
"bumpalo",
"proc-macro2",
@@ -273,18 +273,18 @@ dependencies = [
[[package]]
name = "wasm-bindgen-shared"
version = "0.2.114"
version = "0.2.117"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "75a326b8c223ee17883a4251907455a2431acc2791c98c26279376490c378c16"
checksum = "39129a682a6d2d841b6c429d0c51e5cb0ed1a03829d8b3d1e69a011e62cb3d3b"
dependencies = [
"unicode-ident",
]
[[package]]
name = "web-sys"
version = "0.3.91"
version = "0.3.94"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "854ba17bb104abfb26ba36da9729addc7ce7f06f5c0f90f3c391f8461cca21f9"
checksum = "cd70027e39b12f0849461e08ffc50b9cd7688d942c1c8e3c7b22273236b4dd0a"
dependencies = [
"js-sys",
"wasm-bindgen",

View File

@@ -5,18 +5,19 @@ edition = "2021"
[lib]
crate-type = ["cdylib", "rlib"]
path = "rust-src/lib.rs"
[build-dependencies]
cc = "1"
[dependencies]
js-sys = "0.3"
js-sys = "0.3.94"
openssl = "0.10.75"
openssl-sys = { path = "vendor/openssl-sys" }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
wasm-bindgen = "0.2.100"
web-sys = { version = "0.3", features = ["Window", "Crypto"] }
wasm-bindgen = "0.2.117"
web-sys = { version = "0.3.94", features = ["Window", "Crypto"] }
[patch.crates-io]
openssl-sys = { path = "vendor/openssl-sys" }

11
wasm/openssl/build.mjs Normal file
View File

@@ -0,0 +1,11 @@
import { cp, mkdir, rm } from "node:fs/promises"
import { dirname, resolve } from "node:path"
import { fileURLToPath } from "node:url"
const packageDir = dirname(fileURLToPath(import.meta.url))
const sourceDir = resolve(packageDir, "src")
const distDir = resolve(packageDir, "dist")
await rm(distDir, { recursive: true, force: true })
await mkdir(distDir, { recursive: true })
await cp(sourceDir, distDir, { recursive: true })

View File

@@ -1,6 +1,6 @@
fn main() {
cc::Build::new()
.file("src/c_shim/vsnprintf_shim.c")
.file("rust-src/c_shim/vsnprintf_shim.c")
.flag_if_supported("-std=c99")
.compile("vsnprintf_shim");
}

View File

@@ -4,8 +4,42 @@ set -euo pipefail
ROOT_DIR="$(cd "$(dirname "$0")" && pwd)"
cd "$ROOT_DIR"
OPENSSL_ROOT="/Users/libr/Desktop/Life/browser-apple/openssl-wasm/precompiled"
LLVM_BIN="/opt/homebrew/opt/llvm/bin"
OPENSSL_ROOT="${OPENSSL_ROOT:-${OPENSSL_PRECOMPILED_DIR:-$ROOT_DIR/precompiled}}"
LLVM_BIN="${LLVM_BIN:-}"
if [[ ! -d "$OPENSSL_ROOT" ]]; then
echo "OpenSSL precompiled directory not found: $OPENSSL_ROOT" >&2
echo "Set OPENSSL_ROOT or OPENSSL_PRECOMPILED_DIR to a directory containing include/ and lib/." >&2
exit 1
fi
if [[ -z "$LLVM_BIN" ]] && command -v brew >/dev/null 2>&1; then
BREW_LLVM_PREFIX="$(brew --prefix llvm 2>/dev/null || true)"
if [[ -n "$BREW_LLVM_PREFIX" && -x "$BREW_LLVM_PREFIX/bin/clang" ]]; then
LLVM_BIN="$BREW_LLVM_PREFIX/bin"
fi
fi
if [[ -n "$LLVM_BIN" ]]; then
CLANG_BIN="$LLVM_BIN/clang"
LLVM_AR_BIN="$LLVM_BIN/llvm-ar"
LLVM_RANLIB_BIN="$LLVM_BIN/llvm-ranlib"
else
CLANG_BIN="${CLANG_BIN:-$(command -v clang || true)}"
LLVM_AR_BIN="${LLVM_AR_BIN:-$(command -v llvm-ar || true)}"
LLVM_RANLIB_BIN="${LLVM_RANLIB_BIN:-$(command -v llvm-ranlib || true)}"
fi
if [[ -z "$CLANG_BIN" || -z "$LLVM_AR_BIN" || -z "$LLVM_RANLIB_BIN" ]]; then
echo "LLVM tools for wasm32-unknown-unknown are not available." >&2
echo "Set LLVM_BIN or CLANG_BIN/LLVM_AR_BIN/LLVM_RANLIB_BIN." >&2
exit 1
fi
if ! command -v wasm-bindgen >/dev/null 2>&1; then
echo "Missing wasm-bindgen CLI. Install it with: cargo install wasm-bindgen-cli" >&2
exit 1
fi
export OPENSSL_NO_VENDOR=1
export OPENSSL_STATIC=1
@@ -14,22 +48,18 @@ export OPENSSL_LIB_DIR="$OPENSSL_ROOT/lib"
export OPENSSL_INCLUDE_DIR="$OPENSSL_ROOT/include"
export OPENSSL_LIBS="ssl:crypto"
export CC_wasm32_unknown_unknown="$LLVM_BIN/clang --target=wasm32-unknown-unknown"
export AR_wasm32_unknown_unknown="$LLVM_BIN/llvm-ar"
export RANLIB_wasm32_unknown_unknown="$LLVM_BIN/llvm-ranlib"
export CC_wasm32_unknown_unknown="$CLANG_BIN --target=wasm32-unknown-unknown"
export AR_wasm32_unknown_unknown="$LLVM_AR_BIN"
export RANLIB_wasm32_unknown_unknown="$LLVM_RANLIB_BIN"
echo "[1/2] Building wasm32-unknown-unknown with openssl-rs..."
cargo build --release --target wasm32-unknown-unknown
if command -v wasm-bindgen >/dev/null 2>&1; then
echo "[2/2] Generating JS bindings with wasm-bindgen..."
mkdir -p pkg
wasm-bindgen \
target/wasm32-unknown-unknown/release/openssl_wasm.wasm \
--out-dir pkg \
--target web
echo "Done: pkg/ generated."
else
echo "[2/2] wasm-bindgen CLI not found; skipped JS binding generation."
echo "Install via: cargo install wasm-bindgen-cli"
fi
echo "[2/2] Generating JS bindings with wasm-bindgen..."
rm -rf binary
mkdir -p binary
wasm-bindgen \
target/wasm32-unknown-unknown/release/openssl_wasm.wasm \
--out-dir binary \
--target web
echo "Done: binary/ generated."

28
wasm/openssl/package.json Normal file
View File

@@ -0,0 +1,28 @@
{
"name": "@lbr77/openssl-wasm",
"version": "0.1.0",
"description": "OpenSSL WebAssembly package with stable src/dist/binary layout.",
"type": "module",
"main": "./dist/index.mjs",
"module": "./dist/index.mjs",
"types": "./dist/index.d.ts",
"exports": {
".": {
"types": "./dist/index.d.ts",
"default": "./dist/index.mjs"
},
"./package.json": "./package.json"
},
"files": [
"dist/**/*",
"binary/**/*",
"README.md"
],
"scripts": {
"build:binary": "bash ./build.sh",
"build:dist": "bun ./build.mjs",
"build": "bun run build:binary && bun run build:dist",
"clean": "rm -rf dist binary",
"prepack": "bun run build"
}
}

View File

@@ -38,6 +38,15 @@ static COUNT_STAT: AtomicUsize = AtomicUsize::new(0);
static COUNT_OPENDIR: AtomicUsize = AtomicUsize::new(0);
static ARC4_FALLBACK_SEED: AtomicUsize = AtomicUsize::new(0x9E37_79B9);
#[no_mangle]
pub static mut errno: c_int = 0;
#[no_mangle]
pub static CLOCK_REALTIME: c_int = 0;
#[no_mangle]
pub static _CLOCK_REALTIME: c_int = 0;
#[derive(Serialize)]
#[serde(rename_all = "camelCase")]
struct PairRecordWasmOut {

3
wasm/openssl/src/index.d.ts vendored Normal file
View File

@@ -0,0 +1,3 @@
export * from "../binary/openssl_wasm.js"
export default function ensureOpenSslWasmModuleReady(input?: unknown): Promise<void>

View File

@@ -0,0 +1,17 @@
import initOpenSslWasm from "../binary/openssl_wasm.js"
export * from "../binary/openssl_wasm.js"
let initPromise = null
/**
* Keep a stable ESM wrapper in `src/` so consumers always import the package
* entry, while the raw wasm-bindgen output stays isolated in `binary/`.
*/
export default async function ensureOpenSslWasmModuleReady(input) {
if (!initPromise) {
initPromise = Promise.resolve(initOpenSslWasm(input)).then(() => undefined)
}
await initPromise
}