nem Advent Calendar 2020 7日目

building catapult-server from source

という記事があったので、ラズベリーパイでコンパイルできるか試してみる。

本家のマニュアル

https://github.com/nemtech/catapult-server/blob/main/docs/BUILD-manual.md

環境(Raspberry Pi 4 4G Model B

sudo apt update
sudo apt -y upgrade
sudo apt -y install gcc clang cmake libssl-dev ninja-build zsh pkg-config build-essential

zsh

$ sudo chsh -s $(which zsh)

exit

echo $SHELL

$ vi ~/.zshrc

 

Step1 download all dependencies from source

function download_boost {
    local boost_ver=1_${1}_0
    local boost_ver_dotted=1.${1}.0

    curl -o boost_${boost_ver}.tar.gz -SL https://dl.bintray.com/boostorg/release/${boost_ver_dotted}/source/boost_${boost_ver}.tar.gz
    tar -xzf boost_${boost_ver}.tar.gz
    mv boost_${boost_ver} boost
}

function download_git_dependency {
    git clone git://github.com/${1}/${2}.git
    cd ${2}
    git checkout ${3}
    cd ..
}

function download_all {
    download_boost 74

    download_git_dependency google googletest release-1.10.0
    download_git_dependency google benchmark v1.5.2

    download_git_dependency mongodb mongo-c-driver 1.17.2
    download_git_dependency mongodb mongo-cxx-driver r3.6.1

    download_git_dependency zeromq libzmq v4.3.3
    download_git_dependency zeromq cppzmq v4.7.1

    download_git_dependency facebook rocksdb v6.13.3
}

 

cd ${CAT_DEPS_DIR}
mkdir source
cd source
download_all

 

Step 2 - Install all dependencies

function install_boost {
    cd boost
    ./bootstrap.sh with-toolset=clang --prefix=${boost_output_dir}

    b2_options=()
    b2_options+=(--prefix=${boost_output_dir})
    ./b2 ${b2_options[@]} -j 8 stage release
    ./b2 install ${b2_options[@]}
}

function install_git_dependency {
    cd ${2}
    mkdir _build
    cd _build

    cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX="${CAT_DEPS_DIR}/${1}" ${cmake_options[@]} ..
    make -j 8 && make install
}

function install_google_test {
    cmake_options=()
    cmake_options+=(-DCMAKE_POSITION_INDEPENDENT_CODE=ON)
    install_git_dependency google googletest
}

function install_google_benchmark {
    cmake_options=()
    cmake_options+=(-DBENCHMARK_ENABLE_GTEST_TESTS=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=ON)
    install_git_dependency google benchmark
}

function install_mongo_c_driver {
    cmake_options=()
    cmake_options+=(-DENABLE_AUTOMATIC_INIT_AND_CLEANUP=OFF)
    cmake_options+=(-DENABLE_MONGODB_AWS_AUTH=OFF)
    cmake_options+=(-DENABLE_TESTS=OFF)
    cmake_options+=(-DENABLE_EXAMPLES=OFF)
    cmake_options+=(-DENABLE_SASL=OFF)
    install_git_dependency mongodb mongo-c-driver
}

function install_mongo_cxx_driver {
    cmake_options=()
    cmake_options+=(-DBOOST_ROOT=${boost_output_dir})
    cmake_options+=(-DCMAKE_CXX_STANDARD=17)
    install_git_dependency mongodb mongo-cxx-driver
}

function install_zmq_lib {
    cmake_options=()
    cmake_options+=(-DWITH_TLS=OFF)
    install_git_dependency zeromq libzmq
}

function install_zmq_cpp {
    cmake_options=()
    cmake_options+=(-DCPPZMQ_BUILD_TESTS=OFF)
    install_git_dependency zeromq cppzmq
}

function install_rocks {
    cmake_options=()
    cmake_options+=(-DPORTABLE=1)
    cmake_options+=(-DWITH_TESTS=OFF)
    cmake_options+=(-DWITH_TOOLS=OFF)
    cmake_options+=(-DWITH_BENCHMARK_TOOLS=OFF)
    cmake_options+=(-DWITH_CORE_TOOLS=OFF)
    cmake_options+=(-DWITH_GFLAGS=OFF)
    install_git_dependency facebook rocksdb
}

function install_all {
    declare -a installers=(
        install_boost
        install_google_test
        install_google_benchmark
        install_mongo_c_driver
        install_mongo_cxx_driver
        install_zmq_lib
        install_zmq_cpp
        install_rocks
    )
    for install in "${installers[@]}"
    do
        pushd source > /dev/null
        ${install}
        popd > /dev/null
    done
}

cd ${CAT_DEPS_DIR}
install_all

Step 3 - Finally, download and build catapult

cd
git clone https://github.com/nemtech/catapult-server.git
cd catapult-server

mkdir _build && cd _build
cmake BOOST_ROOT="${CAT_DEPS_DIR}/boost" cmake .. \
    -DCMAKE_BUILD_TYPE=RelWithDebInfo \
    -DCMAKE_PREFIX_PATH="${CAT_DEPS_DIR}/facebook;${CAT_DEPS_DIR}/google;${CAT_DEPS_DIR}/mongodb;${CAT_DEPS_DIR}/zeromq" \
    \
    -GNinja  -DBoost_INCLUDE_DIR=${CAT_DEPS_DIR}/boost/include

ninja publish
ninja -j4

Comments