Skip to content

Commit 3b08b85

Browse files
author
Siyuan Cheng
committed
module: add embarc_mli_v2.0 module
Add embarc_mli_v2.0 module and linker script Signed-off-by: Siyuan Cheng <[email protected]>
1 parent 7603f65 commit 3b08b85

File tree

5 files changed

+161
-0
lines changed

5 files changed

+161
-0
lines changed

include/zephyr/arch/arc/v2/linker.ld

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,9 @@ SECTIONS {
179179

180180
GROUP_START(DATA_REGION)
181181

182+
#ifdef CONFIG_EMBARC_MLI
183+
#include "linker/../../../modules/embarc_mli/embarc_mli.ld"
184+
#endif
182185
SECTION_DATA_PROLOGUE(_DATA_SECTION_NAME,,) {
183186

184187
/* when XIP, .text is in ROM, but vector table must be at start of .data */

modules/embarc_mli/CMakeLists.txt

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# Copyright (c) 2022 Synopsys
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
if(CONFIG_EMBARC_MLI) # Zephyr-sdk is unavailable, please use mwdt
5+
if(DEFINED ENV{METAWARE_ROOT}) # If not to use prebuilt lib, add NOT
6+
set(EMBARC_MLI_DIR ${ZEPHYR_CURRENT_MODULE_DIR})
7+
set(EMBARC_MLI_INCLUDE_DIR ${EMBARC_MLI_DIR}/include ${EMBARC_MLI_DIR}/include/api)
8+
add_library(embarc_mli_lib STATIC IMPORTED GLOBAL)
9+
set_target_properties(embarc_mli_lib PROPERTIES IMPORTED_LOCATION ${EMBARC_MLI_DIR}/prebuilt/libmli.a)
10+
target_include_directories(embarc_mli_lib INTERFACE ${EMBARC_MLI_INCLUDE_DIR})
11+
add_dependencies(zephyr_interface embarc_mli_lib)
12+
zephyr_link_libraries(embarc_mli_lib)
13+
else()
14+
set(EMBARC_MLI_DIR ${ZEPHYR_CURRENT_MODULE_DIR})
15+
set(EMBARC_MLI_INCLUDE_DIR ${EMBARC_MLI_DIR}/include ${EMBARC_MLI_DIR}/include/api)
16+
include(ExternalProject)
17+
ExternalProject_Add(
18+
embarc_mli_project # Name for custom target
19+
PREFIX ${EMBARC_MLI_DIR} # Root dir for entire project
20+
SOURCE_DIR ${EMBARC_MLI_DIR}
21+
BINARY_DIR ${EMBARC_MLI_DIR}/lib/make # This particular build system is invoked from the root
22+
CONFIGURE_COMMAND "" # Skip configuring the project, e.g. with autoconf
23+
BUILD_COMMAND
24+
gmake -C ${EMBARC_MLI_DIR}
25+
TCF_FILE=${EMBARC_MLI_DIR}/hw/arcem.tcf
26+
BUILD_DIR=${ZEPHYR_BINARY_DIR}/embarc_mli
27+
LIBRARY_DIR=${ZEPHYR_BINARY_DIR}/embarc_mli/bin
28+
JOBS=4
29+
lib
30+
INSTALL_COMMAND ""
31+
BUILD_BYPRODUCTS ${ZEPHYR_BINARY_DIR}/embarc_mli/bin/libmli.a
32+
)
33+
# Create a wrapper CMake library that our app can link with
34+
add_library(embarc_mli_lib STATIC IMPORTED GLOBAL)
35+
set_target_properties(embarc_mli_lib PROPERTIES IMPORTED_LOCATION ${ZEPHYR_BINARY_DIR}/embarc_mli/bin/libmli.a)
36+
target_include_directories(embarc_mli_lib INTERFACE ${EMBARC_MLI_INCLUDE_DIR})
37+
add_dependencies(zephyr_interface embarc_mli_lib)
38+
zephyr_link_libraries(embarc_mli_lib)
39+
endif()
40+
endif()

modules/embarc_mli/Kconfig

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# Copyright (c) 2022 Synopsys
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
config ZEPHYR_EMBARC_MLI_MODULE
5+
bool
6+
7+
config EMBARC_MLI
8+
bool "embarc_mli Support"
9+
help
10+
This option enables the embarc_mli library.

modules/embarc_mli/embarc_mli.ld

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
/*
2+
* Copyright (c) 2022 Synopsys
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
#ifndef EMBARC_MLI_ROM_REGION
8+
#define EMBARC_MLI_ROM_REGION ROMABLE_REGION
9+
#endif
10+
11+
#ifndef EMBARC_MLI_DATA_REGION
12+
#define EMBARC_MLI_DATA_REGION DCCM
13+
#endif
14+
15+
#ifndef EMBARC_MLI_BSS_REGION
16+
#define EMBARC_MLI_BSS_REGION DCCM
17+
#endif
18+
19+
#ifndef EMBARC_MLI_ZDATA_REGION
20+
#define EMBARC_MLI_ZDATA_REGION DCCM
21+
#endif
22+
23+
#ifndef EMBARC_MLI_MODEL_P2_REGION
24+
#define EMBARC_MLI_MODEL_P2_REGION DCCM
25+
#endif
26+
27+
#ifndef EMBARC_MLI_MODEL_REGION
28+
#define EMBARC_MLI_MODEL_REGION DCCM
29+
#endif
30+
31+
#ifndef EMBARC_MLI_XDATA_REGION
32+
#define EMBARC_MLI_XDATA_REGION XCCM
33+
#endif
34+
35+
#ifndef EMBARC_MLI_YDATA_REGION
36+
#define EMBARC_MLI_YDATA_REGION YCCM
37+
#endif
38+
39+
/DISCARD/ : {
40+
/*.arcextmap contains debug information not used by gnu */
41+
*libmli*.a:*(.arcextmap*)
42+
*libmli*.a:*(.debug_frame*)
43+
}
44+
45+
SECTION_PROLOGUE(embarc_mli_rom,,)
46+
{
47+
__embarc_mli_rom_start = .;
48+
*libmli*.a:*(.mli_lib*)
49+
*libmli*.a:*(.rodata .rodata.*)
50+
__embarc_mli_rom_end = .;
51+
} GROUP_DATA_LINK_IN(ROMABLE_REGION, ROMABLE_REGION)
52+
__embarc_mli_loadaddr_rom = LOADADDR(embarc_mli_rom);
53+
54+
SECTION_PROLOGUE(embarc_mli_model,,)
55+
{
56+
__embarc_mli_model_start = .;
57+
*(.mli_model .mli_model.*)
58+
__embarc_mli_model_end = .;
59+
} GROUP_DATA_LINK_IN(EMBARC_MLI_MODEL_REGION, ROMABLE_REGION)
60+
__embarc_mli_loadaddr_model = LOADADDR(embarc_mli_model);
61+
62+
SECTION_PROLOGUE(embarc_mli_model_p2,,)
63+
{
64+
__embarc_mli_model_p2_start = .;
65+
*(.mli_model_p2 .mli_model_p2.*)
66+
__embarc_mli_model_p2_end = .;
67+
} GROUP_DATA_LINK_IN(EMBARC_MLI_MODEL_P2_REGION, ROMABLE_REGION)
68+
__embarc_mli_loadaddr_model_p2 = LOADADDR(embarc_mli_model_p2);
69+
70+
SECTION_PROLOGUE(embarc_mli_data,,)
71+
{
72+
__embarc_mli_data_start = .;
73+
*libmli*.a:*(.data .data.*)
74+
*libmli*.a:*(.rodata_in_data .rodata_in_data.*)
75+
__embarc_mli_data_end = .;
76+
} GROUP_DATA_LINK_IN(EMBARC_MLI_DATA_REGION, ROMABLE_REGION)
77+
__embarc_mli_loadaddr_data = LOADADDR(embarc_mli_data);
78+
79+
SECTION_PROLOGUE(embarc_mli_zdata,,)
80+
{
81+
__embarc_mli_zdata_start = .;
82+
*(.Zdata*)
83+
__embarc_mli_zdata_end = .;
84+
} GROUP_DATA_LINK_IN(EMBARC_MLI_ZDATA_REGION, ROMABLE_REGION)
85+
__embarc_mli_loadaddr_zdata = LOADADDR(embarc_mli_zdata);
86+
87+
SECTION_PROLOGUE(embarc_mli_xdata,,)
88+
{
89+
__embarc_mli_xdata_start = .;
90+
*(.Xdata*)
91+
__embarc_mli_xdata_end = .;
92+
} GROUP_DATA_LINK_IN(EMBARC_MLI_XDATA_REGION, RAMABLE_REGION)
93+
__embarc_mli_loadaddr_xdata = LOADADDR(embarc_mli_xdata);
94+
95+
SECTION_PROLOGUE(embarc_mli_ydata,,)
96+
{
97+
__embarc_mli_ydata_start = .;
98+
*(.Ydata*)
99+
__embarc_mli_ydata_end = .;
100+
} GROUP_DATA_LINK_IN(EMBARC_MLI_YDATA_REGION, RAMABLE_REGION)
101+
__embarc_mli_loadaddr_ydata = LOADADDR(embarc_mli_ydata);

west.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ manifest:
2121
remotes:
2222
- name: upstream
2323
url-base: https://github.com/zephyrproject-rtos
24+
- name: embarc
25+
url-base: https://github.com/foss-for-synopsys-dwc-arc-processors
2426

2527
#
2628
# Please add items below based on alphabetical order
@@ -245,6 +247,11 @@ manifest:
245247
- name: zscilib
246248
path: modules/lib/zscilib
247249
revision: fc979a8dcb74169c69b02835927bff8f070d6325
250+
- name: embarc_mli
251+
remote: embarc
252+
repo-path: embarc_mli
253+
path: modules/lib/embarc_mli
254+
revision: 6551908b8ef0639f7059ab286108db3924e519b6
248255

249256
group-filter:
250257
- -ci

0 commit comments

Comments
 (0)