aboutsummaryrefslogtreecommitdiff
path: root/21.02/_build_guide_android_n_d_k_8md_source.xhtml
blob: 47d741cc2080e6af095f56e19f0a20d224735058 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
<!-- Copyright (c) 2020 ARM Limited. -->
<!--                                 -->
<!-- SPDX-License-Identifier: MIT    -->
<!--                                 -->
<!-- HTML header for doxygen 1.8.13-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="robots" content="NOINDEX, NOFOLLOW" />
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmNN: BuildGuideAndroidNDK.md Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/x-mathjax-config">
  MathJax.Hub.Config({
    extensions: ["tex2jax.js"],
    jax: ["input/TeX","output/HTML-CSS"],
});
</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="stylesheet.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <img alt="ArmNN" src="Arm_NN_horizontal_blue.png" style="max-width: 10rem; margin-top: .5rem; margin-left 10px"/>
  <td style="padding-left: 0.5em;">
   <div id="projectname">
   &#160;<span id="projectnumber">21.02</span>
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('_build_guide_android_n_d_k_8md.xhtml','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="headertitle">
<div class="title">BuildGuideAndroidNDK.md</div>  </div>
</div><!--header-->
<div class="contents">
<a href="_build_guide_android_n_d_k_8md.xhtml">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;# How to use the Android NDK to build Arm NN</div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;</div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;- [Introduction](#introduction)</div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;- [Download the Android NDK and make a standalone toolchain](#download-the-android-ndk-and-make-a-standalone-toolchain)</div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;- [Build the Boost C++ libraries](#build-the-boost-c---libraries)</div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;- [Build the Compute Library](#build-the-compute-library)</div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;- [Build Google&#39;s Protobuf library](#build-google-s-protobuf-library)</div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;- [Download TensorFlow](#download-tensorflow)</div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;- [Build Arm NN](#build-armnn)</div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;- [Build Standalone Sample Dynamic Backend](#build-standalone-sample-dynamic-backend)</div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;- [Run the Arm NN unit tests on an Android device](#run-the-armnn-unit-tests-on-an-android-device)</div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;</div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;## Introduction</div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;These are step by step instructions for using the Android NDK to build Arm NN.</div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;They have been tested on a clean install of Ubuntu 16.04, and should also work with other OS versions.</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;The instructions show how to build the Arm NN core library and the optional TensorFlow parser.</div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;All downloaded or generated files will be saved inside the `~/armnn-devenv` directory.</div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;#####Note: We are currently in the process of removing boost as a dependency to Arm NN. This process is finished for everything apart from our unit tests. This means you don&#39;t need boost to build and use Arm NN but you need it to execute our unit tests. Boost will soon be removed from Arm NN entirely. We also are deprecating support for Tensorflow parsers in 21.02. This will be removed in 21.05. </div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;</div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;## Download the Android NDK and make a standalone toolchain</div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;* Download the Android NDK from [the official website](https://developer.android.com/ndk/downloads/index.html):</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160; ```bash</div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160; mkdir -p ~/armnn-devenv/toolchains</div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160; cd ~/armnn-devenv/toolchains</div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160; # For Mac OS, change the NDK download link accordingly.</div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160; wget https://dl.google.com/android/repository/android-ndk-r20b-linux-x86_64.zip</div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160; unzip android-ndk-r20b-linux-x86_64.zip</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160; export NDK=~/armnn-devenv/android-ndk-r20b</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160; export NDK_TOOLCHAIN_ROOT=$NDK/toolchains/llvm/prebuilt/linux-x86_64</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160; export PATH=$NDK_TOOLCHAIN_ROOT/bin/:$PATH</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160; # You may want to append the above export variables commands to your `~/.bashrc` (or `~/.bash_profile` in Mac OS).</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160; ```</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;* With the android ndk-20b, you don&#39;t need to use the make_standalone_toolchain script to create a toolchain for a specific version of android. Android&#39;s current preference is for you to just specify the architecture and operating system while setting the compiler and just use the ndk directory.</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;## Build the Boost C++ libraries</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;* Download Boost version 1.64:</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;```bash</div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;mkdir ~/armnn-devenv/boost</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;cd ~/armnn-devenv/boost</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;wget https://dl.bintray.com/boostorg/release/1.64.0/source/boost_1_64_0.tar.bz2</div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;tar xvf boost_1_64_0.tar.bz2</div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;```</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;* Build:</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;   (Requires clang if not previously installed: `sudo apt-get install clang`)</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;    </div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;    Note: You can specify the &#39;Android_API&#39; version you want. For example, if your ANDROID_API is 27 then the compiler will be aarch64-linux-android27-clang++.</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;```bash</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;echo &quot;using clang : arm : aarch64-linux-android&lt;Android_API&gt;-clang++ ;&quot; &gt; $HOME/armnn-devenv/boost/user-config.jam</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;cd ~/armnn-devenv/boost/boost_1_64_0</div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;./bootstrap.sh --prefix=$HOME/armnn-devenv/boost/install</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;./b2 install --user-config=$HOME/armnn-devenv/boost/user-config.jam \</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160; toolset=clang-arm link=static cxxflags=-fPIC \</div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160; --with-test --with-log --with-program_options -j16</div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;```</div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;</div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;## Build the Compute Library</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;* Clone the Compute Library:</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;   (Requires Git if not previously installed: `sudo apt install git`)</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;``` bash</div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;cd ~/armnn-devenv</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;git clone https://github.com/ARM-software/ComputeLibrary.git</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;```</div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;* Checkout ComputeLibrary branch:</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;```bash</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;cd ComputeLibrary</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;git checkout &lt;branch_name&gt;</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;git pull</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;```</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;For example, if you want to checkout release branch of 20.02:</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;```bash</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;git checkout branches/arm_compute_20_02</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;git pull</div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;```</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;* Build:</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;   (Requires SCons if not previously installed: `sudo apt install scons`)</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;```bash</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;scons arch=arm64-v8a neon=1 opencl=1 embed_kernels=1 extra_cxx_flags=&quot;-fPIC&quot; \</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160; benchmark_tests=0 validation_tests=0 os=android -j16</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;```</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;## Build Google&#39;s Protobuf library</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;* Clone protobuf:</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;```bash</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;mkdir ~/armnn-devenv/google</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;cd ~/armnn-devenv/google</div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;git clone https://github.com/google/protobuf.git</div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;cd protobuf</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;git checkout -b v3.12.0 v3.12.0</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;```</div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;</div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;* Build a native (x86) version of the protobuf libraries and compiler (protoc):</div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;</div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;   (Requires cUrl, autoconf, llibtool, and other build dependencies if not previously installed: `sudo apt install curl autoconf libtool build-essential g++`)</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;```bash</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;./autogen.sh</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;mkdir x86_build</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;cd x86_build</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;../configure --prefix=$HOME/armnn-devenv/google/x86_pb_install</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;make install -j16</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;cd ..</div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;```</div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;* Build the arm64 version of the protobuf libraries:</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;```bash</div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;mkdir arm64_build</div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;cd arm64_build</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;CC=aarch64-linux-android&lt;Android_API&gt;-clang \</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;CXX=aarch64-linux-android&lt;Android_API&gt;-clang++ \</div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;CFLAGS=&quot;-fPIE -fPIC&quot; \</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;    LDFLAGS=&quot;-llog -lz -lc++_static&quot; \</div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;   ../configure --host=aarch64-linux-android \</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;   --prefix=$HOME/armnn-devenv/google/arm64_pb_install \</div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;   --enable-cross-compile \</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;   --with-protoc=$HOME/armnn-devenv/google/x86_pb_install/bin/protoc</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;make install -j16</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;cd ..</div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;```</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;</div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;## Download TensorFlow</div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;* Clone TensorFlow source code:</div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;```bash</div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;cd ~/armnn-devenv/google/</div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;git clone https://github.com/tensorflow/tensorflow.git</div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;    cd tensorflow/</div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;    git checkout fcc4b966f1265f466e82617020af93670141b009</div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;```</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;</div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;## Build Arm NN</div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;</div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;* Clone Arm NN source code:</div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;```bash</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;cd ~/armnn-devenv/</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;git clone https://github.com/ARM-software/armnn.git</div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;```</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;</div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;* Checkout Arm NN branch:</div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;```bash</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;cd armnn</div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;git checkout &lt;branch_name&gt;</div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;git pull</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;```</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;</div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;For example, if you want to checkout release branch of 20.02:</div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;```bash</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;git checkout branches/armnn_20_02</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;git pull</div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;```</div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;</div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;* Generate TensorFlow protobuf definitions:</div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;```bash</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;cd ~/armnn-devenv/google/tensorflow</div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;~/armnn-devenv/armnn/scripts/generate_tensorflow_protobuf.sh \</div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160; $HOME/armnn-devenv/google/tf_pb $HOME/armnn-devenv/google/x86_pb_install</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;```</div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;</div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;* Build Arm NN:</div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;   (Requires CMake if not previously installed: `sudo apt install cmake`)</div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;```bash</div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;mkdir ~/armnn-devenv/armnn/build</div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;cd ~/armnn-devenv/armnn/build</div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;CXX=aarch64-linux-android&lt;Android_API&gt;-clang++ \</div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;CC=aarch64-linux-android&lt;Android_API&gt;-clang \</div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;CXX_FLAGS=&quot;-fPIE -fPIC&quot; \</div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;cmake .. \</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;    -DCMAKE_ANDROID_NDK=$NDK \</div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;    -DCMAKE_SYSTEM_NAME=Android \</div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;    -DCMAKE_SYSTEM_VERSION=&lt;Android_API&gt; \</div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;    -DCMAKE_ANDROID_ARCH_ABI=arm64-v8a \</div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;    -DCMAKE_EXE_LINKER_FLAGS=&quot;-pie -llog -lz&quot; \</div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;    -DARMCOMPUTE_ROOT=$HOME/armnn-devenv/ComputeLibrary/ \</div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;    -DARMCOMPUTE_BUILD_DIR=$HOME/armnn-devenv/ComputeLibrary/build \</div><div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;    -DBOOST_ROOT=$HOME/armnn-devenv/boost/install/ \</div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;    -DARMCOMPUTENEON=1 -DARMCOMPUTECL=1 -DARMNNREF=1 \</div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;    -DTF_GENERATED_SOURCES=$HOME/armnn-devenv/google/tf_pb/ -DBUILD_TF_PARSER=1 \</div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;    -DPROTOBUF_ROOT=$HOME/armnn-devenv/google/arm64_pb_install/</div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;```</div><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;</div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;To include standalone sample dynamic backend tests, add the argument to enable the tests and the dynamic backend path to the CMake command:</div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;```bash</div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;-DSAMPLE_DYNAMIC_BACKEND=1 \</div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;-DDYNAMIC_BACKEND_PATHS=$SAMPLE_DYNAMIC_BACKEND_PATH</div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;# Where $SAMPLE_DYNAMIC_BACKEND_PATH is the path where libArm_SampleDynamic_backend.so library file is pushed</div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;```</div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160; * Run the build</div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;```bash</div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;make -j16</div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;```</div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;</div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;## Build Standalone Sample Dynamic Backend</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;* The sample dynamic backend is located in armnn/src/dynamic/sample</div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;```bash</div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;mkdir build</div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;cd build</div><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;```</div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;</div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;* Use CMake to configure the build environment, update the following script and run it from the armnn/src/dynamic/sample/build directory to set up the Arm NN build:</div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;```bash</div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;#!/bin/bash</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;CXX=aarch64-linux-android&lt;Android_API&gt;-clang++ \</div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;CC=aarch64-linux-android&lt;Android_API&gt;-clang \</div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;CXX_FLAGS=&quot;-fPIE -fPIC&quot; \</div><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;cmake \</div><div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;-DCMAKE_SYSTEM_NAME=Android \</div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;-DCMAKE_CXX_FLAGS=--std=c++14 \</div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;-DCMAKE_EXE_LINKER_FLAGS=&quot;-pie -llog&quot; \</div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;-DCMAKE_MODULE_LINKER_FLAGS=&quot;-llog&quot; \</div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;-DBOOST_ROOT=$HOME/armnn-devenv/boost/install \</div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;-DBoost_SYSTEM_LIBRARY=$HOME/armnn-devenv/boost/install/lib/libboost_system.a \</div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;-DARMNN_PATH=$HOME/armnn-devenv/armnn/build/libarmnn.so ..</div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;```</div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;</div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;* Run the build</div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;```bash</div><div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;make</div><div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;```</div><div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;</div><div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;## Run the Arm NN unit tests on an Android device</div><div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;</div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;</div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;* Push the build results to an Android device and make symbolic links for shared libraries:</div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;  Currently adb version we have used for testing is 1.0.41.</div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;```bash</div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;adb push libarmnnTfParser.so /data/local/tmp/</div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;adb push libarmnn.so /data/local/tmp/</div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;    adb push libtimelineDecoder.so /data/local/tmp/</div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;adb push UnitTests /data/local/tmp/</div><div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;adb push $NDK/sources/cxx-stl/llvm-libc++/libs/arm64-v8a/libc++_shared.so /data/local/tmp/</div><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;adb push $HOME/armnn-devenv/google/arm64_pb_install/lib/libprotobuf.so /data/local/tmp/libprotobuf.so.24.0.0</div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;adb shell &#39;ln -s libprotobuf.so.24.0.0 /data/local/tmp/libprotobuf.so.24&#39;</div><div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;adb shell &#39;ln -s libprotobuf.so.24.0.0 /data/local/tmp/libprotobuf.so&#39;</div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;```</div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;</div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;* Push the files needed for the unit tests (they are a mix of files, directories and symbolic links):</div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;```bash</div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;adb shell mkdir -p /data/local/tmp/src/backends/backendsCommon/test/testSharedObject</div><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;adb push -p ~/armnn-devenv/armnn/build/src/backends/backendsCommon/test/testSharedObject/* /data/local/tmp/src/backends/backendsCommon/test/testSharedObject/</div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;</div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;adb shell mkdir -p /data/local/tmp/src/backends/backendsCommon/test/testDynamicBackend</div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;adb push -p ~/armnn-devenv/armnn/build/src/backends/backendsCommon/test/testDynamicBackend/* /data/local/tmp/src/backends/backendsCommon/test/testDynamicBackend/</div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;</div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;adb shell mkdir -p /data/local/tmp/src/backends/backendsCommon/test/backendsTestPath1</div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;adb push -p ~/armnn-devenv/armnn/build/src/backends/backendsCommon/test/backendsTestPath1/* /data/local/tmp/src/backends/backendsCommon/test/backendsTestPath1/</div><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;</div><div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;adb shell mkdir -p /data/local/tmp/src/backends/backendsCommon/test/backendsTestPath2</div><div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;adb push -p ~/armnn-devenv/armnn/build/src/backends/backendsCommon/test/backendsTestPath2/Arm_CpuAcc_backend.so /data/local/tmp/src/backends/backendsCommon/test/backendsTestPath2/</div><div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;adb shell ln -s Arm_CpuAcc_backend.so /data/local/tmp/src/backends/backendsCommon/test/backendsTestPath2/Arm_CpuAcc_backend.so.1</div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;adb shell ln -s Arm_CpuAcc_backend.so.1 /data/local/tmp/src/backends/backendsCommon/test/backendsTestPath2/Arm_CpuAcc_backend.so.1.2</div><div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;adb shell ln -s Arm_CpuAcc_backend.so.1.2 /data/local/tmp/src/backends/backendsCommon/test/backendsTestPath2/Arm_CpuAcc_backend.so.1.2.3</div><div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;adb push -p ~/armnn-devenv/armnn/build/src/backends/backendsCommon/test/backendsTestPath2/Arm_GpuAcc_backend.so /data/local/tmp/src/backends/backendsCommon/test/backendsTestPath2/</div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;adb shell ln -s nothing /data/local/tmp/src/backends/backendsCommon/test/backendsTestPath2/Arm_no_backend.so</div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;</div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;adb shell mkdir -p /data/local/tmp/src/backends/backendsCommon/test/backendsTestPath3</div><div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;</div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;adb shell mkdir -p /data/local/tmp/src/backends/backendsCommon/test/backendsTestPath5</div><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;adb push -p ~/armnn-devenv/armnn/build/src/backends/backendsCommon/test/backendsTestPath5/* /data/local/tmp/src/backends/backendsCommon/test/backendsTestPath5/</div><div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;</div><div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;adb shell mkdir -p /data/local/tmp/src/backends/backendsCommon/test/backendsTestPath6</div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;adb push -p ~/armnn-devenv/armnn/build/src/backends/backendsCommon/test/backendsTestPath6/* /data/local/tmp/src/backends/backendsCommon/test/backendsTestPath6/</div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;</div><div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;adb shell mkdir -p /data/local/tmp/src/backends/backendsCommon/test/backendsTestPath7</div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;</div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;adb shell mkdir -p /data/local/tmp/src/backends/backendsCommon/test/backendsTestPath9</div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;adb push -p ~/armnn-devenv/armnn/build/src/backends/backendsCommon/test/backendsTestPath9/* /data/local/tmp/src/backends/backendsCommon/test/backendsTestPath9/</div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;</div><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;adb shell mkdir -p /data/local/tmp/src/backends/dynamic/reference</div><div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;adb push -p ~/armnn-devenv/armnn/build/src/backends/dynamic/reference/Arm_CpuRef_backend.so /data/local/tmp/src/backends/dynamic/reference/</div><div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;</div><div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;# If the standalone sample dynamic tests are enabled, also push libArm_SampleDynamic_backend.so library file to the folder specified as $SAMPLE_DYNAMIC_BACKEND_PATH when Arm NN is built.</div><div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;# This is the example when $SAMPLE_DYNAMIC_BACKEND_PATH is specified as /data/local/tmp/dynamic/sample/:</div><div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;</div><div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;adb shell mkdir -p /data/local/tmp/dynamic/sample/</div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;adb push -p ${WORKING_DIR}/armnn/src/dynamic/sample/build/libArm_SampleDynamic_backend.so /data/local/tmp/dynamic/sample/</div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;```</div><div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;</div><div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;* Run Arm NN unit tests:</div><div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;```bash</div><div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;adb shell &#39;LD_LIBRARY_PATH=/data/local/tmp:/vendor/lib64:/vendor/lib64/egl /data/local/tmp/UnitTests&#39;</div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;```</div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;If libarmnnUtils.a is present in `~/armnn-devenv/armnn/build/` and the unit tests run without failure then the build was successful.</div></div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="_build_guide_android_n_d_k_8md.xhtml">BuildGuideAndroidNDK.md</a></li>
    <li class="footer">Generated on Thu Feb 25 2021 17:27:28 for ArmNN by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
  </ul>
</div>
</body>
</html>