-
Notifications
You must be signed in to change notification settings - Fork 1
/
getting-started-meson-build.html
executable file
·287 lines (245 loc) · 11.7 KB
/
getting-started-meson-build.html
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
<!DOCTYPE html>
<html lang="en">
<head>
<base href=".">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Meson/Ninja Build</title>
<link rel="stylesheet" href="assets/css/dark-frontend.css" type="text/css" title="dark">
<link rel="alternate stylesheet" href="assets/css/light-frontend.css" type="text/css" title="light">
<link rel="stylesheet" href="assets/css/bootstrap-toc.min.css" type="text/css">
<link rel="stylesheet" href="assets/css/jquery.mCustomScrollbar.min.css">
<link rel="stylesheet" href="assets/js/search/enable_search.css" type="text/css">
<link rel="stylesheet" href="assets/css/extra_frontend.css" type="text/css">
<link rel="stylesheet" href="assets/css/prism-tomorrow.css" type="text/css" title="dark">
<link rel="alternate stylesheet" href="assets/css/prism.css" type="text/css" title="light">
<script src="assets/js/mustache.min.js"></script>
<script src="assets/js/jquery.js"></script>
<script src="assets/js/bootstrap.js"></script>
<script src="assets/js/scrollspy.js"></script>
<script src="assets/js/typeahead.jquery.min.js"></script>
<script src="assets/js/search.js"></script>
<script src="assets/js/compare-versions.js"></script>
<script src="assets/js/jquery.mCustomScrollbar.concat.min.js"></script>
<script src="assets/js/bootstrap-toc.min.js"></script>
<script src="assets/js/jquery.touchSwipe.min.js"></script>
<script src="assets/js/anchor.min.js"></script>
<script src="assets/js/tag_filtering.js"></script>
<script src="assets/js/language_switching.js"></script>
<script src="assets/js/styleswitcher.js"></script>
<script src="assets/js/lines_around_headings.js"></script>
<script src="assets/js/prism-core.js"></script>
<script src="assets/js/prism-autoloader.js"></script>
<script src="assets/js/prism_autoloader_path_override.js"></script>
<script src="assets/js/trie.js"></script>
<link rel="icon" type="image/png" href="assets/images/nnstreamer_logo.png">
</head>
<body class="no-script
">
<script>
$('body').removeClass('no-script');
</script>
<nav class="navbar navbar-fixed-top navbar-default" id="topnav">
<div class="container-fluid">
<div class="navbar-right">
<a id="toc-toggle">
<span class="glyphicon glyphicon-menu-right"></span>
<span class="glyphicon glyphicon-menu-left"></span>
</a>
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar-wrapper" aria-expanded="false">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<span title="light mode switch" class="glyphicon glyphicon-sunglasses pull-right" id="lightmode-icon"></span>
<form class="navbar-form pull-right" id="navbar-search-form">
<div class="form-group has-feedback">
<input type="text" class="form-control input-sm" name="search" id="sidenav-lookup-field" placeholder="search" disabled>
<span class="glyphicon glyphicon-search form-control-feedback" id="search-mgn-glass"></span>
</div>
</form>
</div>
<div class="navbar-header">
<a id="sidenav-toggle">
<span class="glyphicon glyphicon-menu-right"></span>
<span class="glyphicon glyphicon-menu-left"></span>
</a>
<a id="home-link" href="index.html" class="hotdoc-navbar-brand">
<img src="assets/images/nnstreamer_logo.png" alt="Home">
</a>
</div>
<div class="navbar-collapse collapse" id="navbar-wrapper">
<ul class="nav navbar-nav" id="menu">
<li class="dropdown">
<a class="dropdown-toggle" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
API References<span class="caret"></span>
</a>
<ul class="dropdown-menu" id="modules-menu">
<li>
<a href="doc-index.html">NNStreamer doc</a>
</li>
<li>
<a href="gst/nnstreamer/README.html">NNStreamer Elements</a>
</li>
<li>
<a href="nnstreamer-example/index.html">NNStreamer Examples</a>
</li>
<li>
<a href="API-reference.html">API reference</a>
</li>
</ul>
</li>
<li>
<a href="doc-index.html">Documents</a>
</li>
<li>
<a href="gst/nnstreamer/README.html">Elements</a>
</li>
<li>
<a href="tutorials.html">Tutorials</a>
</li>
<li>
<a href="API-reference.html">API reference</a>
</li>
</ul>
<div class="hidden-xs hidden-sm navbar-text navbar-center">
</div>
</div>
</div>
</nav>
<main>
<div data-extension="core" data-hotdoc-in-toplevel="True" data-hotdoc-project="NNStreamer" data-hotdoc-ref="getting-started-meson-build.html" class="page_container" id="page-wrapper">
<script src="assets/js/utils.js"></script>
<div class="panel panel-collapse oc-collapsed" id="sidenav" data-hotdoc-role="navigation">
<script src="assets/js/full-width.js"></script>
<div id="sitenav-wrapper">
<iframe src="hotdoc-sitemap.html" id="sitenav-frame"></iframe>
</div>
</div>
<div id="body">
<div id="main">
<div id="page-description" data-hotdoc-role="main">
<h2 id="getting-started-mesonninja-build">Getting Started: Meson/Ninja Build</h2>
<p>NNStreamer uses meson/ninja as its standard build environment; both Tizen(GBS-OBS/.rpm) and Ubuntu(pdebuild/.deb) use meson/ninja.</p>
<p>With meson/ninja, you may build in the git repo directory and install nnstreamer binaries to your designated directories.
However, you should be careful on configuring nnstreamer; i.e., the paths of subplugins and .ini file locations.
Please note that nnstreamer tries to load /etc/nnstreamer.ini by default.</p>
<ul>
<li>https://mesonbuild.com/Getting-meson.html</li>
</ul>
<p>This document assumes that you are using Ubuntu.</p>
<h3 id="prerequisites">Prerequisites</h3>
<p>The following dependencies are needed to compile/build/run.</p>
<ul>
<li>gcc/g++ (C++14 if you want C++-class as filters)</li>
<li>gstreamer 1.0 and its relatives</li>
<li>glib 2.0</li>
<li>meson >= 0.50</li>
<li>ninja-build</li>
<li>Neural network frameworks or libraries for plugins (e.g., tensorflow) you want to use, including their pkgconfig files or mechanisms to allow meson to discover its headers and libraries. If you use development packages packaged by us for tensorflow/pytorch/openvino/..., you do not need to worry.
<ul>
<li>Possible frameworks for "extra" plugins: tensorflow, tensorflow-lite, pytorch, protobuf, flatbuf, openvino, ncsdk2, Verisilicon-Vivante, SNPE, TensorRT, mqtt, ...</li>
</ul>
</li>
<li>
<a href="https://github.com/myungjoo/SSAT">SSAT</a> (optional. required for unit testing)</li>
<li>gtest (optional. required for unit testing)</li>
</ul>
<p>The minimal requirement to build nnstreamer with default configuration is</p>
<pre><code class="language-bash">$ sudo apt-get install meson ninja-build gcc g++ libglib2.0-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libjson-glib-dev
</code></pre>
<p>Optional utilities:</p>
<pre><code class="language-bash">$ sudo add-apt-repository ppa:nnstreamer/ppa
$ sudo apt-get update
$ sudo apt-get install libiniparser-dev=4.1 # if your iniparser is < 4.1
$ sudo apt-get install ssat # if you want to run unit tests
</code></pre>
<p>You may build and install iniparser and ssat directly from their sources, too.</p>
<p><em><strong>1. Clone nnstreamer</strong></em></p>
<pre><code class="language-bash">$ git clone https://github.com/nnstreamer/nnstreamer
</code></pre>
<p><em><strong>2. Install related frameworks</strong></em></p>
<p><em>Option A</em>: You may install optional developmental packages from nnstreamer PPA for more subplugins and extra plugins (choose what you need):</p>
<pre><code>$ sudo add-apt-repository ppa:nnstreamer/ppa
$ sudo apt-get update
$ sudo apt-get install libedgetpu-dev libflatbuffers-dev libgrpc-dev openvino-dev libpaho-mqtt-dev libprotobuf-dev pytorch tensorflow2-lite-dev tvm-runtime-dev
</code></pre>
<p><em>Option B</em>: Build & install your own frameworks and provide corresponding pkg-config files.
<a href="https://git.tizen.org/cgit/platform/upstream/tensorflow2/tree/packaging/tensorflow2-lite.pc.in?h=tizen">tensorflow2-lite pkgconfig file template</a> /
<a href="https://git.tizen.org/cgit/platform/upstream/tensorflow/tree/packaging/tensorflow-lite.pc.in?h=tizen">tensorflow1-lite pkgconfig file template</a> /
<a href="https://git.tizen.org/cgit/platform/upstream/tensorflow/tree/packaging/tensorflow-lite.pc.in?h=tizen">tensorflow1 pkgconfig file template</a></p>
<p>Fill in paths of libdir and includedir of the frameworks and place the .pc files at /usr/lib/pkgconfig/</p>
<p><em><strong>3. Configure the build</strong></em></p>
<p>Configure build in <code>./build</code> directory with default options.</p>
<pre><code class="language-bash">$ meson build
</code></pre>
<p>For possible configurations, please refer to <a href="https://github.com/nnstreamer/nnstreamer/blob/main/meson_options.txt">meson_options.txt</a>.
If you want to designate nnstreamer's binary locations, provide such with <code>--prefix</code>, <code>--sysconfdir</code>, <code>--libdir</code>, <code>--bindir</code>, and <code>--includedir</code>.
For example, in order to install as general Linux system libraries you may configure:</p>
<pre><code class="language-bash">$ meson build ${whateveroptionyouwant....} --prefix=/ --sysconfdir=/etc --libdir=/usr/lib --bindir=/usr/bin --includedir=/usr/include
</code></pre>
<p>Or You can set your own path to install libraries and header files.</p>
<pre><code class="language-bash"># Configure and build example.
$ sudo vi ~/.bashrc
export NNST_ROOT=$HOME/nnstreamer
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$NNST_ROOT/lib
export GST_PLUGIN_PATH=$GST_PLUGIN_PATH:$NNST_ROOT/lib/gstreamer-1.0
# Include NNStreamer headers and libraries
export C_INCLUDE_PATH=$C_INCLUDE_PATH:$NNST_ROOT/include
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:$NNST_ROOT/include
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$NNST_ROOT/lib/pkgconfig
$ source ~/.bashrc
$ meson --prefix=${NNST_ROOT} --sysconfdir=${NNST_ROOT} --libdir=lib --bindir=bin --includedir=include build
$ ninja -C build install
</code></pre>
<p><em><strong>4. Build</strong></em></p>
<p>Assuming you have configured meson at <code>./build</code>.</p>
<pre><code class="language-bash">$ ninja -C build
</code></pre>
<p><em><strong>5. Install</strong></em></p>
<p>Assuming you have configured meson at <code>./build</code>.</p>
<pre><code class="language-bash">$ sudo ninja -C build install # if the destination is not user directory
</code></pre>
<p>Or if you want somewhere else:</p>
<pre><code class="language-bash">$ DESTDIR=/home/me/somewhereelse/ ninja -C build install
</code></pre>
<p>Then, it will install:</p>
<ul>
<li>nnstreamer plugins to <code>{libdir}/gstreamer-1.0/</code>
</li>
<li>libraries to <code>{libdir}/</code>
</li>
<li>subplugins to <code>{prefix}/lib/nnstreamer/PLUGIN-TYPE/</code>
</li>
<li>common header files to <code>{includedir}/</code>
</li>
</ul>
<p><em><strong>6. Verifying installation</strong></em></p>
<p>Assuming you have configured meson at <code>./build</code>.</p>
<pre><code class="language-bash">$ build/tools/development/confchk/nnstreamer-check
...
</code></pre>
<p><code>nnstreamer-check</code> utility shows the status of your nnstreamer installation.
It uses environmental-variables, nnstreamer.ini file, and hardcoded default values, with the respective order.</p>
</div>
</div>
<div id="search_results">
<p>The results of the search are</p>
</div>
<div id="footer">
</div>
</div>
<div id="toc-column">
<div class="edit-button">
</div>
<div id="toc-wrapper">
<nav id="toc"></nav>
</div>
</div>
</div>
</main>
<script src="assets/js/navbar_offset_scroller.js"></script>
</body>
</html>