<!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="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmNN: Standalone dynamic backend developer guide</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>
<link href="doxygen.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;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">ArmNN
   &#160;<span id="projectnumber">NotReleased</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('md_src_dynamic__r_e_a_d_m_e.html','');});
</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">Standalone dynamic backend developer guide </div>  </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>Arm NN allows adding new dynamic backends. Dynamic Backends can be compiled as standalone against Arm NN and can be loaded by Arm NN dynamically at runtime.</p>
<p>To be properly loaded and used, the backend instances must comply to the standard interface for dynamic backends and to the versioning rules that enforce ABI compatibility. The details of how to add dynamic backends can be found in ../backends/README.md "src/backends/README.md".</p>
<h2>Standalone dynamic backend example</h2>
<p>The source code includes an example that is used to generate a simple dynamic backend and is provided at</p>
<p><a href="./sample/SampleDynamicBackend.hpp">SampleDynamicBackend.hpp</a> <a href="./sample/SampleDynamicBackend.cpp">SampleDynamicBackend.cpp</a></p>
<p>The details of how to create backends can be found in ../backends/README.md "src/backends/README.md".</p>
<p>The makefile used for building the standalone reference dynamic backend is also provided: <a href="./sample/CMakeLists.txt">CMakeLists.txt</a></p>
<h3>Standalone dynamic backend build</h3>
<p>The easiest way to build a standalone sample dynamic backend is to build using environment configured compiler and specify the Arm NN path and Boost path to the CMake command:</p>
<div class="fragment"><div class="line">cd ${DYNAMIC_BACKEND_DIR}</div><div class="line">mkdir build</div><div class="line">cd build</div><div class="line">cmake -DBOOST_ROOT=${BOOST_PATH} \</div><div class="line">      -DBoost_SYSTEM_LIBRARY=${BOOST_PATH}/lib/libboost_system.a \</div><div class="line">      -DBoost_FILESYSTEM_LIBRARY=${BOOST_PATH}/lib/libboost_filesystem.a \</div><div class="line">      -DARMNN_PATH=${ARMNN_PATH}/libarmnn.so ..</div></div><!-- fragment --><p>Then run the build</p>
<div class="fragment"><div class="line">make</div></div><!-- fragment --><p>The library will be created in ${DYNAMIC_BACKEND_DIR}/build.</p>
<h2>Dynamic backend loading paths</h2>
<p>During the creation of the Runtime, Arm NN will scan a given set of paths searching for suitable dynamic backend objects to load. A list of (absolute) paths can be specified at compile-time by setting a define named <code>DYNAMIC_BACKEND_PATHS</code> in the form of a colon-separated list of strings.</p>
<div class="fragment"><div class="line">-DDYNAMIC_BACKEND_PATHS=&quot;PATH_1:PATH_2...:PATH_N&quot;</div></div><!-- fragment --><p>Example for setting the path to the sample standalone dynamic backend built from the previous step:</p>
<div class="fragment"><div class="line">-DDYNAMIC_BACKEND_PATHS=${DYNAMIC_BACKEND_DIR}/build</div></div><!-- fragment --><p>The paths will be processed in the same order as they are indicated in the macro. </p>
</div></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="footer">Generated on Fri Mar 13 2020 16:07:01 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>
