X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=README.md;h=793d2ce8cf78f03086cf0598a2e9cf88119afb35;hb=0b84bd29ac3af544cb8c88a7f581dee337a89ac3;hp=daa27633f5644ee63f0d4cebfed9828153d07b2d;hpb=7eef16dd2917b78b61f266745479a5a57e24af1d;p=ldk-java diff --git a/README.md b/README.md index daa27633..793d2ce8 100644 --- a/README.md +++ b/README.md @@ -25,25 +25,44 @@ bindings should be built with workarounds required for Android. JNI CFLAGS on de When running a program linking against the library in debug mode, LD_PRELOAD should likely include the relevant `libclang_rt.asan-platform.so` path. +Note that building with address sanitizer is only supported on MacOS with upstream clang (ie where +the LLVM version in use matches the LLVM version against which rustc was built), not with Apple clang. +Builds with Apple clang will work fine, but largely only be useful in a release context. +To build on Mac with address sanitizer, you will need to run `ldk-c-bindings`' `genbindings.sh` +script with upstream clang in your PATH and likely replace your $JAVA_HOME/bin/java with a simple +wrapper which calls java after an export like: +`export DYLD_INSERT_LIBRARIES=/path/to/upstream/llvm/lib/clang/12.0.0/lib/darwin/libclang_rt.asan_osx_dynamic.dylib` + +To build for Apple M1 (ie aarch64-apple-darwin), you probably want something like +`CC="clang --target=aarch64-apple-darwin" LDK_TARGET=aarch64-apple-darwin LDK_TARGET_CPU=generic ./genbindings.sh ...` + Status ====== -The TypeScript Bindings are still in early development and generated code contains syntax errors. +## Java While the underlying library and C bindings are relatively mature, the Java bindings should be -considered alpha quality and some memory management issues may still appear. Specifically, because -the Java bindings map between two very different memory models - Rust's strict ownership model and -Java's reference cloning and garbage collection - a lot of work occurs in the background to keep -the Java GC informed of Rust ownership semantics. - -There are some known memory leaks, which are relatively modest in the existing test suite (around -1MB for 128 node constructions and 64 full channel constructions and payments sent), but which may -be less moderate in certain usages. The debug-mode build includes memory leak tracking and will -print all loose objects when the program exists, though without calls to -`System.gc(); System.runFinalization();` immediately before exit there will likely be many false -positives. While it will require some complicated usage, there are likely some use-after-free or -unkonwn-free bugs remaining. The debug-mode build links LLVM address sanitizer and will print -diagnostic information in case of such issues. +considered beta quality and some issues may still appear. Specifically, because the Java bindings +map between two very different memory models - Rust's strict ownership model and Java's reference +cloning and garbage collection - a lot of work occurs in the background to keep the Java GC +informed of Rust ownership semantics. + +The debug-mode build includes memory leak tracking and will print all loose objects when the +program exists, though without calls to `System.gc(); System.runFinalization();` immediately before +exit there will likely be many false positives. While it will require some complicated usage, there +are likely some use-after-free or unkonwn-free bugs remaining. The debug-mode build links LLVM +address sanitizer and will print diagnostic information in case of such issues. + +## TypeScript + +The TypeScript bindings are functionally complete, but should be considered early alpha quality. +Some functions may error spuriously due to oversights or missing implementations. + +The TypeScript bindings require modern web standards, including support for `FinalizationRegistry` +and `WeakRef` (Chrome 84, Firefox 79, Safari 14.1/iOS 14.5 and Node 14.6) and WASM BigInt support +(Chrome 85, Firefox 78, Safari 14.1/iOS 14.5, and Node ??). + +## General The only known issue resulting in a use-after-free bug requires custom a custom ChannelKeys instance created as a part of a new channel. After the channel is created, the ChannelKeys object will not