2016-08-03 22:18:51 +03:00
.. Copyright 2014-present PlatformIO <contact@platformio.org>
2015-11-18 17:33:46 +02:00
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
2014-08-09 16:31:20 +03:00
.. _projectconf:
2015-03-05 01:36:31 +02:00
Project Configuration File `` platformio.ini ``
=============================================
2014-08-09 16:31:20 +03:00
The Project configuration file is named `` platformio.ini `` . This is a
`INI-style <http://en.wikipedia.org/wiki/INI_file> `_ file.
`` platformio.ini `` has sections (each denoted by a `` [header] `` ) and
2016-08-09 16:55:14 +03:00
key / value pairs within the sections. Lines beginning with `` ; ``
2016-01-04 01:45:57 +02:00
are ignored and may be used to provide comments.
2014-08-09 16:31:20 +03:00
2016-09-17 23:46:53 +03:00
There are 2 system reserved sections:
* Base PlatformIO settings: :ref: `projectconf_section_platformio`
* Build Environment settings: :ref: `projectconf_section_env`
The other sections can be used by users, for example, for
:ref: `projectconf_dynamic_vars` . The sections and their allowable values are
described below.
2014-08-09 16:31:20 +03:00
.. contents ::
2016-09-17 23:46:53 +03:00
:depth: 2
.. _projectconf_dynamic_vars:
Dynamic variables
-----------------
.. versionadded :: 3.1
Dynamic variables/templates are useful when you have common configuration data
between build environments. For examples, common :ref: `projectconf_build_flags`
or project dependencies :ref: `projectconf_lib_deps` .
Each variable should have a next format: `` ${<section>.<option>} `` , where
`` <section> `` is a value from `` [<section>] `` group, and `` <option> `` is a
first item from pair `` <option> = value `` .
* Variable can be applied only for the option's value
* Multiple variables are allowed
* The `` platformio `` section is reserved and could not be used as custom
section. Some good section names might be `` common `` or `` global `` .
Example:
.. code-block :: ini
[common]
build_flags = -D VERSION=1.2.3 -D DEBUG=1
lib_deps_builtin = SPI, Wire
lib_deps_external = ArduinoJson@>5.6.0
[env:uno]
platform = atmelavr
framework = arduino
board = uno
build_flags = ${common.build_flags}
lib_deps = ${common.lib_deps_builtin}, ${common.lib_deps_external}
[env:nodemcuv2]
platform = espressif8266
framework = arduino
board = nodemcuv2
build_flags = ${common.build_flags} -DSSID_NAME=HELLO -DSSID_PASWORD=WORLD
lib_deps =
${common.lib_deps_builtin}
${common.lib_deps_external}
PubSubClient@2.6
OneWire
.. _projectconf_section_platformio:
2014-08-09 16:31:20 +03:00
2016-01-13 15:03:13 +02:00
Section `` [platformio] ``
------------------------
2014-08-22 17:57:28 +03:00
2016-09-17 23:46:53 +03:00
.. contents ::
:local:
2014-08-22 17:57:28 +03:00
A `` platformio `` section is used for overriding default configuration options
2015-02-22 22:24:22 +02:00
.. note ::
Relative path is allowed for directory option:
* `` ~ `` will be expanded to user's home directory
* `` ../ `` or `` ..\ `` go up to one folder
2014-08-22 17:57:28 +03:00
Options
~~~~~~~
2015-01-08 23:21:30 +02:00
.. _projectconf_pio_home_dir:
2014-08-22 17:57:28 +03:00
`` home_dir ``
^^^^^^^^^^^^
2016-08-01 00:14:22 +03:00
Is used to store platform toolchains, frameworks, global libraries for
2016-09-17 23:46:53 +03:00
:ref: `ldf`, service data and etc. The size of this folder will depend on
number of installed development platforms.
2014-08-22 17:57:28 +03:00
2015-03-05 01:36:31 +02:00
A default value is User's home directory:
* Unix `` ~/.platformio ``
* Windows `` %HOMEPATH%\.platformio ``
This option can be overridden by global environment variable
2015-08-14 00:14:04 +03:00
:envvar: `PLATFORMIO_HOME_DIR` .
2015-03-05 01:36:31 +02:00
2016-09-17 23:46:53 +03:00
Example:
.. code-block :: ini
[platformio]
home_dir = /path/to/custom/pio/storage
2015-03-05 01:36:31 +02:00
.. _projectconf_pio_lib_dir:
2014-08-22 17:57:28 +03:00
2014-09-06 18:46:19 +03:00
`` lib_dir ``
2015-02-22 22:24:22 +02:00
^^^^^^^^^^^
2014-09-06 18:46:19 +03:00
2016-08-01 00:14:22 +03:00
You can put here your own/private libraries. The source code of each library
should be placed in separate directory, like
`` lib/private_lib/[here are source files] `` . This directory has the highest
priority for :ref: `ldf` .
2014-09-06 18:46:19 +03:00
2016-08-01 00:14:22 +03:00
A default value is `` lib `` that means that folder is located in the root of
project.
2015-03-05 01:36:31 +02:00
This option can be overridden by global environment variable
2015-08-14 00:14:04 +03:00
:envvar: `PLATFORMIO_LIB_DIR` .
2015-03-05 01:36:31 +02:00
2016-08-01 00:14:22 +03:00
For example, see how can be organized `` Foo `` and `` Bar `` libraries:
.. code ::
|--lib
| |--Bar
| | |--docs
| | |--examples
| | |--src
| | |- Bar.c
| | |- Bar.h
| |--Foo
| | |- Foo.c
| | |- Foo.h
|- platformio.ini
|--src
|- main.c
Then in `` src/main.c `` you should use:
.. code-block :: c
#include <Foo.h>
#include <Bar.h>
// rest H/C/CPP code
PlatformIO will find your libraries automatically, configure preprocessor's
include paths and build them.
2016-08-08 16:03:17 +03:00
.. _projectconf_pio_libdeps_dir:
2016-08-01 00:14:22 +03:00
2016-08-08 16:03:17 +03:00
`` libdeps_dir ``
^^^^^^^^^^^^^^^
2016-08-01 00:14:22 +03:00
2016-08-08 16:03:17 +03:00
Internal storage where :ref: `librarymanager` will install project dependencies
(:ref: `projectconf_lib_deps` ). A default value is `` .piolibdeps `` that means
that folder is located in the root of project.
2016-08-01 00:14:22 +03:00
This option can be overridden by global environment variable
2016-08-08 16:03:17 +03:00
:envvar: `PLATFORMIO_LIBDEPS_DIR` .
2015-07-29 21:14:41 +03:00
2015-03-05 01:36:31 +02:00
.. _projectconf_pio_src_dir:
2014-09-06 18:46:19 +03:00
2015-02-22 22:24:22 +02:00
`` src_dir ``
^^^^^^^^^^^
2015-03-05 01:36:31 +02:00
A path to project's source directory. PlatformIO uses it for :ref: `cmd_run`
2016-08-01 00:14:22 +03:00
command. A default value is `` src `` that means that folder is located in the
root of project.
2015-03-05 01:36:31 +02:00
This option can be overridden by global environment variable
2015-08-14 00:14:04 +03:00
:envvar: `PLATFORMIO_SRC_DIR` .
2015-02-22 22:24:22 +02:00
.. note ::
This option is useful for people who migrate from Arduino/Energia IDEs where
source directory should have the same name like the main source file.
2016-04-23 20:21:04 +03:00
See `example <https://github.com/platformio/platformio-examples/tree/develop/atmelavr-and-arduino/arduino-own-src_dir> `__ project with own source directory.
2015-02-22 22:24:22 +02:00
2015-03-05 01:36:31 +02:00
.. _projectconf_pio_envs_dir:
`` envs_dir ``
^^^^^^^^^^^^
2016-07-11 19:34:36 +03:00
.. warning ::
**PLEASE DO NOT EDIT FILES IN THIS FOLDER** . PlatformIO will overwrite
your changes on the next build. **THIS IS A CACHE DIRECTORY** .
*PlatformIO Build System* uses this folder for project
2015-03-05 01:36:31 +02:00
environments to store compiled object files, static libraries, firmwares and
other cached information. It allows PlatformIO to build source code extremely
fast!
*You can delete this folder without any risk!* If you modify :ref: `projectconf` ,
then PlatformIO will remove this folder automatically. It will be created on the
next build operation.
2016-08-01 00:14:22 +03:00
A default value is `` .pioenvs `` that means that folder is located in the root of
2016-01-01 19:44:24 +02:00
project.
2015-03-05 01:36:31 +02:00
This option can be overridden by global environment variable
2015-08-14 00:14:04 +03:00
:envvar: `PLATFORMIO_ENVS_DIR` .
2015-03-05 01:36:31 +02:00
.. note ::
2016-06-15 14:10:42 +03:00
If you have any problems with building your Project environments which
2015-03-05 01:36:31 +02:00
are defined in :ref: `projectconf` , then **TRY TO DELETE** this folder. In
this situation you will remove all cached files without any risk.
2015-12-28 01:15:06 +02:00
.. _projectconf_pio_data_dir:
`` data_dir ``
^^^^^^^^^^^^
Data directory to store contents and :ref: `platform_espressif_uploadfs` .
2016-08-01 00:14:22 +03:00
A default value is `` data `` that means that folder is located in the root of
2016-01-01 19:44:24 +02:00
project.
2015-12-28 01:15:06 +02:00
This option can be overridden by global environment variable
:envvar: `PLATFORMIO_DATA_DIR` .
2016-06-15 14:10:42 +03:00
.. _projectconf_pio_test_dir:
`` test_dir ``
^^^^^^^^^^^^
2016-08-01 00:14:22 +03:00
Directory where :ref: `unit_testing` engine will look for the tests.
A default value is `` test `` that means that folder is located in the root of
2016-06-15 14:10:42 +03:00
project.
This option can be overridden by global environment variable
:envvar: `PLATFORMIO_TEST_DIR` .
2016-04-27 14:10:18 +03:00
.. _projectconf_pio_env_default:
`` env_default ``
^^^^^^^^^^^^^^^
:ref: `cmd_run` command processes all environments `` [env:***] `` by default
if :option: `platformio run --environment` option is not specified.
:ref: `projectconf_pio_env_default` allows to define environments which
should be processed by default.
2016-09-02 00:22:12 +03:00
Multiple environments are allowed if they are separated with ", "
2016-09-01 23:19:46 +03:00
(comma+space). For example.
2016-04-27 14:10:18 +03:00
.. code-block :: ini
[platformio]
env_default = uno, nodemcu
[env:uno]
platform = atmelavr
framework = arduino
board = uno
[env:nodemcu]
2016-09-03 19:35:40 +03:00
platform = espressif8266
2016-04-27 14:10:18 +03:00
framework = arduino
board = nodemcu
[env:teensy31]
platform = teensy
framework = arduino
board = teensy31
[env:lpmsp430g2553]
platform = timsp430
framework = energia
board = lpmsp430g2553
build_flags = -D LED_BUILTIN=RED_LED
2016-09-17 23:46:53 +03:00
.. _projectconf_section_env:
2014-08-09 16:31:20 +03:00
2016-01-13 15:03:13 +02:00
Section `` [env:NAME] ``
----------------------
2016-09-17 23:46:53 +03:00
.. contents ::
:local:
2014-08-09 16:31:20 +03:00
A section with `` env: `` prefix is used to define virtual environment with
specific options that will be processed with :ref: `cmd_run` command. You can
define unlimited numbers of environments.
Each environment must have unique `` NAME `` . The valid chars for `` NAME `` are
* letters `` a-z ``
* numbers `` 0-9 ``
* special char `` _ `` (underscore)
For example, `` [env:hello_world] `` .
2016-01-13 15:03:13 +02:00
General options
~~~~~~~~~~~~~~~
2014-08-09 16:31:20 +03:00
2016-08-01 00:14:22 +03:00
.. contents ::
:local:
2014-12-29 20:22:01 +02:00
.. _projectconf_env_platform:
2014-08-09 16:31:20 +03:00
`` platform ``
^^^^^^^^^^^^
2016-05-26 19:43:36 +03:00
:ref: `platforms` name.
2014-08-09 16:31:20 +03:00
2016-08-02 19:10:29 +03:00
PlatformIO allows to use specific version of platform using
2016-05-31 00:22:25 +03:00
`Semantic Versioning <http://semver.org> `_ (X.Y.Z=MAJOR.MINOR.PATCH).
Version specifications can take any of the following forms:
* `` 0.1.2 `` : an exact version number. Use only this exact version
* `` ^0.1.2 `` : any compatible version (exact version for `` 0.x.x `` versions
* `` ~0.1.2 `` : any version with the same major and minor versions, and an
equal or greater patch version
* `` >0.1.2 `` : any version greater than `` 0.1.2 `` . `` >= `` , `` < `` , and `` <= ``
are also possible
* `` >0.1.0,!=0.2.0,<0.3.0 `` : any version greater than `` 0.1.0 `` , not equal to
`` 0.2.0 `` and less than `` 0.3.0 ``
Examples:
.. code-block :: ini
[env:the_latest_version]
platform = atmelavr
[env:specific_major_version]
platform = atmelavr@^0.1.2
[env:specific_major_and_minor_version]
platform = atmelavr@~0.1.2
2014-08-09 16:31:20 +03:00
2014-12-29 20:22:01 +02:00
.. _projectconf_env_framework:
2014-08-09 16:31:20 +03:00
`` framework ``
^^^^^^^^^^^^^
2016-05-26 19:43:36 +03:00
:ref: `frameworks` name.
2015-03-13 19:13:36 +02:00
2016-09-02 00:22:12 +03:00
The multiple frameworks are allowed, split them with comma+space ", ".
2014-08-09 16:31:20 +03:00
2014-12-29 20:22:01 +02:00
.. _projectconf_env_board:
2014-08-09 16:31:20 +03:00
`` board ``
^^^^^^^^^
2015-03-05 01:36:31 +02:00
*PlatformIO* has pre-configured settings for the most popular boards. You don't
2014-08-09 16:31:20 +03:00
need to specify `` board_mcu `` , `` board_f_cpu `` , `` upload_protocol `` or
`` upload_speed `` options. Just define a `` board `` type and *PlatformIO* will
pre-fill options described above with appropriate values.
2015-06-28 20:18:16 +03:00
You can find the `` board `` type in *Boards* section of each :ref: `platforms` or
2016-03-12 21:32:13 +02:00
using `PlatformIO Embedded Boards Explorer <http://platformio.org/boards> `_ .
2014-08-09 16:31:20 +03:00
2016-01-13 15:03:13 +02:00
Board options
~~~~~~~~~~~~~
2016-08-01 00:14:22 +03:00
.. contents ::
:local:
2014-08-09 16:31:20 +03:00
`` board_mcu ``
^^^^^^^^^^^^^
`` board_mcu `` is a microcontroller(MCU) type that is used by compiler to
recognize MCU architecture. The correct type of `` board_mcu `` depends on
platform library. For example, the list of `` board_mcu `` for "megaAVR Devices"
is described `here <http://www.nongnu.org/avr-libc/user-manual/> `_ .
2015-03-05 01:36:31 +02:00
The full list of `` board_mcu `` for the popular embedded platforms you can find
in *Boards* section of :ref: `platforms` . See "Microcontroller" column.
2014-08-09 16:31:20 +03:00
2015-12-18 19:29:20 +02:00
.. _projectconf_board_f_cpu:
2014-08-09 16:31:20 +03:00
`` board_f_cpu ``
^^^^^^^^^^^^^^^
An option `` board_f_cpu `` is used to define MCU frequency (Hertz, Clock). A
format of this option is `` C-like long integer `` value with `` L `` suffix. The
1 Hertz is equal to `` 1L `` , then 16 Mhz (Mega Hertz) is equal to `` 16000000L `` .
2015-03-05 01:36:31 +02:00
The full list of `` board_f_cpu `` for the popular embedded platforms you can
2016-01-29 17:52:54 +02:00
find in *Boards* section of :ref: `platforms` . See "Frequency" column. You can
2016-01-25 22:24:08 +01:00
overclock a board by specifying a `` board_f_cpu `` value other than the default.
2014-08-09 16:31:20 +03:00
2016-02-10 22:58:12 +02:00
.. _projectconf_board_f_flash:
`` board_f_flash ``
^^^^^^^^^^^^^^^^^
An option `` board_f_flash `` is used to define FLASH chip frequency (Hertz, Clock). A
format of this option is `` C-like long integer `` value with `` L `` suffix. The
1 Hertz is equal to `` 1L `` , then 40 Mhz (Mega Hertz) is equal to `` 40000000L `` .
This option isn't available for the all development platforms. The only
2016-09-03 19:35:40 +03:00
:ref: `platform_espressif8266` supports it.
2014-08-09 16:31:20 +03:00
2016-02-11 00:00:23 +02:00
.. _projectconf_board_flash_mode:
`` board_flash_mode ``
^^^^^^^^^^^^^^^^^^^^
Flash chip interface mode. This option isn't available for the all development
2016-09-03 19:35:40 +03:00
platforms. The only :ref: `platform_espressif8266` supports it.
2016-02-11 00:00:23 +02:00
2016-08-01 00:14:22 +03:00
Build options
~~~~~~~~~~~~~
.. contents ::
:local:
2015-12-11 15:20:08 +02:00
2014-12-03 14:56:24 +02:00
.. _projectconf_build_flags:
2014-08-09 16:31:20 +03:00
`` build_flags ``
^^^^^^^^^^^^^^^
These flags/options control preprocessing, compilation, assembly and linking
processes:
.. list-table ::
:header-rows: 1
* - Format
- Scope
- Description
* - `` -D name ``
- CPPDEFINES
- Predefine *name* as a macro, with definition 1.
* - `` -D name=definition ``
- CPPDEFINES
- The contents of *definition* are tokenized and processed as if they
appeared during translation phase three in a `` #define `` directive.
* - `` -U name ``
- CPPDEFINES
- Cancel any previous definition of *name* , either built in or provided
with a `` -D `` option.
2015-06-19 13:43:30 +03:00
* - `` -Wp,option ``
- CPPFLAGS
- Bypass the compiler driver and pass *option* directly through to the
preprocessor
2014-08-09 16:31:20 +03:00
* - `` -Wall ``
- CCFLAGS
- Turns on all optional warnings which are desirable for normal code.
* - `` -Werror ``
- CCFLAGS
- Make all warnings into hard errors. Source code which triggers warnings will be rejected.
* - `` -w ``
- CCFLAGS
- Suppress all warnings, including those which GNU CPP issues by default.
* - `` -include file ``
- CCFLAGS
- Process *file* as if `` #include "file" `` appeared as the first line of
the primary source file.
2015-06-19 13:43:30 +03:00
* - `` -Idir ``
- CPPPATH
- Add the directory *dir* to the list of directories to be searched
for header files.
2014-08-09 16:31:20 +03:00
* - `` -Wa,option ``
- ASFLAGS, CCFLAGS
- Pass *option* as an option to the assembler. If *option* contains
commas, it is split into multiple options at the commas.
2015-06-19 13:43:30 +03:00
* - `` -Wl,option ``
- LINKFLAGS
- Pass *option* as an option to the linker. If *option* contains
commas, it is split into multiple options at the commas.
2014-08-09 16:31:20 +03:00
* - `` -llibrary ``
- LIBS
- Search the *library* named library when linking
* - `` -Ldir ``
- LIBPATH
- Add directory *dir* to the list of directories to be searched for
`` -l `` .
2015-05-23 19:17:07 +03:00
This option can be set by global environment variable
2015-08-14 00:14:04 +03:00
:envvar: `PLATFORMIO_BUILD_FLAGS` .
2015-05-23 19:17:07 +03:00
2014-08-09 16:31:20 +03:00
Example:
.. code-block :: ini
[env:specific_defines]
2016-02-25 15:09:23 +02:00
build_flags = -DFOO -DBAR=1 -DFLOAT_VALUE=1.23457e+07
[env:string_defines]
build_flags = '-DHELLO="World!"' '-DWIFI_PASS="My password"'
2014-08-09 16:31:20 +03:00
[env:specific_inclibs]
build_flags = -I/opt/include -L/opt/lib -lfoo
2015-06-19 13:43:30 +03:00
[env:specific_ld_script]
build_flags = -Wl,-T/path/to/ld_script.ld
2016-07-09 14:38:49 +03:00
[env:exec_command]
2016-08-09 16:53:51 +03:00
; get VCS revision "on-the-fly"
2016-07-09 14:38:49 +03:00
build_flags = !echo "-DPIO_SRC_REV="$(git rev-parse HEAD)
2014-08-09 16:31:20 +03:00
For more detailed information about available flags/options go to:
* `Options to Request or Suppress Warnings
<https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html>`_
* `Options for Debugging Your Program
<https://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html>`_
* `Options That Control Optimization
<https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html>`_
* `Options Controlling the Preprocessor
<https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html>`_
* `Passing Options to the Assembler
<https://gcc.gnu.org/onlinedocs/gcc/Assembler-Options.html>`_
* `Options for Linking <https://gcc.gnu.org/onlinedocs/gcc/Link-Options.html> `_
* `Options for Directory Search
<https://gcc.gnu.org/onlinedocs/gcc/Directory-Options.html>`_
2015-06-28 20:18:16 +03:00
.. _projectconf_src_build_flags:
2014-08-09 16:31:20 +03:00
2015-06-28 20:18:16 +03:00
`` src_build_flags ``
^^^^^^^^^^^^^^^^^^^
2014-08-09 16:31:20 +03:00
2016-06-13 19:24:13 +03:00
An option `` src_build_flags `` has the same behavior like `` build_flags ``
2015-03-05 01:36:31 +02:00
but will be applied only for the project source code from
:ref: `projectconf_pio_src_dir` directory.
2015-05-23 19:17:07 +03:00
This option can be set by global environment variable
2015-08-14 00:14:04 +03:00
:envvar: `PLATFORMIO_SRC_BUILD_FLAGS` .
2014-08-09 16:31:20 +03:00
2016-07-15 16:12:07 +03:00
.. _projectconf_build_unflags:
2016-04-27 12:55:07 +03:00
`` build_unflags ``
^^^^^^^^^^^^^^^^^
Remove base/initial flags which were set by development platform.
.. code-block :: ini
[env:unflags]
build_unflags = -Os -std=gnu++11
build_flags = -O2
2015-06-22 15:06:39 +03:00
.. _projectconf_src_filter:
`` src_filter ``
^^^^^^^^^^^^^^
This option allows to specify which source files should be included/excluded
from build process. Filter supports 2 templates:
* `` +<PATH> `` include template
* `` -<PATH> `` exclude template
`` PATH `` MAST BE related from :ref: `projectconf_pio_src_dir` . All patterns will
be applied in theirs order.
`GLOB Patterns <http://en.wikipedia.org/wiki/Glob_(programming)> `_ are allowed.
By default, `` src_filter `` is predefined to
2016-01-29 17:52:54 +02:00
`` +<*> -<.git/> -<svn/> -<example/> -<examples/> -<test/> -<tests/> `` ,
2016-08-01 00:14:22 +03:00
that means "includes ALL files, then
2016-01-29 17:52:54 +02:00
exclude `` .git `` and `` svn `` repository folders, `` example `` ... folder.
2015-06-22 15:06:39 +03:00
This option can be set by global environment variable
2015-08-14 00:14:04 +03:00
:envvar: `PLATFORMIO_SRC_FILTER` .
2015-06-22 15:06:39 +03:00
2016-08-13 10:33:03 +03:00
.. _projectconf_targets:
2015-06-28 20:18:16 +03:00
`` targets ``
^^^^^^^^^^^
A list with targets which will be processed by :ref: `cmd_run` command by
2015-12-28 01:15:06 +02:00
default. You can enter more than one target separated with "space".
The list with available targets is located in :option: `platformio run --target` .
2015-06-28 20:38:37 +03:00
**Tip!** You can use these targets like an option to
:option: `platformio run --target` command. For example:
.. code-block :: bash
# clean project
platformio run -t clean
2016-08-09 16:53:51 +03:00
# dump current build environment
2015-06-28 20:38:37 +03:00
platformio run --target envdump
When no targets are defined, *PlatformIO* will build only sources by default.
2015-06-28 20:18:16 +03:00
2016-01-13 15:03:13 +02:00
2016-08-01 00:14:22 +03:00
Upload options
~~~~~~~~~~~~~~
.. contents ::
:local:
2016-01-13 15:03:13 +02:00
2016-02-17 20:20:39 +02:00
.. _projectconf_upload_port:
2016-01-13 15:03:13 +02:00
`` upload_port ``
^^^^^^^^^^^^^^^
This option is used by "uploader" tool when sending firmware to board via
`` upload_port `` . For example,
* `` /dev/ttyUSB0 `` - Unix-based OS
* `` COM3 `` - Windows OS
* `` 192.168.0.13 `` - IP address when using OTA
If `` upload_port `` isn't specified, then *PlatformIO* will try to detect it
automatically.
2016-08-26 14:25:50 +03:00
To print all available serial ports use :ref: `cmd_device` command.
2016-01-13 15:03:13 +02:00
2016-02-17 20:20:39 +02:00
This option can be set by global environment variable
:envvar: `PLATFORMIO_UPLOAD_PORT` .
2016-09-19 15:32:11 +03:00
Example:
.. code-block :: ini
[env:uno]
platform = atmelavr
framework = arduino
board = uno
upload_port = /dev/ttyUSB0
2016-01-13 15:03:13 +02:00
`` upload_protocol ``
^^^^^^^^^^^^^^^^^^^
A protocol that "uploader" tool uses to talk to the board.
.. _projectconf_upload_speed:
`` upload_speed ``
^^^^^^^^^^^^^^^^
A connection speed (`baud rate <http://en.wikipedia.org/wiki/Baud> `_ )
which "uploader" tool uses when sending firmware to board.
2016-02-17 20:20:39 +02:00
.. _projectconf_upload_flags:
2016-01-13 15:03:13 +02:00
`` upload_flags ``
^^^^^^^^^^^^^^^^
Extra flags for uploader. Will be added to the end of uploader command. If you
need to override uploader command or base flags please use :ref: `projectconf_extra_script` .
2016-02-17 20:20:39 +02:00
This option can be set by global environment variable
:envvar: `PLATFORMIO_UPLOAD_FLAGS` .
2016-01-14 01:07:57 +02:00
.. _projectconf_upload_resetmethod:
`` upload_resetmethod ``
^^^^^^^^^^^^^^^^^^^^^^
Specify reset method for "uploader" tool. This option isn't available for all
2016-09-03 19:35:40 +03:00
development platforms. The only :ref: `platform_espressif8266` supports it.
2016-01-13 15:03:13 +02:00
Library options
~~~~~~~~~~~~~~~
2016-08-01 00:14:22 +03:00
.. contents ::
:local:
2016-08-08 16:03:17 +03:00
.. _projectconf_lib_deps:
`` lib_deps ``
^^^^^^^^^^^^
2016-01-13 15:03:13 +02:00
2016-08-08 16:06:12 +03:00
.. versionadded :: 3.0
.. seealso ::
Please make sure to read :ref: `ldf` guide first.
2016-08-08 16:03:17 +03:00
Specify project dependencies that should be installed automatically to
2016-08-24 00:26:28 +03:00
:ref: `projectconf_pio_libdeps_dir` before environment processing.
2016-09-02 00:22:12 +03:00
Multiple dependencies are allowed (multi-lines or separated with comma+space ", ").
2016-01-13 15:03:13 +02:00
2016-09-17 23:46:53 +03:00
If you have multiple build environments that depend on the same libraries,
you can use :ref: `projectconf_dynamic_vars` to use common configuration.
2016-08-08 16:03:17 +03:00
**Valid forms**
.. code-block :: ini
2016-09-17 16:32:16 +03:00
; one line definition (comma + space)
2016-08-10 15:50:01 +03:00
[env:myenv]
2016-09-01 21:34:37 +03:00
lib_deps = LIBRARY_1, LIBRARY_2, LIBRARY_N
2016-09-17 16:32:16 +03:00
; multi-line definition
2016-09-01 21:34:37 +03:00
[env:myenv2]
2016-08-08 16:03:17 +03:00
lib_deps =
LIBRARY_1
LIBRARY_2
LIBRARY_N
The each line with `` LIBRARY_1... LIBRARY_N `` will be passed automatically to
:ref: `cmd_lib_install` command. Please follow to :ref: `cmd_lib_install` for
detailed documentation about possible values.
2016-01-13 15:03:13 +02:00
Example:
.. code-block :: ini
2016-08-08 16:03:17 +03:00
[env:depends_on_some_libs]
lib_deps =
2016-08-24 00:26:28 +03:00
13
2016-08-08 16:03:17 +03:00
PubSubClient
Json@~5.6,!=5.4
https://github.com/gioblu/PJON.git@v2.0
https://github.com/me-no-dev/ESPAsyncTCP.git
2016-01-13 15:03:13 +02:00
2016-07-24 18:17:23 +03:00
.. _projectconf_lib_ignore:
2016-01-13 15:03:13 +02:00
`` lib_ignore ``
^^^^^^^^^^^^^^
2016-08-01 00:14:22 +03:00
.. seealso ::
Please make sure to read :ref: `ldf` guide first.
2016-07-24 18:17:23 +03:00
Specify libraries which should be ignored by Library Dependency Finder.
The correct value for this option is library name (not
folder name). In the most cases, library name is pre-defined in manifest file
(:ref: `library_config` , `` library.properties `` , `` module.json `` ). The multiple
2016-09-02 00:22:12 +03:00
library names are allowed, split them with comma+space ", ".
2016-01-13 15:03:13 +02:00
Example:
.. code-block :: ini
[env:ignore_some_libs]
2016-06-25 13:23:24 +03:00
lib_ignore = SPI, Ethernet
2016-01-13 15:03:13 +02:00
2016-07-15 23:51:33 +03:00
.. _projectconf_lib_extra_dirs:
`` lib_extra_dirs ``
^^^^^^^^^^^^^^^^^^
2016-08-01 00:14:22 +03:00
.. versionadded :: 3.0
.. seealso ::
Please make sure to read :ref: `ldf` guide first.
2016-07-24 18:17:23 +03:00
2016-09-07 18:50:09 +03:00
A list with extra directories/storages where :ref: `ldf` will
2016-07-24 18:17:23 +03:00
look for dependencies. Multiple paths are allowed. Please separate them
2016-09-02 00:22:12 +03:00
using comma+space ", ".
2016-07-15 23:51:33 +03:00
This option can be set by global environment variable
:envvar: `PLATFORMIO_LIB_EXTRA_DIRS` .
.. warning ::
This is a not direct path to library with source code. It should be the path
2016-07-24 18:17:23 +03:00
to storage that contains libraries grouped by folders. For example,
`` /extra/lib/storage/ `` but not `` /extra/lib/storage/MyLibrary `` .
2016-07-15 23:51:33 +03:00
Example:
.. code-block :: ini
[env:custom_lib_dirs]
lib_extra_dirs = /path/to/private/dir1,/path/to/private/dir2
2016-08-01 00:14:22 +03:00
.. _projectconf_lib_ldf_mode:
`` lib_ldf_mode ``
^^^^^^^^^^^^^^^^
.. versionadded :: 3.0
.. seealso ::
Please make sure to read :ref: `ldf` guide first.
2016-08-31 18:52:27 +03:00
This option specifies how does Library Dependency Finder should analyze
dependencies (`` #include `` directives). See :ref: `ldf_mode` for details.
2016-08-01 00:14:22 +03:00
2016-07-31 15:46:57 +03:00
.. _projectconf_lib_compat_mode:
2016-07-24 18:17:23 +03:00
2016-07-31 15:46:57 +03:00
`` lib_compat_mode ``
^^^^^^^^^^^^^^^^^^^
2016-07-24 18:17:23 +03:00
2016-08-01 00:14:22 +03:00
.. versionadded :: 3.0
.. seealso ::
Please make sure to read :ref: `ldf` guide first.
2016-07-24 18:17:23 +03:00
2016-08-01 00:14:22 +03:00
Library compatibility mode allows to control strictness of Library Dependency
Finder. More details :ref: `ldf_compat_mode` .
2016-07-24 18:17:23 +03:00
2016-07-31 15:46:57 +03:00
By default, this value is set to `` lib_compat_mode = 1 `` and means that LDF
2016-07-24 18:17:23 +03:00
will check only for framework compatibility.
2016-08-10 15:50:01 +03:00
Test options
~~~~~~~~~~~~
.. contents ::
:local:
.. _projectconf_test_ignore:
`` test_ignore ``
^^^^^^^^^^^^^^^
.. versionadded :: 3.0
.. seealso ::
Please make sure to read :ref: `unit_testing` guide first.
2016-08-21 19:32:11 +03:00
Ignore tests where the name matches specified patterns. Multiple names are
2016-09-02 00:22:12 +03:00
allowed. Please separate them using comma+space ", ". Also, you can
2016-08-21 19:32:11 +03:00
ignore some tests using :option: `platformio test --ignore` command.
2016-08-10 15:50:01 +03:00
.. list-table ::
:header-rows: 1
* - Pattern
- Meaning
* - `` * ``
- matches everything
* - `` ? ``
- matches any single character
* - `` [seq] ``
- matches any character in seq
* - `` [!seq] ``
- matches any character not in seq
**Example**
.. code-block :: ini
[env:myenv]
2016-08-21 19:32:11 +03:00
test_ignore = footest, bartest_*, test[13]
2016-08-10 15:50:01 +03:00
2016-10-26 21:07:43 +03:00
Advanced options
~~~~~~~~~~~~~~~~
.. _projectconf_extra_script:
`` extra_script ``
^^^^^^^^^^^^^^^^
.. contents ::
:local:
Allows to launch extra script using `SCons <http://www.scons.org> `_ software
construction tool. For more details please follow to "Construction Environments"
section of
`SCons documentation <http://www.scons.org/doc/production/HTML/scons-user.html#chap-environments> `_ .
This option can be set by global environment variable
:envvar: `PLATFORMIO_EXTRA_SCRIPT` .
Take a look at the multiple snippets/answers for the user questions:
- `#462 Split C/C++ build flags <https://github.com/platformio/platformio/issues/462#issuecomment-172667342> `_
- `#365 Extra configuration for ESP8266 uploader <https://github.com/platformio/platformio/issues/365#issuecomment-163695011> `_
- `#351 Specific reset method for ESP8266 <https://github.com/platformio/platformio/issues/351#issuecomment-161789165> `_
- `#247 Specific options for avrdude <https://github.com/platformio/platformio/issues/247#issuecomment-118169728> `_ .
Custom Uploader
'''''''''''''''
Example, specify own upload command for :ref: `platform_atmelavr` :
`` platformio.ini `` :
.. code-block :: ini
[env:env_custom_uploader]
platform = atmelavr
extra_script = /path/to/extra_script.py
custom_option = hello
`` extra_script.py `` :
.. code-block :: python
Import('env')
from base64 import b64decode
env.Replace(UPLOADHEXCMD='"$UPLOADER" ' + b64decode(ARGUMENTS.get("CUSTOM_OPTION")) + ' --uploader --flags')
# uncomment line below to see environment variables
# print env.Dump()
# print ARGUMENTS
Before/Pre and After/Post actions
'''''''''''''''''''''''''''''''''
PlatformIO Build System has rich API that allows to attach different pre-/post
2016-10-27 23:40:31 +03:00
actions (hooks) using `` env.AddPreAction(target, callback) `` or
`` env.AddPreAction(target, [callback1, callback2, ...]) `` function. A first
2016-10-26 21:07:43 +03:00
argument `` target `` can be a name of target that is passed using
2016-10-27 23:40:31 +03:00
:option: `platformio run --target` command, a name of built-in targets
(buildprog, size, upload, program, buildfs, uploadfs, uploadfsota) or path
to file which PlatformIO processes (ELF, HEX, BIN, OBJ, etc.).
2016-10-26 21:07:43 +03:00
The example below demonstrates how to call different functions
when :option: `platformio run --target` is called with `` upload `` value.
`extra_script.py` file is located on the same level as `` platformio.ini `` .
`` platformio.ini `` :
.. code-block :: ini
[env:pre_and_post_hooks]
extra_script = extra_script.py
`` extra_script.py `` :
.. code-block :: python
Import("env")
2016-10-27 23:40:31 +03:00
#
# Upload actions
#
2016-10-26 21:07:43 +03:00
def before_upload(source, target, env):
print "before_upload"
# do some actions
def after_upload(source, target, env):
print "after_upload"
# do some actions
print "Current build targets", map(str, BUILD_TARGETS)
env.AddPreAction("upload", before_upload)
env.AddPostAction("upload", after_upload)
2016-10-27 23:40:31 +03:00
#
# Custom actions when building program/firmware
#
env.AddPreAction("buildprog", callback...)
env.AddPostAction("buildprog", callback...)
#
# Custom actions for specific files/objects
#
env.AddPreAction("$BUILD_DIR/firmware.elf", [callback1, callback2,...])
env.AddPostAction("$BUILD_DIR/firmware.hex", callback...)
# custom action for project's main.cpp
env.AddPostAction("$BUILD_DIR/src/main.cpp.o", callback...)
2016-10-26 21:07:43 +03:00
2016-01-13 15:03:13 +02:00
-----------
2014-12-03 14:56:24 +02:00
.. _projectconf_examples:
2014-08-09 16:31:20 +03:00
Examples
--------
2015-03-05 01:36:31 +02:00
.. note ::
A full list with project examples can be found in
2016-05-28 19:09:24 +03:00
`PlatformIO Repository <https://github.com/platformio/platformio-examples/tree/develop> `_ .
2015-03-05 01:36:31 +02:00
2014-08-09 16:31:20 +03:00
1. :ref: `platform_atmelavr` : Arduino UNO board with auto pre-configured
`` board_* `` and `` upload_* `` options (use only `` board `` option) and Arduino
Wiring-based Framework
2014-12-19 19:53:25 +02:00
.. code-block :: ini
2014-08-09 16:31:20 +03:00
[env:atmelavr_arduino_uno_board]
platform = atmelavr
framework = arduino
board = uno
2016-08-09 16:53:51 +03:00
; enable auto-uploading
2014-08-11 12:20:08 +03:00
targets = upload
2015-09-10 16:43:09 +03:00
2. :ref: `platform_atmelavr` : Embedded board that is based on ATmega168 MCU with
2014-08-09 16:31:20 +03:00
"arduino" bootloader
2014-12-19 19:53:25 +02:00
.. code-block :: ini
2014-08-09 16:31:20 +03:00
[env:atmelavr_atmega168_board]
platform = atmelavr
board_mcu = atmega168
board_f_cpu = 16000000L
upload_port = /dev/ttyUSB0
2016-08-09 16:53:51 +03:00
; for Windows OS
; upload_port = COM3
2014-08-09 16:31:20 +03:00
upload_protocol = arduino
upload_speed = 19200
2016-08-09 16:53:51 +03:00
; enable auto-uploading
2014-08-09 16:31:20 +03:00
targets = upload
2015-09-10 16:43:09 +03:00
3. Upload firmware via USB programmer (USBasp) to :ref: `platform_atmelavr`
2014-12-19 19:53:25 +02:00
microcontrollers
.. code-block :: ini
[env:atmelavr_usbasp]
platform = atmelavr
framework = arduino
board = pro8MHzatmega328
2015-12-25 00:17:19 +02:00
upload_protocol = usbasp
upload_flags = -Pusb -B5
2015-11-02 22:36:49 +02:00
2016-01-13 15:03:13 +02:00
Then upload firmware using target `` program `` for :option: `platformio run --target` .
command. To use other programmers see :ref: `atmelavr_upload_via_programmer` .
2014-12-19 19:53:25 +02:00
2015-09-10 16:43:09 +03:00
4. :ref: `platform_ststm32` : Upload firmware using GDB script `` upload.gdb `` ,
`issue #175 <https://github.com/platformio/platformio/issues/175> `_
2014-08-09 16:31:20 +03:00
2014-12-19 19:53:25 +02:00
.. code-block :: ini
2014-08-09 16:31:20 +03:00
2015-09-10 16:43:09 +03:00
[env:st_via_gdb]
platform = ststm32
board = armstrap_eagle512
upload_protocol = gdb
2014-08-09 16:31:20 +03:00
2015-11-20 22:41:36 +02:00
Also, take a look at this article `Armstrap Eagle and PlatformIO <http://isobit.io/2015/08/08/armstrap.html> `_ .
2015-09-10 16:43:09 +03:00
5. :ref: `platform_ststm32` : Upload firmware using ST-Link instead mbed's media
disk
2014-08-09 16:31:20 +03:00
2014-12-19 19:53:25 +02:00
.. code-block :: ini
2014-08-09 16:31:20 +03:00
2015-09-10 16:43:09 +03:00
[env:stlink_for_mbed]
platform = ststm32
board = disco_f100rb
upload_protocol = stlink