1*da0073e9SAndroid Build Coastguard Worker#!/usr/bin/env bash 2*da0073e9SAndroid Build Coastguard Worker############################################################################## 3*da0073e9SAndroid Build Coastguard Worker# Example command to build the Tizen target (RPi3). 4*da0073e9SAndroid Build Coastguard Worker############################################################################## 5*da0073e9SAndroid Build Coastguard Worker# 6*da0073e9SAndroid Build Coastguard Worker# This script shows how one can build a Caffe2 binary for a Tizen device (RPi3). 7*da0073e9SAndroid Build Coastguard Worker# The build is essentially much similar to a host build, with one additional change 8*da0073e9SAndroid Build Coastguard Worker# which is to specify -mfpu=neon for optimized speed. 9*da0073e9SAndroid Build Coastguard Worker 10*da0073e9SAndroid Build Coastguard Workersetup_environment(){ 11*da0073e9SAndroid Build Coastguard Worker# The rootfs image for a Tizen target (RPi3)is located at the below webpage: 12*da0073e9SAndroid Build Coastguard Worker# http://download.tizen.org/releases/milestone/tizen/4.0.m1/tizen-unified_20170529.1/images/ 13*da0073e9SAndroid Build Coastguard Worker# If you do not have a Tizen device, Please, run qemu-arm-static and chroot command. 14*da0073e9SAndroid Build Coastguard Worker# $ sudo chroot ~/tizen-rootfs qemu-arm-static /usr/bin/bash 15*da0073e9SAndroid Build Coastguard Worker 16*da0073e9SAndroid Build Coastguard WorkerCAFFE2_ROOT="$( cd "$(dirname -- "$0")"/.. ; pwd -P)" 17*da0073e9SAndroid Build Coastguard Workerecho "Caffe2 codebase root is: $CAFFE2_ROOT" 18*da0073e9SAndroid Build Coastguard WorkerBUILD_ROOT=${BUILD_ROOT:-"$CAFFE2_ROOT/build"} 19*da0073e9SAndroid Build Coastguard Workermkdir -p $BUILD_ROOT 20*da0073e9SAndroid Build Coastguard Workerecho "Build Caffe2 Tizen into: $BUILD_ROOT" 21*da0073e9SAndroid Build Coastguard Worker} 22*da0073e9SAndroid Build Coastguard Worker 23*da0073e9SAndroid Build Coastguard Workercaffe2_lite_dep_packages(){ 24*da0073e9SAndroid Build Coastguard Worker# Obtain necessary dependencies 25*da0073e9SAndroid Build Coastguard Worker# You can set-up a rpm repository with zypper, yum, and dnf because Tizen 26*da0073e9SAndroid Build Coastguard Worker# software platform officially support rpm format such as Fedora, OpenSUSE. 27*da0073e9SAndroid Build Coastguard Worker# The official Tizen repository is as following: 28*da0073e9SAndroid Build Coastguard Worker# http://download.tizen.org/releases/milestone/tizen/4.0.m1/ 29*da0073e9SAndroid Build Coastguard Workerecho "Installing dependencies." 30*da0073e9SAndroid Build Coastguard Workersudo zypper install \ 31*da0073e9SAndroid Build Coastguard Worker make \ 32*da0073e9SAndroid Build Coastguard Worker strace \ 33*da0073e9SAndroid Build Coastguard Worker cmake \ 34*da0073e9SAndroid Build Coastguard Worker gcc* \ 35*da0073e9SAndroid Build Coastguard Worker binutils \ 36*da0073e9SAndroid Build Coastguard Worker glibc* \ 37*da0073e9SAndroid Build Coastguard Worker cpp \ 38*da0073e9SAndroid Build Coastguard Worker protobuf-devel \ 39*da0073e9SAndroid Build Coastguard Worker libstdc++* 40*da0073e9SAndroid Build Coastguard Worker} 41*da0073e9SAndroid Build Coastguard Worker 42*da0073e9SAndroid Build Coastguard Workercaffe2_lite_build(){ 43*da0073e9SAndroid Build Coastguard Worker# Now, actually build the android target. 44*da0073e9SAndroid Build Coastguard Workerecho "Building caffe2" 45*da0073e9SAndroid Build Coastguard Workercd $BUILD_ROOT 46*da0073e9SAndroid Build Coastguard Worker 47*da0073e9SAndroid Build Coastguard Worker# Note: add more dependencies above if you need libraries such as leveldb, lmdb, etc. 48*da0073e9SAndroid Build Coastguard Worker# If you have to disable a specific package due to a package absence 49*da0073e9SAndroid Build Coastguard Worker# from https://git.tizen.org/cgit/, append -Dxxx_xxx=OFF option before executing cmake. 50*da0073e9SAndroid Build Coastguard Workercmake .. \ 51*da0073e9SAndroid Build Coastguard Worker -DCMAKE_VERBOSE_MAKEFILE=1 \ 52*da0073e9SAndroid Build Coastguard Worker -DUSE_GFLAGS=OFF \ 53*da0073e9SAndroid Build Coastguard Worker -DUSE_GLOG=OFF -DUSE_NNPACK=OFF \ 54*da0073e9SAndroid Build Coastguard Worker -DRUN_HAVE_STD_REGEX=0 \ 55*da0073e9SAndroid Build Coastguard Worker -DRUN_HAVE_POSIX_REGEX=0 \ 56*da0073e9SAndroid Build Coastguard Worker -DHAVE_GNU_POSIX_REGEX=0 \ 57*da0073e9SAndroid Build Coastguard Worker -DUSE_MPI=OFF -DUSE_OPENMP=OFF \ 58*da0073e9SAndroid Build Coastguard Worker -DBUILD_PYTHON=OFF \ 59*da0073e9SAndroid Build Coastguard Worker -DUSE_GLOO=OFF \ 60*da0073e9SAndroid Build Coastguard Worker -DUSE_OPENCV=OFF \ 61*da0073e9SAndroid Build Coastguard Worker -DCAFFE2_CPU_FLAGS="-mfpu=neon -mfloat-abi=soft" \ 62*da0073e9SAndroid Build Coastguard Worker || exit 1 63*da0073e9SAndroid Build Coastguard Worker 64*da0073e9SAndroid Build Coastguard Workermake -j`nproc` || exit 1 65*da0073e9SAndroid Build Coastguard Worker} 66*da0073e9SAndroid Build Coastguard Worker 67*da0073e9SAndroid Build Coastguard Workercaffe2_full_dep_packages(){ 68*da0073e9SAndroid Build Coastguard Worker# Obtain necessary dependencies 69*da0073e9SAndroid Build Coastguard Worker# You can set-up a rpm repository with zypper, yum, and dnf because Tizen 70*da0073e9SAndroid Build Coastguard Worker# software platform officially support rpm format such as Fedora, OpenSUSE. 71*da0073e9SAndroid Build Coastguard Worker# The official Tizen repository is as following: 72*da0073e9SAndroid Build Coastguard Worker# http://download.tizen.org/releases/milestone/tizen/4.0.m1/ 73*da0073e9SAndroid Build Coastguard Workerecho "Installing dependencies." 74*da0073e9SAndroid Build Coastguard Workersudo zypper install \ 75*da0073e9SAndroid Build Coastguard Worker cmake \ 76*da0073e9SAndroid Build Coastguard Worker libgflags-dev \ 77*da0073e9SAndroid Build Coastguard Worker libgoogle-glog-dev \ 78*da0073e9SAndroid Build Coastguard Worker libprotobuf-dev \ 79*da0073e9SAndroid Build Coastguard Worker protobuf-compiler 80*da0073e9SAndroid Build Coastguard Worker 81*da0073e9SAndroid Build Coastguard Worker# Obtain optional dependencies that are usually useful to have. 82*da0073e9SAndroid Build Coastguard Workerecho "Installing optional dependencies." 83*da0073e9SAndroid Build Coastguard Workersudo zypper install \ 84*da0073e9SAndroid Build Coastguard Worker libpython-dev \ 85*da0073e9SAndroid Build Coastguard Worker python-numpy \ 86*da0073e9SAndroid Build Coastguard Worker python-pip \ 87*da0073e9SAndroid Build Coastguard Worker python-protobuf 88*da0073e9SAndroid Build Coastguard Worker 89*da0073e9SAndroid Build Coastguard Worker# Obtain python hypothesis, which Caffe2 uses for unit testing. Note that 90*da0073e9SAndroid Build Coastguard Worker# the one provided by zypper is quite old so we install it via pip 91*da0073e9SAndroid Build Coastguard Workersudo pip install hypothesis 92*da0073e9SAndroid Build Coastguard Worker} 93*da0073e9SAndroid Build Coastguard Worker 94*da0073e9SAndroid Build Coastguard Workercaffe2_full_build(){ 95*da0073e9SAndroid Build Coastguard Worker# Now, actually build the android target. 96*da0073e9SAndroid Build Coastguard Workerecho "Building caffe2" 97*da0073e9SAndroid Build Coastguard Workercd $BUILD_ROOT 98*da0073e9SAndroid Build Coastguard Worker 99*da0073e9SAndroid Build Coastguard Worker# Note: add more dependencies above if you need libraries such as leveldb, lmdb, etc. 100*da0073e9SAndroid Build Coastguard Worker# If you have to disable a specific package due to a package absence 101*da0073e9SAndroid Build Coastguard Worker# from https://git.tizen.org/cgit/, append -Dxxx_xxx=OFF option before executing cmake. 102*da0073e9SAndroid Build Coastguard Workercmake "$CAFFE2_ROOT" \ 103*da0073e9SAndroid Build Coastguard Worker -DCMAKE_VERBOSE_MAKEFILE=1 \ 104*da0073e9SAndroid Build Coastguard Worker -DUSE_CUDA=OFF \ 105*da0073e9SAndroid Build Coastguard Worker -DUSE_ITT=OFF \ 106*da0073e9SAndroid Build Coastguard Worker -DUSE_OPENCV=OFF \ 107*da0073e9SAndroid Build Coastguard Worker -DCAFFE2_CPU_FLAGS="-mfpu=neon -mfloat-abi=soft" \ 108*da0073e9SAndroid Build Coastguard Worker || exit 1 109*da0073e9SAndroid Build Coastguard Worker 110*da0073e9SAndroid Build Coastguard Workermake -j`nproc` || exit 1 111*da0073e9SAndroid Build Coastguard Worker} 112*da0073e9SAndroid Build Coastguard Worker 113*da0073e9SAndroid Build Coastguard Worker#### Main 114*da0073e9SAndroid Build Coastguard Worker# Setup a build environment to compile Caffe2 deeplearning framework in Tizen platform. 115*da0073e9SAndroid Build Coastguard Workersetup_environment 116*da0073e9SAndroid Build Coastguard Worker# There are two build options to support 'full' version and 'lite' version (by default). 117*da0073e9SAndroid Build Coastguard Workercaffe2_lite_dep_packages 118*da0073e9SAndroid Build Coastguard Workercaffe2_lite_build 119