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
key / value pairs within the sections. A sign `` # `` at the beginning of the
2014-12-29 20:27:11 +02:00
line indicates a comment. Comment lines are ignored.
2014-08-09 16:31:20 +03:00
The sections and their allowable values are described below.
.. contents ::
2014-08-22 17:57:28 +03:00
[platformio]
------------
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 ``
^^^^^^^^^^^^
2015-03-05 01:36:31 +02:00
Is used to store platform tool chains, frameworks, external libraries,
service data and etc.
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
:ref: `envvar_PLATFORMIO_HOME_DIR` .
.. _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
This directory is used to store external libraries downloaded by
:ref: `librarymanager` .
2015-03-05 01:36:31 +02:00
A default value is `` %home_dir%/lib `` .
This option can be overridden by global environment variable
:ref: `envvar_PLATFORMIO_LIB_DIR` .
.. _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`
2015-02-22 22:24:22 +02:00
command.
2015-03-05 01:36:31 +02:00
A default value is `` %project_dir%/src `` .
This option can be overridden by global environment variable
:ref: `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.
2015-03-25 11:34:48 +02:00
See `example <https://github.com/platformio/platformio/tree/develop/examples/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 ``
^^^^^^^^^^^^
*PlatformIO Builder* within :ref: `cmd_run` command uses this folder for project
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.
A default value is `` %project_dir%/.pioenvs `` .
This option can be overridden by global environment variable
:ref: `envvar_PLATFORMIO_ENVS_DIR` .
.. note ::
If you have any problems with building your Project environmets which
are defined in :ref: `projectconf` , then **TRY TO DELETE** this folder. In
this situation you will remove all cached files without any risk.
2014-08-09 16:31:20 +03:00
[env:NAME]
----------
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] `` .
Options
~~~~~~~
2014-12-29 20:22:01 +02:00
.. _projectconf_env_platform:
2014-08-09 16:31:20 +03:00
`` platform ``
^^^^^^^^^^^^
2015-03-13 19:13:36 +02:00
:ref: `Platform <platforms>` type.
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 ``
^^^^^^^^^^^^^
2015-03-13 19:13:36 +02:00
:ref: `Framework <frameworks>` type.
The multiple frameworks are allowed, split them with comma `` , `` separator.
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.
You can find the `` board `` type in *Boards* section of each :ref: `platforms` .
`` 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
`` 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
find in *Boards* section of :ref: `platforms` . See "Frequency" column.
2014-08-09 16:31:20 +03:00
`` upload_port ``
^^^^^^^^^^^^^^^
2015-03-05 01:36:31 +02:00
This option is used by "uploader" tool when sending firmware to board via
2014-08-09 16:31:20 +03:00
`` upload_port `` . For example,
* `` /dev/ttyUSB0 `` - Unix-based OS
* `` COM3 `` - Windows OS
2015-03-05 01:36:31 +02:00
If `` upload_port `` isn't specified, then *PlatformIO* will try to detect it
automatically.
2014-12-03 14:56:24 +02:00
2014-08-09 16:31:20 +03:00
To print all available serial ports use :ref: `cmd_serialports` command.
`` upload_protocol ``
^^^^^^^^^^^^^^^^^^^
A protocol that "uploader" tool uses to talk to the board.
`` upload_speed ``
^^^^^^^^^^^^^^^^
A connection speed (`baud rate <http://en.wikipedia.org/wiki/Baud> `_ )
2015-03-05 01:36:31 +02:00
which "uploader" tool uses when sending firmware to board.
2014-08-09 16:31:20 +03:00
`` targets ``
^^^^^^^^^^^
A list with targets which will be processed by :ref: `cmd_run` command by
default. You can enter more then one target separated with "space".
When no targets are defined, *PlatformIO* will build only sources by default.
.. note ::
This option is useful to enable "auto-uploading" after building operation
(`` targets = upload `` ).
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
:ref: `envvar_PLATFORMIO_BUILD_FLAGS` .
2014-08-09 16:31:20 +03:00
Example:
.. code-block :: ini
[env:specific_defines]
2015-06-19 13:43:30 +03:00
build_flags = -Dfoo -Dbar=1
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
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-03-05 01:36:31 +02:00
.. _projectconf_srcbuild_flags:
2014-08-09 16:31:20 +03:00
`` srcbuild_flags ``
^^^^^^^^^^^^^^^^^^
2015-03-05 01:36:31 +02:00
An option `` srcbuild_flags `` has the same behaviour like `` build_flags ``
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-03-05 01:36:31 +02:00
:ref: `envvar_PLATFORMIO_SRCBUILD_FLAGS` .
2014-08-09 16:31:20 +03:00
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
`` +<*> -<.git/> -<svn/> -<examples/> `` , which means "includes ALL files, then
exclude `` .git `` and `` svn `` repository folders and exclude `` examples `` folder.
This option can be set by global environment variable
:ref: `envvar_PLATFORMIO_SRC_FILTER` .
2015-05-01 13:49:18 +01:00
`` install_libs ``
^^^^^^^^^^^^^^^^
Specify dependent libraries which should be installed before environment
process. The only library IDs are allowed. Multiple libraries can be passed
using comma `` , `` sign.
You can obtain library IDs using :ref: `cmd_lib_search` command.
Example:
2015-06-28 19:44:35 +03:00
.. code-block :: ini
2015-05-01 13:49:18 +01:00
[env:depends_on_some_libs]
install_libs = 1,13,19
2015-06-28 19:44:35 +03:00
`` lib_use ``
^^^^^^^^^^^
2015-05-05 15:47:21 +01:00
2015-05-26 23:45:29 +03:00
Specify libraries which should be used by `` Library Dependency Finder (LDF) `` with
2015-05-05 15:47:21 +01:00
the highest priority.
Example:
2015-06-28 19:44:35 +03:00
.. code-block :: ini
2015-05-05 15:47:21 +01:00
[env:libs_with_highest_priority]
2015-06-28 19:44:35 +03:00
lib_use = OneWire_ID1,SPI
2015-05-05 15:47:21 +01:00
2015-06-28 19:31:28 +03:00
`` lib_ignore ``
^^^^^^^^^^^^^^
2015-01-29 12:49:46 +02:00
2015-05-26 23:45:29 +03:00
Specify libraries which should be ignored by `` Library Dependency Finder (LDF) ``
2015-01-29 12:49:46 +02:00
Example:
2015-06-28 19:44:35 +03:00
.. code-block :: ini
2015-01-29 12:49:46 +02:00
[env:ignore_some_libs]
2015-06-28 19:31:28 +03:00
lib_ignore = SPI,EngduinoV3_ID123
2015-01-29 12:49:46 +02:00
2015-06-28 19:20:31 +03:00
`` lib_dfcyclic ``
2015-06-28 19:31:28 +03:00
^^^^^^^^^^^^^^^^
2015-05-26 23:45:29 +03:00
Control cyclic (recursive) behaviour for `` Library Dependency Finder (LDF) `` .
2015-06-28 19:20:31 +03:00
By default, this option is turned OFF (`` lib_dfcyclic=False `` ) and means, that
2015-05-26 23:45:29 +03:00
`` LDF `` will find only libraries which are included in source files from the
project :ref: `projectconf_pio_src_dir` .
If you want to enable cyclic (recursive, nested) search, please set this option
to `` True `` . Founded library will be treated like a new source files and
`` LDF `` will search dependencies for it.
Example:
2015-06-28 19:44:35 +03:00
.. code-block :: ini
2015-05-26 23:45:29 +03:00
[env:libs_with_enabled_ldf_cyclic]
2015-06-28 19:20:31 +03:00
lib_dfcyclic = True
2015-05-26 23:45:29 +03:00
2015-06-19 15:29:22 +03:00
.. _projectconf_extra_script:
`` extra_script ``
^^^^^^^^^^^^^^^^
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
:ref: `envvar_PLATFORMIO_EXTRA_SCRIPT` .
Example, specify own upload command for :ref: `platform_atmelavr` :
`` platformio.ini `` :
.. code-block :: ini
[env:env_with_specific_extra_script]
platform = atmelavr
extra_script = /path/to/extra_script.py
`` extra_script.py `` :
.. code-block :: python
from SCons.Script import DefaultEnvironment
env = DefaultEnvironment()
env.Replace(UPLOADHEXCMD='"$UPLOADER" --uploader --flags')
# uncomment line below to see environment variables
# print env.Dump()
See built-in examples of `PlatformIO build scripts <https://github.com/platformio/platformio/tree/develop/platformio/builder/scripts> `_ .
2015-01-29 12:49:46 +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
2015-03-25 11:34:48 +02:00
`PlatformIO Repository <https://github.com/platformio/platformio/tree/develop/examples> `_ .
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
2014-08-11 12:20:08 +03:00
# enable auto-uploading
targets = upload
2. :ref: `platform_atmelavr` : Microduino Core (ATmega168P, 3.3V) 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-11 12:20:08 +03:00
[env:atmelavr_microduino_core_board]
platform = atmelavr
framework = arduino
board = 168pa8m
# enable auto-uploading
targets = upload
3. :ref: `platform_atmelavr` : Raspduino 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-11 12:20:08 +03:00
[env:atmelavr_raspduino_board]
platform = atmelavr
framework = arduino
board = raspduino
upload_port = /dev/ttyS0
2014-08-09 16:31:20 +03:00
# enable auto-uploading
targets = upload
2014-08-11 12:20:08 +03:00
4. :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
2014-08-11 12:20:08 +03:00
# for Windows OS
# upload_port = COM3
2014-08-09 16:31:20 +03:00
upload_protocol = arduino
upload_speed = 19200
# enable auto-uploading
targets = upload
2014-12-19 19:53:25 +02:00
5. Upload firmware via USB programmer (USBasp) to :ref: `platform_atmelavr`
microcontrollers
.. code-block :: ini
[env:atmelavr_usbasp]
platform = atmelavr
framework = arduino
board = pro8MHzatmega328
upload_protocol = usbasp -B5
6. :ref: `platform_timsp430` : TI MSP430G2553 LaunchPad with auto pre-configured
2014-08-09 16:31:20 +03:00
`` board_* `` and `` upload_* `` options (use only `` board `` option) and Energia
Wiring-based Framework
2014-12-19 19:53:25 +02:00
.. code-block :: ini
2014-08-09 16:31:20 +03:00
[env:timsp430_g2553_launchpad]
platform = timsp430
framework = energia
board = lpmsp430g2553
2014-12-19 19:53:25 +02:00
7. :ref: `platform_timsp430` : Embedded board that is based on MSP430G2553 MCU
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
[env:timsp430_g2553_board]
platform = timsp430
board_mcu = msp430g2553
board_f_cpu = 16000000L
upload_protocol = rf2500
# enable auto-uploading
targets = upload
2014-12-19 19:53:25 +02:00
8. :ref: `platform_titiva` : TI Tiva C ARM Series TM4C123G LaunchPad with auto
2014-08-09 16:31:20 +03:00
pre-configured `` board_* `` and `` upload_* `` options (use only `` board ``
option) and Energia Wiring-based Framework
2014-12-19 19:53:25 +02:00
.. code-block :: ini
2014-08-09 16:31:20 +03:00
[env:titiva_tm4c1230c3pm_launchpad]
platform = titiva
framework = energia
board = lptm4c1230c3pm