How to build Caffe & libtorch dependencies - t-kuha/mpsoc-library GitHub Wiki

Boost

$ ./bootstrap.sh 

# Replace the line in project-config.jam:
#     using gcc ; 
# with
#     using gcc : arm64 : aarch64-linux-gnu-g++ ;

$ ./bjam install toolset=gcc-arm64 \
variant=release \
link=shared \
threading=multi \
runtime-link=shared \
--prefix=_install \
--with-thread \
--with-system \
--with-filesystem \
-j$(nproc)

gflags

$ mkdir _mpsoc
$ cd _mpsoc/

# Configuration
$ cmake .. -G"Unix Makefiles" \
-DCMAKE_TOOLCHAIN_FILE=toolchain.make \
-DCMAKE_INSTALL_PREFIX=_install \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=ON

# Build & install
$ cmake --build . --config Release --target install -- -j$(nproc)

glog

$ mkdir _mpsoc
$ cd _mpsoc/

# Configuration
$ cmake .. -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=toolchain.make \
-DCMAKE_INSTALL_PREFIX=_install \
-DBUILD_TESTING=OFF \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=ON

# Build & install
$ cmake --build . --config Release --target install -- -j$(nproc)

leveldb

$ mkdir _mpsoc
$ cd _mpsoc/

$ cmake .. -G"Unix Makefiles" \
-DCMAKE_TOOLCHAIN_FILE=toolchain.make \
-DCMAKE_INSTALL_PREFIX=_install \
-DCMAKE_BUILD_TYPE=Release \
-DLEVELDB_BUILD_TESTS=OFF \
-DLEVELDB_BUILD_BENCHMARKS=OFF \
-DBUILD_SHARED_LIBS=ON

$ cmake --build . --config Release --target install -- -j$(nproc)

LMDB

  • Modify Makefile

    • Before:
    CC      = gcc
    AR      = ar
    OPT = -O2 -g
       ...
    prefix  = /usr/local
    
    • After:
    CC      = aarch64-linux-gnu-gcc
    AR      = aarch64-linux-gnu-ar
    OPT = -O3
       ...
    prefix  = <lib output dir>
    
  • Build

$ make -j$(nproc) install

OpenBLAS

  • Building with CMake causes incompatibility with libtorch; go the Makefile way
# Via Makefile
$ make -j$(nproc) \
CC=aarch64-linux-gnu-gcc HOSTCC=gcc \
CROSS=1 TARGET=ARMV8
$ make PREFIX=_install install

# or with CMake...
$ cmake .. -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=toolchain.make \
-DCMAKE_BUILD_TYPE=Release -DNOFORTRAN=1 -DBUILD_SHARED_LIBS=1 \
-DCMAKE_INSTALL_PREFIX=$(pwd)/_install

OpenCV

$ mkdir _mpsoc
$ cd _mpsoc/

# Configuration
$ cmake .. -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=toolchain.make \
-DCMAKE_BUILD_TYPE=Release -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF \
-DBUILD_ZLIB=ON -DZLIB_INCLUDE_DIR=../3rdparty/zlib \
-DCMAKE_INSTALL_PREFIX=$(pwd)/_install

# Exclude unnecessary modules
$ ccmake .

# Build & install
$ cmake --build . --config Release --target install -- -j$(nproc)

protobuf

  • First, build protoc for host in static linking mode...
$ mkdir _host
$ cd _host/

$ cmake ../cmake/ \
-G"Unix Makefiles" \
-DCMAKE_INSTALL_PREFIX=_install \
-Dprotobuf_BUILD_TESTS=OFF
$ cmake --build . --config Release --target install -- -j$(nproc)
  • Then, build for target (64bit ARM CPU)...
$ mkdir _mpsoc
$ cd _mpsoc/

$ export PATH=$(dirname $(pwd))/_host/_install/bin:${PATH}

$ cmake ../cmake/ \
-G"Unix Makefiles" \
-DCMAKE_TOOLCHAIN_FILE=toolchain.make \
-DCMAKE_INSTALL_PREFIX=_install \
-Dprotobuf_BUILD_TESTS=OFF \
-Dprotobuf_BUILD_SHARED_LIBS=ON
$ cmake --build . --config Release --target install -- -j$(nproc)

snappy

$ mkdir _mpsoc
$ cd _mpsoc/

$ cmake .. \
-G"Unix Makefiles" \
-DCMAKE_TOOLCHAIN_FILE=toolchain.make \
-DCMAKE_INSTALL_PREFIX=_install \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=ON \
-DSNAPPY_BUILD_TESTS=OFF
$ cmake --build . --config Release --target install -- -j$(nproc)

RocksDB

$ mkdir _mpsoc
$ cd _mpsoc/

# Configure
$ cmake .. -G"Ninja" \
-DCMAKE_TOOLCHAIN_FILE=toolchain.make \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=$(pwd)/_install \
-DWITH_TESTS=OFF \
-DWITH_TOOLS=OFF \
-DWITH_GFLAGS=OFF \
-DPORTABLE=ON

# Build & install
$ cmake --build . --config Release --target install -- -j$(nproc)

ZeroMQ

$ mkdir _mpsoc
$ cd _mpsoc

# Build & install
$ cmake .. -G"Unix Makefiles" \
-DCMAKE_INSTALL_PREFIX=_install -DCMAKE_TOOLCHAIN_FILE=toolchain.make \
-DBUILD_STATIC=OFF -DBUILD_TESTS=OFF -DWITH_DOCS=OFF -DWITH_PERF_TOOL=OFF

$ cmake --build . --config Release --target install -- -j$(nproc)