From dbf4f589876264819b2731e8a78304a40d3de27f Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Fri, 11 Sep 2020 19:31:13 -0400 Subject: [PATCH] Remove the bindings crate from the root namespace to let it break Until we get the bindings generation process super stable, let the bindings get stale with respect to the main repo while still letting `cargo check` pass. --- .github/workflows/build.yml | 10 +++------- Cargo.toml | 1 - genbindings.sh | 22 +++++++++++----------- lightning-c-bindings/Cargo.toml | 5 +++++ 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a7a620417..95372d729 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -17,16 +17,12 @@ jobs: include: - toolchain: stable build-net-tokio: true - build-bindings: true - toolchain: beta build-net-tokio: true - build-bindings: true - toolchain: 1.39.0 build-net-tokio: true - build-bindings: true coverage: true - toolchain: 1.34.2 - build-bindings: true runs-on: ubuntu-latest steps: - name: Checkout source code @@ -43,9 +39,6 @@ jobs: - name: Build on Rust ${{ matrix.toolchain }} if: "! matrix.build-net-tokio" run: RUSTFLAGS="-C link-dead-code" cargo build --verbose --color always -p lightning - - name: Build bindings on Rust ${{ matrix.toolchain }} - if: matrix.build-bindings - run: RUSTFLAGS="-C link-dead-code" cargo build --verbose --color always -p lightning-c-bindings - name: Test on Rust ${{ matrix.toolchain }} with net-tokio if: matrix.build-net-tokio run: RUSTFLAGS="-C link-dead-code" cargo test --verbose --color always @@ -127,6 +120,9 @@ jobs: apt-get -y install cargo valgrind lld git g++ clang - name: Checkout source code uses: actions/checkout@v2 + - name: Sanity test bindings + working-directory: lightning-c-bindings + run: cargo check - name: Install cbindgen run: cargo install --force cbindgen - name: Rebuild bindings, and check the sample app builds + links diff --git a/Cargo.toml b/Cargo.toml index 069e49e8b..03d58b202 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,7 +3,6 @@ members = [ "lightning", "lightning-net-tokio", - "lightning-c-bindings", ] # Our tests do actual crypo and lots of work, the tradeoff for -O1 is well worth it diff --git a/genbindings.sh b/genbindings.sh index c801c44c0..2d3d9ab6a 100755 --- a/genbindings.sh +++ b/genbindings.sh @@ -48,13 +48,13 @@ fi # Finally, sanity-check the generated C and C++ bindings with demo apps: # Naively run the C demo app: -gcc -Wall -g -pthread demo.c ../target/debug/liblightning.a -ldl +gcc -Wall -g -pthread demo.c target/debug/liblightning.a -ldl ./a.out # And run the C++ demo app in valgrind to test memory model correctness and lack of leaks. -g++ -std=c++11 -Wall -g -pthread demo.cpp -L../target/debug/ -llightning -ldl +g++ -std=c++11 -Wall -g -pthread demo.cpp -Ltarget/debug/ -llightning -ldl if [ -x "`which valgrind`" ]; then - LD_LIBRARY_PATH=../target/debug/ valgrind --error-exitcode=4 --memcheck:leak-check=full --show-leak-kinds=all ./a.out + LD_LIBRARY_PATH=target/debug/ valgrind --error-exitcode=4 --memcheck:leak-check=full --show-leak-kinds=all ./a.out echo else echo "WARNING: Please install valgrind for more testing" @@ -62,7 +62,7 @@ fi # Test a statically-linked C++ version, tracking the resulting binary size and runtime # across debug, LTO, and cross-language LTO builds (using the same compiler each time). -clang++ -std=c++11 -Wall -pthread demo.cpp ../target/debug/liblightning.a -ldl +clang++ -std=c++11 -Wall -pthread demo.cpp target/debug/liblightning.a -ldl ./a.out >/dev/null echo " C++ Bin size and runtime w/o optimization:" ls -lha a.out @@ -75,7 +75,7 @@ if [ "$HOST_PLATFORM" = "host: x86_64-unknown-linux-gnu" ]; then if [ -x "$(which clang-$LLVM_V)" ]; then cargo +nightly clean cargo +nightly rustc -Zbuild-std --target x86_64-unknown-linux-gnu -v -- -Zsanitizer=memory -Zsanitizer-memory-track-origins -Cforce-frame-pointers=yes - mv ../target/x86_64-unknown-linux-gnu/debug/liblightning.* ../target/debug/ + mv target/x86_64-unknown-linux-gnu/debug/liblightning.* target/debug/ # Sadly, std doesn't seem to compile into something that is memsan-safe as of Aug 2020, # so we'll always fail, not to mention we may be linking against git rustc LLVM which @@ -83,11 +83,11 @@ if [ "$HOST_PLATFORM" = "host: x86_64-unknown-linux-gnu" ]; then set +e # First the C demo app... - clang-$LLVM_V -std=c++11 -fsanitize=memory -fsanitize-memory-track-origins -Wall -g -pthread demo.c ../target/debug/liblightning.a -ldl + clang-$LLVM_V -std=c++11 -fsanitize=memory -fsanitize-memory-track-origins -Wall -g -pthread demo.c target/debug/liblightning.a -ldl ./a.out # ...then the C++ demo app - clang++-$LLVM_V -std=c++11 -fsanitize=memory -fsanitize-memory-track-origins -Wall -g -pthread demo.cpp ../target/debug/liblightning.a -ldl + clang++-$LLVM_V -std=c++11 -fsanitize=memory -fsanitize-memory-track-origins -Wall -g -pthread demo.cpp target/debug/liblightning.a -ldl ./a.out >/dev/null # restore exit-on-failure @@ -153,11 +153,11 @@ if [ "$HOST_PLATFORM" = "host: x86_64-unknown-linux-gnu" -o "$HOST_PLATFORM" = " mv Cargo.toml.bk Cargo.toml # First the C demo app... - $CLANG -fsanitize=address -Wall -g -pthread demo.c ../target/debug/liblightning.a -ldl + $CLANG -fsanitize=address -Wall -g -pthread demo.c target/debug/liblightning.a -ldl ASAN_OPTIONS='detect_leaks=1 detect_invalid_pointer_pairs=1 detect_stack_use_after_return=1' ./a.out # ...then the C++ demo app - $CLANGPP -std=c++11 -fsanitize=address -Wall -g -pthread demo.cpp ../target/debug/liblightning.a -ldl + $CLANGPP -std=c++11 -fsanitize=address -Wall -g -pthread demo.cpp target/debug/liblightning.a -ldl ASAN_OPTIONS='detect_leaks=1 detect_invalid_pointer_pairs=1 detect_stack_use_after_return=1' ./a.out >/dev/null else echo "WARNING: Please install clang-$RUSTC_LLVM_V and clang++-$RUSTC_LLVM_V to build with address sanitizer" @@ -168,7 +168,7 @@ fi # Now build with LTO on on both C++ and rust, but without cross-language LTO: cargo rustc -v --release -- -C lto -clang++ -std=c++11 -Wall -flto -O2 -pthread demo.cpp ../target/release/liblightning.a -ldl +clang++ -std=c++11 -Wall -flto -O2 -pthread demo.cpp target/release/liblightning.a -ldl echo "C++ Bin size and runtime with only RL (LTO) optimized:" ls -lha a.out time ./a.out > /dev/null @@ -180,7 +180,7 @@ if [ "$HOST_PLATFORM" != "host: x86_64-apple-darwin" -a "$CLANGPP" != "" ]; then # packaging than simply shipping the rustup binaries (eg Debian should Just Work # here). cargo rustc -v --release -- -C linker-plugin-lto -C lto -C link-arg=-fuse-ld=lld - $CLANGPP -Wall -std=c++11 -flto -fuse-ld=lld -O2 -pthread demo.cpp ../target/release/liblightning.a -ldl + $CLANGPP -Wall -std=c++11 -flto -fuse-ld=lld -O2 -pthread demo.cpp target/release/liblightning.a -ldl echo "C++ Bin size and runtime with cross-language LTO:" ls -lha a.out time ./a.out > /dev/null diff --git a/lightning-c-bindings/Cargo.toml b/lightning-c-bindings/Cargo.toml index 8280f3568..7e4a403e2 100644 --- a/lightning-c-bindings/Cargo.toml +++ b/lightning-c-bindings/Cargo.toml @@ -17,3 +17,8 @@ crate-type = ["staticlib" [dependencies] bitcoin = "0.24" lightning = { version = "0.0.11", path = "../lightning" } + +# We eventually want to join the root workspace, but for now, the bindings generation is +# a bit brittle and we don't want to hold up other developers from making changes just +# because they break the bindings +[workspace] -- 2.39.5