Back to Zephyr

Cadence Tensilica Xtensa C/C++ Compiler (XCC)

doc/develop/toolchains/cadence_xcc.rst

4.4.03.1 KB
Original Source

.. _toolchain_cadence_xcc:

Cadence Tensilica Xtensa C/C++ Compiler (XCC) #############################################

#. Obtain Tensilica Software Development Toolkit targeting the specific SoC on hand. This usually contains two parts:

  • The Xtensa Xplorer which contains the necessary executables and libraries.

  • A SoC-specific add-on to be installed on top of Xtensa Xplorer.

    • This add-on allows the compiler to generate code for the SoC on hand.

#. Install Xtensa Xplorer and then the SoC add-on.

  • Follow the instruction from Cadence on how to install the SDK.

  • Depending on the SDK, there are two set of compilers:

    • GCC-based compiler: xt-xcc and its friends.

    • Clang-based compiler: xt-clang and its friends.

#. Make sure you have obtained a license to use the SDK, or has access to a remote licensing server.

#. :ref:Set these environment variables <env_vars>:

  • Set :envvar:ZEPHYR_TOOLCHAIN_VARIANT to xcc or xt-clang.

  • Set :envvar:XTENSA_TOOLCHAIN_PATH to the toolchain installation directory.

  • There are two ways to specify the SoC ID and the SDK version to use. They are mutually exclusive, and cannot be used together.

    #. When building for a single SoC:

    • Set :envvar:XTENSA_CORE to the SoC ID where application is being targeted.
    • Set :envvar:TOOLCHAIN_VER to the Xtensa SDK version.

    #. When building for multiple SoCs, for each SoC and board combination:

    • Set :envvar:XTENSA_CORE_{normalized_board_target} to the SoC ID where application is being targeted.
    • Set :envvar:TOOLCHAIN_VAR_{normalized_board_target} to the Xtensa SDK version.

#. For example, assuming the SDK is installed in /opt/xtensa, and using the SDK for application development on intel_adsp/ace15_mtpm, setup the environment using the two above mentioned ways:

#. Single SoC:

  .. code-block:: console

     # Linux
     export ZEPHYR_TOOLCHAIN_VARIANT=xt-clang
     export XTENSA_TOOLCHAIN_PATH=/opt/xtensa/XtDevTools/install/tools/
     export XTENSA_CORE=ace10_LX7HiFi4_2022_10
     export TOOLCHAIN_VER=RI-2022.10-linux

#. Multiple SoCs:

  .. code-block:: console

     # Linux
     export ZEPHYR_TOOLCHAIN_VARIANT=xt-clang
     export XTENSA_TOOLCHAIN_PATH=/opt/xtensa/XtDevTools/install/tools/
     export TOOLCHAIN_VER_intel_adsp_ace15_mtpm=RI-2022.10-linux
     export XTENSA_CORE_intel_adsp_ace15_mtpm=ace10_LX7HiFi4_2022_10

#. To use Clang-based compiler:

  • Set :envvar:ZEPHYR_TOOLCHAIN_VARIANT to xt-clang.

  • Note that the Clang-based compiler may contain an old LLVM bug which results in the following error:

    .. code-block:: console

    /tmp/file.s: Assembler messages: /tmp/file.s:20: Error: file number 1 already allocated clang-3.9: error: Xtensa-as command failed with exit code 1

    If this happens, set :envvar:XCC_NO_G_FLAG to 1.

    • For example:

      .. code-block:: console

      Linux

      export XCC_NO_G_FLAG=1