2015-10-15 12:22:55 +08:00
|
|
|
|
.. _apps_build:
|
|
|
|
|
|
|
|
|
|
Build an Application
|
|
|
|
|
####################
|
|
|
|
|
|
|
|
|
|
The build process unifies all components of the application into
|
|
|
|
|
a coherent application image that can be run on both simulated and real
|
|
|
|
|
hardware targets.
|
|
|
|
|
|
|
|
|
|
.. _building_base:
|
|
|
|
|
|
|
|
|
|
Building a Base Application
|
|
|
|
|
===========================
|
|
|
|
|
|
|
|
|
|
Build a base application image to test functionality in a simulated
|
|
|
|
|
environment and to ultimately run on your hardware target. Before
|
|
|
|
|
building, keep in mind the following:
|
|
|
|
|
|
|
|
|
|
* Each source code directory and sub-directory needs a directory-specific
|
|
|
|
|
:file:`Makefile`.
|
|
|
|
|
|
|
|
|
|
* The :envvar:`$(ZEPHYR_BASE)` environment variable must be set for each
|
|
|
|
|
console terminal as outlined in :ref:`apps_common_procedures`.
|
|
|
|
|
|
|
|
|
|
To build the image, navigate to the :file:`~/appDir`. From here you can
|
|
|
|
|
build an image for a single target with :command:`make`.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.. _developing_app:
|
|
|
|
|
|
|
|
|
|
Developing the Application
|
|
|
|
|
==========================
|
|
|
|
|
|
|
|
|
|
The app development process works best when changes are continually tested.
|
|
|
|
|
Frequently rebuilding with :command:`make` makes debugging less painful
|
|
|
|
|
as your application becomes more complex. It's usually a good idea to
|
2016-06-24 01:14:58 +08:00
|
|
|
|
rebuild and test after any major changes to source files, Makefiles,
|
2015-10-15 12:22:55 +08:00
|
|
|
|
.conf, or .mdef.
|
|
|
|
|
|
|
|
|
|
.. important::
|
|
|
|
|
|
|
|
|
|
The Zephyr build system rebuilds only the parts of the application image
|
|
|
|
|
potentially affected by the changes; as such, the application may rebuild
|
|
|
|
|
significantly faster than it did when it was first built.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Recovering from Build Failure
|
|
|
|
|
-----------------------------
|
|
|
|
|
|
|
|
|
|
Sometimes the build system doesn't rebuild the application correctly
|
|
|
|
|
because it fails to recompile one or more necessary files. You can force
|
|
|
|
|
the build system to rebuild the entire application from scratch with the
|
|
|
|
|
following procedure:
|
|
|
|
|
|
|
|
|
|
#. Navigate to the application directory :file:`~/appDir`.
|
|
|
|
|
|
2015-10-20 02:15:41 +08:00
|
|
|
|
#. Run :command:`$ make clean`, or manually delete the generated files,
|
|
|
|
|
including the :file:`.config` file.
|
2015-10-15 12:22:55 +08:00
|
|
|
|
|
|
|
|
|
#. Run :command:`$ make pristine`.
|
|
|
|
|
|
2016-06-24 01:14:58 +08:00
|
|
|
|
#. You have the option to configure your project by running
|
|
|
|
|
:command:`$ make menuconfig`. If you choose not to configure your project
|
|
|
|
|
via :command:`menuconfig`, you can choose a configuration tailored for a
|
|
|
|
|
supported board later.
|
|
|
|
|
If you choose to use :command:`$ make menuconfig` be prepared to configure
|
|
|
|
|
all the parameters correctly for your specific board.
|
|
|
|
|
|
|
|
|
|
#. Rebuild the application normally. Run :command:`$ make`. You can choose to
|
|
|
|
|
specify a default configuration for a supported board using the parameter
|
|
|
|
|
:command:`BOARD`. For example: :command:`$ make BOARD=arduino_101`.
|
|
|
|
|
You can see the boards that currently support a default configuration by
|
|
|
|
|
running the command :command:`$ make help`
|
|
|
|
|
|
|
|
|
|
#. Optionally, you can override the :file:`.config` file configuration (obtained
|
|
|
|
|
as a result of :command:`menuconfig` or :command:`BOARD` parameters) by using
|
|
|
|
|
the application’s :file:`.conf` file. Declare the kernel configuration settings
|
|
|
|
|
that cover the specific needs of your project.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.. note::
|
|
|
|
|
We recommend to use the :command:`BOARD` parameter, since it will load
|
|
|
|
|
a preset configuration already tested to work properly with
|
|
|
|
|
that board. You can always tune the board configuration. Override specific
|
|
|
|
|
configuration elements by providing a configuration snippet file. Let the build
|
|
|
|
|
system know about it with the :command:`CONF_FILE` environment variable.
|