ARCMWDT: Add compiler support for nSIM RMX platform
Add MetaWare compiller support for nSIM RMX platform Signed-off-by: Nikolay Agishev <agishev@synopsys.com>
This commit is contained in:
parent
85ae583f45
commit
efedf1cff3
6 changed files with 84 additions and 6 deletions
|
@ -39,7 +39,7 @@ either `DesignWare ARC nSIM`_ or `DesignWare ARC Free nSIM`_ is required.
|
||||||
Building & Running Sample Applications
|
Building & Running Sample Applications
|
||||||
======================================
|
======================================
|
||||||
|
|
||||||
Most board targets support building with GNU toolchains, however
|
Most board targets support building with both GNU and ARC MWDT toolchains, however
|
||||||
there might be exceptions from that, especially for newly added targets. You can check supported
|
there might be exceptions from that, especially for newly added targets. You can check supported
|
||||||
toolchains for the board targets in the corresponding ``.yaml`` file.
|
toolchains for the board targets in the corresponding ``.yaml`` file.
|
||||||
|
|
||||||
|
@ -54,7 +54,12 @@ The supported toolchains are listed in ``toolchain:`` array in ``.yaml`` file, w
|
||||||
``zephyr`` toolchain support because corresponding target CPU support hasn't been added to Zephyr
|
``zephyr`` toolchain support because corresponding target CPU support hasn't been added to Zephyr
|
||||||
SDK yet. You can find more information about its usage here: :ref:`here <other_x_compilers>`.
|
SDK yet. You can find more information about its usage here: :ref:`here <other_x_compilers>`.
|
||||||
* **arcmwdt** - implies proprietary ARC MWDT toolchain. You can find more information about its
|
* **arcmwdt** - implies proprietary ARC MWDT toolchain. You can find more information about its
|
||||||
usage here: :ref:`here <toolchain_designware_arc_mwdt>`. Not yet supported: work in progress.
|
usage here: :ref:`here <toolchain_designware_arc_mwdt>`.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
Note that even if both GNU and MWDT toolchain support is declared for the target some tests or
|
||||||
|
samples can be only built with either GNU or MWDT toolchain due to some features limited to a
|
||||||
|
particular toolchain.
|
||||||
|
|
||||||
Use this configuration to run basic Zephyr applications and kernel tests in
|
Use this configuration to run basic Zephyr applications and kernel tests in
|
||||||
nSIM, for example, with the :zephyr:code-sample:`synchronization` sample:
|
nSIM, for example, with the :zephyr:code-sample:`synchronization` sample:
|
||||||
|
@ -134,7 +139,7 @@ new one it's required to maintain alignment between
|
||||||
|
|
||||||
* Zephyr OS configuration
|
* Zephyr OS configuration
|
||||||
* nSIM configuration
|
* nSIM configuration
|
||||||
* GNU toolchain compiler options
|
* GNU & MWDT toolchain compiler options
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
The ``.tcf`` configuration files are not supported by Zephyr directly. There are multiple
|
The ``.tcf`` configuration files are not supported by Zephyr directly. There are multiple
|
||||||
|
@ -170,7 +175,7 @@ exceptions:
|
||||||
* The UART model is added
|
* The UART model is added
|
||||||
* CLINT model is added
|
* CLINT model is added
|
||||||
|
|
||||||
GNU toolchain compiler options
|
GNU & MWDT toolchain compiler options
|
||||||
=====================================
|
=====================================
|
||||||
|
|
||||||
The hardware-specific compiler options are set in corresponding SoC cmake file. For ``nsim_arc_v`` board
|
The hardware-specific compiler options are set in corresponding SoC cmake file. For ``nsim_arc_v`` board
|
||||||
|
|
|
@ -7,6 +7,7 @@ arch: riscv
|
||||||
toolchain:
|
toolchain:
|
||||||
- zephyr
|
- zephyr
|
||||||
- cross-compile
|
- cross-compile
|
||||||
|
- arcmwdt
|
||||||
testing:
|
testing:
|
||||||
ignore_tags:
|
ignore_tags:
|
||||||
- net
|
- net
|
||||||
|
|
|
@ -180,7 +180,11 @@ set_compiler_property(PROPERTY security_fortify_compile_time)
|
||||||
set_compiler_property(PROPERTY security_fortify_run_time)
|
set_compiler_property(PROPERTY security_fortify_run_time)
|
||||||
|
|
||||||
# Required C++ flags when using mwdt
|
# Required C++ flags when using mwdt
|
||||||
set_property(TARGET compiler-cpp PROPERTY required "-Hcplus" "-Hoff=Stackcheck_alloca")
|
set_property(TARGET compiler-cpp PROPERTY required "-Hcplus" )
|
||||||
|
|
||||||
|
if(CONFIG_ARC)
|
||||||
|
set_property(TARGET compiler-cpp PROPERTY required "-Hoff=Stackcheck_alloca")
|
||||||
|
endif()
|
||||||
|
|
||||||
# Compiler flag for turning off thread-safe initialization of local statics
|
# Compiler flag for turning off thread-safe initialization of local statics
|
||||||
set_property(TARGET compiler-cpp PROPERTY no_threadsafe_statics "-fno-threadsafe-statics")
|
set_property(TARGET compiler-cpp PROPERTY no_threadsafe_statics "-fno-threadsafe-statics")
|
||||||
|
|
|
@ -30,7 +30,11 @@ set(NOSTDINC ${TOOLCHAIN_HOME}/arc/inc)
|
||||||
|
|
||||||
# common compile options, no copyright msg, little-endian, no small data,
|
# common compile options, no copyright msg, little-endian, no small data,
|
||||||
# no MWDT stack checking
|
# no MWDT stack checking
|
||||||
list(APPEND TOOLCHAIN_C_FLAGS -Hnocopyr -HL -Hnosdata -Hoff=Stackcheck_alloca)
|
list(APPEND TOOLCHAIN_C_FLAGS -Hnocopyr -HL -Hnosdata)
|
||||||
|
|
||||||
|
if(CONFIG_ARC)
|
||||||
|
list(APPEND TOOLCHAIN_C_FLAGS -Hoff=Stackcheck_alloca)
|
||||||
|
endif()
|
||||||
|
|
||||||
# The MWDT compiler can replace some code with call to builtin functions.
|
# The MWDT compiler can replace some code with call to builtin functions.
|
||||||
# We can't rely on these functions presence if we don't use MWDT libc.
|
# We can't rely on these functions presence if we don't use MWDT libc.
|
||||||
|
@ -39,3 +43,9 @@ list(APPEND TOOLCHAIN_C_FLAGS -Hnocopyr -HL -Hnosdata -Hoff=Stackcheck_alloca)
|
||||||
if(NOT CONFIG_ARCMWDT_LIBC)
|
if(NOT CONFIG_ARCMWDT_LIBC)
|
||||||
list(APPEND TOOLCHAIN_C_FLAGS -fno-builtin)
|
list(APPEND TOOLCHAIN_C_FLAGS -fno-builtin)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# The MWDT compiler requires different macro definitions for ARC and RISC-V
|
||||||
|
# architectures. __MW_ASM_RV_MACRO__ allows to select appropriate compilation branch.
|
||||||
|
if(CONFIG_RISCV)
|
||||||
|
list(APPEND TOOLCHAIN_C_FLAGS -D__MW_ASM_RV_MACRO__)
|
||||||
|
endif()
|
||||||
|
|
|
@ -20,6 +20,26 @@
|
||||||
#define FUNC_CODE()
|
#define FUNC_CODE()
|
||||||
#define FUNC_INSTR(a)
|
#define FUNC_INSTR(a)
|
||||||
|
|
||||||
|
#ifdef __MW_ASM_RV_MACRO__
|
||||||
|
.macro section_var_mwdt, section, symbol
|
||||||
|
.section \section().\symbol, "aw"
|
||||||
|
\symbol :
|
||||||
|
.endm
|
||||||
|
|
||||||
|
.macro section_func_mwdt, section, symbol
|
||||||
|
.section \section().\symbol, "ax"
|
||||||
|
FUNC_CODE()
|
||||||
|
PERFOPT_ALIGN
|
||||||
|
\symbol :
|
||||||
|
FUNC_INSTR(symbol)
|
||||||
|
.endm
|
||||||
|
|
||||||
|
.macro section_subsec_func_mwdt, section, subsection, symbol
|
||||||
|
.section \section().\subsection, "ax"
|
||||||
|
PERFOPT_ALIGN
|
||||||
|
\symbol :
|
||||||
|
.endm
|
||||||
|
#else
|
||||||
.macro section_var_mwdt, section, symbol
|
.macro section_var_mwdt, section, symbol
|
||||||
.section .\§ion\&.\&symbol, "aw"
|
.section .\§ion\&.\&symbol, "aw"
|
||||||
symbol :
|
symbol :
|
||||||
|
@ -38,12 +58,34 @@
|
||||||
PERFOPT_ALIGN
|
PERFOPT_ALIGN
|
||||||
symbol :
|
symbol :
|
||||||
.endm
|
.endm
|
||||||
|
#endif /* __MW_ASM_RV_MACRO__ */
|
||||||
|
|
||||||
#define SECTION_VAR(sect, sym) section_var_mwdt sect, sym
|
#define SECTION_VAR(sect, sym) section_var_mwdt sect, sym
|
||||||
#define SECTION_FUNC(sect, sym) section_func_mwdt sect, sym
|
#define SECTION_FUNC(sect, sym) section_func_mwdt sect, sym
|
||||||
#define SECTION_SUBSEC_FUNC(sect, subsec, sym) \
|
#define SECTION_SUBSEC_FUNC(sect, subsec, sym) \
|
||||||
section_subsec_func_mwdt sect, subsec, sym
|
section_subsec_func_mwdt sect, subsec, sym
|
||||||
|
|
||||||
|
#ifdef __MW_ASM_RV_MACRO__
|
||||||
|
.macro glbl_text_mwdt, symbol
|
||||||
|
.globl \symbol
|
||||||
|
.type \symbol, @function
|
||||||
|
.endm
|
||||||
|
|
||||||
|
.macro glbl_data_mwdt, symbol
|
||||||
|
.globl \symbol
|
||||||
|
.type \symbol, @object
|
||||||
|
.endm
|
||||||
|
|
||||||
|
.macro weak_data_mwdt, symbol
|
||||||
|
.weak \symbol
|
||||||
|
.type \symbol, @object
|
||||||
|
.endm
|
||||||
|
|
||||||
|
.macro weak_text_mwdt, symbol
|
||||||
|
.weak \symbol
|
||||||
|
.type \symbol, @function
|
||||||
|
.endm
|
||||||
|
#else
|
||||||
.macro glbl_text_mwdt, symbol
|
.macro glbl_text_mwdt, symbol
|
||||||
.globl symbol
|
.globl symbol
|
||||||
.type symbol, @function
|
.type symbol, @function
|
||||||
|
@ -59,9 +101,16 @@
|
||||||
.type symbol, @object
|
.type symbol, @object
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
|
.macro weak_text_mwdt, symbol
|
||||||
|
.weak symbol
|
||||||
|
.type symbol, @function
|
||||||
|
.endm
|
||||||
|
#endif /* __MW_ASM_RV_MACRO__ */
|
||||||
|
|
||||||
#define GTEXT(sym) glbl_text_mwdt sym
|
#define GTEXT(sym) glbl_text_mwdt sym
|
||||||
#define GDATA(sym) glbl_data_mwdt sym
|
#define GDATA(sym) glbl_data_mwdt sym
|
||||||
#define WDATA(sym) weak_data_mwdt sym
|
#define WDATA(sym) weak_data_mwdt sym
|
||||||
|
#define WTEXT(sym) weak_text_mwdt sym
|
||||||
|
|
||||||
#else /* defined(_ASMLANGUAGE) */
|
#else /* defined(_ASMLANGUAGE) */
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,12 @@
|
||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
if(COMPILER STREQUAL arcmwdt)
|
||||||
|
# CCAC:
|
||||||
|
zephyr_compile_options_ifdef(CONFIG_SOC_SERIES_RMX
|
||||||
|
-av5rmx -Zicsr -Zifencei -Zihintpause -Zba -Zbb
|
||||||
|
-Zbs -Zca -Zcb -Zcmp -Zcmt -Za -Zm -Zicbom)
|
||||||
|
|
||||||
|
zephyr_ld_options(-Hlib=rmx100)
|
||||||
|
endif()
|
||||||
|
|
||||||
set(SOC_LINKER_SCRIPT ${ZEPHYR_BASE}/include/zephyr/arch/riscv/common/linker.ld CACHE INTERNAL "")
|
set(SOC_LINKER_SCRIPT ${ZEPHYR_BASE}/include/zephyr/arch/riscv/common/linker.ld CACHE INTERNAL "")
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue