<!DOCTYPE html> | |
<html class="writer-html5" lang="en" > | |
<head> | |
<meta charset="utf-8" /> | |
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> | |
<title>Building with Conan — OpenPASS Documentation</title> | |
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> | |
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> | |
<link rel="stylesheet" href="../_static/tabs.css" type="text/css" /> | |
<link rel="stylesheet" href="../_static/css/custom.css" type="text/css" /> | |
<link rel="shortcut icon" href="../_static/openPASS.ico"/> | |
<!--[if lt IE 9]> | |
<script src="../_static/js/html5shiv.min.js"></script> | |
<![endif]--> | |
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> | |
<script src="../_static/jquery.js"></script> | |
<script src="../_static/underscore.js"></script> | |
<script src="../_static/doctools.js"></script> | |
<script src="../_static/tabs.js"></script> | |
<script type="text/javascript" src="../_static/js/theme.js"></script> | |
<link rel="index" title="Index" href="../genindex.html" /> | |
<link rel="search" title="Search" href="../search.html" /> | |
<link rel="next" title="Overview" href="../user_guide/10_overview.html" /> | |
<link rel="prev" title="Custom Protobuf Build" href="further_guidance/40_custom_proto.html" /> | |
</head> | |
<body class="wy-body-for-nav"> | |
<div class="wy-grid-for-nav"> | |
<nav data-toggle="wy-nav-shift" class="wy-nav-side"> | |
<div class="wy-side-scroll"> | |
<div class="wy-side-nav-search" > | |
<a href="../index.html" class="icon icon-home"> openPASS | |
<img src="../_static/openPASS.png" class="logo" alt="Logo"/> | |
</a> | |
<div class="version"> | |
0.8.0 | |
</div> | |
<div role="search"> | |
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> | |
<input type="text" name="q" placeholder="Search docs" /> | |
<input type="hidden" name="check_keywords" value="yes" /> | |
<input type="hidden" name="area" value="default" /> | |
</form> | |
</div> | |
</div> | |
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | |
<p class="caption"><span class="caption-text">Installation Guide</span></p> | |
<ul class="current"> | |
<li class="toctree-l1"><a class="reference internal" href="10_getting_started.html">Getting Started</a></li> | |
<li class="toctree-l1"><a class="reference internal" href="20_install_prerequisites.html">Installing Prerequisites</a></li> | |
<li class="toctree-l1"><a class="reference internal" href="30_install_openpass.html">Installing OpenPASS</a></li> | |
<li class="toctree-l1"><a class="reference internal" href="50_further_guidance.html">Further Guidance</a></li> | |
<li class="toctree-l1 current"><a class="current reference internal" href="#">Building with Conan</a><ul> | |
<li class="toctree-l2"><a class="reference internal" href="#general">General</a></li> | |
<li class="toctree-l2"><a class="reference internal" href="#additional-prerequisites">Additional Prerequisites</a></li> | |
<li class="toctree-l2"><a class="reference internal" href="#export-recipes">Export Recipes</a><ul> | |
<li class="toctree-l3"><a class="reference internal" href="#conan-export">Conan Export</a></li> | |
<li class="toctree-l3"><a class="reference internal" href="#conan-install">Conan Install</a></li> | |
<li class="toctree-l3"><a class="reference internal" href="#conan-create">Conan Create</a></li> | |
</ul> | |
</li> | |
<li class="toctree-l2"><a class="reference internal" href="#build-op">Build <strong>openPASS</strong></a></li> | |
<li class="toctree-l2"><a class="reference internal" href="#build-only-thirdparties">Build only ThirdParties</a></li> | |
</ul> | |
</li> | |
</ul> | |
<p class="caption"><span class="caption-text">User Guides</span></p> | |
<ul> | |
<li class="toctree-l1"><a class="reference internal" href="../user_guide/10_overview.html">Overview</a></li> | |
<li class="toctree-l1"><a class="reference internal" href="../user_guide/20_tutorials.html">Tutorials</a></li> | |
<li class="toctree-l1"><a class="reference internal" href="../user_guide/30_gui_plugins.html">GUI Plugins</a></li> | |
<li class="toctree-l1"><a class="reference internal" href="../user_guide/40_configs_in_depth.html">Configs in Depth</a></li> | |
<li class="toctree-l1"><a class="reference internal" href="../user_guide/50_outputs_in_depth.html">Outputs in Depth</a></li> | |
<li class="toctree-l1"><a class="reference internal" href="../user_guide/60_scenario_simulation.html">Simulator</a></li> | |
</ul> | |
<p class="caption"><span class="caption-text">Advanced topics</span></p> | |
<ul> | |
<li class="toctree-l1"><a class="reference internal" href="../advanced_topics/20_simulator_advanced.html">Simulator</a></li> | |
<li class="toctree-l1"><a class="reference internal" href="../advanced_topics/30_testing.html">EndToEnd Test Framework</a></li> | |
</ul> | |
<p class="caption"><span class="caption-text">Developer Information</span></p> | |
<ul> | |
<li class="toctree-l1"><a class="reference internal" href="../developer_information/10_ide_support.html">IDE Support</a></li> | |
<li class="toctree-l1"><a class="reference internal" href="../developer_information/20_documentation.html">Documentation Concept</a></li> | |
</ul> | |
<p class="caption"><span class="caption-text">Other Information</span></p> | |
<ul> | |
<li class="toctree-l1"><a class="reference internal" href="../other_information/10_external_dependencies.html">External Dependencies</a></li> | |
<li class="toctree-l1"><a class="reference internal" href="../other_information/20_glossary.html">Glossary</a></li> | |
<li class="toctree-l1"><a class="reference internal" href="../other_information/30_license.html">License</a></li> | |
</ul> | |
</div> | |
</div> | |
</nav> | |
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | |
<nav class="wy-nav-top" aria-label="top navigation"> | |
<i data-toggle="wy-nav-top" class="fa fa-bars"></i> | |
<a href="../index.html">openPASS</a> | |
</nav> | |
<div class="wy-nav-content"> | |
<div class="rst-content"> | |
<div role="navigation" aria-label="breadcrumbs navigation"> | |
<ul class="wy-breadcrumbs"> | |
<li><a href="../index.html" class="icon icon-home"></a> »</li> | |
<li>Building with Conan</li> | |
<li class="wy-breadcrumbs-aside"> | |
<a href="../_sources/installation_guide/60_conan.rst.txt" rel="nofollow"> View page source</a> | |
</li> | |
</ul> | |
<hr/> | |
</div> | |
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | |
<div itemprop="articleBody"> | |
<div class="section" id="building-with-conan"> | |
<span id="id1"></span><h1>Building with Conan<a class="headerlink" href="#building-with-conan" title="Permalink to this headline">¶</a></h1> | |
<img alt="https://conan.io/img/logo-conan.svg" src="https://conan.io/img/logo-conan.svg" /><div class="section" id="general"> | |
<h2>General<a class="headerlink" href="#general" title="Permalink to this headline">¶</a></h2> | |
<p>Conan is an open source, decentralized and multi-platform package manager to create and share native binaries.</p> | |
<p>To learn more about Conan itself you can visit <a class="reference external" href="https://conan.io/">Conan</a>.</p> | |
<p>Conan is used in the <strong>openPASS</strong> project to create and manage the binaries of the used ThirdParty libraries.</p> | |
</div> | |
<div class="section" id="additional-prerequisites"> | |
<h2>Additional Prerequisites<a class="headerlink" href="#additional-prerequisites" title="Permalink to this headline">¶</a></h2> | |
<p>To be able to work with Conan it´s necessary to add additional packages.</p> | |
<div class="sphinx-tabs docutils container"> | |
<div aria-label="Tabbed content" class="closeable" role="tablist"><button aria-controls="panel-0-0-0" aria-selected="true" class="sphinx-tabs-tab" id="tab-0-0-0" name="0-0" role="tab" tabindex="0">Windows (MSYS2)</button><button aria-controls="panel-0-0-1" aria-selected="false" class="sphinx-tabs-tab" id="tab-0-0-1" name="0-1" role="tab" tabindex="-1">Linux (Debian Bullseye)</button></div><div aria-labelledby="tab-0-0-0" class="sphinx-tabs-panel" id="panel-0-0-0" name="0-0" role="tabpanel" tabindex="0"><div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>pip install conan | |
</pre></div> | |
</div> | |
</div><div aria-labelledby="tab-0-0-1" class="sphinx-tabs-panel" hidden="true" id="panel-0-0-1" name="0-1" role="tabpanel" tabindex="0"><div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>apt install conan | |
</pre></div> | |
</div> | |
</div></div> | |
</div> | |
<div class="section" id="export-recipes"> | |
<h2>Export Recipes<a class="headerlink" href="#export-recipes" title="Permalink to this headline">¶</a></h2> | |
<div class="admonition note"> | |
<p class="admonition-title">Note</p> | |
<p>A <em>recipe</em> is python file, which is used by conan to build and create a package. | |
In this file there are several hooks available, which can be used for several tasks. | |
E.g. Retrieving the source files, building from source, configuring dependencies, packaging, etc. | |
Visit <a class="reference external" href="https://conan.io/">Conan</a>. for detailed information about <em>recipes</em>.</p> | |
</div> | |
<p>To make Conan aware and to use the custom recipes for the ThirdParty libraries, these recipes have to be exported to the <em>local cache</em> of Conan. | |
This can be done in different ways.</p> | |
<div class="section" id="conan-export"> | |
<h3>Conan Export<a class="headerlink" href="#conan-export" title="Permalink to this headline">¶</a></h3> | |
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="nb">cd</span> <path to conanfile.py of recipe> | |
conan <span class="nb">export</span> . <optional user>/<optional channel> | |
</pre></div> | |
</div> | |
<p>The optional user and channel flags can be used to export a recipe while it´s still in development. | |
In that case there could be several different versions and their corresponding binaries of the same library available at the same time. | |
The <em>local cache</em> could then show the following packages. | |
E.g.</p> | |
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>packagename/3.2.0 | |
packagename/3.2.0@openpassWG/stable | |
packagename/3.3.0@myUserName/testing | |
</pre></div> | |
</div> | |
<div class="admonition note"> | |
<p class="admonition-title">Note</p> | |
<p>At least this step has to be done in prior before any ThirdParty library can be installed by Conan. | |
Every upcoming step is optional, but can be useful while developing or debugging. | |
Also with these steps it´s possible to install ThirdParty libraries separately.</p> | |
</div> | |
</div> | |
<div class="section" id="conan-install"> | |
<h3>Conan Install<a class="headerlink" href="#conan-install" title="Permalink to this headline">¶</a></h3> | |
<p>Conan is now able to differentiate different version and the user can now install exactly the version he wishes to.</p> | |
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>conan install <package_name> | |
</pre></div> | |
</div> | |
<p>This command has a look into the <em>local cache</em> for the recipe and the binaries of the package and installs them into the <em>local cache</em>. | |
If no binaries where found an error is thrown.</p> | |
<div class="admonition note"> | |
<p class="admonition-title">Note</p> | |
<p>To make conan also build the package the command can be appended with the following argument: <code class="docutils literal notranslate"><span class="pre">--build=missing</span></code>.</p> | |
</div> | |
</div> | |
<div class="section" id="conan-create"> | |
<h3>Conan Create<a class="headerlink" href="#conan-create" title="Permalink to this headline">¶</a></h3> | |
<p>Both of the previous commands can be combined with the <code class="docutils literal notranslate"><span class="pre">create`</span></code> command. What it basically does is calling <code class="docutils literal notranslate"><span class="pre">export</span></code> and <code class="docutils literal notranslate"><span class="pre">install</span></code> after another.</p> | |
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="nb">cd</span> <path to conanfile.py of recipe> | |
conan create . <optional user>/<optional channel> | |
</pre></div> | |
</div> | |
<p>At this step the binaries of this package are now available in the <em>local cache</em>.</p> | |
<div class="admonition note"> | |
<p class="admonition-title">Note</p> | |
<p>There are several additional commands, arguments and fields for these commands available. | |
Please see <a class="reference external" href="https://docs.conan.io/en/latest/">Conan Docs</a> for additional information.</p> | |
</div> | |
</div> | |
</div> | |
<div class="section" id="build-op"> | |
<h2>Build <strong>openPASS</strong><a class="headerlink" href="#build-op" title="Permalink to this headline">¶</a></h2> | |
<p>If you followed the previous steps and export all dependencies and <strong>openPASS</strong> recipes to Conans <em>local cache</em>, then you can go on with the next steps. | |
If not then at least the <code class="docutils literal notranslate"><span class="pre">export</span></code> should be done. | |
Else Conan is not able to know how to build the dependencies and <strong>openPASS</strong>.</p> | |
<p><strong>openPASS</strong> can be build using a <code class="docutils literal notranslate"><span class="pre">conanfile.txt</span></code>. | |
It holds every Information which is needed to build and install <strong>openPASS</strong>.</p> | |
<p>The following file shows an example which can be used. | |
This example is also available in the <code class="docutils literal notranslate"><span class="pre">conan</span></code> folder in the <code class="docutils literal notranslate"><span class="pre">simopenpass</span></code> repository.</p> | |
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="n">requires</span><span class="p">]</span> | |
<span class="n">openpass</span><span class="o">/</span><span class="mf">0.8</span> | |
<span class="p">[</span><span class="n">generators</span><span class="p">]</span> | |
<span class="n">cmake</span> | |
<span class="p">[</span><span class="n">imports</span><span class="p">]</span> | |
<span class="o">.</span> <span class="p">,</span> <span class="o">*</span> <span class="o">-></span> <span class="n">C</span><span class="p">:</span><span class="o">/</span><span class="n">openpass</span> <span class="o">@</span> | |
</pre></div> | |
</div> | |
<p>The <code class="docutils literal notranslate"><span class="pre">requires</span></code> field describes what package with what version shall be installed. | |
It´s also possible to add more packages here or change the version.</p> | |
<p>The <code class="docutils literal notranslate"><span class="pre">generator</span></code> field is used to add different generators to the process. | |
In this example the <code class="docutils literal notranslate"><span class="pre">cmake</span></code> generator would generate cmake files, which describe where to find the <strong>openPASS</strong> in the <em>local cache</em>. | |
There are also other possibilities like a <code class="docutils literal notranslate"><span class="pre">cmake_find_package</span></code> generator, which generates <em>cmake</em> <em>FindPackage</em> files.</p> | |
<p>At this point <strong>openPASS</strong> only exists in the <em>local cache</em> of Conan. | |
With the <code class="docutils literal notranslate"><span class="pre">imports</span></code> field it´s possible to specify where and how the binaries shall be copied from the <em>local cache</em> to the <em>user space</em>. | |
The example follows the following pattern:</p> | |
<blockquote> | |
<div><p><source>, <pattern> -> <destination></p> | |
</div></blockquote> | |
<div class="admonition note"> | |
<p class="admonition-title">Note</p> | |
<p>It is possible to add several lines for more specific copying operations. | |
Also there are more field available than this simple example shows. | |
See <a class="reference external" href="https://docs.conan.io/en/latest/">Conan Docs</a> for additional information.</p> | |
</div> | |
<p>Conan can simply install <strong>openPASS</strong> with the following command. | |
If the dependencies or <strong>openPASS</strong> were not build in any previous step, the binaries will not be available in the <em>local cache</em> of Conan. | |
Conan can build them by adding <code class="docutils literal notranslate"><span class="pre">--build=missing</span></code> to the following command.</p> | |
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>conan install <path to conanfile.txt> | |
</pre></div> | |
</div> | |
</div> | |
<div class="section" id="build-only-thirdparties"> | |
<h2>Build only ThirdParties<a class="headerlink" href="#build-only-thirdparties" title="Permalink to this headline">¶</a></h2> | |
<p>The ThirdParty libraries can be build and installed the same way.</p> | |
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="n">requires</span><span class="p">]</span> | |
<span class="n">OSI</span><span class="o">/</span><span class="mf">3.2</span><span class="o">.</span><span class="mi">0</span> | |
<span class="n">FMILibrary</span><span class="o">/</span><span class="mf">2.0</span><span class="o">.</span><span class="mi">3</span> | |
<span class="p">[</span><span class="n">generators</span><span class="p">]</span> | |
<span class="n">cmake_find_package</span> | |
<span class="n">cmake_paths</span> | |
<span class="p">[</span><span class="n">imports</span><span class="p">]</span> | |
<span class="o">.</span> <span class="p">,</span> <span class="o">*</span> <span class="o">-></span> <span class="n">C</span><span class="p">:</span><span class="o">/</span><span class="n">openpass</span><span class="o">/</span><span class="n">ThirdParty</span> <span class="o">@</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
<footer> | |
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> | |
<a href="../user_guide/10_overview.html" class="btn btn-neutral float-right" title="Overview" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a> | |
<a href="further_guidance/40_custom_proto.html" class="btn btn-neutral float-left" title="Custom Protobuf Build" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a> | |
</div> | |
<hr/> | |
<div role="contentinfo"> | |
<p> | |
© Copyright 2021 OpenPASS Working Group. | |
</p> | |
</div> | |
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a | |
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> | |
provided by <a href="https://readthedocs.org">Read the Docs</a>. | |
</footer> | |
</div> | |
</div> | |
</section> | |
</div> | |
<script type="text/javascript"> | |
jQuery(function () { | |
SphinxRtdTheme.Navigation.enable(true); | |
}); | |
</script> | |
</body> | |
</html> |