Development Environment Setup on Windows

Important

This section only describes OS-specific setup instructions; it is the first step in the complete Zephyr Getting Started Guide.

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

This guide was tested by building the Zephyr Hello World sample application on Windows versions 7, 8.1, and 10.

Update Your Operating System

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

Install Requirements and Dependencies

There are 3 different ways of developing for Zephyr on Microsoft Windows:

  1. Option 1: Windows Command Prompt
  2. Option 2: Windows 10 WSL (Windows Subsystem for Linux)
  3. Option 3: MSYS2

The first option is fully Windows native; the rest require emulation layers that may result in slower build times. All three are included for completeness, but unless you have a particular requirement for a UNIX tool that is not available on Windows, we strongly recommend you use the Windows Command Prompt option for performance and minimal dependency set. If you have a Unix tool requirement, then we recommend trying the Windows Subsystem for Linux instead of MSYS2.

Option 1: Windows Command Prompt

These instructions assume you are using the cmd.exe command prompt. Some of the details, such as setting environment variables, may differ if you are using PowerShell.

The easiest way to install the native Windows dependencies is to first install Chocolatey, a package manager for Windows. If you prefer to install dependencies manually, you can also download the required programs from their respective websites.

Note

There are multiple set statements in this tutorial. You can avoid typing them every time by placing them inside a .cmd file and running that every time you open a command prompt.

  1. If you’re behind a corporate firewall, you’ll likely need to specify a proxy to get access to internet resources:

    set HTTP_PROXY=http://user:password@proxy.mycompany.com:1234
    set HTTPS_PROXY=http://user:password@proxy.mycompany.com:1234
    
  2. Install Chocolatey by following the instructions on the Chocolatey install page.

  3. Open a command prompt (cmd.exe) as an Administrator (press the Windows key, type “cmd.exe” in the prompt, then right-click the result and choose “Run as Administrator”).

  4. Optionally disable global confirmation to avoid having to confirm installation of individual programs:

    choco feature enable -n allowGlobalConfirmation
    
  5. Install CMake:

    choco install cmake --installargs 'ADD_CMAKE_TO_PATH=System'
    
  6. Install the rest of the tools:

    choco install git python ninja dtc-msys2 gperf
    
  7. Close the Administrator command prompt window.

Option 2: Windows 10 WSL (Windows Subsystem for Linux)

If you are running a recent version of Windows 10 you can make use of the built-in functionality to natively run Ubuntu binaries directly on a standard command-prompt. This allows you to use software such as the Zephyr SDK without setting up a virtual machine.

  1. Install the Windows Subsystem for Linux (WSL).

    Note

    For the Zephyr SDK to function properly you will need Windows 10 build 15002 or greater. You can check which Windows 10 build you are running in the “About your PC” section of the System Settings. If you are running an older Windows 10 build you might need to install the Creator’s Update.

  2. Follow the Ubuntu instructions in the Development Environment Setup on Linux document.

Option 3: MSYS2

Alternatively, one can set up the Zephyr development environment with MSYS2, a modern UNIX environment for Windows. Follow the steps below to set it up:

  1. Download and install MSYS2. Download the appropriate (32 or 64-bit) MSYS2 installer from the MSYS2 website and execute it. On the final installation screen, check the “Run MSYS2 now.” box to start up an MSYS2 shell when installation is complete. Follow the rest of the installation instructions on the MSYS2 website to update the package database and core system packages. You may be advised to “terminate MSYS2 without returning to shell and check for updates again”. If so, simply close the MSYS2 MSYS Shell desktop app and run it again to complete the update.)

  2. Launch the MSYS2 MSYS Shell desktop app from your start menu (if it’s not still open).

    Note

    Make sure you start MSYS2 MSYS Shell, not MSYS2 MinGW Shell.

    Note

    If you need to inherit the existing Windows environment variables into MSYS2 you will need to create a Windows environment variable like so:: MSYS2_PATH_TYPE=inherit.

    Note

    There are multiple export statements in this tutorial. You can avoid typing them every time by placing them at the bottom of your ~/.bash_profile file.

  3. If you’re behind a corporate firewall, you’ll likely need to specify a proxy to get access to internet resources:

    export http_proxy=http://proxy.mycompany.com:123
    export https_proxy=$http_proxy
    
  4. Update MSYS2’s packages and install the dependencies required to build Zephyr (you may need to restart the MSYS2 shell):

    pacman -Syu
    pacman -S git cmake make gcc dtc diffutils ncurses-devel python3 gperf tar
    
  5. Compile Ninja from source (Ninja is not available as an MSYS2 package) and install it:

    git clone git://github.com/ninja-build/ninja.git && cd ninja
    git checkout release
    ./configure.py --bootstrap
    cp ninja.exe /usr/bin/
    
  6. Install pip and the required Python modules:

    curl -O 'https://bootstrap.pypa.io/get-pip.py'
    ./get-pip.py
    rm get-pip.py
    

You’re now almost ready to continue with the rest of the getting started guide.

Since you’re using MSYS2, when you’re cloning Zephyr in the next step of the guide, use this command line instead (i.e. add the --config core.autocrlf=false option).

git clone --config core.autocrlf=false https://github.com/zephyrproject-rtos/zephyr

Furthermore, when you start installing Python dependencies, you’ll want to add the --user option as is recommended on Linux.