X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;ds=sidebyside;f=genbindings.sh;h=5586569cec5b5069b94a401076263273de05c303;hb=HEAD;hp=b7ae3717c1008dcab9e2118f041c3b572b4f2dc4;hpb=46fda3feee34f3ee2be2d57f18301080da439ac7;p=ldk-c-bindings diff --git a/genbindings.sh b/genbindings.sh index b7ae371..db3e07a 100755 --- a/genbindings.sh +++ b/genbindings.sh @@ -180,11 +180,13 @@ pub mod $2 { echo "}" >> /tmp/$1-crate-source.txt cat /tmp/$1-crate-source.txt >> /tmp/crate-source.txt rm /tmp/$1-crate-source.txt + FEATURES="$(echo "$3\"" | sed 's/--features=/"/' | sed 's/,/", "/g')" + [ "$FEATURES" = '"' ] && FEATURES="" if is_gnu_sed; then - sed -E -i 's|#*'$1' = \{ .*|'$1' = \{ path = "'"$LIGHTNING_PATH"'/'$1'", default-features = false }|' lightning-c-bindings/Cargo.toml + sed -E -i 's|#*'$1' = \{ .*|'$1' = \{ path = "'"$LIGHTNING_PATH"'/'$1'", default-features = false, features = ['"$FEATURES"'] }|' lightning-c-bindings/Cargo.toml else # OSX sed is for some reason not compatible with GNU sed - sed -E -i '' 's|#*'$1' = \{ .*|'$1' = \{ path = "'"$LIGHTNING_PATH"'/'$1'", default-features = false }|' lightning-c-bindings/Cargo.toml + sed -E -i '' 's|#*'$1' = \{ .*|'$1' = \{ path = "'"$LIGHTNING_PATH"'/'$1'", default-features = false, features = ['"$FEATURES"'] }|' lightning-c-bindings/Cargo.toml fi } @@ -204,13 +206,14 @@ if [ "$2" = "true" ]; then add_crate "lightning-background-processor" "lightning_background_processor" --features=std add_crate "lightning-invoice" "lightning_invoice" --features=std add_crate "lightning-rapid-gossip-sync" "lightning_rapid_gossip_sync" --features=std - CARGO_BUILD_ARGS="--features=std" + add_crate "lightning-transaction-sync" "lightning_transaction_sync" --features=esplora-blocking,electrum else add_crate lightning lightning --features=no-std drop_crate "lightning-persister" add_crate "lightning-background-processor" "lightning_background_processor" --features=no-std - add_crate "lightning-rapid-gossip-sync" "lightning_rapid_gossip_sync" --features=no-std add_crate "lightning-invoice" "lightning_invoice" --features=no-std + add_crate "lightning-rapid-gossip-sync" "lightning_rapid_gossip_sync" --features=no-std + drop_crate "lightning-transaction-sync" CARGO_BUILD_ARGS="--features=no-std" fi @@ -374,18 +377,32 @@ function REALLY_PIN_CC { # -Zbuild-std fails if we have any dependencies of build-deps, which # cc added in 1.0.80, thus we pin back to 1.0.79 to avoid that. cargo update -p cc --precise "1.0.79" --verbose - ( cargo build --features=std -v --release -Zbuild-std=std,panic_abort > /dev/null 2>&1 ) || echo -n - ( cargo build --features=std -v --release --target aarch64-apple-darwin -Zbuild-std=std,panic_abort > /dev/null 2>&1 ) || echo -n + ( RUSTC_BOOTSTRAP=1 cargo build --features=std -v --release --target x86_64-apple-darwin -Zbuild-std=std,panic_abort > /dev/null 2>&1 ) || echo -n + ( RUSTC_BOOTSTRAP=1 cargo build --features=std -v --release --target aarch64-apple-darwin -Zbuild-std=std,panic_abort > /dev/null 2>&1 ) || echo -n + pushd ../deterministic-build-wrappers/compiler-builtins-dummy + cargo build > /dev/null 2>&1 || echo -n + popd # Sadly, std also depends on cc, and we can't pin it in that tree # directly. Instead, we have to delete the file out of the cargo # registry and build --offline to avoid it using the latest version. NEW_CC_DEP="$CARGO_HOME" [ "$NEW_CC_DEP" = "" ] && NEW_CC_DEP="$HOME" - if [ -f "$NEW_CC_DEP/.cargo/registry/cache/github.com-"*/cc-1.0.79.crate ]; then - mv "$NEW_CC_DEP/.cargo/registry/cache/github.com-"*/cc-1.0.79.crate ./ + [ -d "$NEW_CC_DEP/.cargo/registry/cache/"github.com-* ] && CARGO_REGISTRY_CACHE="$(echo "$NEW_CC_DEP/.cargo/registry/cache/"github.com-*)" + [ -d "$NEW_CC_DEP/.cargo/registry/cache/"index.crates.io-* ] && CARGO_REGISTRY_CACHE="$(echo "$NEW_CC_DEP/.cargo/registry/cache/"index.crates.io-*)" + if [ -d "$CARGO_REGISTRY_CACHE" ]; then + if [ -f "$CARGO_REGISTRY_CACHE/compiler_builtins-0.1.109.crate" ]; then + mv "$CARGO_REGISTRY_CACHE/compiler_builtins-0.1.109.crate" ./ + fi + if [ -f "$CARGO_REGISTRY_CACHE/cc-1.0.79.crate" ]; then + mv "$CARGO_REGISTRY_CACHE/cc-1.0.79.crate" ./ + fi + rm -f "$CARGO_REGISTRY_CACHE/"cc-*.crate + [ -f ./cc-1.0.79.crate ] && mv ./cc-1.0.79.crate "$CARGO_REGISTRY_CACHE/" + rm -f "$CARGO_REGISTRY_CACHE/"compiler_builtins-0.1.11*.crate + [ -f ./compiler_builtins-0.1.109.crate ] && mv ./compiler_builtins-0.1.109.crate "$CARGO_REGISTRY_CACHE/" + else + echo "Couldn't find cargo cache, build-std builds are likely to fail!" fi - rm -f "$NEW_CC_DEP/.cargo/registry/cache/github.com-"*/cc-*.crate - [ -f ./cc-1.0.79.crate ] && mv ./cc-1.0.79.crate "$NEW_CC_DEP/.cargo/registry/cache/github.com-"*/ } # Then, check with memory sanitizer, if we're on Linux and have rustc nightly @@ -508,20 +525,23 @@ if [ "$HOST_PLATFORM" = "x86_64-unknown-linux-gnu" ]; then RUSTFLAGS="$RUSTFLAGS --cfg=test_mod_pointers" RUSTC_BOOTSTRAP=1 cargo rustc $CARGO_BUILD_ARGS -v -- -Zsanitizer=address -Cforce-frame-pointers=yes || ( mv Cargo.toml.bk Cargo.toml; exit 1) mv Cargo.toml.bk Cargo.toml - # First the C demo app... - $CLANG $LOCAL_CFLAGS -fsanitize=address -g demo.c target/debug/libldk.a -ldl - ASAN_OPTIONS='detect_leaks=1 detect_invalid_pointer_pairs=1 detect_stack_use_after_return=1' ./a.out + # Sadly, address sanitizer appears to have had some regression on Debian and now fails to + # get past its init stage, so we disable it for now. - if [ "$2" = "true" ]; then - # ...then the C++ demo app - $CLANGPP $LOCAL_CFLAGS -std=c++11 -fsanitize=address -g demo.cpp target/debug/libldk.a -ldl - ASAN_OPTIONS='detect_leaks=1 detect_invalid_pointer_pairs=1 detect_stack_use_after_return=1' ./a.out >/dev/null - - # ...then the C++ demo app with the ldk_net network implementation - $CLANG $LOCAL_CFLAGS -fPIC -fsanitize=address -g -I../ldk-net ../ldk-net/ldk_net.c -c -o ldk_net.o - $CLANGPP $LOCAL_CFLAGS -std=c++11 -fsanitize=address -g -DREAL_NET -I../ldk-net ldk_net.o demo.cpp target/debug/libldk.a -ldl - ASAN_OPTIONS='detect_leaks=1 detect_invalid_pointer_pairs=1 detect_stack_use_after_return=1' ./a.out >/dev/null - fi + # First the C demo app... + #$CLANG $LOCAL_CFLAGS -fsanitize=address -g demo.c target/debug/libldk.a -ldl + #ASAN_OPTIONS='detect_leaks=1 detect_invalid_pointer_pairs=1 detect_stack_use_after_return=1' ./a.out + + #if [ "$2" = "true" ]; then + # # ...then the C++ demo app + # $CLANGPP $LOCAL_CFLAGS -std=c++11 -fsanitize=address -g demo.cpp target/debug/libldk.a -ldl + # ASAN_OPTIONS='detect_leaks=1 detect_invalid_pointer_pairs=1 detect_stack_use_after_return=1' ./a.out >/dev/null + + # # ...then the C++ demo app with the ldk_net network implementation + # $CLANG $LOCAL_CFLAGS -fPIC -fsanitize=address -g -I../ldk-net ../ldk-net/ldk_net.c -c -o ldk_net.o + # $CLANGPP $LOCAL_CFLAGS -std=c++11 -fsanitize=address -g -DREAL_NET -I../ldk-net ldk_net.o demo.cpp target/debug/libldk.a -ldl + # ASAN_OPTIONS='detect_leaks=1 detect_invalid_pointer_pairs=1 detect_stack_use_after_return=1' ./a.out >/dev/null + #fi else echo "WARNING: Please install clang-$RUSTC_LLVM_V and clang++-$RUSTC_LLVM_V to build with address sanitizer" fi