xref: /aosp_15_r20/external/pytorch/scripts/build_local.sh (revision da0073e96a02ea20f0ac840b70461e3646d07c45)
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