#!/usr/bin/env bash ############################################################################## # Example command to build the Tizen target (RPi3). ############################################################################## # # This script shows how one can build a Caffe2 binary for a Tizen device (RPi3). # The build is essentially much similar to a host build, with one additional change # which is to specify -mfpu=neon for optimized speed. setup_environment(){ # The rootfs image for a Tizen target (RPi3)is located at the below webpage: # http://download.tizen.org/releases/milestone/tizen/4.0.m1/tizen-unified_20170529.1/images/ # If you do not have a Tizen device, Please, run qemu-arm-static and chroot command. # $ sudo chroot ~/tizen-rootfs qemu-arm-static /usr/bin/bash CAFFE2_ROOT="$( cd "$(dirname -- "$0")"/.. ; pwd -P)" echo "Caffe2 codebase root is: $CAFFE2_ROOT" BUILD_ROOT=${BUILD_ROOT:-"$CAFFE2_ROOT/build"} mkdir -p $BUILD_ROOT echo "Build Caffe2 Tizen into: $BUILD_ROOT" } caffe2_lite_dep_packages(){ # Obtain necessary dependencies # You can set-up a rpm repository with zypper, yum, and dnf because Tizen # software platform officially support rpm format such as Fedora, OpenSUSE. # The official Tizen repository is as following: # http://download.tizen.org/releases/milestone/tizen/4.0.m1/ echo "Installing dependencies." sudo zypper install \ make \ strace \ cmake \ gcc* \ binutils \ glibc* \ cpp \ protobuf-devel \ libstdc++* } caffe2_lite_build(){ # Now, actually build the android target. echo "Building caffe2" cd $BUILD_ROOT # Note: add more dependencies above if you need libraries such as leveldb, lmdb, etc. # If you have to disable a specific package due to a package absence # from https://git.tizen.org/cgit/, append -Dxxx_xxx=OFF option before executing cmake. cmake .. \ -DCMAKE_VERBOSE_MAKEFILE=1 \ -DUSE_GFLAGS=OFF \ -DUSE_GLOG=OFF -DUSE_NNPACK=OFF \ -DRUN_HAVE_STD_REGEX=0 \ -DRUN_HAVE_POSIX_REGEX=0 \ -DHAVE_GNU_POSIX_REGEX=0 \ -DUSE_MPI=OFF -DUSE_OPENMP=OFF \ -DUSE_ROCKSDB=OFF \ -DUSE_LEVELDB=OFF \ -DUSE_LMDB=OFF \ -DBUILD_PYTHON=OFF \ -DUSE_GLOO=OFF \ -DUSE_OPENCV=OFF \ -DCAFFE2_CPU_FLAGS="-mfpu=neon -mfloat-abi=soft" \ || exit 1 make -j`nproc` || exit 1 } caffe2_full_dep_packages(){ # Obtain necessary dependencies # You can set-up a rpm repository with zypper, yum, and dnf because Tizen # software platform officially support rpm format such as Fedora, OpenSUSE. # The official Tizen repository is as following: # http://download.tizen.org/releases/milestone/tizen/4.0.m1/ echo "Installing dependencies." sudo zypper install \ cmake \ libgflags-dev \ libgoogle-glog-dev \ libprotobuf-dev \ protobuf-compiler # Obtain optional dependencies that are usually useful to have. echo "Installing optional dependencies." sudo zypper install \ libleveldb-dev \ liblmdb-dev \ libpython-dev \ libsnappy-dev \ python-numpy \ python-pip \ python-protobuf # Obtain python hypothesis, which Caffe2 uses for unit testing. Note that # the one provided by zypper is quite old so we install it via pip sudo pip install hypothesis # Install the six module, which includes Python 2 and 3 compatibility utilities, # and is required for Caffe2 sudo pip install six } caffe2_full_build(){ # Now, actually build the android target. echo "Building caffe2" cd $BUILD_ROOT # Note: add more dependencies above if you need libraries such as leveldb, lmdb, etc. # If you have to disable a specific package due to a package absence # from https://git.tizen.org/cgit/, append -Dxxx_xxx=OFF option before executing cmake. cmake "$CAFFE2_ROOT" \ -DCMAKE_VERBOSE_MAKEFILE=1 \ -DUSE_CUDA=OFF \ -DUSE_OPENCV=OFF \ -DUSE_LMDB=OFF \ -DCAFFE2_CPU_FLAGS="-mfpu=neon -mfloat-abi=soft" \ || exit 1 make -j`nproc` || exit 1 } #### Main # Setup a build environment to compile Caffe2 deeplearning framework in Tizen platform. setup_environment # There are two build options to support 'full' version and 'lite' version (by default). caffe2_lite_dep_packages caffe2_lite_build