mirror of
https://github.com/zebrajr/pytorch.git
synced 2025-12-06 00:20:18 +01:00
add script to build mobile library with host toolchain (#26440)
Summary: Pull Request resolved: https://github.com/pytorch/pytorch/pull/26440 As we are optimizing build size for Android/iOS, it starts diverging from default build on several build options, e.g.: - USE_STATIC_DISPATCH=ON; - disable autograd; - disable protobuf; - no caffe2 ops; - no torch/csrc/api; ... Create this build_mobile.sh script to 'simulate' mobile build mode with host toolchain so that people who don't work on mobile regularly can debug Android/iOS CI error more easily. It might also be used to build libtorch on devices like raspberry pi natively. Test Plan: - run scripts/build_mobile.sh -DBUILD_BINARY=ON - run build_mobile/bin/speed_benchmark_torch on host machine Differential Revision: D17466580 Pulled By: ljk53 fbshipit-source-id: 7abb6b50335af5b71e58fb6d6f9c38eb74bd5781
This commit is contained in:
parent
495dbacfd1
commit
c3f881cdbc
|
|
@ -281,6 +281,13 @@ if (ANDROID OR IOS)
|
|||
set(INTERN_BUILD_MOBILE ON)
|
||||
endif()
|
||||
|
||||
# Setting `PYTORCH_BUILD_MOBILE` environment variable can force it to do mobile
|
||||
# build with host toolchain.
|
||||
if (DEFINED ENV{PYTORCH_BUILD_MOBILE})
|
||||
set(INTERN_BUILD_MOBILE ON)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DC10_MOBILE")
|
||||
endif()
|
||||
|
||||
# INTERN_BUILD_ATEN_OPS is used to control whether to build ATen/TH operators.
|
||||
# It's disabled for caffe2 mobile library.
|
||||
if (INTERN_BUILD_MOBILE AND BUILD_CAFFE2_MOBILE)
|
||||
|
|
|
|||
68
scripts/build_mobile.sh
Executable file
68
scripts/build_mobile.sh
Executable file
|
|
@ -0,0 +1,68 @@
|
|||
#!/bin/bash
|
||||
##############################################################################
|
||||
# Example command to build the mobile target.
|
||||
##############################################################################
|
||||
#
|
||||
# This script shows how one can build a libtorch library optimized for mobile
|
||||
# devices using host toolchain.
|
||||
|
||||
set -e
|
||||
|
||||
export PYTORCH_BUILD_MOBILE=1
|
||||
CAFFE2_ROOT="$( cd "$(dirname "$0")"/.. ; pwd -P)"
|
||||
|
||||
echo "Bash: $(/bin/bash --version | head -1)"
|
||||
echo "Caffe2 path: $CAFFE2_ROOT"
|
||||
|
||||
# Now, actually build the Android target.
|
||||
BUILD_ROOT=${BUILD_ROOT:-"$CAFFE2_ROOT/build_mobile"}
|
||||
INSTALL_PREFIX=${BUILD_ROOT}/install
|
||||
mkdir -p $BUILD_ROOT
|
||||
cd $BUILD_ROOT
|
||||
|
||||
CMAKE_ARGS=()
|
||||
CMAKE_ARGS+=("-DBUILD_CAFFE2_MOBILE=OFF")
|
||||
CMAKE_ARGS+=("-DCMAKE_PREFIX_PATH=$(python -c 'from distutils.sysconfig import get_python_lib; print(get_python_lib())')")
|
||||
CMAKE_ARGS+=("-DPYTHON_EXECUTABLE=$(python -c 'import sys; print(sys.executable)')")
|
||||
CMAKE_ARGS+=("-DBUILD_CUSTOM_PROTOBUF=OFF")
|
||||
CMAKE_ARGS+=("-DBUILD_SHARED_LIBS=OFF")
|
||||
|
||||
# If Ninja is installed, prefer it to Make
|
||||
if [ -x "$(command -v ninja)" ]; then
|
||||
CMAKE_ARGS+=("-GNinja")
|
||||
fi
|
||||
|
||||
# Disable unused dependencies
|
||||
CMAKE_ARGS+=("-DUSE_CUDA=OFF")
|
||||
CMAKE_ARGS+=("-DUSE_GFLAGS=OFF")
|
||||
CMAKE_ARGS+=("-DUSE_OPENCV=OFF")
|
||||
CMAKE_ARGS+=("-DUSE_LMDB=OFF")
|
||||
CMAKE_ARGS+=("-DUSE_LEVELDB=OFF")
|
||||
CMAKE_ARGS+=("-DUSE_MPI=OFF")
|
||||
CMAKE_ARGS+=("-DUSE_OPENMP=OFF")
|
||||
|
||||
# Only toggle if VERBOSE=1
|
||||
if [ "${VERBOSE:-}" == '1' ]; then
|
||||
CMAKE_ARGS+=("-DCMAKE_VERBOSE_MAKEFILE=1")
|
||||
fi
|
||||
|
||||
# Use-specified CMake arguments go last to allow overridding defaults
|
||||
CMAKE_ARGS+=($@)
|
||||
|
||||
cmake "$CAFFE2_ROOT" \
|
||||
-DCMAKE_INSTALL_PREFIX=$INSTALL_PREFIX \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
"${CMAKE_ARGS[@]}"
|
||||
|
||||
# Cross-platform parallel build
|
||||
if [ -z "$MAX_JOBS" ]; then
|
||||
if [ "$(uname)" == 'Darwin' ]; then
|
||||
MAX_JOBS=$(sysctl -n hw.ncpu)
|
||||
else
|
||||
MAX_JOBS=$(nproc)
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "Will install headers and libs to $INSTALL_PREFIX for further project usage."
|
||||
cmake --build . --target install -- "-j${MAX_JOBS}"
|
||||
echo "Installation completed, now you can copy the headers/libs from $INSTALL_PREFIX to your project directory."
|
||||
Loading…
Reference in New Issue
Block a user