.. _installing_zephyr_win:

Development Environment Setup on Windows
########################################

This section describes how to configure your development environment and
to build Zephyr applications in a Microsoft Windows environment.

This guide was tested by compiling and running the Zephyr's sample
applications on the following Windows version:

* Windows 8.1

Update Your Operating System
****************************

Before proceeding with the build, ensure that you are running your
Windows system with the latest updates installed.

.. _windows_requirements:

Installing Requirements and Dependencies
****************************************

To install the software components required to build Zephyr applications on
Windows, you will need to build or install a toolchain.

Install :program:`GIT`. Go to `GIT Download`_ to obtain the latest copy of
the software.

Install :program:`Python 2.7`. Go to `Python Download`_ to obtain the 2.7
version of the software.

Install :program:`MinGW`. MinGW is the minimalist GNU development environment
for native Windows applications. The Zephyr build system will execute on top of
this tool set.

To install :program:`MinGW`, visit the site `MinGW Home`_ and install the
following packages with their installler `mingw-get-setup.exe`:

* mingw-developer-toolkit
* mingw32-base
* msys-base
* msys-binutils
* msys-console
* msys-w32api

Launch the `MSYS console`. The installer does not create shortcuts for you,
but the script to launch it is in :file:`C:\\MinGW\\msys\\1.0\\msys.bat.`.
We need the following line in :file:`/etc/fstab`:

.. code-block:: console

   #Win32_Path     Mount_Point
   c:/mingw             /mingw

The easiest way to do this is just copy the file :file:`fstab.sample` as
:file:`fstab` and confirm that the these lines are in the new
:file:`fstab` file.

.. code-block:: console

   $ cp /etc/fstab.sample /etc/fstab
   $ cat /etc/fstab

Configure Python's folder location in the environmental variable :envvar:`PATH`
and the installation path for MinGW.

.. note:: The format of the path for `PYTHON_PATH` must to be in the
   linux format. Default installation is in :file:`C:\\python27`,
   which would be written as :file:`/c/python27/`.

.. code-block:: console

   export PYTHON_PATH=/c/python27
   export PATH=$PATH:${PYTHON_PATH}
   export MINGW_DIR=/c/MinGW

Pthread library
===============

The Zephyr OS build process has a dependency on the Pthread library.
The required packages for Msys installation would normally provide it.
However, if a minimal installation fails to provide the Pthread library,
it can be installed with the following command:

.. code-block:: console

   mingw-get install libpthread

GNU Regex C library
===================

The Zephyr build process has a dependency with the GNU regex library.
Msys provides its own GNU library implementation that can be downloaded from the
MinGW and Msys official repository: `MinGW Repository`_.
Install the library from the Msys console interface with the following commands:

.. code-block:: console

   mingw-get update
   mingw-get install msys-libregex-dev --all-related

Update the following environment variables on your system to allow the C compiler
and linker to find the library and headers:

.. code-block:: console

   export LIBRARY_PATH=$LIBRARY_PATH:/c/mingw/msys/1.0/lib
   export C_INCLUDE_PATH=$C_INCLUDE_PATH:/c/mingw/msys/1.0/include

Toolchain Installation
======================

The build system should be able to work with any toolchain installed in your system.

For instance, the Zephyr build system was tested with the toolchain provided with
the ISSM 2016 (Intel System Studio for Microcontrollers) installation.

To install ISSM use the link provided to download from the Intel Developer Zone:
`ISSM 2016 Download`_ and install it into your system.

Finally, configure your environment variables for the ISSM 2016 toolchain.
For example, using the default installation path for ISSM:
:file:`C:/IntelSWTools/ISSM_2016`

.. code-block:: console

    export ZEPHYR_GCC_VARIANT=issm
    export ISSM_INSTALLATION_PATH=C:/IntelSWTools/ISSM_2016

.. note:: The format of the location for the ISSM installation directory
   (e.g. :envvar:`ISSM_INSTALLATION_PATH`) must be in the windows format.

.. _GIT Download: https://git-scm.com/download/win
.. _Python Download: https://www.python.org/downloads/
.. _MinGW Home: http://www.mingw.org/
.. _MinGW Repository: http://sourceforge.net/projects/mingw/files/
.. _ISSM 2016 Download: https://software.intel.com/en-us/intel-system-studio-microcontrollers
