How To Compile Komodo DeFi Framework API from Source

The following tutorial introduces the reader to a simple method to build the Komodo DeFi Framework API from source.

Installing Dependencies

Step 1: OS Packages

Command
sudo apt update
sudo apt-get install build-essential git jq llvm-3.9-dev libclang-3.9-dev clang-3.9 cmake libssl-dev pkg-config

If you are using Ubuntu 20.04, run:

sudo apt update
sudo apt-get install build-essential git jq llvm-dev libclang-dev clang cmake libssl-dev pkg-config

For rpm-based distributions:

sudo dnf groupinstall "Development Tools"
sudo dnf install jq clang cmake openssl-devel clang-devel libzstd systemd-devel  # systemd-devel is used for libudev dep instead of pkg-config

Step 2: Install Rust

Command
curl https://sh.rustup.rs -sSf | sh

When asked to select an installation type, select the following option: 2) Customize installation

Choose default host triple and toolchain, then select minimal profile.

Show sample output
$ curl https://sh.rustup.rs -sSf | sh
info: downloading installer

Welcome to Rust!

This will download and install the official compiler for the Rust programming
language, and its package manager, Cargo.

It will add the cargo, rustc, rustup and other commands to Cargo's bin
directory, located at:

  /home/mylo/.cargo/bin

This path will then be added to your PATH environment variable by modifying the
profile file located at:

  /home/mylo/.profile

You can uninstall at any time with rustup self uninstall and these changes will
be reverted.

Current installation options:

   default host triple: x86_64-unknown-linux-gnu
     default toolchain: stable
  modify PATH variable: yes

1) Proceed with installation (default)
2) Customize installation
3) Cancel installation
>2

I'm going to ask you the value of each of these installation options.
You may simply press the Enter key to leave unchanged.

Default host triple?


Default toolchain? (stable/beta/nightly/none)


Profile (which tools and data to install)? (minimal/default/complete)
minimal

info: syncing channel updates for 'stable-x86_64-unknown-linux-gnu'
info: latest update on 2019-07-04, rust version 1.36.0 (a53f9df32 2019-07-03)
info: downloading component 'rustc'
info: downloading component 'rust-std'
info: downloading component 'cargo'
...
...
info: downloading component 'rust-docs'
info: installing component 'rustc'
 91.1 MiB /  91.1 MiB (100 %)  17.7 MiB/s in  5s ETA:  0s
info: installing component 'rust-std'
....
...
 stable installed - rustc 1.36.0 (a53f9df32 2019-07-03)


Rust is installed now. Great!

To get started you need Cargo's bin directory ($HOME/.cargo/bin) in your PATH
environment variable. Next time you log in this will be done automatically.

To configure your current shell run source $HOME/.cargo/env

Once the installation is complete, enter Logout and then Login again.

Alternatively, you may execute the following command in each active shell until you reach the Login again.

source $HOME/.cargo/env

Step 3: Install Rust components

Command
rustup install nightly-2022-02-01
Show sample output
$ rustup install nightly-2022-02-01
info: syncing channel updates for 'nightly-2022-02-01-x86_64-unknown-linux-gnu'
696.1 KiB / 696.1 KiB (100 %) 567.6 KiB/s in  2s ETA:  0s
info: latest update on 2022-02-01, rust version 1.49.0-nightly (ffa2e7ae8 2020-10-24)
info: downloading component 'cargo'
  5.3 MiB /   5.3 MiB (100 %) 426.6 KiB/s in  3s ETA:  0s
info: downloading component 'clippy'
  2.4 MiB /   2.4 MiB (100 %) 527.6 KiB/s in  2s ETA:  0s
info: downloading component 'rust-docs'
 13.6 MiB /  13.6 MiB (100 %)   4.3 MiB/s in  3s ETA:  0s
info: downloading component 'rust-std'
 22.3 MiB /  22.3 MiB (100 %)   7.1 MiB/s in  4s ETA:  0s
info: downloading component 'rustc'
 55.1 MiB /  55.1 MiB (100 %)  10.7 MiB/s in  7s ETA:  0s
info: downloading component 'rustfmt'
  3.6 MiB /   3.6 MiB (100 %) 289.6 KiB/s in  2s ETA:  0s
info: installing component 'cargo'
info: Defaulting to 500.0 MiB unpack ram
  5.3 MiB /   5.3 MiB (100 %)   4.4 MiB/s in  1s ETA:  0s
info: installing component 'clippy'
info: installing component 'rust-docs'
 13.6 MiB /  13.6 MiB (100 %)   3.8 MiB/s in  3s ETA:  0s
info: installing component 'rust-std'
 22.3 MiB /  22.3 MiB (100 %)   4.0 MiB/s in  5s ETA:  0s
info: installing component 'rustc'
 55.1 MiB /  55.1 MiB (100 %)   4.6 MiB/s in 12s ETA:  0s
info: installing component 'rustfmt'

  nightly-2022-02-01-x86_64-unknown-linux-gnu installed - rustc 1.49.0-nightly (ffa2e7ae8 2020-10-24)

info: checking for self-updates
info: downloading self-update
Command
rustup default nightly-2022-02-01
Show sample output
$ rustup default nightly-2022-02-01
info: using existing install for 'nightly-2022-02-01-x86_64-unknown-linux-gnu'
info: default toolchain set to 'nightly-2022-02-01-x86_64-unknown-linux-gnu'

  nightly-2022-02-01-x86_64-unknown-linux-gnu unchanged - rustc 1.49.0-nightly (ffa2e7ae8 2020-10-24)
Command (Optional, skip this step if it fails)
rustup component add rustfmt-preview
Show sample output
$ rustup component add rustfmt-preview
info: downloading component 'rustfmt'
  2.9 MiB /   2.9 MiB (100 %) 928.6 KiB/s in  1s ETA:  0s
info: installing component 'rustfmt'

Install the Komodo DeFi Framework API

Step 1: Download source code

cd ~ ; git clone https://github.com/KomodoPlatform/komodo-defi-framework --branch dev --single-branch && cd komodo-defi-framework
Show sample output
$cd ~ ; git clone https://github.com/KomodoPlatform/komodo-defi-framework --branch dev --single-branch && cd komodo-defi-framework
Cloning into 'komodo-defi-framework'...
remote: Enumerating objects: 34, done.
remote: Counting objects: 100% (34/34), done.
remote: Compressing objects: 100% (23/23), done.
remote: Total 107436 (delta 14), reused 21 (delta 11), pack-reused 107402
Receiving objects: 100% (107436/107436), 194.19 MiB | 9.59 MiB/s, done.
Resolving deltas: 100% (84045/84045), done.

Step 2: Compile Source Code

Command
cargo build --features native -vv
Show sample output


    Finished dev [optimized + debuginfo] target(s) in 6m 40s