blob: 2c9dcd871881d72db6f727e304e38c855b2e8027 [file] [log] [blame]
Installing Native Toolchain
===========================
.. contents::
:local:
:depth: 2
This page shows you how to install the toolchain to build Mynewt OS
applications that run native on macOS 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.
**Note:** This is not supported on Windows.
Setting Up the Toolchain for Mac
--------------------------------
Installing Brew
~~~~~~~~~~~~~~~
If you have not already installed Homebrew from the ``newt`` tutorials
pages install it (:doc:`../../newt/install/newt_mac`).
Installing GCC/libc
~~~~~~~~~~~~~~~~~~~
macOS with Xcode ships with a C compiler called Clang. To build applications for the
Mynewt simulator, a different compiler is used as default: ``gcc``.
.. code-block:: console
$ brew install gcc
...
...
==> Summary
🍺 /usr/local/Cellar/gcc/8.2.0 (1,495 files, 335.9MB)
Check the GCC version you have installed (either using ``brew`` or
previously installed). The brew-installed version can be checked using
``brew list gcc``. The default compiler.yml configuration file in Mynewt
expects version 5.x for Mac users, so if the installed version is newer
and you wish to continue with this newer version, modify the
``<mynewt-src-directory>/repos/apache-mynewt-core/compiler/sim/compiler.yml``
file to change the default ``gcc-5`` defined there to that displayed by
``brew list gcc``, e.g. ``gcc-8``.
In other words, replace the lines shown highlighted below:
.. code-block:: yaml
:emphasize-lines: 2,3
# OS X.
compiler.path.cc.DARWIN.OVERWRITE: "gcc-5"
compiler.path.as.DARWIN.OVERWRITE: "gcc-5"
compiler.path.objdump.DARWIN.OVERWRITE: "gobjdump"
compiler.path.objsize.DARWIN.OVERWRITE: "objsize"
compiler.path.objcopy.DARWIN.OVERWRITE: "gobjcopy"
...with the following:
.. code-block:: yaml
compiler.path.cc.DARWIN.OVERWRITE: "gcc-8"
compiler.path.as.DARWIN.OVERWRITE: "gcc-8”
In case you wish to use Clang, you can change your
``<mynewt-src-directory>/repos/apache-mynewt-core/compiler/sim/compiler.yml``
to use Clang. Delete the gcc-5 ``DARWIN.OVERWRITE`` lines highlighted below.
.. code-block:: yaml
:emphasize-lines: 2,3
# OS X.
compiler.path.cc.DARWIN.OVERWRITE: "gcc-5"
compiler.path.as.DARWIN.OVERWRITE: "gcc-5"
compiler.path.objdump.DARWIN.OVERWRITE: "gobjdump"
compiler.path.objsize.DARWIN.OVERWRITE: "objsize"
compiler.path.objcopy.DARWIN.OVERWRITE: "gobjcopy"
**NOTE:** Both the newer GCC versions and Clang report a few warnings but
they can be ignored.
**FURTHER NOTE:** 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 **disable warnings**. To do that, remove the
``-Werror`` flag as an option for the compiler in the
``<mynewt-src-directory>/repos/apache-mynewt-core/compiler/sim/compiler.yml``
file as shown below.
.. code-block:: yaml
:emphasize-lines: 2
compiler.flags.base: >
-m32 -Wall -ggdb
You may alternatively choose to **specify the precise warnings to
ignore** depending on the error thrown by the compiler. For example, if
you see a ``[-Werror=misleading-indentation]`` error while building the
sim image, add ``-Wno-misleading-indentation]`` as a compiler flag in
the same line from the
``<mynewt-src-directory>/repos/apache-mynewt-core/compiler/sim/compiler.yml``
file.
.. code-block:: yaml
:emphasize-lines: 2
compiler.flags.base: >
-m32 -Wall -Werror -ggdb -Wno-misleading-indentation
A third option is to simply **downgrade to GCC 5.x**:
.. code-block:: console
$ brew install gcc@5
Note that Homebrew will no longer install GCC 5.x on macOS 10.13 and newer:
.. code-block:: console
$ brew install gcc@5
gcc@5: This formula either does not compile or function as expected on macOS
versions newer than High Sierra due to an upstream incompatibility.
Error: An unsatisfied requirement failed this build.
In this case, you might try downgrading to GCC 6.x, which is still available:
.. code-block:: console
$ brew install gcc@6
Installing GDB
~~~~~~~~~~~~~~
.. code-block:: console
$ brew install gdb
...
...
==> Summary
🍺 /usr/local/Cellar/gdb/7.10.1: XXX files,YYM
**NOTE:** When running a program with GDB, you may need to sign your ``gdb``
executable. `This
page <https://gcc.gnu.org/onlinedocs/gnat_ugn/Codesigning-the-Debugger.html>`__
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.\*
Setting Up the Toolchain for Linux
----------------------------------
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 *apt-get* in the below steps with
the package manager that your distro uses.
Installing GCC/libc that will produce 32-bit executables
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: console
$ sudo apt-get install gcc-multilib libc6-i386
Installing GDB
~~~~~~~~~~~~~~
.. code-block:: console
$ 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) ...
Next
----
At this point you have installed all the necessary software to build and
run your first project on a simulator on your macOS or Linux computer.
You may proceed to :doc:`../project_create` or continue to the next section and install the cross tools for
ARM.