diff --git a/scripts/build_host_protoc.sh b/scripts/build_host_protoc.sh new file mode 100644 index 000000000000..cd37db3b3171 --- /dev/null +++ b/scripts/build_host_protoc.sh @@ -0,0 +1,59 @@ +#!/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