blob: 93cb9b79c67dbfb33f53ba795bb7821ddb846bc9 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- This is broken by doc revisioning.
-->
<link rel="shortcut icon" href="../../../img/favicon.ico">
<title>Install Native Toolchain - Apache Mynewt</title>
<link href="../../../css/bootstrap-3.0.3.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../../css/highlight.css">
<link href="../../../css/base.css" rel="stylesheet">
<link href="../../../css/custom.css" rel="stylesheet">
<link href="../../../css/v2.css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Lato" rel="stylesheet">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">
<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
<![endif]-->
<script>
(function(i, s, o, g, r, a, m) {
i["GoogleAnalyticsObject"] = r;
(i[r] =
i[r] ||
function() {
(i[r].q = i[r].q || []).push(arguments);
}),
(i[r].l = 1 * new Date());
(a = s.createElement(o)), (m = s.getElementsByTagName(o)[0]);
a.async = 1;
a.src = g;
m.parentNode.insertBefore(a, m);
})(window, document, "script", "//www.google-analytics.com/analytics.js", "ga");
ga("create", "UA-72162311-1", "auto");
ga("send", "pageview");
</script>
</head>
<body class="Install Native Toolchain">
<div class="container">
<div class="row v2-main-banner">
<a class="logo-cell" href="/">
<img class="logo" src="/img/logo.png">
</a>
<div class="tagline-cell">
<h4 class="tagline">An OS to build, deploy and securely manage billions of devices</h4>
</div>
<div class="news-cell">
<div class="well">
<h4>Latest News:</h4> <a href="/download">Apache Mynewt 1.12.0, Apache NimBLE 1.7.0 </a> released (April 4, 2024)
</div>
</div>
</div>
</div>
<nav id="navbar" class="navbar navbar-inverse affix-top" data-spy="affix" data-offset-top="150" role="navigation">
<div class="container">
<!-- Collapsed navigation -->
<div class="navbar-header">
<!-- Expander button -->
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<!-- Expanded navigation -->
<div class="navbar-collapse collapse">
<!-- Main navigation -->
<ul class="nav navbar-nav navbar-right">
<li
class=""
>
<a href="/"><i class="fa fa-home" style="font-size: larger;"></i></a>
</li>
<li
class="important"
>
<a href="/quick-start/">Quick Start</a>
</li>
<li
class=""
>
<a href="/about/">About</a>
</li>
<li
class=""
>
<a href="/talks/">Talks</a>
</li>
<li
class="active"
>
<a href="/documentation/">Documentation</a>
</li>
<li
class=""
>
<a href="/download/">Download</a>
</li>
<li
class=""
>
<a href="/community/">Community</a>
</li>
<li
class=""
>
<a href="/events/">Events</a>
</li>
</ul>
</div>
</div>
</nav>
<div class="container">
<div class="row">
<div class="col-md-3 v2-sidebar sidebar-container"><div id="docSidebar" class="hidden-print" role="complementary">
<div class="top">
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<div class="form-group">
<input type="text" name="q" class="form-control" placeholder="Search documentation" />
</div>
</form>
</div>
</div>
<ul class="toc-nav">
<li class="doc-version"><select class="form-control" onchange="if (this.value) window.location.href=this.value">
<option value="/latest">
Version: master
</option>
<option value="/v1_12_0/" >
Version: 1.12.0
</option>
<option value="/v1_11_0/" >
Version: 1.11.0
</option>
<option value="/v1_10_0/" >
Version: 1.10.0
</option>
<option value="/v1_9_0/" >
Version: 1.9.0
</option>
<option value="/v1_8_0/" >
Version: 1.8.0
</option>
<option value="/v1_7_0/" >
Version: 1.7.0
</option>
<option value="/v1_6_0/" >
Version: 1.6.0
</option>
<option value="/v1_5_0/" >
Version: 1.5.0
</option>
<option value="/v1_4_0/" >
Version: 1.4.0
</option>
<option value="/v1_3_0/os/introduction" >
Version: 1.3.0
</option>
<option value="/v1_2_0/os/introduction" selected="selected" >
Version: 1.2.0
</option>
<option value="/v1_1_0/os/introduction" >
Version: 1.1.0
</option>
<option value="/v1_0_0/os/introduction" >
Version: 1.0.0
</option>
<option value="/v0_9_0/os/introduction" >
Version: 0.9.0
</option>
</select></li>
<li ><a href="../../introduction/">Mynewt Documentation</a>
<ul>
<li ><a href="../get_started/">Basic Setup</a>
<ul>
<li ><a href="../native_install_intro/">Native Install Option</a>
<ul>
<li >
<a href="../../../newt/install/newt_mac/">Install Newt on Mac</a>
</li>
<li >
<a href="../../../newt/install/newt_linux/">Install Newt on Linux</a>
</li>
<li >
<a href="../../../newt/install/newt_windows/">Install Newt on Windows</a>
</li>
<li class="active">
<a href="./">Install Native Toolchain</a>
</li>
<li >
<a href="../cross_tools/">Install Cross Tools for ARM</a>
</li>
</ul>
</li>
<li >
<a href="../docker/">Docker Container Option</a>
</li>
<li >
<a href="../project_create/">Create Your First Project</a>
</li>
<li >
<a href="../serial_access/">Serial Port Setup</a>
</li>
</ul>
</li>
<li >
<a href="../vocabulary/">Concepts</a>
</li>
<li ><a href="../../tutorials/tutorials/">Tutorials</a>
</li>
<li ><a href="../../os_user_guide/">OS User Guide</a>
</li>
<li><a href="
../../../network/ble/ble_intro/
">BLE User Guide</a>
</li>
<li ><a href="../../../newt/newt_intro/">Newt Tool Guide</a>
</li>
<li ><a href="../../../newtmgr/overview/">Newt Manager Guide</a>
</li>
<li >
<a href="../../../known_issues/">Known Issues</a>
</li>
</ul>
</li>
<li><a href="
../../../newt/install/prev_releases/
">Appendix</a>
</li>
</ul>
</div></div>
<div class="col-md-9" role="main">
<div class="doc-header">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="/documentation/">Docs</a></li>
<li>&raquo; <a href="os/get_started/native_install_intro/">Native Install Option</a></li>
<li>&raquo; <a href="os/get_started/get_started/">Basic Setup</a></li>
<li>&raquo; <a href="os/introduction/">Mynewt Documentation</a></li>
<li>&raquo; Install Native Toolchain</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/apache/mynewt-site/blob/master/docs/os/get_started/native_tools.md"
class="icon icon-github"> Edit on GitHub</a>
</li>
</ul>
</div>
</div>
<div class="alert alert-warning">
<p>
Version 1.2.0 is not the most recent version of the Apache Mynewt
documentation. Click <a href="/latest">here</a> to read the latest
version.
</p>
</div>
<h1 id="installing-native-toolchain">Installing Native Toolchain</h1>
<p>This page shows you how to install the toolchain to build Mynewt OS applications that run native on Mac OS and Linux. The applications run on Mynewt's simulated hardware. It also allows you to run the test suites for all packages that do not require HW support. </p>
<p><strong>Note:</strong> This is not supported on Windows.</p>
<p><br></p>
<h2 id="setting-up-the-toolchain-for-mac">Setting Up the Toolchain for Mac</h2>
<h3 id="installing-brew">Installing Brew</h3>
<p>If you have not already installed Homebrew from the <a href="../../../newt/install/newt_mac/"><code>newt</code> tutorials pages</a>, install it. </p>
<p><br></p>
<h3 id="installing-gcclibc">Installing gcc/libc</h3>
<p>OS X ships with a C compiler called Clang. To build applications for the Mynewt simulator with, a different compiler is used as default: gcc.</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>$ brew install gcc
...
...
==&gt; Summary
🍺 /usr/local/Cellar/gcc/5.2.0: 1353 files, 248M
</code></pre></div>
<p><br></p>
<p>Check the gcc version you have installed (either using brew or previously installed). The brew-installed version can be checked using <code>brew list gcc</code>. The default compiler.yml configuration file in Mynewt expects version 5.x for Mac users, so if the installed version is 6.x and you wish to continue with this newer version, modify the <code>&lt;mynewt-src-directory&gt;/repos/apache-mynewt-core/compiler/sim/compiler.yml</code> file to change the default <code>gcc-5</code> defined there to <code>gcc-6</code>. In other words, replace the lines shown highlighted below:</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code># OS X.
<span style="background-color: #ffffcc">compiler.path.cc.DARWIN.OVERWRITE: &quot;gcc-5&quot;
</span><span style="background-color: #ffffcc">compiler.path.as.DARWIN.OVERWRITE: &quot;gcc-5&quot;
</span>compiler.path.objdump.DARWIN.OVERWRITE: &quot;gobjdump&quot;
compiler.path.objsize.DARWIN.OVERWRITE: &quot;objsize&quot;
compiler.path.objcopy.DARWIN.OVERWRITE: &quot;gobjcopy&quot;
</code></pre></div>
<p>with the following:</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>compiler.path.cc.DARWIN.OVERWRITE: &quot;gcc-6&quot;
compiler.path.as.DARWIN.OVERWRITE: &quot;gcc-6”
</code></pre></div>
<p><br></p>
<p>In case you wish to use Clang, you can change your <code>&lt;mynewt-src-directory&gt;/repos/apache-mynewt-core/compiler/sim/compiler.yml</code> to use Clang. Delete the gcc-5 DARWIN.OVERWRITE lines highlighted below.</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code># OS X.
<span style="background-color: #ffffcc">compiler.path.cc.DARWIN.OVERWRITE: &quot;gcc-5&quot;
</span><span style="background-color: #ffffcc">compiler.path.as.DARWIN.OVERWRITE: &quot;gcc-5&quot;
</span>compiler.path.objdump.DARWIN.OVERWRITE: &quot;gobjdump&quot;
compiler.path.objsize.DARWIN.OVERWRITE: &quot;objsize&quot;
compiler.path.objcopy.DARWIN.OVERWRITE: &quot;gobjcopy&quot;
</code></pre></div>
<p><br></p>
<p><strong>NOTE:</strong> Both the newer gcc 6.x and Clang report a few warnings but they can be ignored.</p>
<p><br></p>
<p><strong>FURTHER NOTE:</strong> Mynewt developers mostly use gcc 5.x for sim builds; so it may take a little while to fix issues reported by the newer compiler. One option is to <strong>disable warnings</strong>. To do that, remove the <code>-Werror</code> flag as an option for the compiler in the <code>&lt;mynewt-src-directory&gt;/repos/apache-mynewt-core/compiler/sim/compiler.yml</code> file as shown below. </p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>compiler.flags.base: &gt;
<span style="background-color: #ffffcc"> -m32 -Wall -ggdb
</span></code></pre></div>
<p>You may alternatively choose to <strong>specify the precise warnings to ignore</strong> depending on the error thrown by the compiler. For example, if you see a <code>[-Werror=misleading-indentation]</code> error while building the sim image, add <code>-Wno-misleading-indentation]</code> as a compiler flag in the same line from the <code>&lt;mynewt-src-directory&gt;/repos/apache-mynewt-core/compiler/sim/compiler.yml</code> file.</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>compiler.flags.base: &gt;
<span style="background-color: #ffffcc"> -m32 -Wall -Werror -ggdb -Wno-misleading-indentation
</span></code></pre></div>
<p>A third option is to simply <strong>downgrade to gcc 5.x</strong>.</p>
<p><br></p>
<h3 id="installing-gdb">Installing gdb</h3>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>$ brew install gdb
...
...
==&gt; Summary
🍺 /usr/local/Cellar/gdb/7.10.1: XXX files,YYM
</code></pre></div>
<p><br></p>
<p><strong>NOTE:</strong> When running a program with gdb, you may need to sign your gdb
executable. <a href="https://gcc.gnu.org/onlinedocs/gnat_ugn/Codesigning-the-Debugger.html">This page</a>
shows a recipe for gdb signing. Alternately you can skip this step and
continue without the ability to debug your mynewt application on your PC.*</p>
<p><br></p>
<h2 id="setting-up-the-toolchain-for-linux">Setting Up the Toolchain for Linux</h2>
<p>The below procedure can be used to set up a Debian-based Linux system (e.g.,
Ubuntu). If you are running a different Linux distribution, you will need to
substitute invocations of <em>apt-get</em> in the below steps with the package manager
that your distro uses.</p>
<p><br></p>
<h3 id="install-gcclibc-that-will-produce-32-bit-executables">Install gcc/libc that will produce 32-bit executables:</h3>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>$ sudo apt-get install gcc-multilib libc6-i386
</code></pre></div>
<p><br></p>
<h3 id="install-gdb">Install gdb</h3>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>$ sudo apt-get install gdb
Reading package lists... Done
Building dependency tree
Reading state information... Done
Suggested packages:
gdb-doc gdbserver
The following NEW packages will be installed:
gdb
...
Processing triggers for man-db (2.6.7.1-1ubuntu1) ...
Setting up gdb (7.7.1-0ubuntu5~14.04.2) ...
</code></pre></div>
<p><br></p>
<p>At this point you have installed all the necessary software to build and run your first project on a simluator on your Mac OS or Linux computer. You may proceed to the <a href="../project_create/">Create Your First Project</a> section or continue to the next section and install the cross tools for ARM.</p>
<div class="row">
<ul class="nav nav-pills" style="margin-bottom: 10px">
<li>
</li>
<li class="pull-right">
</li>
</ul>
</div>
<footer class="row">
<div class="col-xs-12">
<p class="copyright">Apache Mynewt is available under Apache License, version 2.0.</p>
</div>
<div class="col-xs-12">
<div class="logos">
<a href="https://www.apache.org/">
<img src="/img/asf_logo_wide_small.png" alt="Apache" title="Apache">
</a>
<p>
Copyright © 2015-2021 The Apache Software Foundation.<br>
<small class="footnote">
Apache Mynewt, Mynewt, Apache, the Apache feather logo, and the Apache Mynewt
project logo are either registered trademarks or trademarks of the Apache
Software Foundation in the United States and other countries.
</small>
</p>
<a href="">
<img src="https://www.countit.com/images/add_to_slack.png" alt="Slack Icon" title="Join our Slack Community" />
</a>
</div>
</div>
<a href="https://www.apache.org/licenses/">
<button class="button-footer-asf">
License
</button>
</a>
<a href="https://www.apache.org/foundation/sponsorship.html">
<button class="button-footer-asf">
Sponsorship
</button>
</a>
<a href="https://www.apache.org/foundation/thanks.html">
<button class="button-footer-asf">
Thanks
</button>
</a>
<a href="https://www.apache.org/security/">
<button class="button-footer-asf">
Security
</button>
</a>
<a href="https://apache.org/events/current-event">
<button class="button-footer-asf">
ASF Events
</button>
</a>
</footer>
</div>
</div>
</div>
<script src="../../../js/jquery-1.10.2.min.js"></script>
<script src="../../../js/bootstrap-3.0.3.min.js"></script>
<script src="../../../js/highlight.pack.js"></script>
<script src="../../../js/base.js"></script>
<script src="../../../js/custom.js"></script>
<script src="search/main.js"></script>
</body>
</html>