From a08363e77a6144ae0e1b904d34c5fbdc108722cc Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Thu, 24 Jul 2025 01:06:38 +0000 Subject: [PATCH 1/3] Add missing `unicode_width` dependency to `compiler-builtins-dummy` This fixes some Android and macOS builds using the the extra-targets path on Debian stable. --- deterministic-build-wrappers/compiler-builtins-dummy/Cargo.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/deterministic-build-wrappers/compiler-builtins-dummy/Cargo.toml b/deterministic-build-wrappers/compiler-builtins-dummy/Cargo.toml index efc013b..32b5bfe 100644 --- a/deterministic-build-wrappers/compiler-builtins-dummy/Cargo.toml +++ b/deterministic-build-wrappers/compiler-builtins-dummy/Cargo.toml @@ -9,3 +9,4 @@ gimli = "=0.25.0" object = "=0.26.2" addr2line = "=0.16.0" miniz_oxide = "=0.4.4" +unicode_width = "=0.2.1" From dc74e82ea1b0ef5fab7a8d59854dc14b66c6b6ea Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Thu, 24 Jul 2025 12:28:09 +0000 Subject: [PATCH 2/3] Help out cargo when it forgets to provide compiler_builtins --- deterministic-build-wrappers/rustc | 35 +++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/deterministic-build-wrappers/rustc b/deterministic-build-wrappers/rustc index 6a1162b..60c7116 100755 --- a/deterministic-build-wrappers/rustc +++ b/deterministic-build-wrappers/rustc @@ -8,11 +8,15 @@ args=("$@") IS_LIGHTNING=false SKIP_EMBED_BITCODE=false +MAY_NEED_COMPILER_BUILTINS=false +DEP_PATH="" for ((i=0; i<"${#args[@]}"; ++i)); do case ${args[i]} in --crate-name) if [ "${args[i+1]}" = "lightning" -o "${args[i+1]}" = "lightning_types" -o "${args[i+1]}" = "lightning_background_processor" -o "${args[i+1]}" = "lightning_invoice" -o "${args[i+1]}" = "lightning_persister" -o "${args[i+1]}" = "lightning_rapid_gossip_sync" -o "${args[i+1]}" = "lightning_liquidity" -o "${args[i+1]}" = "lightning_transaction_sync" -o "${args[i+1]}" = "ldk" ]; then IS_LIGHTNING=true + elif [ "${args[i+1]}" = "memchr" -o "${args[i+1]}" = "rustc_demangle" -o "${args[i+1]}" = "unwind" ]; then + MAY_NEED_COMPILER_BUILTINS=true fi ;; --crate-type) @@ -22,6 +26,10 @@ for ((i=0; i<"${#args[@]}"; ++i)); do SKIP_EMBED_BITCODE=true fi ;; + --extern) + IFS="=" PAIR=(${args[i+1]}) + DEP_PATH="$(dirname ${PAIR[1]})" + ;; esac done for ((i=0; i<"${#args[@]}"; ++i)); do @@ -44,4 +52,29 @@ for ((i=0; i<"${#args[@]}"; ++i)); do ;; esac done -$LDK_RUSTC_PATH "${args[@]}" + +# For some reason, sometimes when building with build-std cargo forgets to give crates a path to +# their `compiler_builtin` dependencies. This obviously shouldn't happen but we fix it here. +EXTRA_ARGS=() +if [ "$MAY_NEED_COMPILER_BUILTINS" = "true" ]; then + if [ -z "$DEP_PATH" ]; then + echo "WARNING: Need at least one other dependency to know where to look, build may to fail if cargo is buggy" > /dev/stderr + else + COUNT=0 + CB_PATH="$(echo "$DEP_PATH"/libcompiler_builtins-*.rmeta)" + while [ ! -f "$CB_PATH" ]; do + # Wait until compiler_builtins finishes building... + sleep 1 + COUNT="$(( $COUNT + 1 ))" + if [ "$COUNT" -gt 120 ]; then + echo "Took too long to get compiler_builtins built" > /dev/stderr + exit 1 + fi + CB_PATH="$(echo "$DEP_PATH"/libcompiler_builtins-*.rmeta)" + done + sleep 1 + EXTRA_ARGS=("--extern" compiler_builtins="$CB_PATH") + fi +fi + +$LDK_RUSTC_PATH "${args[@]}" "${EXTRA_ARGS[@]}" From 8ad23076d98d04a5d57568b0c4eb622c8422e555 Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Thu, 24 Jul 2025 21:53:36 +0000 Subject: [PATCH 3/3] Update our `Network` enum to include `rust-bitcoin`'s `Testnet4` Fixes https://github.com/lightningdevkit/ldk-garbagecollected/issues/174 --- lightning-c-bindings/demo.cpp | 2 +- lightning-c-bindings/include/lightning.h | 6 +++++- lightning-c-bindings/src/bitcoin/network.rs | 10 +++++++--- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/lightning-c-bindings/demo.cpp b/lightning-c-bindings/demo.cpp index bb7e239..d0431d3 100644 --- a/lightning-c-bindings/demo.cpp +++ b/lightning-c-bindings/demo.cpp @@ -564,7 +564,7 @@ int main() { LDKThirtyTwoBytes chain_tip; memset(&chain_tip, 0, sizeof(chain_tip)); // channel_open_header's prev_blockhash is all-0s - LDKNetwork network = LDKNetwork_Testnet; + LDKNetwork network = LDKNetwork_Testnet3; // Trait implementations: LDKBroadcasterInterface broadcast { diff --git a/lightning-c-bindings/include/lightning.h b/lightning-c-bindings/include/lightning.h index 47a5c62..17ef445 100644 --- a/lightning-c-bindings/include/lightning.h +++ b/lightning-c-bindings/include/lightning.h @@ -794,7 +794,11 @@ typedef enum LDKNetwork { /** * The testnet3 blockchain. */ - LDKNetwork_Testnet, + LDKNetwork_Testnet3, + /** + * The testnet4 blockchain. + */ + LDKNetwork_Testnet4, /** * A local test blockchain. */ diff --git a/lightning-c-bindings/src/bitcoin/network.rs b/lightning-c-bindings/src/bitcoin/network.rs index 08131cf..3c9b122 100644 --- a/lightning-c-bindings/src/bitcoin/network.rs +++ b/lightning-c-bindings/src/bitcoin/network.rs @@ -8,7 +8,9 @@ pub enum Network { /// The main Bitcoin blockchain. Bitcoin, /// The testnet3 blockchain. - Testnet, + Testnet3, + /// The testnet4 blockchain. + Testnet4, /// A local test blockchain. Regtest, /// A blockchain on which blocks are signed instead of mined. @@ -19,7 +21,8 @@ impl Network { pub(crate) fn into_bitcoin(&self) -> BitcoinNetwork { match self { Network::Bitcoin => BitcoinNetwork::Bitcoin, - Network::Testnet => BitcoinNetwork::Testnet, + Network::Testnet3 => BitcoinNetwork::Testnet, + Network::Testnet4 => BitcoinNetwork::Testnet4, Network::Regtest => BitcoinNetwork::Regtest, Network::Signet => BitcoinNetwork::Signet, } @@ -27,7 +30,8 @@ impl Network { pub(crate) fn from_bitcoin(net: &BitcoinNetwork) -> Self { match net { BitcoinNetwork::Bitcoin => Network::Bitcoin, - BitcoinNetwork::Testnet => Network::Testnet, + BitcoinNetwork::Testnet => Network::Testnet3, + BitcoinNetwork::Testnet4 => Network::Testnet4, BitcoinNetwork::Regtest => Network::Regtest, BitcoinNetwork::Signet => Network::Signet, _ => unreachable!(),