217 lines
6.5 KiB
ReStructuredText
217 lines
6.5 KiB
ReStructuredText
.. _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 menuconfig
|
|
|
|
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
|