1*da0073e9SAndroid Build Coastguard Worker#!/bin/bash 2*da0073e9SAndroid Build Coastguard Worker# 3*da0073e9SAndroid Build Coastguard Worker############################################################################## 4*da0073e9SAndroid Build Coastguard Worker# Example command to build Caffe2 5*da0073e9SAndroid Build Coastguard Worker############################################################################## 6*da0073e9SAndroid Build Coastguard Worker# 7*da0073e9SAndroid Build Coastguard Worker 8*da0073e9SAndroid Build Coastguard Workerset -ex 9*da0073e9SAndroid Build Coastguard Worker 10*da0073e9SAndroid Build Coastguard WorkerCAFFE2_ROOT="$( cd "$(dirname "$0")"/.. ; pwd -P)" 11*da0073e9SAndroid Build Coastguard Worker 12*da0073e9SAndroid Build Coastguard WorkerCMAKE_ARGS=() 13*da0073e9SAndroid Build Coastguard Worker 14*da0073e9SAndroid Build Coastguard Worker# If Ninja is installed, prefer it to Make 15*da0073e9SAndroid Build Coastguard Workerif [ -x "$(command -v ninja)" ]; then 16*da0073e9SAndroid Build Coastguard Worker CMAKE_ARGS+=("-GNinja") 17*da0073e9SAndroid Build Coastguard Workerfi 18*da0073e9SAndroid Build Coastguard Worker 19*da0073e9SAndroid Build Coastguard Worker# Use ccache if available (this path is where Homebrew installs ccache symlinks) 20*da0073e9SAndroid Build Coastguard Workerif [ "$(uname)" == 'Darwin' ]; then 21*da0073e9SAndroid Build Coastguard Worker if [ -n "${CCACHE_WRAPPER_PATH:-}"]; then 22*da0073e9SAndroid Build Coastguard Worker CCACHE_WRAPPER_PATH=/usr/local/opt/ccache/libexec 23*da0073e9SAndroid Build Coastguard Worker fi 24*da0073e9SAndroid Build Coastguard Worker if [ -d "$CCACHE_WRAPPER_PATH" ]; then 25*da0073e9SAndroid Build Coastguard Worker CMAKE_ARGS+=("-DCMAKE_C_COMPILER=$CCACHE_WRAPPER_PATH/gcc") 26*da0073e9SAndroid Build Coastguard Worker CMAKE_ARGS+=("-DCMAKE_CXX_COMPILER=$CCACHE_WRAPPER_PATH/g++") 27*da0073e9SAndroid Build Coastguard Worker fi 28*da0073e9SAndroid Build Coastguard Workerfi 29*da0073e9SAndroid Build Coastguard Worker 30*da0073e9SAndroid Build Coastguard Worker# Use special install script with Anaconda 31*da0073e9SAndroid Build Coastguard Workerif [ -n "${USE_ANACONDA}" ]; then 32*da0073e9SAndroid Build Coastguard Worker export SKIP_CONDA_TESTS=1 33*da0073e9SAndroid Build Coastguard Worker export CONDA_INSTALL_LOCALLY=1 34*da0073e9SAndroid Build Coastguard Worker "${ROOT_DIR}/scripts/build_anaconda.sh" "$@" 35*da0073e9SAndroid Build Coastguard Workerelse 36*da0073e9SAndroid Build Coastguard Worker # Make sure that pyyaml is installed for the codegen of building Aten to work 37*da0073e9SAndroid Build Coastguard Worker if [[ -n "$(python -c 'import yaml' 2>&1)" ]]; then 38*da0073e9SAndroid Build Coastguard Worker echo "Installing pyyaml with pip at $(which pip)" 39*da0073e9SAndroid Build Coastguard Worker pip install --user pyyaml 40*da0073e9SAndroid Build Coastguard Worker fi 41*da0073e9SAndroid Build Coastguard Worker 42*da0073e9SAndroid Build Coastguard Worker # Make sure that typing is installed for the codegen of building Aten to work 43*da0073e9SAndroid Build Coastguard Worker if [[ -n "$(python -c 'import typing' 2>&1)" ]]; then 44*da0073e9SAndroid Build Coastguard Worker echo "Installing typing with pip at $(which pip)" 45*da0073e9SAndroid Build Coastguard Worker pip install --user typing 46*da0073e9SAndroid Build Coastguard Worker fi 47*da0073e9SAndroid Build Coastguard Worker 48*da0073e9SAndroid Build Coastguard Worker # Build protobuf compiler from third_party if configured to do so 49*da0073e9SAndroid Build Coastguard Worker if [ -n "${USE_HOST_PROTOC:-}" ]; then 50*da0073e9SAndroid Build Coastguard Worker echo "USE_HOST_PROTOC is set; building protoc before building Caffe2..." 51*da0073e9SAndroid Build Coastguard Worker "$CAFFE2_ROOT/scripts/build_host_protoc.sh" 52*da0073e9SAndroid Build Coastguard Worker CUSTOM_PROTOC_EXECUTABLE="$CAFFE2_ROOT/build_host_protoc/bin/protoc" 53*da0073e9SAndroid Build Coastguard Worker echo "Built protoc $("$CUSTOM_PROTOC_EXECUTABLE" --version)" 54*da0073e9SAndroid Build Coastguard Worker CMAKE_ARGS+=("-DCAFFE2_CUSTOM_PROTOC_EXECUTABLE=$CUSTOM_PROTOC_EXECUTABLE") 55*da0073e9SAndroid Build Coastguard Worker fi 56*da0073e9SAndroid Build Coastguard Worker 57*da0073e9SAndroid Build Coastguard Worker # We are going to build the target into build. 58*da0073e9SAndroid Build Coastguard Worker BUILD_ROOT=${BUILD_ROOT:-"$CAFFE2_ROOT/build"} 59*da0073e9SAndroid Build Coastguard Worker mkdir -p "$BUILD_ROOT" 60*da0073e9SAndroid Build Coastguard Worker cd "$BUILD_ROOT" 61*da0073e9SAndroid Build Coastguard Worker echo "Building Caffe2 in: $BUILD_ROOT" 62*da0073e9SAndroid Build Coastguard Worker 63*da0073e9SAndroid Build Coastguard Worker cmake "$CAFFE2_ROOT" \ 64*da0073e9SAndroid Build Coastguard Worker -DCMAKE_BUILD_TYPE=Release \ 65*da0073e9SAndroid Build Coastguard Worker "${CMAKE_ARGS[@]}" \ 66*da0073e9SAndroid Build Coastguard Worker "$@" 67*da0073e9SAndroid Build Coastguard Worker 68*da0073e9SAndroid Build Coastguard Worker # Determine the number of CPUs to build with. 69*da0073e9SAndroid Build Coastguard Worker # If the `CAFFE_MAKE_NCPUS` variable is not specified, use them all. 70*da0073e9SAndroid Build Coastguard Worker if [ -n "${MAX_JOBS}" ]; then 71*da0073e9SAndroid Build Coastguard Worker CAFFE_MAKE_NCPUS="$MAX_JOBS" 72*da0073e9SAndroid Build Coastguard Worker elif [ -n "${CAFFE_MAKE_NCPUS}" ]; then 73*da0073e9SAndroid Build Coastguard Worker CAFFE_MAKE_NCPUS="$CAFFE_MAKE_NCPUS" 74*da0073e9SAndroid Build Coastguard Worker elif [ "$(uname)" == 'Darwin' ]; then 75*da0073e9SAndroid Build Coastguard Worker CAFFE_MAKE_NCPUS="$(sysctl -n hw.ncpu)" 76*da0073e9SAndroid Build Coastguard Worker else 77*da0073e9SAndroid Build Coastguard Worker CAFFE_MAKE_NCPUS="$(nproc)" 78*da0073e9SAndroid Build Coastguard Worker fi 79*da0073e9SAndroid Build Coastguard Worker 80*da0073e9SAndroid Build Coastguard Worker # Now, actually build the target. 81*da0073e9SAndroid Build Coastguard Worker cmake --build . -- "-j$CAFFE_MAKE_NCPUS" 82*da0073e9SAndroid Build Coastguard Workerfi 83