#!/bin/bash ############################################################################## # Build script to build the protoc compiler for the host platform. ############################################################################## # This script builds the protoc compiler for the host platform, which is needed # for any cross-compilation as we will need to convert the protobuf source # files to cc files. # # --other-flags accepts flags that should be passed to cmake. Optional. # # After the execution of the file, one should be able to find the host protoc # binary at build_host_protoc/bin/protoc. set -e CAFFE2_ROOT="$( cd "$(dirname -- "$0")"/.. ; pwd -P)" BUILD_ROOT=${BUILD_ROOT:-"$CAFFE2_ROOT/build_host_protoc"} mkdir -p $BUILD_ROOT/build cd $BUILD_ROOT/build CMAKE_ARGS=() CMAKE_ARGS+=("-DCMAKE_INSTALL_PREFIX=$BUILD_ROOT") CMAKE_ARGS+=("-Dprotobuf_BUILD_TESTS=OFF") # If Ninja is installed, prefer it to Make if [ -x "$(command -v ninja)" ]; then CMAKE_ARGS+=("-GNinja") fi while true; do case "$1" in --other-flags) shift; CMAKE_ARGS+=("$@") break ;; "") break ;; *) echo "Unknown option passed as argument: $1" break ;; esac done # Use ccache if available (this path is where Homebrew installs ccache symlinks) if [ "$(uname)" == 'Darwin' ] && [ -d /usr/local/opt/ccache/libexec ]; then CMAKE_ARGS+=("-DCMAKE_C_COMPILER=/usr/local/opt/ccache/libexec/gcc") CMAKE_ARGS+=("-DCMAKE_CXX_COMPILER=/usr/local/opt/ccache/libexec/g++") fi cmake "$CAFFE2_ROOT/third_party/protobuf/cmake" ${CMAKE_ARGS[@]} if [ -z "$MAX_JOBS" ]; then if [ "$(uname)" == 'Darwin' ]; then MAX_JOBS=$(sysctl -n hw.ncpu) else MAX_JOBS=$(nproc) fi fi cmake --build . -- "-j${MAX_JOBS}" install