.. include:: ../../../../exports/alias.include
.. include:: ../../../../exports/roles.include
.. _developer_manual_installation_sources_windows:
#################################
Windows installation from sources
#################################
Sub-packages
============
The |amlip| is constituted of several sub-packages.
Depending on the use of those packages, some or all of them must be built.
These are the packages of |amlip| and the dependencies between them:
.. list-table::
:header-rows: 1
* - Sub-package
- Description
- Depends on
* - |amlip_cpp|
- Main C++ library with the implementation and API to create |amlip| Nodes.
-
* - |amlip_swig|
- Project to auto-generate a Python library from |amlip_cpp|.
- |amlip_cpp|
* - |amlip_py|
- Main Python library with API to create AML-IP Nodes.
- |amlip_swig|
* - |amlip_docs|
- Sphinx documentation project.
-
Dependencies
============
The installation of |eamlip| in a Windows environment from sources requires the following tools to be
installed in the system:
* :ref:`windows_sources_visual_studio`
* :ref:`windows_sources_chocolatey`
* :ref:`windows_sources_cmake_pip3_wget_git`
* :ref:`windows_sources_asiotinyxml2`
* :ref:`windows_sources_openssl`
* :ref:`windows_sources_yamlcpp`
* :ref:`windows_sources_colcon_install` [optional]
* :ref:`windows_sources_gtest` [for test only]
* :ref:`windows_sources_eprosima_dependencies`
.. _windows_sources_visual_studio:
Visual Studio
^^^^^^^^^^^^^
`Visual Studio `_ is required to
have a C++ compiler in the system. For this purpose, make sure to check the
:code:`Desktop development with C++` option during the Visual Studio installation process.
If Visual Studio is already installed but the Visual C++ Redistributable packages are not,
open Visual Studio and go to :code:`Tools` -> :code:`Get Tools and Features` and in the :code:`Workloads` tab enable
:code:`Desktop development with C++`. Finally, click :code:`Modify` at the bottom right.
.. _windows_sources_chocolatey:
Chocolatey
^^^^^^^^^^
Chocolatey is a Windows package manager. It is needed to install some of |eamlip|'s dependencies.
Download and install it directly from the `website `_.
.. _windows_sources_cmake_pip3_wget_git:
CMake, pip3, wget and git
^^^^^^^^^^^^^^^^^^^^^^^^^
These packages provide the tools required to install |eamlip| and its dependencies from command line.
Download and install CMake_, pip3_, wget_ and git_ by following the instructions detailed in the respective
websites.
Once installed, add the path to the executables to the :code:`PATH` from the
*Edit the system environment variables* control panel.
.. _windows_sources_asiotinyxml2:
Asio and TinyXML2 libraries
^^^^^^^^^^^^^^^^^^^^^^^^^^^
Asio is a cross-platform C++ library for network and low-level I/O programming, which provides a consistent
asynchronous model.
TinyXML2 is a simple, small and efficient C++ XML parser.
They can be downloaded directly from the links below:
* `Asio `_
* `TinyXML2 `_
After downloading these packages, open an administrative shell with *PowerShell* and execute the following command:
.. code-block:: bash
choco install -y -s asio tinyxml2
where :code:`` is the folder into which the packages have been downloaded.
.. _windows_sources_openssl:
OpenSSL
^^^^^^^
OpenSSL_ is a robust toolkit for the TLS and SSL protocols and a general-purpose cryptography library.
Download and install the latest OpenSSL version for Windows at this
`link `_.
After installing, add the environment variable :code:`OPENSSL_ROOT_DIR` pointing to the installation root directory.
For example:
.. code-block:: bash
OPENSSL_ROOT_DIR=C:\Program Files\OpenSSL-Win64
.. _windows_sources_yamlcpp:
yaml-cpp
^^^^^^^^
yaml-cpp is a YAML parser and emitter in C++ matching the YAML 1.2 spec, and is used by *DDS Router* application to parse the provided configuration files.
From an administrative shell with *PowerShell*, execute the following commands in order to download and install yaml-cpp_ for Windows:
.. code-block:: bash
git clone --branch yaml-cpp-0.7.0 https://github.com/jbeder/yaml-cpp
cmake -DCMAKE_INSTALL_PREFIX='C:\Program Files\yamlcpp' -B build\yamlcpp yaml-cpp
cmake --build build\yamlcpp --target install # If building in Debug mode, add --config Debug
.. _windows_sources_swig:
SWIG
^^^^
SWIG is a software development tool that connects programs written in C and C++ with a variety of high-level programming languages.
In this project, it is used to wrap |amlip_cpp| C++ API to generate a Python library.
Install SWIG_ using the package manager of the appropriate Linux distribution.
For example, on Ubuntu use the command:
.. code-block:: bash
choco install swig --allow-downgrade --version=4.0.2.04082020
.. _windows_sources_colcon_install:
Colcon
^^^^^^
colcon_ is a command line tool based on CMake_ aimed at building sets of software packages.
Install the ROS 2 development tools (colcon_ and vcstool_) by executing the following command:
.. code-block:: bash
pip3 install -U colcon-common-extensions vcstool
.. note::
If this fails due to an Environment Error, add the :code:`--user` flag to the :code:`pip3` installation command.
.. _windows_sources_gtest:
Gtest
^^^^^
Gtest is a unit testing library for C++.
By default, |ddsrouter| does not compile tests.
It is possible to activate them with the opportune
`CMake options `_
when calling colcon_ or CMake_.
For more details, please refer to the :ref:`cmake_options` section.
Run the following commands on your workspace to install Gtest.
.. code-block:: bash
git clone https://github.com/google/googletest.git
cmake -DCMAKE_INSTALL_PREFIX='C:\Program Files\gtest' -Dgtest_force_shared_crt=ON -DBUILD_GMOCK=ON ^
-B build\gtest -A x64 -T host=x64 googletest
cmake --build build\gtest --config Release --target install
or refer to the
`Gtest Installation Guide `_ for a detailed description of the Gtest installation
process.
.. _windows_sources_eprosima_dependencies:
eProsima dependencies
^^^^^^^^^^^^^^^^^^^^^
These are the eProsima libraries required for building |amlip|:
- ``foonathan_memory_vendor``, an STL compatible C++ memory allocation library.
- ``fastcdr``, a C++ library that serializes according to the standard CDR serialization mechanism.
- ``fastrtps``, the core library of eProsima Fast DDS library.
- ``cmake_utils``, an eProsima utilities library for CMake.
- ``cpp_utils``, an eProsima utilities library for C++.
- ``ddsrouter_core``, the eProsima DDS Router library C++.
If it already exists in the system an installation of these libraries there is no need to build them again,
just source them when building the |amlip|.
If using CMake_, add the already libraries installation paths to :code:`PATH`.
If using colcon_, use the following command to source them:
.. code-block:: bash
source /install/setup.bat
Installation methods
====================
There are two main possibilities to build |amlip| from sources in Windows.
One of them uses CMake_ and the other colcon_, an auto-build framework.
.. note::
**Colcon version is advised for non advanced users as it is easier and neater.**
.. toctree::
:maxdepth: 1
Colcon
CMake
.. External links
.. _colcon: https://colcon.readthedocs.io/en/released/
.. _CMake: https://cmake.org
.. _pip3: https://docs.python.org/3/installing/index.html
.. _wget: https://www.gnu.org/software/wget/
.. _git: https://git-scm.com/
.. _OpenSSL: https://www.openssl.org/
.. _Gtest: https://github.com/google/googletest
.. _vcstool: https://pypi.org/project/vcstool/
.. _SWIG: https://www.swig.org/
.. _yaml-cpp: https://github.com/jbeder/yaml-cpp