Create new `InvoiceFeatures` object for Invoice-specific features
[rust-lightning] / genbindings.sh
index 29e6ac1867eb460f2d886ff4419e9eef2efa4077..241ed3e8c882fc1446c58a0fb151c08dcb77adad 100755 (executable)
@@ -6,7 +6,7 @@ set -x
 # Generate (and reasonably test) C bindings
 
 # First build the latest c-bindings-gen binary
-cd c-bindings-gen && cargo build && cd ..
+cd c-bindings-gen && cargo build --release && cd ..
 
 # Then wipe all the existing C bindings (because we're being run in the right directory)
 # note that we keep the few manually-generated files first:
@@ -20,12 +20,15 @@ mv ./mod.rs lightning-c-bindings/src/c_types/
 mv ./bitcoin lightning-c-bindings/src/
 
 # Finally, run the c-bindings-gen binary, building fresh bindings.
-SRC="$(pwd)/lightning/src"
 OUT="$(pwd)/lightning-c-bindings/src"
 OUT_TEMPL="$(pwd)/lightning-c-bindings/src/c_types/derived.rs"
 OUT_F="$(pwd)/lightning-c-bindings/include/rust_types.h"
 OUT_CPP="$(pwd)/lightning-c-bindings/include/lightningpp.hpp"
-RUST_BACKTRACE=1 ./c-bindings-gen/target/debug/c-bindings-gen $SRC/ $OUT/ lightning $OUT_TEMPL $OUT_F $OUT_CPP
+
+cd lightning
+RUSTC_BOOTSTRAP=1 cargo rustc --profile=check -- -Zunstable-options --pretty=expanded |
+       RUST_BACKTRACE=1 ../c-bindings-gen/target/release/c-bindings-gen $OUT/ lightning $OUT_TEMPL $OUT_F $OUT_CPP
+cd ..
 
 # Now cd to lightning-c-bindings, build the generated bindings, and call cbindgen to build a C header file
 PATH="$PATH:~/.cargo/bin"
@@ -41,8 +44,16 @@ HOST_PLATFORM="$(rustc --version --verbose | grep "host:")"
 if [ "$HOST_PLATFORM" = "host: x86_64-apple-darwin" ]; then
        # OSX sed is for some reason not compatible with GNU sed
        sed -i '' 's/typedef LDKnative.*Import.*LDKnative.*;//g' include/lightning.h
+
+       # stdlib.h doesn't exist in clang's wasm sysroot, and cbindgen
+       # doesn't actually use it anyway, so drop the import.
+       sed -i '' 's/#include <stdlib.h>//g' include/lightning.h
 else
        sed -i 's/typedef LDKnative.*Import.*LDKnative.*;//g' include/lightning.h
+
+       # stdlib.h doesn't exist in clang's wasm sysroot, and cbindgen
+       # doesn't actually use it anyway, so drop the import.
+       sed -i 's/#include <stdlib.h>//g' include/lightning.h
 fi
 
 # Finally, sanity-check the generated C and C++ bindings with demo apps:
@@ -168,6 +179,17 @@ else
        echo "WARNING: Can't use address sanitizer on non-Linux, non-OSX non-x86 platforms"
 fi
 
+if [ "$(rustc --print target-list | grep wasm32-wasi)" != "" ]; then
+       # Test to see if clang supports wasm32 as a target (which is needed to build rust-secp256k1)
+       echo "int main() {}" > genbindings_wasm_test_file.c
+       clang -nostdlib -o /dev/null --target=wasm32-wasi -Wl,--no-entry genbindings_wasm_test_file.c > /dev/null 2>&1 &&
+       # And if it does, build a WASM binary without capturing errors
+       cargo rustc -v --target=wasm32-wasi -- -C embed-bitcode=yes &&
+       CARGO_PROFILE_RELEASE_LTO=true cargo rustc -v --release --target=wasm32-wasi -- -C opt-level=s -C linker-plugin-lto -C lto ||
+       echo "Cannot build WASM lib as clang does not seem to support the wasm32-wasi target"
+       rm genbindings_wasm_test_file.c
+fi
+
 # Now build with LTO on on both C++ and rust, but without cross-language LTO:
 CARGO_PROFILE_RELEASE_LTO=true cargo rustc -v --release -- -C lto
 clang++ $CFLAGS -std=c++11 -flto -O2 demo.cpp target/release/libldk.a -ldl