blob: a2c313c4f3574853493fb012d20c2add744ce95c [file] [log] [blame]
<!--
Documentation/_templates/layout.html
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership. The
ASF licenses this file to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance with the
License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations
under the License.
-->
<!DOCTYPE html>
<html class="writer-html5" lang="en">
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Compiling with Make &mdash; NuttX latest documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/css/theme.css" />
<link rel="stylesheet" type="text/css" href="../_static/copybutton.css" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css" />
<link rel="shortcut icon" href="../_static/favicon.ico"/>
<script src="../_static/jquery.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/sphinx_highlight.js"></script>
<script src="../_static/clipboard.min.js"></script>
<script src="../_static/copybutton.js"></script>
<script 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="Compiling with CMake" href="compiling_cmake.html" />
<link rel="prev" title="Installing" href="install.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"> NuttX
</a>
<!-- this version selector is quite ugly, should be probably replaced by something
more modern -->
<div class="version-selector">
<select onchange="javascript:location.href = this.value;">
<option value="../../latest" selected="selected">latest</option>
<option value="../../10.0.0" >10.0.0</option>
<option value="../../10.0.1" >10.0.1</option>
<option value="../../10.1.0" >10.1.0</option>
<option value="../../10.2.0" >10.2.0</option>
<option value="../../10.3.0" >10.3.0</option>
<option value="../../11.0.0" >11.0.0</option>
<option value="../../12.0.0" >12.0.0</option>
<option value="../../12.1.0" >12.1.0</option>
<option value="../../12.2.0" >12.2.0</option>
<option value="../../12.2.1" >12.2.1</option>
<option value="../../12.3.0" >12.3.0</option>
<option value="../../12.4.0" >12.4.0</option>
<option value="../../12.5.0" >12.5.0</option>
<option value="../../12.5.1" >12.5.1</option>
<option value="../../12.6.0" >12.6.0</option>
<option value="../../12.7.0" >12.7.0</option>
<option value="../../12.8.0" >12.8.0</option>
<option value="../../12.9.0" >12.9.0</option>
<option value="../../12.10.0" >12.10.0</option>
<option value="../../12.11.0" >12.11.0</option>
</select>
</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" aria-label="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="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Table of Contents</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../index.html">Home</a></li>
<li class="toctree-l1"><a class="reference internal" href="../introduction/index.html">Introduction</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">Getting Started</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="install.html">Installing</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Compiling with Make</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#initialize-configuration">Initialize Configuration</a></li>
<li class="toctree-l3"><a class="reference internal" href="#build-nuttx">Build NuttX</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="compiling_cmake.html">Compiling with CMake</a></li>
<li class="toctree-l2"><a class="reference internal" href="running.html">Running</a></li>
<li class="toctree-l2"><a class="reference internal" href="configuring.html">Configuring</a></li>
<li class="toctree-l2"><a class="reference internal" href="debugging.html">Debugging</a></li>
<li class="toctree-l2"><a class="reference internal" href="organization.html">Directory Structure</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../contributing/index.html">Contributing</a></li>
<li class="toctree-l1"><a class="reference internal" href="../introduction/inviolables.html">The Inviolable Principles of NuttX</a></li>
<li class="toctree-l1"><a class="reference internal" href="../platforms/index.html">Supported Platforms</a></li>
<li class="toctree-l1"><a class="reference internal" href="../components/index.html">OS Components</a></li>
<li class="toctree-l1"><a class="reference internal" href="../applications/index.html">Applications</a></li>
<li class="toctree-l1"><a class="reference internal" href="../implementation/index.html">Implementation Details</a></li>
<li class="toctree-l1"><a class="reference internal" href="../reference/index.html">API Reference</a></li>
<li class="toctree-l1"><a class="reference internal" href="../faq/index.html">FAQ</a></li>
<li class="toctree-l1"><a class="reference internal" href="../guides/index.html">Guides</a></li>
<li class="toctree-l1"><a class="reference internal" href="../glossary.html">Glossary</a></li>
<li class="toctree-l1"><a class="reference internal" href="../logos/index.html">NuttX Logos</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">NuttX</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="index.html">Getting Started</a></li>
<li class="breadcrumb-item active">Compiling with Make</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/quickstart/compiling_make.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">
<section id="compiling-with-make">
<span id="compiling"></span><h1>Compiling with Make<a class="headerlink" href="#compiling-with-make" title="Permalink to this heading"></a></h1>
<p>Now that we’ve installed Apache NuttX prerequisites and downloaded the source code,
we are ready to compile the source code into an executable binary file that can
be run on the embedded board.</p>
<section id="initialize-configuration">
<h2>Initialize Configuration<a class="headerlink" href="#initialize-configuration" title="Permalink to this heading"></a></h2>
<p>The first step is to initialize NuttX configuration for a given board, based on
a pre-existing configuration. To list all supported configurations you can do:</p>
<blockquote>
<div><div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span><span class="nb">cd</span><span class="w"> </span>nuttx
<span class="gp">$ </span>./tools/configure.sh<span class="w"> </span>-L<span class="w"> </span><span class="p">|</span><span class="w"> </span>less
</pre></div>
</div>
</div></blockquote>
<p>The output is in the format <code class="docutils literal notranslate"><span class="pre">&lt;board</span> <span class="pre">name&gt;:&lt;board</span> <span class="pre">configuration&gt;</span></code>. You will see that
generally all boards support the <code class="docutils literal notranslate"><span class="pre">nsh</span></code> configuration which is a good starting point
since it enables booting into the interactive command line
<a class="reference internal" href="../applications/nsh/index.html"><span class="doc">NuttShell (NSH)</span></a>.</p>
<p>To choose a configuration you pass the <code class="docutils literal notranslate"><span class="pre">&lt;board</span> <span class="pre">name&gt;:&lt;board</span> <span class="pre">configuration&gt;</span></code> option
to <code class="docutils literal notranslate"><span class="pre">configure.sh</span></code> and indicate your host platform, such as:</p>
<blockquote>
<div><div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span><span class="nb">cd</span><span class="w"> </span>nuttx
<span class="gp">$ </span>./tools/configure.sh<span class="w"> </span>-l<span class="w"> </span>stm32f4discovery:nsh
</pre></div>
</div>
</div></blockquote>
<p>The <code class="docutils literal notranslate"><span class="pre">-l</span></code> tells use that we’re on Linux (macOS and Windows builds are
possible). Use the <code class="docutils literal notranslate"><span class="pre">-h</span></code> argument to see all available options.</p>
<p>You can then customize this configuration by using the menu based
configuration system with:</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span><span class="nb">cd</span><span class="w"> </span>nuttx
<span class="gp">$ </span>make<span class="w"> </span>menuconfig
</pre></div>
</div>
<p>Modifying the configuration is covered in <a class="reference internal" href="configuring.html"><span class="doc">Configuring</span></a>.</p>
</section>
<section id="build-nuttx">
<h2>Build NuttX<a class="headerlink" href="#build-nuttx" title="Permalink to this heading"></a></h2>
<p>We can now build NuttX. To do so, you can simply run:</p>
<blockquote>
<div><div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span><span class="nb">cd</span><span class="w"> </span>nuttx
<span class="gp">$ </span>make
</pre></div>
</div>
</div></blockquote>
<p>The build will complete by generating the binary outputs
inside <code class="docutils literal notranslate"><span class="pre">nuttx</span></code> directory. Typically this includes the <code class="docutils literal notranslate"><span class="pre">nuttx</span></code>
ELF file (suitable for debugging using <code class="docutils literal notranslate"><span class="pre">gdb</span></code>) and a <code class="docutils literal notranslate"><span class="pre">nuttx.bin</span></code>
file that can be flashed to the board.</p>
<p>To clean the build, you can do:</p>
<blockquote>
<div><div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>make<span class="w"> </span>clean
</pre></div>
</div>
</div></blockquote>
<div class="admonition tip">
<p class="admonition-title">Tip</p>
<p>To increase build speed (or of any other target such as <code class="docutils literal notranslate"><span class="pre">clean</span></code>), you can
pass the <code class="docutils literal notranslate"><span class="pre">-jN</span></code> flag to <code class="docutils literal notranslate"><span class="pre">make</span></code>, where <code class="docutils literal notranslate"><span class="pre">N</span></code> is the number of parallel jobs
to start (usually, the number of processors on your machine).</p>
</div>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="install.html" class="btn btn-neutral float-left" title="Installing" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="compiling_cmake.html" class="btn btn-neutral float-right" title="Compiling with CMake" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2023, The Apache Software Foundation.</p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>