.. _build:
Building
========
If not stated otherwise, you can obtain a copy of the code at
https://github.com/anabrid/lucidac-firmware/. Building the code is as simple
as typing ``pio run`` in your shell at the root directory of the
repository. PlatformIO automatically installs all the dependencies.
The following section will introduce into PlatformIO.
.. _pio:
Working with PlatformIO
-----------------------
This code is using the `PlatformIO `_ ecosystem
(in short *pio*)
and is based on the Arduino API port for the Teensy Microcontroller,
called `Teensyduino `_.
Thanks to PlatformIO, it is *not* neccessary to install Arduino or Teensy
tools manually. All this is done by PlatformIO and this way works the same,
regardless whether you work on Mac, Windows or Linux, in a terminal or in
your favourite IDE.
There are many ways to install PlatformIO. Generally, it is suggested not
to use theversion bundled with your systems package repository
(such as ``apt install platformio``) but installing the most recent version
with ``pip install platformio``.
You can also follow the official reference at
at ttps://docs.platformio.org/en/latest/core/installation/methods/installer-script.html#installation-installer-script. For the VSCode IDE integration, see
https://docs.platformio.org/en/latest/integration/ide/vscode.html
.. note::
If you are using old versions of PlatformIO, spurious errors messages
can occur such as ``error detected unknown package``. Updating the PlatformIO
core can solve such problems.
When you start with ``pio``, make sure to *always* run it from the root directory of this repository,
otherwise you will get errors ("not a platformio project", ...)
.. _pioenv:
Environments
------------
PlatformIO supports different build configurations, which are called *environments*.
This concept is used in differnet ways: First and foremost, we differentiate between
``native`` and ``teensy41`` environments. The ``teensy41`` environment builds a proper
firmware image while the native environment builds the firmware
in the host CPU architecture which is only suitable for simulation and testing/debugging of certain
subsystems.
Furthermore, the environment concept can be used for choosing different firmware uploader
such as *tycmd* (https://koromix.dev/tytools).
.. note::
Unfortunately, the environment concept is not orthogonal (independent) to other concepts.
For instance, certain unit tests work only in the native environment or only in the
teensy environment.
Linux-relevant hints for Teensy via USB
---------------------------------------
See :ref:`udev`.
Sometimes this still doesn't work and you have to prepend ``pio`` calls that upload with ``sudo``. If this doesn't
work because you have PlatformIO installed as a user and not system-wide, you can use ``sudo -E env pio ...``
in order to export/expose your python environment to the sudo call.