PaddlePaddle Compiling Guide for iOS¶
This tutorial will walk you through cross compiling the PaddlePaddle library for iOS from the source in MacOS.
Preparation¶
Apple provides Xcode for cross-compiling and IDE for iOS development. Download from App store or here. To verify your installation, run command as follows
$ xcodebuild -version
Xcode 9.0
Build version 9A235
Cross-compiling configurations¶
PaddlePaddle provides cross-compiling toolchain configuration documentation cmake/cross_compiling/ios.cmake, which has some default settings for frequently used compilers.
There are some mandatory environment variables need to be set before cross compiling PaddlePaddle for iOS:
CMAKE_SYSTEM_NAME
, CMake compiling target platform name, has to beiOS
. PaddlePaddle CMake will compile all the third party dependencies and enforce some parameters (WITH_C_API=ON
、WITH_GPU=OFF
、WITH_AVX=OFF
、WITH_PYTHON=OFF
、WITH_RDMA=OFF
) when this variable is set with valueiOS
.WITH_C_API
, Whether to compile inference C-API library, has to beON
, since C-API is the only supported interface for inferencing in iOS.WITH_SWIG_PY
, has to beON
. It’s not supported to inference or train via swig in iOS.
Optional environment variables for iOS are:
IOS_PLATFORM
, eitherOS
(default) orSIMULATOR
.OS
, build targets ARM-based physical devices like iPhone or iPad.SIMULATOR
, build targets x86 architecture simulators.
IOS_ARCH
, target architecture. By default, all architecture types will be compiled. If you need to specify the architecture to compile for, please find valid values for differentIOS_PLATFORM
settings from the table below:IOS_PLATFORM IOS_ARCH OS armv7, armv7s, arm64 SIMULATOR i386, x86_64 IOS_DEPLOYMENT_TARGET
, minimum iOS version to deployment,7.0
by default.IOS_ENABLE_BITCODE
, whether to enable Bitcode, values can beON/OFF
,ON
by default.IOS_USE_VECLIB_FOR_BLAS
, whether to use vecLib framework for BLAS computing. values can beON/OFF
,OFF
by default.IOS_DEVELOPMENT_ROOT
, the path toDeveloper
directory, can be explicitly set with your/path/to/platform/Developer
. If left blank, PaddlePaddle will automatically pick the Xcode correspondingplatform
‘sDeveloper
directory based on yourIOS_PLATFORM
value.IOS_SDK_ROOT
, the path toSDK
root, can be explicitly set with your/path/to/platform/Developer/SDKs/SDK
. if left black, PaddlePaddle will pick the latest SDK in the directory ofIOS_DEVELOPMENT_ROOT
.
other settings:
USE_EIGEN_FOR_BLAS
, whether to use Eigen for matrix computing. effective whenIOS_USE_VECLIB_FOR_BLAS=OFF
. Values can beON/OFF
,OFF
by default.HOST_C/CXX_COMPILER
, host C/C++ compiler. Uses value from environment variableCC/CXX
by default orcc/c++
ifCC/CXX
doesn’t exist.
some typical cmake configurations:
cmake -DCMAKE_SYSTEM_NAME=iOS \
-DIOS_PLATFORM=OS \
-DIOS_ARCH="armv7;arm64" \
-DIOS_ENABLE_BITCODE=ON \
-DIOS_USE_VECLIB_FOR_BLAS=ON \
-DCMAKE_INSTALL_PREFIX=your/path/to/install \
-DWITH_C_API=ON \
-DWITH_TESTING=OFF \
-DWITH_SWIG_PY=OFF \
..
cmake -DCMAKE_SYSTEM_NAME=iOS \
-DIOS_PLATFORM=SIMULATOR \
-DIOS_ARCH="x86_64" \
-DIOS_USE_VECLIB_FOR_BLAS=ON \
-DCMAKE_INSTALL_PREFIX=your/path/to/install \
-DWITH_C_API=ON \
-DWITH_TESTING=OFF \
-DWITH_SWIG_PY=OFF \
..
You can set other compiling parameters for your own need. I.E. if you are trying to minimize the library size, set CMAKE_BUILD_TYPE
with MinSizeRel
; or if the performance is your concern, set CMAKE_BUILD_TYPE
with Release
. You can even manipulate the PaddlePaddle compiling procedure by manually set CMAKE_C/CXX_FLAGS
values.
TIPS for a better performance:
- set
CMAKE_BUILD_TYPE
withRelease
- set
IOS_USE_VECLIB_FOR_BLAS
withON
Compile and install¶
After CMake, run following commands, PaddlePaddle will download the compile 3rd party dependencies, compile and install PaddlePaddle inference library.
$ make
$ make install
Please Note: if you compiled PaddlePaddle in the source directory for other platforms, do remove third_party
and build
directory within the source with rm -rf
to ensure that all the 3rd party libraries dependencies and PaddlePaddle is newly compiled with current CMake configuration.
your/path/to/install
directory will have following directories after compile
and install
:
include
, contains all the C-API header files.lib
, contains PaddlePaddle C-API static library.third_party
contains all the 3rd party libraries.
Please note: if PaddlePaddle library need to support both physical devices and simulators, you will need to compile correspondingly, then merge fat library with lipo
Now you will have PaddlePaddle library compiled and installed, the fat library can be used in deep learning related iOS APPs. Please refer to C-API documentation for usage guides.