electrum

Electrum Bitcoin wallet
git clone https://git.parazyd.org/electrum
Log | Files | Refs | Submodules

make_libsecp256k1.sh (2777B)


      1 #!/bin/bash
      2 
      3 # This script was tested on Linux and MacOS hosts, where it can be used
      4 # to build native libsecp256k1 binaries.
      5 #
      6 # It can also be used to cross-compile to Windows:
      7 # $ sudo apt-get install mingw-w64
      8 # For a Windows x86 (32-bit) target, run:
      9 # $ GCC_TRIPLET_HOST="i686-w64-mingw32" ./contrib/make_libsecp256k1.sh
     10 # Or for a Windows x86_64 (64-bit) target, run:
     11 # $ GCC_TRIPLET_HOST="x86_64-w64-mingw32" ./contrib/make_libsecp256k1.sh
     12 #
     13 # To cross-compile to Linux x86:
     14 # sudo apt-get install gcc-multilib g++-multilib
     15 # $ AUTOCONF_FLAGS="--host=i686-linux-gnu CFLAGS=-m32 CXXFLAGS=-m32 LDFLAGS=-m32" ./contrib/make_libsecp256k1.sh
     16 
     17 LIBSECP_VERSION="dbd41db16a0e91b2566820898a3ab2d7dad4fe00"
     18 
     19 set -e
     20 
     21 . $(dirname "$0")/build_tools_util.sh || (echo "Could not source build_tools_util.sh" && exit 1)
     22 
     23 here=$(dirname $(realpath "$0" 2> /dev/null || grealpath "$0"))
     24 CONTRIB="$here"
     25 PROJECT_ROOT="$CONTRIB/.."
     26 
     27 pkgname="secp256k1"
     28 info "Building $pkgname..."
     29 
     30 (
     31     cd $CONTRIB
     32     if [ ! -d secp256k1 ]; then
     33         git clone https://github.com/bitcoin-core/secp256k1.git
     34     fi
     35     cd secp256k1
     36     if ! $(git cat-file -e ${LIBSECP_VERSION}) ; then
     37         info "Could not find requested version $LIBSECP_VERSION in local clone; fetching..."
     38         git fetch --all
     39     fi
     40     git reset --hard
     41     git clean -dfxq
     42     git checkout "${LIBSECP_VERSION}^{commit}"
     43 
     44     if ! [ -x configure ] ; then
     45         echo "libsecp256k1_la_LDFLAGS = -no-undefined" >> Makefile.am
     46         echo "LDFLAGS = -no-undefined" >> Makefile.am
     47         ./autogen.sh || fail "Could not run autogen for $pkgname. Please make sure you have automake and libtool installed, and try again."
     48     fi
     49     if ! [ -r config.status ] ; then
     50         ./configure \
     51             $AUTOCONF_FLAGS \
     52             --prefix="$here/$pkgname/dist" \
     53             --enable-module-recovery \
     54             --enable-experimental \
     55             --enable-module-ecdh \
     56             --disable-benchmark \
     57             --disable-tests \
     58             --disable-exhaustive-tests \
     59             --disable-static \
     60             --enable-shared || fail "Could not configure $pkgname. Please make sure you have a C compiler installed and try again."
     61     fi
     62     make -j4 || fail "Could not build $pkgname"
     63     make install || fail "Could not install $pkgname"
     64     . "$here/$pkgname/dist/lib/libsecp256k1.la"
     65     host_strip "$here/$pkgname/dist/lib/$dlname"
     66     cp -fpv "$here/$pkgname/dist/lib/$dlname" "$PROJECT_ROOT/electrum" || fail "Could not copy the $pkgname binary to its destination"
     67     info "$dlname has been placed in the inner 'electrum' folder."
     68     if [ -n "$DLL_TARGET_DIR" ] ; then
     69         cp -fpv "$here/$pkgname/dist/lib/$dlname" "$DLL_TARGET_DIR" || fail "Could not copy the $pkgname binary to DLL_TARGET_DIR"
     70     fi
     71 )