From 16f91f2492a8b33f1b7623d8e75392736ff2f6f4 Mon Sep 17 00:00:00 2001 From: Luca Vaccaro Date: Tue, 3 Dec 2019 22:43:52 +0100 Subject: [PATCH 1/3] Add clightning support --- .travis.yml | 2 +- Dockerfile | 2 +- buster_deps.sh | 2 +- fetchbuild.sh | 99 ++++++++++++++++++++++++++------- lightning-config.h | 90 ++++++++++++++++++++++++++++++ lightning-config.vars | 88 +++++++++++++++++++++++++++++ lightning-endian.patch | 17 ++++++ lightning-gen_header_versions.h | 29 ++++++++++ lightning-jsonrpc.patch | 69 +++++++++++++++++++++++ lightning-makefile.patch | 56 +++++++++++++++++++ run.sh | 2 +- 11 files changed, 433 insertions(+), 23 deletions(-) create mode 100644 lightning-config.h create mode 100644 lightning-config.vars create mode 100644 lightning-endian.patch create mode 100644 lightning-gen_header_versions.h create mode 100644 lightning-jsonrpc.patch create mode 100644 lightning-makefile.patch diff --git a/.travis.yml b/.travis.yml index 0ffc452..273e8d0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,7 +4,7 @@ services: env: global: - DOCKERBUILDER=greenaddress/core_builder_for_android - - DOCKERHASH=06e3e394f41bd389a11ce51a2bb4ec46ff082e86d25f4f90644aad5b4faaf0f1 + - DOCKERHASH=9e8e2dd9ea172a500e106a87fb116976e466e14d5cbac4307759961b946977a1 - REPO=https://github.com/bitcoin/bitcoin.git - COMMIT=1bc9988993ee84bc814e5a7f33cc90f670a19f6a - TARGETHOST=aarch64-linux-android diff --git a/Dockerfile b/Dockerfile index 047e580..ffe0be9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,3 +1,3 @@ -FROM debian:buster@sha256:41f76363fd83982e14f7644486e1fb04812b3894aa4e396137c3435eaf05de88 +FROM debian:buster@sha256:79f0b1682af1a6a29ff63182c8103027f4de98b22d8fb50040e9c4bb13e3de78 COPY /buster_deps.sh / RUN /buster_deps.sh diff --git a/buster_deps.sh b/buster_deps.sh index c2b3eb0..4f645ca 100755 --- a/buster_deps.sh +++ b/buster_deps.sh @@ -7,7 +7,7 @@ sha256_file=8381c440fe61fcbb01e209211ac01b519cd6adf51ab1c2281d5daad6ca4c8c8c apt-get -yqq update &> /dev/null apt-get -yqq upgrade &> /dev/null -apt-get -yqq install python curl build-essential libtool autotools-dev automake pkg-config bsdmainutils unzip git &> /dev/null +apt-get -yqq install python python3-{pip,virtualenv,mako} curl build-essential libtool autotools-dev automake pkg-config bsdmainutils unzip git gettext &> /dev/null mkdir -p /opt diff --git a/fetchbuild.sh b/fetchbuild.sh index a794a88..62905b1 100755 --- a/fetchbuild.sh +++ b/fetchbuild.sh @@ -9,25 +9,30 @@ configextra=$5 target_host=$6 bits=$7 - unpackdep() { - curl -sL -o tmp.tar.gz $1 - echo "$2 tmp.tar.gz" | sha256sum --check - tar xzf tmp.tar.gz - rm tmp.tar.gz + archive=$(basename $1) + curl -sL -o ${archive} $1 + echo "$2 ${archive}" | sha256sum --check + tar xf ${archive} + rm ${archive} } +# build lightning deps +LNBUILDROOT=$PWD/ln_build_root +mkdir $LNBUILDROOT export ANDROID_NDK_HOME=/opt/android-ndk-r20b export PATH=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin:${PATH} -export AR=${target_host/v7a/}-ar -export AS=${target_host}21-clang -export CC=${target_host}21-clang -export CXX=${target_host}21-clang++ -export LD=${target_host/v7a/}-ld +export AR=${target_host/v7a}-ar +export AS=${target_host}24-clang +export CC=${target_host}24-clang +export CXX=${target_host}24-clang++ +export LD=${target_host/v7a}-ld export STRIP=${target_host/v7a}-strip -export CFLAGS="-flto" -export LDFLAGS="$CFLAGS -pie -static-libstdc++ -fuse-ld=lld" +export LDFLAGS="-pie" +export MAKE_HOST=${target_host/v7a} +export HOST=${target_host/v7a} +export CONFIGURATOR_CC="/usr/bin/gcc" NDKARCH=arm if [ "$target_host" = "i686-linux-android" ]; then @@ -38,16 +43,67 @@ elif [ "$target_host" = "aarch64-linux-android" ]; then NDKARCH=arm64 fi -NDKV=19 -if [ "$bits" = "64" ]; then - NDKV=21 -fi - num_jobs=4 if [ -f /proc/cpuinfo ]; then num_jobs=$(grep ^processor /proc/cpuinfo | wc -l) fi +## build cln first + +# sqlite +unpackdep https://www.sqlite.org/2018/sqlite-autoconf-3260000.tar.gz 5daa6a3fb7d1e8c767cd59c4ded8da6e4b00c61d3b466d0685e35c4dd6d7bf5d +cd sqlite-autoconf-3260000 +./configure --enable-static --disable-readline --disable-threadsafe --host=${target_host} CC=$CC --prefix=${LNBUILDROOT} +make -j $num_jobs +make install +cd .. +rm -rf sqlite-autoconf-3260000 + +# gmp +unpackdep https://gmplib.org/download/gmp/gmp-6.1.2.tar.bz2 5275bb04f4863a13516b2f39392ac5e272f5e1bb8057b18aec1c9b79d73d8fb2 +cd gmp-6.1.2 +./configure --enable-static --disable-assembly --host=${target_host} CC=$CC --prefix=${LNBUILDROOT} +make -j $num_jobs +make install +cd .. +rm -rf gmp-6.1.2 + +# download lightning +git clone https://github.com/ElementsProject/lightning.git lightning +cd lightning +git checkout v0.7.3 + +# set virtualenv for lightning +python3 -m virtualenv venv +. venv/bin/activate +pip install -r requirements.txt + +# set standard cc for the configurator +sed -i 's/$CC ${CWARNFLAGS-$BASE_WARNFLAGS} $CDEBUGFLAGS $COPTFLAGS -o $CONFIGURATOR $CONFIGURATOR.c/$CONFIGURATOR_CC ${CWARNFLAGS-$BASE_WARNFLAGS} $CDEBUGFLAGS $COPTFLAGS -o $CONFIGURATOR $CONFIGURATOR.c/g' configure +sed -i 's/-Wno-maybe-uninitialized/-Wno-uninitialized/g' configure +./configure CONFIGURATOR_CC=${CONFIGURATOR_CC} --prefix=${LNBUILDROOT} --disable-developer --disable-compat --disable-valgrind --enable-static + +cp /repo/lightning-gen_header_versions.h gen_header_versions.h +# update arch based on toolchain +sed "s'NDKCOMPILER'${CC}'" /repo/lightning-config.vars > config.vars +sed "s'NDKCOMPILER'${CC}'" /repo/lightning-config.h > ccan/config.h + +# patch makefile +patch -p1 < /repo/lightning-makefile.patch +patch -p1 < /repo/lightning-jsonrpc.patch +patch -p1 < /repo/lightning-endian.patch + +# build external libraries and source +make PIE=1 DEVELOPER=0 || echo "continue" +make clean -C ccan/ccan/cdump/tools +make LDFLAGS="" CC="${CONFIGURATOR_CC}" LDLIBS="-L/usr/local/lib" -C ccan/ccan/cdump/tools +make PIE=1 DEVELOPER=0 +deactivate +cd .. + + +export CFLAGS="-flto" +export LDFLAGS="$CFLAGS -pie -static-libstdc++ -fuse-ld=lld" # build core git clone $repo ${reponame} cd ${reponame} @@ -129,7 +185,12 @@ cd .. if [ "${reponame}" != "${rename}" ]; then mv ${reponame}/depends/${target_host/v7a/}/bin/${reponame}d ${reponame}/depends/${target_host/v7a/}/bin/${rename}d mv ${reponame}/depends/${target_host/v7a/}/bin/${reponame}-cli ${reponame}/depends/${target_host/v7a/}/bin/${rename}-cli - tar -Jcf /repo/${target_host/v7a/}_${rename}.tar.xz -C ${reponame}/depends/${target_host/v7a/}/bin ${rename}d ${rename}-cli tor + outputtar=/repo/${target_host/v7a/}_${rename}.tar else - tar -Jcf /repo/${target_host/v7a/}_$(basename $(dirname ${repo})).tar.xz -C ${reponame}/depends/${target_host/v7a/}/bin ${rename}d ${rename}-cli tor + outputtar=/repo/${target_host/v7a/}_$(basename $(dirname ${repo})).tar fi +tar -cf ${outputtar} -C ${reponame}/depends/${target_host/v7a/}/bin ${rename}d ${rename}-cli tor +tar -rf ${outputtar} -C lightning/lightningd lightning_channeld lightning_closingd lightning_connectd lightning_gossipd lightning_hsmd lightning_onchaind lightning_openingd lightningd +tar -rf ${outputtar} -C lightning plugins/autoclean plugins/fundchannel plugins/pay +tar -rf ${outputtar} -C lightning/cli lightning-cli +xz ${outputtar} diff --git a/lightning-config.h b/lightning-config.h new file mode 100644 index 0000000..9260d74 --- /dev/null +++ b/lightning-config.h @@ -0,0 +1,90 @@ +/* Generated by CCAN configurator */ +#ifndef CCAN_CONFIG_H +#define CCAN_CONFIG_H +#ifndef _GNU_SOURCE +#define _GNU_SOURCE /* Always use GNU extensions. */ +#endif +#define CCAN_COMPILER "NDKCOMPILER" +#define CCAN_CFLAGS "-Wall -Wundef -Wmissing-prototypes -Wmissing-declarations -Wstrict-prototypes -Wold-style-definition -Werror -std=gnu11 -g -fstack-protector -Og" +#define CCAN_OUTPUT_EXE_CFLAG "-o" + +#define HAVE_CCAN 1 +#define HAVE_32BIT_OFF_T 0 +#define HAVE_ALIGNOF 1 +#define HAVE_ASPRINTF 1 +#define HAVE_ATTRIBUTE_COLD 1 +#define HAVE_ATTRIBUTE_CONST 1 +#define HAVE_ATTRIBUTE_DEPRECATED 0 +#define HAVE_ATTRIBUTE_NONNULL 1 +#define HAVE_ATTRIBUTE_SENTINEL 1 +#define HAVE_ATTRIBUTE_PURE 1 +#define HAVE_ATTRIBUTE_MAY_ALIAS 1 +#define HAVE_ATTRIBUTE_NORETURN 1 +#define HAVE_ATTRIBUTE_PRINTF 1 +#define HAVE_ATTRIBUTE_UNUSED 1 +#define HAVE_ATTRIBUTE_USED 1 +#define HAVE_BACKTRACE 0 +#define HAVE_BIG_ENDIAN 0 +#define HAVE_BSWAP_64 0 +#define HAVE_BUILTIN_CHOOSE_EXPR 1 +#define HAVE_BUILTIN_CLZ 1 +#define HAVE_BUILTIN_CLZL 1 +#define HAVE_BUILTIN_CLZLL 1 +#define HAVE_BUILTIN_CTZ 1 +#define HAVE_BUILTIN_CTZL 1 +#define HAVE_BUILTIN_CTZLL 1 +#define HAVE_BUILTIN_CONSTANT_P 1 +#define HAVE_BUILTIN_EXPECT 1 +#define HAVE_BUILTIN_FFS 1 +#define HAVE_BUILTIN_FFSL 1 +#define HAVE_BUILTIN_FFSLL 1 +#define HAVE_BUILTIN_POPCOUNT 1 +#define HAVE_BUILTIN_POPCOUNTL 1 +#define HAVE_BUILTIN_POPCOUNTLL 1 +#define HAVE_BUILTIN_TYPES_COMPATIBLE_P 1 +#define HAVE_ICCARM_INTRINSICS 0 +#define HAVE_BYTESWAP_H 0 +#define HAVE_CLOCK_GETTIME 1 +#define HAVE_CLOCK_GETTIME_IN_LIBRT 0 +#define HAVE_COMPOUND_LITERALS 1 +#define HAVE_FCHDIR 1 +#define HAVE_ERR_H 1 +#define HAVE_FILE_OFFSET_BITS 0 +#define HAVE_FOR_LOOP_DECLARATION 1 +#define HAVE_FLEXIBLE_ARRAY_MEMBER 1 +#define HAVE_GETPAGESIZE 1 +#define HAVE_ISBLANK 1 +#define HAVE_LITTLE_ENDIAN 1 +#define HAVE_MEMMEM 1 +#define HAVE_MEMRCHR 0 +#define HAVE_MMAP 1 +#define HAVE_PROC_SELF_MAPS 0 +#define HAVE_QSORT_R_PRIVATE_LAST 0 +#define HAVE_STRUCT_TIMESPEC 1 +#define HAVE_SECTION_START_STOP 1 +#define HAVE_STACK_GROWS_UPWARDS 0 +#define HAVE_STATEMENT_EXPR 1 +#define HAVE_SYS_FILIO_H 1 +#define HAVE_SYS_TERMIOS_H 0 +#define HAVE_SYS_UNISTD_H 1 +#define HAVE_TYPEOF 1 +#define HAVE_UNALIGNED_ACCESS 1 +#define HAVE_UTIME 1 +#define HAVE_WARN_UNUSED_RESULT 1 +#define HAVE_OPENMP 0 +#define HAVE_VALGRIND_MEMCHECK_H 0 +#define HAVE_UCONTEXT 0 +#define HAVE_POINTER_SAFE_MAKECONTEXT 0 +#define HAVE_BUILTIN_CPU_SUPPORTS 1 +#define HAVE_GOOD_LIBSODIUM 0 +#define HAVE_SQLITE3_EXPANDED_SQL 1 +#define HAVE_SQLITE3 1 +#define HAVE_POSTGRES 0 +#define HAVE_GCC 0 +#define HAVE_MODERN_GCC 0 +#define HAVE_PWRITEV 0 +#endif /* CCAN_CONFIG_H */ +#define DEVELOPER 0 +#define EXPERIMENTAL_FEATURES 0 +#define COMPAT 0 +#include "../ccan_compat.h" diff --git a/lightning-config.vars b/lightning-config.vars new file mode 100644 index 0000000..b459c24 --- /dev/null +++ b/lightning-config.vars @@ -0,0 +1,88 @@ +HAVE_32BIT_OFF_T=0 +HAVE_ALIGNOF=1 +HAVE_ASPRINTF=1 +HAVE_ATTRIBUTE_COLD=1 +HAVE_ATTRIBUTE_CONST=1 +HAVE_ATTRIBUTE_DEPRECATED=0 +HAVE_ATTRIBUTE_NONNULL=1 +HAVE_ATTRIBUTE_SENTINEL=1 +HAVE_ATTRIBUTE_PURE=1 +HAVE_ATTRIBUTE_MAY_ALIAS=1 +HAVE_ATTRIBUTE_NORETURN=1 +HAVE_ATTRIBUTE_PRINTF=1 +HAVE_ATTRIBUTE_UNUSED=1 +HAVE_ATTRIBUTE_USED=1 +HAVE_BACKTRACE=0 +HAVE_BIG_ENDIAN=0 +HAVE_BSWAP_64=0 +HAVE_BUILTIN_CHOOSE_EXPR=1 +HAVE_BUILTIN_CLZ=1 +HAVE_BUILTIN_CLZL=1 +HAVE_BUILTIN_CLZLL=1 +HAVE_BUILTIN_CTZ=1 +HAVE_BUILTIN_CTZL=1 +HAVE_BUILTIN_CTZLL=1 +HAVE_BUILTIN_CONSTANT_P=1 +HAVE_BUILTIN_EXPECT=1 +HAVE_BUILTIN_FFS=1 +HAVE_BUILTIN_FFSL=1 +HAVE_BUILTIN_FFSLL=1 +HAVE_BUILTIN_POPCOUNT=1 +HAVE_BUILTIN_POPCOUNTL=1 +HAVE_BUILTIN_POPCOUNTLL=1 +HAVE_BUILTIN_TYPES_COMPATIBLE_P=1 +HAVE_ICCARM_INTRINSICS=0 +HAVE_BYTESWAP_H=0 +HAVE_CLOCK_GETTIME=1 +HAVE_CLOCK_GETTIME_IN_LIBRT=0 +HAVE_COMPOUND_LITERALS=1 +HAVE_FCHDIR=1 +HAVE_ERR_H=1 +HAVE_FILE_OFFSET_BITS=0 +HAVE_FOR_LOOP_DECLARATION=1 +HAVE_FLEXIBLE_ARRAY_MEMBER=1 +HAVE_GETPAGESIZE=1 +HAVE_ISBLANK=1 +HAVE_LITTLE_ENDIAN=1 +HAVE_MEMMEM=1 +HAVE_MEMRCHR=0 +HAVE_MMAP=1 +HAVE_PROC_SELF_MAPS=0 +HAVE_QSORT_R_PRIVATE_LAST=0 +HAVE_STRUCT_TIMESPEC=1 +HAVE_SECTION_START_STOP=1 +HAVE_STACK_GROWS_UPWARDS=0 +HAVE_STATEMENT_EXPR=1 +HAVE_SYS_FILIO_H=1 +HAVE_SYS_TERMIOS_H=0 +HAVE_SYS_UNISTD_H=1 +HAVE_TYPEOF=1 +HAVE_UNALIGNED_ACCESS=1 +HAVE_UTIME=1 +HAVE_WARN_UNUSED_RESULT=1 +HAVE_OPENMP=0 +HAVE_VALGRIND_MEMCHECK_H=0 +HAVE_UCONTEXT=0 +HAVE_POINTER_SAFE_MAKECONTEXT=0 +HAVE_BUILTIN_CPU_SUPPORTS=1 +HAVE_GOOD_LIBSODIUM=0 +HAVE_SQLITE3_EXPANDED_SQL=1 +HAVE_SQLITE3=1 +HAVE_POSTGRES=0 +HAVE_GCC=0 +HAVE_MODERN_GCC=0 +HAVE_PWRITEV=0 +PREFIX=/ln_build_root +CC=NDKCOMPILER +CONFIGURATOR_CC=/usr/bin/gcc +CWARNFLAGS=-Wall -Wundef -Wmissing-prototypes -Wmissing-declarations -Wstrict-prototypes -Wold-style-definition -Werror +CDEBUGFLAGS=-std=gnu11 -g -fstack-protector +COPTFLAGS=-Og +VALGRIND=0 +DEVELOPER=0 +EXPERIMENTAL_FEATURES=0 +COMPAT=0 +PYTEST= +STATIC=1 +ASAN=0 +TEST_NETWORK=regtest diff --git a/lightning-endian.patch b/lightning-endian.patch new file mode 100644 index 0000000..ae3d447 --- /dev/null +++ b/lightning-endian.patch @@ -0,0 +1,17 @@ +diff --git a/ccan/ccan/endian/endian.h b/ccan/ccan/endian/endian.h +index 3753f490..6e9d8046 100644 +--- a/ccan/ccan/endian/endian.h ++++ b/ccan/ccan/endian/endian.h +@@ -104,8 +104,12 @@ static inline uint64_t bswap_64(uint64_t val) + #endif + + /* Needed for Glibc like endiness check */ ++#ifndef __LITTLE_ENDIAN + #define __LITTLE_ENDIAN 1234 ++#endif ++#ifndef __BIG_ENDIAN + #define __BIG_ENDIAN 4321 ++#endif + + /* Sanity check the defines. We don't handle weird endianness. */ + #if !HAVE_LITTLE_ENDIAN && !HAVE_BIG_ENDIAN diff --git a/lightning-gen_header_versions.h b/lightning-gen_header_versions.h new file mode 100644 index 0000000..f67d270 --- /dev/null +++ b/lightning-gen_header_versions.h @@ -0,0 +1,29 @@ +/* Generated file by tools/headerversions, do not edit! */ +/* GMP version: 6.1.2 */ +/* SQLITE3 version: 3024000 */ +/* ZLIB version: 1.2.11 */ +#include +#include +#include +#include + +static inline void check_linked_library_versions(void) +{ + char compiled_gmp_version[100]; + if (SQLITE_VERSION_NUMBER != sqlite3_libversion_number()) + errx(1, "SQLITE version mismatch: compiled %u, now %u", + SQLITE_VERSION_NUMBER, sqlite3_libversion_number()); + /* zlib documents that first char alters ABI. Kudos! */ + if (zlibVersion()[0] != ZLIB_VERSION[0]) + errx(1, "zlib version mismatch: compiled %s, now %s", + ZLIB_VERSION, zlibVersion()); + /* GMP doesn't say anything, and we have to assemble our own string. */ + snprintf(compiled_gmp_version, sizeof(compiled_gmp_version), + "%u.%u.%u", + __GNU_MP_VERSION, + __GNU_MP_VERSION_MINOR, + __GNU_MP_VERSION_PATCHLEVEL); + if (strcmp(compiled_gmp_version, gmp_version) != 0) + errx(1, "gmp version mismatch: compiled %s, now %s", + compiled_gmp_version, gmp_version); +} diff --git a/lightning-jsonrpc.patch b/lightning-jsonrpc.patch new file mode 100644 index 0000000..714522f --- /dev/null +++ b/lightning-jsonrpc.patch @@ -0,0 +1,69 @@ +diff --git a/cli/lightning-cli.c b/cli/lightning-cli.c +index bb120f1b..7b9c01a5 100644 +--- a/cli/lightning-cli.c ++++ b/cli/lightning-cli.c +@@ -522,10 +522,12 @@ int main(int argc, char *argv[]) + fd = socket(AF_UNIX, SOCK_STREAM, 0); + if (strlen(rpc_filename) + 1 > sizeof(addr.sun_path)) + errx(ERROR_USAGE, "rpc filename '%s' too long", rpc_filename); +- strcpy(addr.sun_path, rpc_filename); ++ addr.sun_path[0] = '\0'; ++ strcpy(addr.sun_path + 1, rpc_filename); + addr.sun_family = AF_UNIX; + +- if (connect(fd, (struct sockaddr *)&addr, sizeof(addr)) != 0) ++ if (connect(fd, (struct sockaddr *)&addr, sizeof(addr.sun_family) + ++ strlen(rpc_filename) + 1) != 0) + err(ERROR_TALKING_TO_LIGHTNINGD, + "Connecting to '%s'", rpc_filename); + +diff --git a/lightningd/jsonrpc.c b/lightningd/jsonrpc.c +index c5c7fa7d..9de8d8c4 100644 +--- a/lightningd/jsonrpc.c ++++ b/lightningd/jsonrpc.c +@@ -945,17 +945,20 @@ void jsonrpc_listen(struct jsonrpc *jsonrpc, struct lightningd *ld) + } + if (strlen(rpc_filename) + 1 > sizeof(addr.sun_path)) + errx(1, "rpc filename '%s' too long", rpc_filename); +- strcpy(addr.sun_path, rpc_filename); ++ addr.sun_path[0] = '\0'; ++ strcpy(addr.sun_path + 1, rpc_filename); + addr.sun_family = AF_UNIX; + + /* Of course, this is racy! */ +- if (connect(fd, (struct sockaddr *)&addr, sizeof(addr)) == 0) ++ if (connect(fd, (struct sockaddr *)&addr, sizeof(addr.sun_family) + ++ strlen(rpc_filename) + 1) == 0) + errx(1, "rpc filename '%s' in use", rpc_filename); + unlink(rpc_filename); + + /* This file is only rw by us! */ + old_umask = umask(0177); +- if (bind(fd, (struct sockaddr *)&addr, sizeof(addr))) ++ if (bind(fd, (struct sockaddr *)&addr, sizeof(addr.sun_family) + ++ strlen(rpc_filename) + 1)) + err(1, "Binding rpc socket to '%s'", rpc_filename); + umask(old_umask); + +diff --git a/plugins/libplugin.c b/plugins/libplugin.c +index 7461f2a7..6c85156b 100644 +--- a/plugins/libplugin.c ++++ b/plugins/libplugin.c +@@ -550,11 +550,14 @@ static struct command_result *handle_init(struct command *init_cmd, + plugin_err("rpc filename '%.*s' too long", + rpctok->end - rpctok->start, + buf + rpctok->start); +- memcpy(addr.sun_path, buf + rpctok->start, rpctok->end - rpctok->start); +- addr.sun_path[rpctok->end - rpctok->start] = '\0'; ++ ++ memcpy(addr.sun_path + 1, buf + rpctok->start, rpctok->end - rpctok->start); ++ addr.sun_path[0] = '\0'; ++ addr.sun_path[rpctok->end - rpctok->start + 1] = '\0'; + addr.sun_family = AF_UNIX; + +- if (connect(rpc_conn.fd, (struct sockaddr *)&addr, sizeof(addr)) != 0) ++ const size_t len = sizeof(addr.sun_family) + (rpctok->end - rpctok->start) + 1; ++ if (connect(rpc_conn.fd, (struct sockaddr *)&addr, len) != 0) + plugin_err("Connecting to '%.*s': %s", + rpctok->end - rpctok->start, buf + rpctok->start, + strerror(errno)); diff --git a/lightning-makefile.patch b/lightning-makefile.patch new file mode 100644 index 0000000..f23f999 --- /dev/null +++ b/lightning-makefile.patch @@ -0,0 +1,56 @@ +diff --git a/Makefile b/Makefile +index 7c19a5d6..eb72e8d6 100644 +--- a/Makefile ++++ b/Makefile +@@ -189,19 +189,19 @@ BOLT_DEPS := $(BOLT_GEN) + ALL_PROGRAMS = + + CPPFLAGS += -DBINTOPKGLIBEXECDIR="\"$(shell sh tools/rel.sh $(bindir) $(pkglibexecdir))\"" +-CFLAGS = $(CPPFLAGS) $(CWARNFLAGS) $(CDEBUGFLAGS) $(COPTFLAGS) -I $(CCANDIR) $(EXTERNAL_INCLUDE_FLAGS) -I . -I/usr/local/include $(FEATURES) $(COVFLAGS) $(DEV_CFLAGS) -DSHACHAIN_BITS=48 -DJSMN_PARENT_LINKS $(PIE_CFLAGS) $(COMPAT_CFLAGS) -DBUILD_ELEMENTS=1 ++CFLAGS = $(CPPFLAGS) $(CWARNFLAGS) $(CDEBUGFLAGS) $(COPTFLAGS) -I $(CCANDIR) $(EXTERNAL_INCLUDE_FLAGS) -I . -I$(PREFIX)/include $(FEATURES) $(COVFLAGS) $(DEV_CFLAGS) -DSHACHAIN_BITS=48 -DJSMN_PARENT_LINKS $(PIE_CFLAGS) $(COMPAT_CFLAGS) -DBUILD_ELEMENTS=1 + + # We can get configurator to run a different compile cmd to cross-configure. +-CONFIGURATOR_CC := $(CC) ++#CONFIGURATOR_CC := $(CC) + + LDFLAGS += $(PIE_LDFLAGS) $(SANITIZER_FLAGS) $(COPTFLAGS) + ifeq ($(STATIC),1) + # For MacOS, Jacob Rapoport changed this to: + # -L/usr/local/lib -Wl,-lgmp -lsqlite3 -lz -Wl,-lm -lpthread -ldl $(COVFLAGS) + # But that doesn't static link. +-LDLIBS = -L/usr/local/lib -Wl,-dn -lgmp -lsqlite3 -lz -Wl,-dy -lm -lpthread -ldl $(COVFLAGS) ++LDLIBS = -L$(PREFIX)/lib -Wl,-dn -lgmp -lsqlite3 -lz -Wl,-dy -lm -ldl $(COVFLAGS) + else +-LDLIBS = -L/usr/local/lib -lm -lgmp -lsqlite3 -lz $(COVFLAGS) ++LDLIBS = -L$(PREFIX)/lib -lm -lgmp -lsqlite3 -lz $(COVFLAGS) + endif + + # If we have the postgres client library we need to link against it as well +@@ -382,7 +382,7 @@ gen_header_versions.h: tools/headerversions + @tools/headerversions $@ + + # Rebuild the world if this changes. +-ALL_GEN_HEADERS += gen_header_versions.h ++#ALL_GEN_HEADERS += gen_header_versions.h + + # All binaries require the external libs, ccan and system library versions. + $(ALL_PROGRAMS) $(ALL_TEST_PROGRAMS): $(EXTERNAL_LIBS) $(CCAN_OBJS) +@@ -433,7 +433,7 @@ clean: + $(RM) $(ALL_PROGRAMS) $(ALL_PROGRAMS:=.o) + $(RM) $(ALL_TEST_PROGRAMS) $(ALL_TEST_PROGRAMS:=.o) + $(RM) gen_*.h ccan/tools/configurator/configurator +- $(RM) ccan/ccan/cdump/tools/cdump-enumstr.o ++ #$(RM) ccan/ccan/cdump/tools/cdump-enumstr.o + find . -name '*gcda' -delete + find . -name '*gcno' -delete + find . -name '*.nccout' -delete +diff --git a/bitcoin/Makefile b/bitcoin/Makefile +index 33dc5f7c..90e67cde 100644 +--- a/bitcoin/Makefile ++++ b/bitcoin/Makefile +@@ -54,4 +54,4 @@ clean: bitcoin-clean + bitcoin-clean: + $(RM) $(BITCOIN_OBJS) $(BITCOIN_TEST_PROGRAMS) $(BITCOIN_TEST_OBJS) + +-include bitcoin/test/Makefile ++#include bitcoin/test/Makefile diff --git a/run.sh b/run.sh index 2f9f274..2302d4b 100755 --- a/run.sh +++ b/run.sh @@ -1,7 +1,7 @@ #! /bin/bash set -xeo pipefail -DOCKERHASH=06e3e394f41bd389a11ce51a2bb4ec46ff082e86d25f4f90644aad5b4faaf0f1 +DOCKERHASH=9e8e2dd9ea172a500e106a87fb116976e466e14d5cbac4307759961b946977a1 DOCKERIMAGE=greenaddress/core_builder_for_android@sha256:$DOCKERHASH docker pull $DOCKERIMAGE From 241dea9de0ebf01b44afba22bff8b324851661fb Mon Sep 17 00:00:00 2001 From: darosior Date: Sun, 16 Feb 2020 23:31:15 +0100 Subject: [PATCH 2/3] Translate patches for C-lightning v0.8.1 --- fetchbuild.sh | 4 +- ...ning-jsonrpc.patch => lightning-addr.patch | 37 +++++++++---------- lightning-makefile.patch | 26 ++++++------- 3 files changed, 32 insertions(+), 35 deletions(-) rename lightning-jsonrpc.patch => lightning-addr.patch (70%) diff --git a/fetchbuild.sh b/fetchbuild.sh index 62905b1..4037825 100755 --- a/fetchbuild.sh +++ b/fetchbuild.sh @@ -71,7 +71,7 @@ rm -rf gmp-6.1.2 # download lightning git clone https://github.com/ElementsProject/lightning.git lightning cd lightning -git checkout v0.7.3 +git checkout v0.8.1 # set virtualenv for lightning python3 -m virtualenv venv @@ -90,7 +90,7 @@ sed "s'NDKCOMPILER'${CC}'" /repo/lightning-config.h > ccan/config.h # patch makefile patch -p1 < /repo/lightning-makefile.patch -patch -p1 < /repo/lightning-jsonrpc.patch +patch -p1 < /repo/lightning-addr.patch patch -p1 < /repo/lightning-endian.patch # build external libraries and source diff --git a/lightning-jsonrpc.patch b/lightning-addr.patch similarity index 70% rename from lightning-jsonrpc.patch rename to lightning-addr.patch index 714522f..b98e970 100644 --- a/lightning-jsonrpc.patch +++ b/lightning-addr.patch @@ -1,8 +1,8 @@ diff --git a/cli/lightning-cli.c b/cli/lightning-cli.c -index bb120f1b..7b9c01a5 100644 +index 5812fb4e9..43ad6a6fb 100644 --- a/cli/lightning-cli.c +++ b/cli/lightning-cli.c -@@ -522,10 +522,12 @@ int main(int argc, char *argv[]) +@@ -507,10 +507,11 @@ int main(int argc, char *argv[]) fd = socket(AF_UNIX, SOCK_STREAM, 0); if (strlen(rpc_filename) + 1 > sizeof(addr.sun_path)) errx(ERROR_USAGE, "rpc filename '%s' too long", rpc_filename); @@ -12,16 +12,15 @@ index bb120f1b..7b9c01a5 100644 addr.sun_family = AF_UNIX; - if (connect(fd, (struct sockaddr *)&addr, sizeof(addr)) != 0) -+ if (connect(fd, (struct sockaddr *)&addr, sizeof(addr.sun_family) + -+ strlen(rpc_filename) + 1) != 0) ++ if (connect(fd, (struct sockaddr *)&addr, sizeof(addr.sun_family) + strlen(rpc_filename) + 1) != 0) err(ERROR_TALKING_TO_LIGHTNINGD, "Connecting to '%s'", rpc_filename); diff --git a/lightningd/jsonrpc.c b/lightningd/jsonrpc.c -index c5c7fa7d..9de8d8c4 100644 +index 8a433cddd..c54a0b5e0 100644 --- a/lightningd/jsonrpc.c +++ b/lightningd/jsonrpc.c -@@ -945,17 +945,20 @@ void jsonrpc_listen(struct jsonrpc *jsonrpc, struct lightningd *ld) +@@ -1121,18 +1121,19 @@ void jsonrpc_listen(struct jsonrpc *jsonrpc, struct lightningd *ld) } if (strlen(rpc_filename) + 1 > sizeof(addr.sun_path)) errx(1, "rpc filename '%s' too long", rpc_filename); @@ -32,38 +31,36 @@ index c5c7fa7d..9de8d8c4 100644 /* Of course, this is racy! */ - if (connect(fd, (struct sockaddr *)&addr, sizeof(addr)) == 0) -+ if (connect(fd, (struct sockaddr *)&addr, sizeof(addr.sun_family) + -+ strlen(rpc_filename) + 1) == 0) ++ if (connect(fd, (struct sockaddr *)&addr, sizeof(addr.sun_family) + strlen(rpc_filename) + 1) == 0) errx(1, "rpc filename '%s' in use", rpc_filename); unlink(rpc_filename); - /* This file is only rw by us! */ - old_umask = umask(0177); + /* Set the umask according to the desired file mode. */ + new_umask = ld->rpc_filemode ^ 0777; + old_umask = umask(new_umask); - if (bind(fd, (struct sockaddr *)&addr, sizeof(addr))) -+ if (bind(fd, (struct sockaddr *)&addr, sizeof(addr.sun_family) + -+ strlen(rpc_filename) + 1)) ++ if (bind(fd, (struct sockaddr *)&addr, sizeof(addr.sun_family) + strlen(rpc_filename) + 1)) err(1, "Binding rpc socket to '%s'", rpc_filename); umask(old_umask); diff --git a/plugins/libplugin.c b/plugins/libplugin.c -index 7461f2a7..6c85156b 100644 +index b7c5d06ee..28f964fbb 100644 --- a/plugins/libplugin.c +++ b/plugins/libplugin.c -@@ -550,11 +550,14 @@ static struct command_result *handle_init(struct command *init_cmd, - plugin_err("rpc filename '%.*s' too long", +@@ -740,11 +740,13 @@ static struct command_result *handle_init(struct command *cmd, + plugin_err(p, "rpc filename '%.*s' too long", rpctok->end - rpctok->start, buf + rpctok->start); - memcpy(addr.sun_path, buf + rpctok->start, rpctok->end - rpctok->start); - addr.sun_path[rpctok->end - rpctok->start] = '\0'; -+ + memcpy(addr.sun_path + 1, buf + rpctok->start, rpctok->end - rpctok->start); + addr.sun_path[0] = '\0'; + addr.sun_path[rpctok->end - rpctok->start + 1] = '\0'; addr.sun_family = AF_UNIX; -- if (connect(rpc_conn.fd, (struct sockaddr *)&addr, sizeof(addr)) != 0) +- if (connect(p->rpc_conn->fd, (struct sockaddr *)&addr, sizeof(addr)) != 0) { + const size_t len = sizeof(addr.sun_family) + (rpctok->end - rpctok->start) + 1; -+ if (connect(rpc_conn.fd, (struct sockaddr *)&addr, len) != 0) - plugin_err("Connecting to '%.*s': %s", ++ if (connect(p->rpc_conn->fd, (struct sockaddr *)&addr, len) != 0) { + with_rpc = false; + plugin_log(p, LOG_UNUSUAL, "Could not connect to '%.*s': %s", rpctok->end - rpctok->start, buf + rpctok->start, - strerror(errno)); diff --git a/lightning-makefile.patch b/lightning-makefile.patch index f23f999..52d09c2 100644 --- a/lightning-makefile.patch +++ b/lightning-makefile.patch @@ -1,8 +1,8 @@ diff --git a/Makefile b/Makefile -index 7c19a5d6..eb72e8d6 100644 +index 7f49817de..e4e578fdb 100644 --- a/Makefile +++ b/Makefile -@@ -189,19 +189,19 @@ BOLT_DEPS := $(BOLT_GEN) +@@ -191,19 +191,19 @@ BOLT_DEPS := $(BOLT_GEN) ALL_PROGRAMS = CPPFLAGS += -DBINTOPKGLIBEXECDIR="\"$(shell sh tools/rel.sh $(bindir) $(pkglibexecdir))\"" @@ -26,7 +26,7 @@ index 7c19a5d6..eb72e8d6 100644 endif # If we have the postgres client library we need to link against it as well -@@ -382,7 +382,7 @@ gen_header_versions.h: tools/headerversions +@@ -386,7 +386,7 @@ gen_header_versions.h: tools/headerversions @tools/headerversions $@ # Rebuild the world if this changes. @@ -35,17 +35,17 @@ index 7c19a5d6..eb72e8d6 100644 # All binaries require the external libs, ccan and system library versions. $(ALL_PROGRAMS) $(ALL_TEST_PROGRAMS): $(EXTERNAL_LIBS) $(CCAN_OBJS) -@@ -433,7 +433,7 @@ clean: - $(RM) $(ALL_PROGRAMS) $(ALL_PROGRAMS:=.o) - $(RM) $(ALL_TEST_PROGRAMS) $(ALL_TEST_PROGRAMS:=.o) - $(RM) gen_*.h ccan/tools/configurator/configurator -- $(RM) ccan/ccan/cdump/tools/cdump-enumstr.o -+ #$(RM) ccan/ccan/cdump/tools/cdump-enumstr.o - find . -name '*gcda' -delete - find . -name '*gcno' -delete - find . -name '*.nccout' -delete +@@ -418,7 +418,7 @@ update-ccan: + $(MAKE) ccan/config.h + grep -v '^CCAN version:' ccan.old/README > ccan/README + echo CCAN version: `git -C ../ccan describe` >> ccan/README +- $(RM) -r ccan.old ++ #$(RM) -r ccan.old + $(RM) -r ccan/ccan/hash/ ccan/ccan/tal/talloc/ # Unnecessary deps + + # Now ALL_PROGRAMS is fully populated, we can expand it. diff --git a/bitcoin/Makefile b/bitcoin/Makefile -index 33dc5f7c..90e67cde 100644 +index 33dc5f7c2..90e67cdef 100644 --- a/bitcoin/Makefile +++ b/bitcoin/Makefile @@ -54,4 +54,4 @@ clean: bitcoin-clean From 10f4b78e3aad05e05b512517a4fc3ea636170f76 Mon Sep 17 00:00:00 2001 From: darosior Date: Mon, 17 Feb 2020 18:41:22 +0100 Subject: [PATCH 3/3] Revert modifications to external dependencies compilation Revert "external: Reorganize to support cross-compilation" This reverts commit f9b3b96a63c1ced2034325fd0591cd7e74277426. Revert "Add cross-compilation options only when requested (#3275)" This reverts commit 170918ff8c61ce2beb8bfdc0daae893a0f3981bf. --- fetchbuild.sh | 2 + lightning-makefile-external-reverts.patch | 168 ++++++++++++++++++++++ 2 files changed, 170 insertions(+) create mode 100644 lightning-makefile-external-reverts.patch diff --git a/fetchbuild.sh b/fetchbuild.sh index 4037825..723c763 100755 --- a/fetchbuild.sh +++ b/fetchbuild.sh @@ -88,6 +88,8 @@ cp /repo/lightning-gen_header_versions.h gen_header_versions.h sed "s'NDKCOMPILER'${CC}'" /repo/lightning-config.vars > config.vars sed "s'NDKCOMPILER'${CC}'" /repo/lightning-config.h > ccan/config.h +# Path the external deps build +patch -p1 < /repo/lightning-makefile-external-reverts.patch # patch makefile patch -p1 < /repo/lightning-makefile.patch patch -p1 < /repo/lightning-addr.patch diff --git a/lightning-makefile-external-reverts.patch b/lightning-makefile-external-reverts.patch new file mode 100644 index 0000000..de804c6 --- /dev/null +++ b/lightning-makefile-external-reverts.patch @@ -0,0 +1,168 @@ +commit 38963f43ca255fa60f7fa21700ca3c427f44bd92 +Author: darosior +Date: Mon Feb 17 17:28:18 2020 +0100 + + Revert modifications to external dependencies compilation + + Revert "external: Reorganize to support cross-compilation" + This reverts commit f9b3b96a63c1ced2034325fd0591cd7e74277426. + + Revert "Add cross-compilation options only when requested (#3275)" + This reverts commit 170918ff8c61ce2beb8bfdc0daae893a0f3981bf. + +diff --git a/Makefile b/Makefile +index 7f49817de..725ca8043 100644 +--- a/Makefile ++++ b/Makefile +@@ -363,7 +363,7 @@ coverage: coverage/coverage.info + + # We make libwallycore.la a dependency, so that it gets built normally, without ncc. + # Ncc can't handle the libwally source code (yet). +-ncc: ${TARGET_DIR}/libwally-core-build/src/libwallycore.la ++ncc: external/libwally-core/src/libwallycore.la + $(MAKE) CC="ncc -ncgcc -ncld -ncfabs" AR=nccar LD=nccld + + # Ignore test/ directories. +diff --git a/external/.gitignore b/external/.gitignore +index cf0d3f9ef..5029d6105 100644 +--- a/external/.gitignore ++++ b/external/.gitignore +@@ -5,5 +5,3 @@ libsodium.a + libsodium.la + libwallycore.a + libwallycore.la +-libwally-core-build +-libsodium-build +diff --git a/external/Makefile b/external/Makefile +index ef7ca822d..697258120 100644 +--- a/external/Makefile ++++ b/external/Makefile +@@ -4,15 +4,6 @@ SUBMODULES = \ + external/jsmn \ + external/libbacktrace + +-ifdef BUILD +-CROSSCOMPILE_OPTS := --host="$(MAKE_HOST)" --build="$(BUILD)" +-TARGET_DIR := external/"$(MAKE_HOST)" +-TOP := ../.. +-else +-TARGET_DIR := external +-TOP := .. +-endif +- + LIBSODIUM_HEADERS := external/libsodium/src/libsodium/include/sodium.h + LIBWALLY_HEADERS := external/libwally-core/include/wally_bip32.h \ + external/libwally-core/include/wally_core.h \ +@@ -22,51 +13,45 @@ LIBSECP_HEADERS := external/libwally-core/src/secp256k1/include/secp256k1_ecdh.h + JSMN_HEADERS := external/jsmn/jsmn.h + + EXTERNAL_HEADERS := $(LIBSODIUM_HEADERS) $(LIBWALLY_HEADERS) $(LIBSECP_HEADERS) $(JSMN_HEADERS) +-EXTERNAL_LIBS := ${TARGET_DIR}/libwallycore.a ${TARGET_DIR}/libsecp256k1.a ${TARGET_DIR}/libjsmn.a ${TARGET_DIR}/libbacktrace.a ++EXTERNAL_LIBS := external/libwallycore.a external/libsecp256k1.a external/libjsmn.a external/libbacktrace.a + + EXTERNAL_INCLUDE_FLAGS := \ + -I external/libwally-core/include/ \ + -I external/libwally-core/src/secp256k1/include/ \ + -I external/jsmn/ \ + -I external/libbacktrace/ \ +- -I ${TARGET_DIR}/libbacktrace-build ++ -I external/libbacktrace-build + + ifneq ($(HAVE_GOOD_LIBSODIUM),1) +-EXTERNAL_INCLUDE_FLAGS += -I external/libsodium/src/libsodium/include \ +- -I external/libsodium/src/libsodium/include/sodium \ +- -I $(TARGET_DIR)/libsodium-build/src/libsodium/include +-EXTERNAL_LIBS += ${TARGET_DIR}/libsodium.a ++EXTERNAL_INCLUDE_FLAGS += -I external/libsodium/src/libsodium/include ++EXTERNAL_LIBS += external/libsodium.a + else + LDLIBS += -lsodium + endif + +-EXTERNAL_LDLIBS := -L${TARGET_DIR} $(patsubst lib%.a,-l%,$(notdir $(EXTERNAL_LIBS))) ++EXTERNAL_LDLIBS := -Lexternal $(patsubst lib%.a,-l%,$(notdir $(EXTERNAL_LIBS))) + + submodcheck: FORCE + @tools/refresh-submodules.sh $(SUBMODULES) + + # We build libsodium, since Ubuntu xenial has one too old. +-$(TARGET_DIR)/libsodium.a: $(TARGET_DIR)/libsodium-build/src/libsodium/libsodium.la +- $(MAKE) -C $(TARGET_DIR)/libsodium-build DESTDIR=$$(pwd)/$(TARGET_DIR) install-exec ++external/libsodium.a: external/libsodium/src/libsodium/libsodium.la ++ $(MAKE) -C external/libsodium DESTDIR=$$(pwd)/external install-exec + + external/libsodium/src/libsodium/include/sodium.h: submodcheck + +-$(TARGET_DIR)/libsodium-build/src/libsodium/libsodium.la: external/libsodium/src/libsodium/include/sodium.h +- cd external/libsodium && ./autogen.sh +- mkdir -p ${TARGET_DIR}/libsodium-build +- cd $(TARGET_DIR)/libsodium-build && $(TOP)/libsodium/configure CC="$(CC)" --enable-static=yes $(CROSSCOMPILE_OPTS) --enable-shared=no --enable-tests=no --prefix=/ --libdir=/ && $(MAKE) ++external/libsodium/src/libsodium/libsodium.la: external/libsodium/src/libsodium/include/sodium.h ++ cd external/libsodium && ./autogen.sh && ./configure CC="$(CC)" --enable-static=yes --host="$(MAKE_HOST)" --build="$(BUILD)" --enable-shared=no --enable-tests=no --prefix=/ --libdir=/ && $(MAKE) + + $(LIBWALLY_HEADERS) $(LIBSECP_HEADERS): submodcheck + + # libsecp included in libwally. + # Wildcards here are magic. See http://stackoverflow.com/questions/2973445/gnu-makefile-rule-generating-a-few-targets-from-a-single-source-file +-$(TARGET_DIR)/libsecp256k1.% $(TARGET_DIR)/libwallycore.%: $(TARGET_DIR)/libwally-core-build/src/secp256k1/libsecp256k1.la $(TARGET_DIR)/libwally-core-build/src/libwallycore.la +- $(MAKE) -C $(TARGET_DIR)/libwally-core-build DESTDIR=$$(pwd)/$(TARGET_DIR) install-exec ++external/libsecp256k1.% external/libwallycore.%: external/libwally-core/src/secp256k1/libsecp256k1.la external/libwally-core/src/libwallycore.la ++ $(MAKE) -C external/libwally-core DESTDIR=$$(pwd)/external install-exec + +-$(TARGET_DIR)/libwally-core-build/src/libwallycore.% $(TARGET_DIR)/libwally-core-build/src/secp256k1/libsecp256k1.%: $(LIBWALLY_HEADERS) $(LIBSECP_HEADERS) +- cd external/libwally-core && ./tools/autogen.sh +- mkdir -p ${TARGET_DIR}/libwally-core-build +- cd ${TARGET_DIR}/libwally-core-build && ${TOP}/libwally-core/configure CC="$(CC)" --enable-static=yes $(CROSSCOMPILE_OPTS) --enable-module-recovery --enable-elements --enable-shared=no --prefix=/ --libdir=/ --enable-debug && $(MAKE) ++external/libwally-core/src/libwallycore.% external/libwally-core/src/secp256k1/libsecp256k1.%: $(LIBWALLY_HEADERS) $(LIBSECP_HEADERS) ++ cd external/libwally-core && ./tools/autogen.sh && ./configure CC="$(CC)" --enable-static=yes --host="$(MAKE_HOST)" --build="$(BUILD)" --enable-module-recovery --enable-elements --enable-shared=no --prefix=/ --libdir=/ --enable-debug && $(MAKE) + + external/jsmn/jsmn.h: submodcheck + +@@ -75,33 +60,32 @@ external/jsmn/jsmn.h: submodcheck + external/jsmn/jsmn.c: external/jsmn/jsmn.h + [ -f $@ ] + +-$(TARGET_DIR)/jsmn-build/jsmn.o: external/jsmn/jsmn.c Makefile +- @mkdir -p $(@D) +- $(COMPILE.c) -DJSMN_STRICT=1 -o $@ $< ++external/jsmn.o: external/jsmn/jsmn.c Makefile ++ $(COMPILE.c) -DJSMN_STRICT=1 $(OUTPUT_OPTION) $< + +-$(TARGET_DIR)/libjsmn.a: $(TARGET_DIR)/jsmn-build/jsmn.o ++external/libjsmn.a: external/jsmn.o + $(AR) rc $@ $< + + external/libbacktrace/backtrace.h: submodcheck + + # Need separate build dir: changes inside submodule make git think it's dirty. +-$(TARGET_DIR)/libbacktrace.a: external/libbacktrace/backtrace.h +- @mkdir $(TARGET_DIR)/libbacktrace-build 2>/dev/null || true +- cd $(TARGET_DIR)/libbacktrace-build && $(TOP)/libbacktrace/configure CC="$(CC)" --enable-static=yes $(CROSSCOMPILE_OPTS) --enable-shared=no --prefix=/ --libdir=/ && $(MAKE) +- $(MAKE) -C $(TARGET_DIR)/libbacktrace-build DESTDIR=$$(pwd)/$(TARGET_DIR) install-exec ++external/libbacktrace.a: external/libbacktrace/backtrace.h ++ @mkdir external/libbacktrace-build 2>/dev/null || true ++ cd external/libbacktrace-build && ../libbacktrace/configure CC="$(CC)" --enable-static=yes --host="$(MAKE_HOST)" --build="$(BUILD)" --enable-shared=no --prefix=/ --libdir=/ && $(MAKE) ++ $(MAKE) -C external/libbacktrace-build DESTDIR=$$(pwd)/external install-exec + + distclean: external-distclean + clean: external-clean + + external-clean: +- $(RM) $(EXTERNAL_LIBS) $(TARGET_DIR)/*.la $(TARGET_DIR)/*.o +- if [ -f ${TARGET_DIR}/libsodium-build/Makefile ]; then make -C ${TARGET_DIR}/libsodium-build clean; fi +- if [ -f ${TARGET_DIR}/libwally-core-build/Makefile ]; then make -C ${TARGET_DIR}/libwally-core-build clean; fi +- if [ -f ${TARGET_DIR}/libwally-core-build/src/Makefile ]; then make -C ${TARGET_DIR}/libwally-core-build/src clean; fi ++ $(RM) $(EXTERNAL_LIBS) external/*.la external/*.o ++ if [ -f external/libsodium/Makefile ]; then make -C external/libsodium clean; fi ++ if [ -f external/libwally-core/Makefile ]; then make -C external/libwally-core clean; fi ++ if [ -f external/ibwally-core/src/Makefile ]; then make -C external/libwally-core/src clean; fi + + external-distclean: + make -C external/libsodium distclean || true +- $(RM) -rf ${TARGET_DIR}/libbacktrace-build +- $(RM) ${TARGET_DIR}/libsodium-build/src/libsodium/libsodium.la +- $(RM) ${TARGET_DIR}/libwally-core-build/src/secp256k1/libsecp256k1.la ${TARGET_DIR}/libwally-core-build/src/libwallycore.la ++ $(RM) -rf external/libbacktrace-build ++ $(RM) external/libsodium/src/libsodium/libsodium.la ++ $(RM) external/libwally-core/src/secp256k1/libsecp256k1.la external/libwally-core/src/libwallycore.la + $(RM) -r `git status --ignored --porcelain external/libwally-core | grep '^!! ' | cut -c3-`