blob: 8044f63368efbc37c53ba111873511629034dae1 [file] [log] [blame]
.. _installing_zephyr_mac:
Development Environment Setup on macOS
######################################
This section describes how to set up a macOS development system.
After completing these steps, you will be able to compile and run your Zephyr
applications on the following macOS version:
* Mac OS X 10.11 (El Capitan)
* macOS Sierra 10.12
Developing for Zephyr on macOS generally requires you to build the
toolchain yourself. However, if there is already an macOS toolchain for your
target architecture you can use it directly.
Using a 3rd Party toolchain
***************************
If a toolchain is available for the architecture you plan to build for, then
you can use it as explained in: :ref:`third_party_x_compilers`.
An example of an available 3rd party toolchain is GCC ARM Embedded for the
Cortex-M family of cores.
.. _mac_requirements:
Installing Requirements and Dependencies
****************************************
To install the software components required to build the Zephyr kernel on a
Mac, you will need to build a cross compiler for the target devices you wish to
build for and install tools that the build system requires.
.. note::
Minor version updates of the listed required packages might also
work.
Before proceeding with the build, ensure your OS is up to date.
First, install the :program:`Homebrew` (The missing package manager for
macOS). Homebrew is a free and open-source software package management system
that simplifies the installation of software on Apple's macOS operating
system.
To install :program:`Homebrew`, visit the `Homebrew site`_ and follow the
installation instructions on the site.
To complete the Homebrew installation, you might be prompted to install some
missing dependency. If so, follow please follow the instructions provided.
After Homebrew was successfully installed, install the following tools using
the brew command line.
Install tools to build Zephyr binaries:
.. code-block:: console
$ brew install dfu-util doxygen qemu dtc python3 gperf
$ curl -O 'https://bootstrap.pypa.io/get-pip.py'
$ ./get-pip.py
$ rm get-pip.py
$ pip3 install --user -r scripts/requirements.txt
Install tools needed for building the toolchain (if needed):
.. code-block:: console
$ brew install gettext help2man mpfr gmp coreutils wget
$ brew tap homebrew/dupes
$ brew install grep --with-default-names
To build the toolchain, you will need the latest version of crosstool-ng (1.23).
This version was not available via brew when writing this documentation, you can
however try and see if you get 1.23 installed:
.. code-block:: console
$ brew install crosstool-ng
Alternatively you can install the latest version of :program:`crosstool-ng`
from source. Download the latest version from the `crosstool-ng site`_. The
latest version usually supports the latest released compilers.
.. code-block:: console
$ wget http://crosstool-ng.org/download/crosstool-ng/crosstool-ng-1.23.0.tar.bz2
$ tar xvf crosstool-ng-1.23.0.tar.bz2
$ cd crosstool-ng-1.23.0/
$ ./configure
$ make
$ make install
.. _setting_up_mac_toolchain:
Setting Up the Toolchain
************************
Creating a Case-sensitive File System
=====================================
Building the compiler requires a case-sensitive file system. Therefore, use
:program:`diskutil` to create an 8 GB blank sparse image making sure you select
case-sensitive file system (OS X Extended (Case-sensitive, Journaled) and
mount it.
Alternatively you can use the script below to create the image:
.. code-block:: bash
#!/bin/bash
ImageName=CrossToolNG
ImageNameExt=${ImageName}.sparseimage
diskutil umount force /Volumes/${ImageName} && true
rm -f ${ImageNameExt} && true
hdiutil create ${ImageName} -volname ${ImageName} -type SPARSE -size 8g -fs HFSX
hdiutil mount ${ImageNameExt}
cd /Volumes/$ImageName
When mounted, the file system of the image will be available under
:file:`/Volumes`. Change to the mounted directory:
.. code-block:: console
$ cd /Volumes/CrossToolNG
$ mkdir build
$ cd build
Setting the Toolchain Options
=============================
In the Zephyr kernel source tree we provide two configurations for
both ARM and X86 that can be used to preselect the options needed
for building the toolchain.
The configuration files can be found in :file:`${ZEPHYR_BASE}/scripts/cross_compiler/`.
Currently the following configurations are provided:
* i586.config: for standard ABI, for example for Galileo and qemu_x86
* iamcu.config: for IAMCU ABI, for example for the Arduino 101
* nios2.config: for Nios II boards
.. code-block:: console
$ cp ${ZEPHYR_BASE}/scripts/cross_compiler/i586.config .config
You can create a toolchain configuration or customize an existing configuration
yourself using the configuration menus:
.. code-block:: console
$ export CT_PREFIX=/Volumes/CrossToolNG
$ ct-ng oldconfig
Verifying the Configuration of the Toolchain
============================================
Before building the toolchain it is advisable to perform a quick verification
of the configuration set for the toolchain.
1. Open the generated :file:`.config` file.
2. Verify the following lines are present, assuming the sparse image was
mounted under :file:`/Volumes/CrossToolNG`:
.. code-block:: bash
...
CT_LOCAL_TARBALLS_DIR="/Volumes/CrossToolNG/src"
# CT_SAVE_TARBALLS is not set
CT_WORK_DIR="${CT_TOP_DIR}/.build"
CT_PREFIX_DIR="/Volumes/CrossToolNG/x-tools/${CT_TARGET}"
CT_INSTALL_DIR="${CT_PREFIX_DIR}"
# Following options prevent link errors
CT_WANTS_STATIC_LINK=n
CT_CC_STATIC_LIBSTDCXX=n
...
Building the Toolchain
======================
To build the toolchain, enter:
.. code-block:: console
$ ct-ng build
The above process takes a while. When finished, the toolchain will be available
under :file:`/Volumes/CrossToolNG/x-tools`.
Repeat the step for all architectures you want to support in your environment.
To use the toolchain with Zephyr, export the following environment variables
and use the target location where the toolchain was installed, type:
.. code-block:: console
$ export ZEPHYR_GCC_VARIANT=xtools
$ export XTOOLS_TOOLCHAIN_PATH=/Volumes/CrossToolNG/x-tools
To use the same toolchain in new sessions in the future you can set the
variables in the file :file:`${HOME}/.zephyrrc`, for example:
.. code-block:: console
$ cat <<EOF > ~/.zephyrrc
export XTOOLS_TOOLCHAIN_PATH=/Volumes/CrossToolNG/x-tools
export ZEPHYR_GCC_VARIANT=xtools
EOF
.. _Homebrew site: http://brew.sh/
.. _crosstool-ng site: http://crosstool-ng.org