Skip to content

Commit f8f3544

Browse files
committed
[Python] Add python bindings hooks
1 parent 94769d9 commit f8f3544

File tree

3 files changed

+1659
-2
lines changed

3 files changed

+1659
-2
lines changed

genbindings.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,12 @@
3030
import csharp_strings
3131
from csharp_strings import Consts
3232
target = csharp_strings.Target.CSHARP
33+
elif sys.argv[6] == "python":
34+
import python_strings
35+
from python_strings import Consts
36+
target = python_strings.Target.PYTHON
3337
else:
34-
print("Only java, typescript, or c_sharp can be set for lang")
38+
print("Only java, typescript, python, or c_sharp can be set for lang")
3539
sys.exit(1)
3640

3741

genbindings.sh

Lines changed: 66 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,9 +121,74 @@ if [ "$2" = "c_sharp" ]; then
121121
$COMPILE $LINK -o liblightningjni_debug$LDK_TARGET_SUFFIX.so -g -fsanitize=address -shared-libasan -rdynamic -I"$1"/lightning-c-bindings/include/ $2 c_sharp/bindings.c "$1"/lightning-c-bindings/target/$LDK_TARGET/debug/libldk.a -lm
122122
else
123123
$COMPILE -o bindings.o -c -flto -O3 -I"$1"/lightning-c-bindings/include/ $2 c_sharp/bindings.c
124-
$COMPILE $LINK -o liblightningjni_release$LDK_TARGET_SUFFIX.so -Wl,--version-script=c_sharp/libcode.version -flto -O3 -Wl,--lto-O3 -Wl,-O3 -Wl,--version-script=c_sharp/libcode.version -I"$1"/lightning-c-bindings/include/ $2 bindings.o "$1"/lightning-c-bindings/target/$LDK_TARGET/release/libldk.a -lm
124+
$COMPILE $LINK -o liblightningjni_release$LDK_TARGET_SUFFIX.so -flto -O3 -Wl,--lto-O3 -Wl,-O3 -Wl,--version-script=c_sharp/libcode.version -I"$1"/lightning-c-bindings/include/ $2 bindings.o "$1"/lightning-c-bindings/target/$LDK_TARGET/release/libldk.a -lm
125125
llvm-strip liblightningjni_release$LDK_TARGET_SUFFIX.so
126126
fi
127+
elif [ "$2" = "python" ]; then
128+
TARGET_STRING="$LDK_TARGET"
129+
if [ "$TARGET_STRING" = "" ]; then
130+
# We assume clang-style $CC --version here, but worst-case we just get an empty suffix
131+
TARGET_STRING="$($CC --version | grep Target | awk '{ print $2 }')"
132+
fi
133+
case "$TARGET_STRING" in
134+
"x86_64-pc-linux"*)
135+
LDK_TARGET_SUFFIX="_Linux-amd64"
136+
LDK_JAR_TARGET=true
137+
;;
138+
"x86_64-apple-darwin"*)
139+
LDK_TARGET_SUFFIX="_MacOSX-x86_64"
140+
LDK_JAR_TARGET=true
141+
;;
142+
"aarch64-apple-darwin"*)
143+
LDK_TARGET_CPU="apple-a14"
144+
LDK_TARGET_SUFFIX="_MacOSX-aarch64"
145+
LDK_JAR_TARGET=true
146+
;;
147+
*)
148+
LDK_TARGET_SUFFIX="_${TARGET_STRING}"
149+
esac
150+
if [ "$LDK_TARGET_CPU" = "" ]; then
151+
LDK_TARGET_CPU="sandybridge"
152+
fi
153+
154+
echo "Creating Python bindings..."
155+
mkdir -p python/src/{enums,structs,impl}
156+
rm -f python/src/{enums,structs,impl}/*.py
157+
./genbindings.py "./lightning.h" python/src/impl python/src python/ $DEBUG_ARG python $4
158+
rm -f python/bindings.c
159+
if [ "$3" = "true" ]; then
160+
echo "#define LDK_DEBUG_BUILD" > python/bindings.c
161+
elif [ "$3" = "leaks" ]; then
162+
# For leak checking we use release libldk which doesn't expose
163+
# __unmangle_inner_ptr, but the C code expects to be able to call it.
164+
echo "#define __unmangle_inner_ptr(a) (a)" > python/bindings.c
165+
fi
166+
echo "#define LDKCVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ LDKCVec_TransactionOutputsZ" >> python/bindings.c
167+
echo "#define CVec_C2Tuple_TxidCVec_C2Tuple_u32TxOutZZZZ_free CVec_TransactionOutputsZ_free" >> python/bindings.c
168+
cat python/bindings.c.body >> python/bindings.c
169+
170+
IS_MAC=false
171+
[ "$($CC --version | grep apple-darwin)" != "" ] && IS_MAC=true
172+
IS_APPLE_CLANG=false
173+
[ "$($CC --version | grep "Apple clang version")" != "" ] && IS_APPLE_CLANG=true
174+
175+
echo "Building Python bindings..."
176+
COMPILE="$COMMON_COMPILE -mcpu=$LDK_TARGET_CPU -Isrc/main/jni -pthread -fPIC"
177+
LINK="-ldl -shared"
178+
[ "$IS_MAC" = "false" ] && LINK="$LINK -Wl,--no-undefined"
179+
[ "$IS_MAC" = "true" ] && COMPILE="$COMPILE -mmacosx-version-min=10.9"
180+
[ "$IS_MAC" = "true" -a "$IS_APPLE_CLANG" = "false" ] && LINK="$LINK -fuse-ld=lld"
181+
[ "$IS_MAC" = "true" -a "$IS_APPLE_CLANG" = "false" ] && echo "WARNING: Need at least upstream clang 13!"
182+
[ "$IS_MAC" = "false" -a "$3" != "false" ] && LINK="$LINK -Wl,-wrap,calloc -Wl,-wrap,realloc -Wl,-wrap,malloc -Wl,-wrap,free"
183+
184+
exit 0 # Sadly compilation doesn't currently work
185+
if [ "$3" = "true" ]; then
186+
$COMPILE $LINK -o liblightningpython_debug$LDK_TARGET_SUFFIX.so -g -fsanitize=address -shared-libasan -rdynamic -I"$1"/lightning-c-bindings/include/ $2 c_sharp/bindings.c "$1"/lightning-c-bindings/target/$LDK_TARGET/debug/libldk.a -lm
187+
else
188+
$COMPILE -o bindings.o -c -flto -O3 -I"$1"/lightning-c-bindings/include/ $2 c_sharp/bindings.c
189+
$COMPILE $LINK -o liblightningpython_release$LDK_TARGET_SUFFIX.so -Wl,--version-script=python/libcode.version -flto -O3 -Wl,--lto-O3 -Wl,-O3 -I"$1"/lightning-c-bindings/include/ $2 bindings.o "$1"/lightning-c-bindings/target/$LDK_TARGET/release/libldk.a -lm
190+
llvm-strip liblightningpython_release$LDK_TARGET_SUFFIX.so
191+
fi
127192
elif [ "$2" = "wasm" ]; then
128193
echo "Creating TS bindings..."
129194
mkdir -p ts/{enums,structs}

0 commit comments

Comments
 (0)