doc: document how to build the project from source

This commit is contained in:
Antoine Poinsot 2022-11-23 22:49:26 +01:00
parent 6572b2fa4a
commit 9b29c2e0aa
No known key found for this signature in database
GPG Key ID: E13FC145CD3F4304
2 changed files with 90 additions and 1 deletions

View File

@ -39,7 +39,7 @@ your machine yet, you can download it [there](https://bitcoincore.org/en/downloa
TODO: download links
TODO: link to a longer-form document in the doc/ folder containing the different build methods.
If you want to build the project from source, see [`doc/BUILD.md`](doc/BUILD.md).
### Setting up a wallet

89
doc/BUILD.md Normal file
View File

@ -0,0 +1,89 @@
# Building Liana
We use [Cargo](https://doc.rust-lang.org/stable/cargo/), the ubiquitous Rust package manager.
Cargo takes care of downloading and compiling the projects dependencies, as well as compiling the
project itself. Dependencies are specified in a [`Cargo.toml`](../Cargo.toml) file at the root of
this repository. They are pinned in a [`Cargo.lock`](../Cargo.lock) file at the same place.
We take security very seriously, and toolchain is a big part of that. We are moderatly conservative
with dependencies and aim to target reasonable compiler versions that have had time to mature (ie
that had the chance to be reviewed and distributed by third parties, as well as tested by the
community). The minimum supported Rust version for `lianad` currently is `1.48`, that is the
version of [`rustc` shipped in Debian stable](https://packages.debian.org/stable/rustc). (It is also
inferior to the latest version of `rustc` supported by
[`mrustc`](https://github.com/thepowersgang/mrustc/) supported at the time of writing, `1.54`).
## Getting `Cargo`
### Through your system package manager
Most package managers distribute a version of `Cargo` able to build this project. For instance on
Debian-based systems (as root):
```
apt update && apt install cargo
```
### By manually downloading the latest stable version
The ["other installation
methods"](https://forge.rust-lang.org/infra/other-installation-methods.html#standalone-installers)
page of the Rust website contains a list of archives for different architectures, along with
signatures made with the ["Rust signing key"](https://static.rust-lang.org/rust-key.gpg.ascii):
```
pub rsa4096/0x85AB96E6FA1BE5FE 2013-09-26 [SC]
Key fingerprint = 108F 6620 5EAE B0AA A8DD 5E1C 85AB 96E6 FA1B E5FE
uid [ unknown] Rust Language (Tag and Release Signing Key) <rust-key@rust-lang.org>
sub rsa4096/0x8E9AA3F7AB3F5826 2013-09-26 [E]
sub rsa4096/0x5CB4A9347B3B09DC 2014-12-15 [S]
```
You can therefore pull the key from either the above or from a keyserver:
```
$ gpg --keyserver hkps://keys.openpgp.org --receive 0x85AB96E6FA1BE5FE
```
(Make sure to double check the whole key is the same, not just the fingerprint.)
And then you can download the archive corresponding to your system and CPU architecture, verify the
signature and use the `cargo` binary from this archive to build Liana. Here is an example for
`amd64`:
```
$ curl -O https://static.rust-lang.org/dist/rust-1.65.0-x86_64-unknown-linux-gnu.tar.gz
$ curl -O https://static.rust-lang.org/dist/rust-1.65.0-x86_64-unknown-linux-gnu.tar.gz.asc
$ gpg --verify rust-1.65.0-x86_64-unknown-linux-gnu.tar.gz.asc
$ tar -xzf rust-1.65.0-x86_64-unknown-linux-gnu.tar.gz
$ ./rust-1.65.0-x86_64-unknown-linux-gnu/cargo/bin/cargo build --release
```
### Through `rustup`
[`rustup`](https://rust-lang.github.io/rustup/) is a software for installing the Rust toolchain.
Some package managers distribute a version of `rustup`. Failing that, you can always follow the
"official" [installation method of `rustup`](https://www.rust-lang.org/tools/install) (that is, a
`curl`-`sh` pipe).
## Building the project
Once you've got Cargo installed, building the project is a simple `cargo` invocation away:
```
$ cargo build --release
```
Make sure not to forget the `--release`, or you would build without optimizations otherwise.
The `lianad` and `liana-cli` binaries will be in the `target/` directory at the root of the
repository:
```
$ ls target/release/
build deps examples incremental liana-cli liana-cli.d lianad lianad.d libliana.d libliana.rlib
```
To build the GUI, do the same but in the [`gui/`](../gui/) folder present at the root of the
repository:
```
$ cd gui/
$ cargo build --release
$ ls target/release/
build deps examples incremental liana-gui liana-gui.d libliana_gui.d libliana_gui.rlib
```