Development Environment Setup on Mac OS
This section describes how to set up a Mac OS development system.
After completing these steps, you will be able to compile and run your Zephyr applications on the following Mac OS version:
Mac OS X 10.11 (El Capitan)
Update Your Operating System
Before proceeding with the build, ensure your OS is up to date.
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.
Attention
Check your firewall and proxy configurations to ensure that Internet access is available before attempting to install the required packages.
First, install the Homebrew (The missing package manager for OS X). Homebrew is a free and open-source software package management system that simplifies the installation of software on Apple’s OS X operating system.
To install 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.
$ brew install gettext qemu help2man mpfr gmp coreutils wget
$ brew tap homebrew/dupes
$ brew install grep --default-names
$ brew install crosstool-ng
Alternatively you can install the latest version of crosstool-ng from source. Download the latest version from the crosstool-ng site. The latest version usually supports the latest released compilers.
$ wget
http://crosstool-ng.org/download/crosstool-ng/crosstool-ng-1.22.0.tar.bz2
$ tar xvf crosstool-ng-1.22.0.tar.bz2
$ cd crosstool-ng/
$ ./configure
$ make
$ make install
Setting Up the Toolchain
Creating a Case-sensitive File System
Building the compiler requires a case-senstive file system. Therefore, use 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:
#!/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
/Volumes
. Change to the mounted directory:
$ 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 pre-select the options needed
for building the toolchain.
The configuration files can be found in $ZEPHYR_BASE/scripts/cross_compiler/
.
$ cp ${ZEPHYR_BASE}/scripts/cross_compiler/x86.config .config
You can create a toolchain configuration or customize an existing configuration yourself using the configuration menus:
$ 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.
- Open the generated
.config
file. - Verify the following lines are present, assuming the sparse image was
mounted under
/Volumes/CrossToolNG
:
...
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}"
...
Building the Toolchain
To build the toolchain, enter:
$ ct-ng build
The above process takes a while. When finished, the toolchain will be available
under /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:
$ export ZEPHYR_GCC_VARIANT=xtools
$ export ZEPHYR_SDK_INSTALL_DIR=/Volumes/CrossToolNG/x-tools
To use the same toolchain in new sessions in the future you can set the
variables in the file $HOME/.zephyrrc
, for example:
$ cat <<EOF > ~/.zephyrrc
export ZEPHYR_SDK_INSTALL_DIR=/Volumes/CrossToolNG/x-tools
export ZEPHYR_GCC_VARIANT=xtools
EOF