如何构建eos.io

in cn •  7 years ago 

原文地址:https://eosio.github.io/eos/group__howtobuild.html

下面的内容会介绍如何获得软件,如何build,如何运行一个简单的测试网络。

设置 build/development 环境

本项目是用c++14写的,使用cmake作为构建(build) 系统。我们推荐最新版的c++工具链(比如clang 或gcc)和cmake。在写这片文档的时候,nathan用的是clang4.0.0 和cmake 3.8.0.

安装依赖

eos需要安装以下外部依赖:

git clone https://github.com/cryptonomex/secp256k1-zkp.git
cd secp256k1-zkp
./autogen.sh
./configure
make
sudo make install
如何为wasm构建LLVM 和clang

默认情况下,LLVM和clang都没有包含wasm构建目标(build target),所以你必须自己构建。注意,下面的代码创建的llvm版本只能构建wasm目标。

mkdir  ~/wasm-compiler
cd ~/wasm-compiler
git clone --depth 1 --single-branch --branch release_40 https://github.com/llvm-mirror/llvm.git
cd llvm/tools
git clone --depth 1 --single-branch --branch release_40 https://github.com/llvm-mirror/clang.git
cd ..
mkdir build
cd build
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=.. -DLLVM_TARGETS_TO_BUILD= -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly -DCMAKE_BUILD_TYPE=Release ../
make -j4 install
获取代码

你需要下载eos,以及子模块(submodule)的一个或两个递归。最方便的方法是进行recursive clone:

git clone [https://github.com/eosio/eos](https://github.com/eosio/eos) —recursive

如果不使用—recursive 标签进行clone,那么可以在repo中运行下面的指令,取回/恢复子模块:

git submodule update --init —recursive

配置和构建

要进行in-source build,只需要在顶层文件夹运行cmake. 当然也支持out-of-source build。要重写clang的默认选项,可以把下面的标签添加到cmake指令中:

-DCMAKE_CXX_COMPILER=/path/to/c++ -DCMAKE_C_COMPILER=/path/to/cc

对于debug build,要添加-DCMAKE_BUILD_TYPE=Debug.

成功运行cmake之后,只需运行 make,开始build。build之后,要运行测试套件,就在tests文件夹中运行chain_test

使用wasm编译器完成项目

使用WASM_LLVM_CONFIG环境变量找到我们最近的wasm编译器。要编译eos/contracts文件夹里的示例合约和各自的测试,这就是必须的。

git clone https://github.com/eosio/eos --recursive
mkdir -p eos/build && cd eos/build
export WASM_LLVM_CONFIG=~/wasm-compiler/llvm/bin/llvm-config 
cmake ..
make -j4

如果你在eos.io软件上做开发,你需要在.bash_profile 文件里加上WASM_LLVM_CONFIG

创建并运行单节点测试网络

成功build了项目之后,eosd二进制文件就会出现在programs/eosd文件夹里。进入这个文件夹,运行eosd,可能会报错然后退出,如果没有,直接使用Ctrl-C退出。注意:eosd会创建一个名为data-dir的文件夹,这个文件夹包含了默认的配置(config.ini),以及其它的一些内部信息。你可以把--data-dir /path/to/data传到eosd,来修改这个默认的存储路径。

编辑config.ini文件,把下面的设置添加到默认的地方:

# Load the testnet genesis state, which creates some initial block producers with the default key
genesis-json = /path/to/eos/source/genesis.json
# Enable production on a stale chain, since a single-node test chain is pretty much always stale
enable-stale-production = true
# Enable block production with the testnet producers
producer-name = inita
producer-name = initb
producer-name = initc
producer-name = initd
producer-name = inite
producer-name = initf
producer-name = initg
producer-name = inith
producer-name = initi
producer-name = initj
producer-name = initk
producer-name = initl
producer-name = initm
producer-name = initn
producer-name = inito
producer-name = initp
producer-name = initq
producer-name = initr
producer-name = inits
producer-name = initt
producer-name = initu
# Load the block producer plugin, so we can produce blocks
plugin = eos::producer_plugin

现在,就可以运行eosd了,运行起来,就能看到它开始出块。目前,p2p代码还没完成,所以只能运行单节点测试网络,当p2p网络完成了,我们会更新文章,写一个如何创建一个多节点测试网络的示例。

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

学习到了