rgb-cln/contrib/libhsmd_python/setup.py

247 lines
8.5 KiB
Python

#!/usr/bin/env python
import os
import pathlib
import subprocess
from setuptools import Extension, setup
from setuptools.command.build_ext import build_ext as build_ext_orig
cwd = pathlib.Path(os.path.dirname(__file__))
class ClExtension(Extension):
def __init__(self, name, **kwargs):
# don't invoke the original build_ext for this special extension
super().__init__(name, **kwargs)
# The directory we compile external depencies is architecture specific.
external_target = pathlib.Path("external") / subprocess.check_output(
["gcc", "-dumpmachine"]
).strip().decode("ASCII")
class build_ext(build_ext_orig):
def run(self):
for ext in self.extensions:
self.build_make(ext)
super().run()
def build_make(self, ext):
cwd = pathlib.Path().absolute()
srcdir = cwd / "src"
if not srcdir.exists():
subprocess.check_call(
[
"git",
"clone",
"--recursive",
'--branch=libhsmd-python',
"https://github.com/cdecker/lightning.git",
"src",
],
cwd=cwd,
)
subprocess.check_call([
"./configure",
"--disable-developer",
"--disable-valgrind",
"CC=gcc"
], cwd=cwd / "src")
# Selectively build some targets we rely on later
subprocess.check_call(["make", "lightningd/lightning_hsmd"], cwd=srcdir)
# Absolute include dirs which we will later expand to full paths.
include_dirs = [
".",
"ccan/",
f"{external_target}/libbacktrace-build/",
"external/libbacktrace/",
"external/libsodium/src/libsodium/include/sodium/",
"external/libwally-core/",
"external/libwally-core/include/",
"external/libwally-core/src/",
"external/libwally-core/src/ccan/",
"external/libwally-core/src/secp256k1/",
"external/libwally-core/src/secp256k1/include/",
"external/libwally-core/src/secp256k1/src",
'contrib/libhsmd_python/',
]
sources = [
"bitcoin/block.c",
"bitcoin/chainparams.c",
"bitcoin/preimage.c",
"bitcoin/privkey.c",
"bitcoin/psbt.c",
"bitcoin/pubkey.c",
"bitcoin/script.c",
"bitcoin/shadouble.c",
"bitcoin/short_channel_id.c",
"bitcoin/signature.c",
"bitcoin/tx.c",
"bitcoin/varint.c",
"ccan/ccan/breakpoint/breakpoint.c",
"ccan/ccan/crypto/hkdf_sha256/hkdf_sha256.c",
"ccan/ccan/crypto/hmac_sha256/hmac_sha256.c",
"ccan/ccan/crypto/shachain/shachain.c",
"ccan/ccan/crypto/siphash24/siphash24.c",
"ccan/ccan/err/err.c",
"ccan/ccan/fdpass/fdpass.c",
"ccan/ccan/htable/htable.c",
"ccan/ccan/intmap/intmap.c",
"ccan/ccan/io/fdpass/fdpass.c",
"ccan/ccan/io/io.c",
"ccan/ccan/io/poll.c",
"ccan/ccan/isaac/isaac64.c",
"ccan/ccan/list/list.c",
"ccan/ccan/noerr/noerr.c",
"ccan/ccan/ptr_valid/ptr_valid.c",
"ccan/ccan/read_write_all/read_write_all.c",
"ccan/ccan/str/hex/hex.c",
"ccan/ccan/take/take.c",
"ccan/ccan/tal/str/str.c",
"ccan/ccan/tal/tal.c",
"ccan/ccan/time/time.c",
"ccan/ccan/timer/timer.c",
"ccan/ccan/utf8/utf8.c",
"common/amount.c",
"common/autodata.c",
"common/bigsize.c",
"common/bip32.c",
"common/bolt12_merkle.c",
"common/channel_id.c",
"common/daemon.c",
"common/daemon_conn.c",
"common/derive_basepoints.c",
"common/hash_u5.c",
"common/hsm_encryption.c",
"common/key_derive.c",
"common/memleak.c",
"common/msg_queue.c",
"common/node_id.c",
"common/pseudorand.c",
"common/setup.c",
"common/status.c",
"common/status_levels.c",
"common/status_wire.c",
"common/status_wiregen.c",
"common/subdaemon.c",
"common/type_to_string.c",
"common/utils.c",
"common/utxo.c",
"common/version.c",
"contrib/libhsmd_python/shims.c",
"contrib/libhsmd_python/swig_wrap.c",
"external/libbacktrace/alloc.c",
"external/libbacktrace/backtrace.c",
"external/libbacktrace/fileline.c",
"external/libbacktrace/posix.c",
"external/libbacktrace/print.c",
"external/libbacktrace/simple.c",
"external/libbacktrace/state.c",
"external/libbacktrace/unknown.c",
"external/libsodium/src/libsodium/crypto_core/ed25519/ref10/ed25519_ref10.c",
"external/libsodium/src/libsodium/crypto_core/hchacha20/core_hchacha20.c",
"external/libsodium/src/libsodium/crypto_core/salsa/ref/core_salsa_ref.c",
"external/libsodium/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-ref.c",
"external/libsodium/src/libsodium/crypto_generichash/blake2b/ref/blake2b-ref.c",
"external/libsodium/src/libsodium/crypto_generichash/blake2b/ref/generichash_blake2b.c",
"external/libsodium/src/libsodium/crypto_onetimeauth/poly1305/donna/poly1305_donna.c",
"external/libsodium/src/libsodium/crypto_onetimeauth/poly1305/onetimeauth_poly1305.c",
"external/libsodium/src/libsodium/crypto_pwhash/argon2/argon2-core.c",
"external/libsodium/src/libsodium/crypto_pwhash/argon2/argon2-fill-block-ref.c",
"external/libsodium/src/libsodium/crypto_pwhash/argon2/blake2b-long.c",
"external/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/x25519_ref10.c",
"external/libsodium/src/libsodium/crypto_scalarmult/curve25519/scalarmult_curve25519.c",
"external/libsodium/src/libsodium/crypto_secretstream/xchacha20poly1305/secretstream_xchacha20poly1305.c",
"external/libsodium/src/libsodium/crypto_stream/chacha20/ref/chacha20_ref.c",
"external/libsodium/src/libsodium/crypto_stream/chacha20/stream_chacha20.c",
"external/libsodium/src/libsodium/crypto_stream/salsa20/ref/salsa20_ref.c",
"external/libsodium/src/libsodium/crypto_stream/salsa20/stream_salsa20.c",
"external/libsodium/src/libsodium/crypto_verify/sodium/verify.c",
"external/libsodium/src/libsodium/randombytes/randombytes.c",
"external/libsodium/src/libsodium/randombytes/sysrandom/randombytes_sysrandom.c",
"external/libsodium/src/libsodium/sodium/core.c",
"external/libsodium/src/libsodium/sodium/runtime.c",
"external/libsodium/src/libsodium/sodium/utils.c",
"external/libwally-core/src/base58.c",
"external/libwally-core/src/bip32.c",
"external/libwally-core/src/ccan/ccan/base64/base64.c",
"external/libwally-core/src/ccan/ccan/crypto/ripemd160/ripemd160.c",
"external/libwally-core/src/ccan/ccan/crypto/sha256/sha256.c",
"external/libwally-core/src/ccan/ccan/crypto/sha512/sha512.c",
"external/libwally-core/src/hex.c",
"external/libwally-core/src/hmac.c",
"external/libwally-core/src/internal.c",
"external/libwally-core/src/psbt.c",
"external/libwally-core/src/pullpush.c",
"external/libwally-core/src/script.c",
"external/libwally-core/src/secp256k1/src/secp256k1.c",
"external/libwally-core/src/sign.c",
"external/libwally-core/src/transaction.c",
"hsmd/hsmd_wiregen.c",
"hsmd/libhsmd.c",
"hsmd/libhsmd_status.c",
"contrib/libhsmd_python/libhsmd_python.c",
"wire/fromwire.c",
"wire/peer_wire.c",
"wire/peer_wiregen.c",
"wire/tlvstream.c",
"wire/towire.c",
"wire/wire_io.c",
"wire/wire_sync.c",
]
include_dirs = [os.path.join("src", f) for f in include_dirs]
sources = [os.path.join("src", f) for f in sources]
configtuples = []
if pathlib.Path('src/config.vars').exists():
configvars = open("src/config.vars", "r").readlines()
configtuples = [tuple(v.strip().split("=", 1)) for v in configvars]
libhsmd_module = ClExtension(
"_libhsmd",
libraries=["sodium"],
include_dirs=include_dirs,
define_macros=configtuples
+ [
("BUILD_ELEMENTS", "1"),
("SHACHAIN_BITS", "48"),
("USE_NUM_NONE", "1"),
("ECMULT_WINDOW_SIZE", "15"),
("ECMULT_GEN_PREC_BITS", "4"),
("USE_SCALAR_INV_BUILTIN", "1"),
("USE_FIELD_INV_BUILTIN", "1"),
("ENABLE_MODULE_EXTRAKEYS", "1"),
("ENABLE_MODULE_RECOVERY", "1"),
("ENABLE_MODULE_SCHNORRSIG", "1"),
("ENABLE_MODULE_ECDH", "1"),
],
sources=sources,
)
setup(
name="libhsmd",
version="0.10.0",
author="Christian Decker",
author_email="cdecker@blockstream.com",
description="""Python wrapper to the libhsmd library""",
url="https://github.com/ElementsProject/lightning/tree/master/contrib/libhsmd_python/",
ext_modules=[libhsmd_module],
py_modules=["libhsmd"],
cmdclass={
"build_ext": build_ext,
},
long_description=open(cwd / "README.md", "r").read(),
long_description_content_type="text/markdown",
license="BSD-MIT"
)