* libsql-ffi: Enable PIC for sqlite3mc build
I am seeing the following build error when building the libsql-ffi crate
on Linux/x86-64:
```
/usr/bin/ld:
/tmp/rustcYVhHYo/liblibsql_ffi-20adf4ca11d8e922.rlib(sqlite3mc.c.o):
relocation R_X86_64_32S against `.rodata' can not be used when making a
shared object; recompile with -fPIC
```
Let's turn on PIC for sqlite3mc to fix the problem.
* libsql-ffi: Fix sqlite3mc build under `cross`
We need to use the C compiler configured by `cross` with sqlite3mc;
otherwise we end up building with the host compiler, resulting in errors
like this:
```
= note: /usr/lib/gcc-cross/aarch64-linux-gnu/5/../../../../aarch64-linux-gnu/bin/ld: /tmp/rustcJ70WRo/liblibsql_ffi-5d7e6e8037dbda37.rlib(sqlite3mc.c.o): Relocations in generic ELF (EM: 62)
```
* libsql-ffi: Rewrite build_libsqlite3mc.sh in Rust
The bash shell script is turning out to be painful to run on Windows so
let's just rewrite the logic in Rust and place it in `build.rs`.
* chore: fix ffi build script again
* ffi: separate building and copying for cipher code
* build dylib if it doesn't exist
* fix wasm builds with ciphers
** DEEP, DEEP DRAFT **
The prebuilt library is from my fork:
https://github.com/psarna/SQLite3MultipleCiphers
The key is hardcoded to "heyhey".
After you run sqld with this patch, all data is encoded on disk
with a "heyhey" key. You can't read it directly from the file,
unless you use sqlite3mc's shell and start with
> PRAGMA KEY=heyhey;
, and then it gets properly decrypted.
** TODO **
1. We need to adopt SQLite3MultipleCiphers source code and integrate
with our build system, if we want to use it.
2. Pretty sure the hardcoded "heyhey" passphrase won't pass SOC2,
but I need to consult that with a lawyer.