2018-03-21 20:40:12 +01:00
# Table of Contents
1. [Library Requirements ](#library-requirements )
2. [Ubuntu ](#to-build-on-ubuntu )
3. [Fedora ](#to-build-on-fedora )
4. [FreeBSD ](#to-build-on-freebsd )
5. [NixOS ](#to-build-on-nixos )
2018-03-23 15:37:50 +01:00
6. [macOS ](#to-build-on-macos )
7. [Android ](#to-cross-compile-for-android )
2018-04-03 16:10:13 +02:00
8. [Raspberry Pi ](#to-cross-compile-for-raspberry-pi )
9. [Additional steps ](#additional-steps )
2018-03-21 20:40:12 +01:00
2016-03-16 06:36:17 +01:00
Library Requirements
--------------------
2016-02-25 05:55:00 +01:00
2016-03-16 06:36:17 +01:00
You will need several development libraries:
2016-08-18 06:55:13 +02:00
* libsqlite3: for database support.
2016-08-19 03:35:32 +02:00
* libgmp: for secp256k1
2017-04-04 08:02:57 +02:00
For actually doing development and running the tests, you will also need:
* pip3: to install python-bitcoinlib
* asciidoc: for formatting the man pages (if you change them)
* valgrind: for extra debugging checks
2016-03-16 06:36:17 +01:00
2018-03-01 14:58:48 +01:00
You will also need a version of bitcoind with segregated witness and
estimatesmartfee economical node, such as the 0.15 or above.
2016-05-26 07:55:24 +02:00
2018-03-21 20:40:12 +01:00
To Build on Ubuntu
2016-08-13 03:09:32 +02:00
---------------------
2018-03-21 20:40:12 +01:00
OS version: Ubuntu 15.10 or above
2016-08-13 03:09:32 +02:00
Get dependencies:
2018-03-01 15:05:52 +01:00
2018-04-22 12:10:09 +02:00
sudo apt-get update
2018-03-01 15:05:52 +01:00
sudo apt-get install -y \
autoconf automake build-essential git libtool libgmp-dev \
2018-05-05 17:41:09 +02:00
libsqlite3-dev python python3 net-tools
2017-08-10 16:09:02 +02:00
2018-03-01 14:58:48 +01:00
If you don't have Bitcoin installed locally you'll need to install that
as well:
2018-03-01 15:05:52 +01:00
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:bitcoin/bitcoin
sudo apt-get update
sudo apt-get install -y bitcoind
2017-04-04 08:02:57 +02:00
For development or running tests, get additional dependencies:
2018-03-01 15:05:52 +01:00
sudo apt-get install -y asciidoc valgrind python3-pip
sudo pip3 install python-bitcoinlib
2016-08-13 03:09:32 +02:00
2017-01-11 00:12:26 +01:00
Clone lightning:
2018-03-01 15:05:52 +01:00
git clone https://github.com/ElementsProject/lightning.git
cd lightning
2016-08-13 03:09:32 +02:00
Build lightning:
2018-03-01 15:05:52 +01:00
make
2016-08-13 03:09:32 +02:00
Running lightning:
2018-03-01 15:05:52 +01:00
bitcoind &
./lightningd/lightningd &
./cli/lightning-cli help
2016-08-13 03:09:32 +02:00
**Note**: You may need to include `testnet=1` in `bitcoin.conf`
2018-03-21 20:40:12 +01:00
To Build on Fedora
2018-01-22 20:31:56 +01:00
---------------------
2018-03-21 20:40:12 +01:00
OS version: Fedora 27 or above
Get dependencies:
```
$ sudo dnf update -y & & \
dnf groupinstall -y \
'C Development Tools and Libraries' \
'Development Tools' & & \
dnf install -y \
clang \
gmp-devel \
libsq3-devel \
python2-devel \
python3-devel \
python3-pip \
python3-setuptools \
net-tools \
net-tools \
valgrind \
wget & & \
dnf clean all
```
Make sure you have [bitcoind ](https://github.com/bitcoin/bitcoin ) available to run
Clone lightning:
```
$ git clone https://github.com/ElementsProject/lightning.git
$ cd lightning
```
Build and install lightning:
```
$lightning> make
$lightning> sudo make install
```
Running lightning (mainnet):
```
$ bitcoind &
$ lightningd --network=bitcoin
```
Running lightning on testnet:
```
$ bitcoind -testnet &
$ lightningd --network=testnet
```
To Build on FreeBSD
---------------------
OS version: FreeBSD 11.1-RELEASE or above
2018-01-22 20:31:56 +01:00
Get dependencies:
2018-03-01 15:05:52 +01:00
# pkg install -y \
2018-03-21 20:40:12 +01:00
autoconf automake git gmp asciidoc gmake libtool python python3 sqlite3
2018-01-22 20:31:56 +01:00
2018-03-01 14:58:48 +01:00
If you don't have Bitcoin installed locally you'll need to install that
as well:
2018-03-01 15:05:52 +01:00
# pkg install -y bitcoin-daemon bitcoin-utils
2018-01-22 20:31:56 +01:00
Clone lightning:
2018-03-01 15:05:52 +01:00
$ git clone https://github.com/ElementsProject/lightning.git
$ cd lightning
2018-01-22 20:31:56 +01:00
Build lightning:
2018-03-01 15:05:52 +01:00
$ gmake
2018-03-21 20:40:12 +01:00
$ gmake install
2018-01-22 20:31:56 +01:00
Running lightning:
2018-03-01 14:58:48 +01:00
**Note**: Edit your `/usr/local/etc/bitcoin.conf` to include
`rpcuser=<foo>` and `rpcpassword=<bar>` first, you may also need to
include `testnet=1`
2018-01-22 20:31:56 +01:00
2018-03-01 15:05:52 +01:00
# service bitcoind start
$ ./lightningd/lightningd &
$ ./cli/lightning-cli help
2018-01-22 23:45:00 +01:00
2018-03-21 20:40:12 +01:00
To Build on NixOS
2018-01-22 23:45:00 +01:00
--------------------
Use nix-shell launch a shell with a full clightning dev environment:
```
$ nix-shell -Q -p gdb sqlite autoconf git clang libtool gmp sqlite autoconf \
autogen automake 'python3.withPackages (p: [p.bitcoinlib])' \
valgrind asciidoc --run make
```
2018-02-26 12:48:57 +01:00
2018-03-23 15:37:50 +01:00
To Build on macOS
2018-03-22 13:41:29 +01:00
---------------------
Assume you have Xcode and HomeBrew installed on your Mac.
Get dependencies:
2018-05-05 17:41:09 +02:00
$ brew install autoconf automake libtool python3 gmp gnu-sed
2018-03-22 13:41:29 +01:00
If you don't have bitcoind installed locally you'll need to install that
as well:
$ brew install \
berkeley-db4 boost miniupnpc openssl pkg-config protobuf qt libevent
$ git clone https://github.com/bitcoin/bitcoin
$ cd bitcoin
$ ./autogen.sh
$ ./configure
$ make & make install
Clone lightning:
$ git clone https://github.com/ElementsProject/lightning.git
$ cd lightning
Build lightning:
$ make
Running lightning:
**Note**: Edit your `~/Library/Application\ Support/Bitcoin/bitcoin.conf`
to include `rpcuser=<foo>` and `rpcpassword=<bar>` first, you may also
need to include `testnet=1`
bitcoind &
./lightningd/lightningd &
./cli/lightning-cli help
2018-02-26 13:33:35 +01:00
To cross-compile for Android
2018-02-26 12:48:57 +01:00
--------------------
2018-03-01 14:58:48 +01:00
Make a standalone toolchain as per
https://developer.android.com/ndk/guides/standalone_toolchain.html.
For c-lightning you must target an API level of 24 or higher.
2018-02-26 12:48:57 +01:00
2018-03-01 14:58:48 +01:00
Depending on your toolchain location and target arch, source env variables
such as:
2018-02-26 12:48:57 +01:00
2018-03-01 15:05:52 +01:00
export PATH=$PATH:/path/to/android/toolchain/bin
# Change next line depending on target device arch
target_host=arm-linux-androideabi
export AR=$target_host-ar
export AS=$target_host-clang
export CC=$target_host-clang
export CXX=$target_host-clang++
export LD=$target_host-ld
export STRIP=$target_host-strip
2018-03-01 14:58:48 +01:00
2018-02-26 12:48:57 +01:00
Two makefile targets should not be cross-compiled so we specify a native CC:
2018-03-01 15:05:52 +01:00
make CC=clang clean ccan/tools/configurator/configurator
make clean -C ccan/ccan/cdump/tools \
& & make CC=clang -C ccan/ccan/cdump/tools
2018-03-01 14:58:48 +01:00
Install the `qemu-user` package.
This will allow you to properly configure
the build for the target device environment.
Build with:
2018-03-01 15:05:52 +01:00
2018-05-17 21:20:03 +02:00
BUILD=x86_64 MAKE_HOST=arm-linux-androideabi \
2018-03-01 15:05:52 +01:00
make PIE=1 DEVELOPER=0 \
CONFIGURATOR_CC="arm-linux-androideabi-clang -static"
2018-03-21 20:40:12 +01:00
2018-04-03 16:10:13 +02:00
To cross-compile for Raspberry Pi
--------------------
Obtain the [official Raspberry Pi toolchains ](https://github.com/raspberrypi/tools ). This document assumes compilation will occur towards the Raspberry Pi 3 (arm-linux-gnueabihf as of Mar. 2018). In addition, obtain and install cross-compiled versions of sqlite 3 and gmp.
Depending on your toolchain location and target arch, source env variables will need to be set. They can be set from the command line as such:
export PATH=$PATH:/path/to/arm-linux-gnueabihf/bin
# Change next line depending on specific Raspberry Pi device
target_host=arm-linux-gnueabihf
export AR=$target_host-ar
export AS=$target_host-as
export CC=$target_host-gcc
export CXX=$target_host-g++
export LD=$target_host-ld
export STRIP=$target_host-strip
Install the `qemu-user` package. This will allow you to properly configure the build for the target device environment. Then, build with the following commands. (A 64-bit build system is assumed here.)
make CC=gcc clean ccan/tools/configurator/configurator
2018-05-17 21:20:03 +02:00
BUILD=x86_64 MAKE_HOST=arm-linux-gnueabihf make PIE=1 DEVELOPER=0 CONFIGURATOR_CC="arm-linux-gnueabihf-gcc -static" LDFLAGS="-L/path/to/gmp-and-sqlite/lib" CFLAGS="-std=gnu11 -I /path/to/gmp-and-sqlite/include -I . -I ccan -I external/libwally-core/src/secp256k1/include -I external/libsodium/src/libsodium/include -I external/jsmn -I external/libwally-core/include -I external/libbacktrace -I external/libbase58"
2018-04-03 16:10:13 +02:00
The compilation will eventually fail due to a compile error in the `cdump` CCAN module. Recompile the module, and then re-run the make system.
make clean -C ccan/ccan/cdump/tools
make CC=gcc -C ccan/ccan/cdump/tools
2018-05-17 21:20:03 +02:00
BUILD=x86_64 MAKE_HOST=arm-linux-gnueabihf make PIE=1 DEVELOPER=0 CONFIGURATOR_CC="arm-linux-gnueabihf-gcc -static" LDFLAGS="-L/path/to/gmp-and-sqlite/lib" CFLAGS="-std=gnu11 -I /path/to/gmp-and-sqlite/include -I . -I ccan -I external/libwally-core/src/secp256k1/include -I external/libsodium/src/libsodium/include -I external/jsmn -I external/libwally-core/include -I external/libbacktrace -I external/libbase58"
2018-04-03 16:10:13 +02:00
2018-03-21 20:40:12 +01:00
Additional steps
--------------------
Go to [README ](https://github.com/ElementsProject/lightning/blob/master/README.md ) for more information how to create an address, add funds, connect to a node, etc.