Green Hills MULTI
-----------------

.. versionadded:: 3.3

.. versionadded:: 3.15
  Linux support.

Generates Green Hills MULTI project files (experimental, work-in-progress).

  The buildsystem has predetermined build-configuration settings that can be controlled
  via the :variable:`CMAKE_BUILD_TYPE` variable.

Platform Selection
^^^^^^^^^^^^^^^^^^

.. versionadded:: 3.13

The variable ``GHS_PRIMARY_TARGET`` can be used to select the target platform.

  | Sets ``primaryTarget`` entry in project file.

For example:

* ``cmake -G "Green Hills MULTI" -D GHS_PRIMARY_TARGET=ppc_integrity.tgt``

Otherwise the ``primaryTarget`` will be composed from the values of :variable:`CMAKE_GENERATOR_PLATFORM`
and ``GHS_TARGET_PLATFORM``. Defaulting to the value of ``arm_integrity.tgt``

* The :variable:`CMAKE_GENERATOR_PLATFORM` variable may be set, perhaps
  via the :manual:`cmake(1)` ``-A`` option.

  | Typical values of ``arm``, ``ppc``, ``86``, etcetera, are used.

* The variable ``GHS_TARGET_PLATFORM`` may be set, perhaps via the :manual:`cmake(1)`
  ``-D`` option.

  | Defaults to ``integrity``.
  | Usual values are ``integrity``, ``threadx``, ``uvelosity``, ``velosity``,
    ``vxworks``, ``standalone``.

For example:

* ``cmake -G "Green Hills MULTI"`` for ``arm_integrity.tgt``.
* ``cmake -G "Green Hills MULTI" -A 86`` for ``86_integrity.tgt``.
* ``cmake -G "Green Hills MULTI" -D GHS_TARGET_PLATFORM=standalone`` for ``arm_standalone.tgt``.
* ``cmake -G "Green Hills MULTI" -A ppc -D GHS_TARGET_PLATFORM=standalone`` for ``ppc_standalone.tgt``.

Toolset Selection
^^^^^^^^^^^^^^^^^

.. versionadded:: 3.13

The generator searches for the latest compiler or can be given a location to use.
``GHS_TOOLSET_ROOT`` is the directory that is checked for the latest compiler.

* The :variable:`CMAKE_GENERATOR_TOOLSET` option may be set, perhaps
  via the :manual:`cmake(1)` ``-T`` option, to specify the location of the toolset.
  Both absolute and relative paths are valid. Paths are relative to ``GHS_TOOLSET_ROOT``.

* The variable ``GHS_TOOLSET_ROOT`` may be set, perhaps via the :manual:`cmake(1)`
  ``-D`` option.

  | Root path for toolset searches and relative paths.
  | Defaults to ``C:/ghs`` in Windows or ``/usr/ghs`` in Linux.

For example, setting a specific compiler:

* ``cmake -G "Green Hills MULTI" -T comp_201754`` for ``/usr/ghs/comp_201754``.
* ``cmake -G "Green Hills MULTI" -T comp_201754 -D GHS_TOOLSET_ROOT=/opt/ghs`` for ``/opt/ghs/comp_201754``.
* ``cmake -G "Green Hills MULTI" -T /usr/ghs/comp_201554``
* ``cmake -G "Green Hills MULTI" -T C:/ghs/comp_201754``

For example, searching for latest compiler:

* ``cmake -G "Green Hills MULTI"`` for searching ``/usr/ghs``.
* ``cmake -G "Green Hills MULTI -D GHS_TOOLSET_ROOT=/opt/ghs"`` for searching ``/opt/ghs``.

.. note::
  The :variable:`CMAKE_GENERATOR_TOOLSET` should use CMake style paths.

OS and BSP Selection
^^^^^^^^^^^^^^^^^^^^

.. versionadded:: 3.3

Certain target platforms, like Integrity, require an OS.  The RTOS directory path
can be explicitly set using ``GHS_OS_DIR``.  Otherwise ``GHS_OS_ROOT`` will be
searched for the latest Integrity RTOS.

If the target platform, like Integrity, requires a BSP name then it can be set via
the ``GHS_BSP_NAME`` variable.

* ``GHS_OS_DIR`` and ``GHS_OS_DIR_OPTION``

  | Sets ``-os_dir`` entry in project file.

  | ``GHS_OS_DIR_OPTION`` default value is ``-os_dir``.

  .. versionadded:: 3.15
    The ``GHS_OS_DIR_OPTION`` variable.

  For example:

  * ``cmake -G "Green Hills MULTI" -D GHS_OS_DIR=/usr/ghs/int1144``

* ``GHS_OS_ROOT``

  | Root path for RTOS searches.
  | Defaults to ``C:/ghs`` in Windows or ``/usr/ghs`` in Linux.

  For example:

  * ``cmake -G "Green Hills MULTI" -D GHS_OS_ROOT=/opt/ghs``

* ``GHS_BSP_NAME``

  | Sets ``-bsp`` entry in project file.
  | Defaults to ``sim<arch>`` for ``integrity`` platforms.

  For example:

  * ``cmake -G "Green Hills MULTI"`` for ``simarm`` on ``arm_integrity.tgt``.
  * ``cmake -G "Green Hills MULTI" -A 86`` for ``sim86`` on ``86_integrity.tgt``.
  * ``cmake -G "Green Hills MULTI" -A ppc -D GHS_BSP_NAME=sim800`` for ``sim800``
    on ``ppc_integrity.tgt``.
  * ``cmake -G "Green Hills MULTI" -D GHS_PRIMARY_TARGET=ppc_integrity.tgt -D GHS_BSP_NAME=fsl-t1040``
    for ``fsl-t1040`` on ``ppc_integrity.tgt``.

Target Properties
^^^^^^^^^^^^^^^^^

.. versionadded:: 3.14

The following properties are available:

* :prop_tgt:`GHS_INTEGRITY_APP`
* :prop_tgt:`GHS_NO_SOURCE_GROUP_FILE`

MULTI Project Variables
^^^^^^^^^^^^^^^^^^^^^^^

.. versionadded:: 3.3

Adding a Customization file and macros are available through the use of the following
variables:

* ``GHS_CUSTOMIZATION`` - CMake path name to Customization File.
* ``GHS_GPJ_MACROS`` - CMake list of Macros.

.. note::
  This generator is deemed experimental as of CMake |release|
  and is still a work in progress.  Future versions of CMake
  may make breaking changes as the generator matures.
