aboutsummaryrefslogtreecommitdiff
path: root/targets/demo/CMakeLists.txt
blob: a1ba620939413e42c6c75f1c650271c3375fb0a6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#
# Copyright (c) 2022 Arm Limited.
#
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the License); you may
# not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an AS IS BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

#############################################################################
# Paths
#############################################################################

set(CORE_PLATFORM_PATH "${CMAKE_CURRENT_SOURCE_DIR}/<TODO>/core_platform" CACHE PATH "Path to Core Platform")

#############################################################################
# Default toolchain
#############################################################################

set(TARGET_CPU "<TODO e.g. cortex-m55>" CACHE STRING "Target CPU")

if (NOT CMAKE_TOOLCHAIN_FILE)
    # TODO Select default toolchain
    #   - Arm Clang: ${CORE_PLATFORM_PATH}/cmake/toolchain/armclang.cmake
    #   - GCC      : ${CORE_PLATFORM_PATH}/cmake/toolchain/arm-none-eabi-gcc.cmake
    #   - Else     : Implement your own toolchain file
    set(CMAKE_TOOLCHAIN_FILE "${CORE_PLATFORM_PATH}/cmake/toolchain/armclang.cmake")
endif()

#############################################################################
# Default configuration
#############################################################################

get_filename_component(ETHOSU_TARGET ${CMAKE_CURRENT_SOURCE_DIR} NAME)
message("Configuring target ${ETHOSU_TARGET}")

set(ETHOSU_TARGET_NPU_CONFIG "<TODO> e.g. ethos-u65-256" CACHE STRING "NPU configuration")
set(ETHOSU_TARGET_NPU_COUNT 1 CACHE INTERNAL "Number of NPUs")
set(ETHOSU_TARGET_NPU_TA_COUNT 0 CACHE INTERNAL "Number of timing adapters per NPU")

# Fast memory size
# If the TFLM model and arena are placed in Flash/DRAM, and if the NPU is Ethos-U65,
# then a smaller fast memory buffer can be placed in SRAM. This is called 'spilling'.
set(FAST_MEMORY_SIZE 0 CACHE STRING "Size of relocated fast memory scratch tensor")
set(MEMORY_MODEL "sram" CACHE STRING "Memory config for model")
set(MEMORY_ARENA "sram" CACHE STRING "Memory config for arena")

# UART settings
set(UART0_BASE "<TODO>" CACHE INTERNAL "UART base address")
set(UART0_BAUDRATE "<TODO e.g. 115200>" CACHE INTERNAL "UART baudrate, N/A for model and juno")
set(SYSTEM_CORE_CLOCK "<TODO e.g. 25000000>" CACHE INTERNAL "System core clock (Hz)")

#############################################################################
# Project
#############################################################################

cmake_minimum_required(VERSION 3.21)

project(ethos-u-demo VERSION 0.0.1)

include(${CORE_PLATFORM_PATH}/cmake/helpers.cmake)

#############################################################################
# Target
#############################################################################

# Include common target
add_subdirectory(${CORE_PLATFORM_PATH}/targets/common core_platform/target/common)

# Include drivers
add_subdirectory(../../drivers drivers)

# Common defines
target_compile_definitions(ethosu_target_common INTERFACE
    # Configure NPU architecture and number of timing adapters
    ETHOSU_NPU_COUNT=${ETHOSU_TARGET_NPU_COUNT}
    ETHOSU_NPU_TA_COUNT=${ETHOSU_TARGET_NPU_TA_COUNT}

    # Placement or TLFu model and area. 0 = SRAM, 1 = DRAM
    # The scatter file and linker script must be designed to switch on these defines
    ETHOSU_FAST_MEMORY_SIZE=${FAST_MEMORY_SIZE}
    ETHOSU_MODEL=$<STREQUAL:${MEMORY_MODEL},dram>
    ETHOSU_ARENA=$<STREQUAL:${MEMORY_ARENA},dram>)

# Linker script
set(LINK_FILE platform CACHE STRING "Link file")

ethosu_target_link_options(ethosu_target_link INTERFACE
    LINK_FILE ${LINK_FILE}
    ENTRY Reset_Handler)

target_sources(ethosu_target_startup INTERFACE
    retarget.c
    target.cpp)

target_link_libraries(ethosu_target_startup INTERFACE
    $<$<TARGET_EXISTS:ethosu_core_driver>:ethosu_core_driver>
    # TODO customize which libraries to include
    mpu
    ethosu_mhu_dummy
    ethosu_uart_cmsdk_apb)

if (TARGET ethosu_core_driver)
    target_compile_definitions(ethosu_core_driver PUBLIC
        ETHOSU

        # The TFLM arena is accessed over base address 1. The region config
        # controls if the memory transactions are routed over AXI 0 (region config
        # 0 or 1) or AXI 1 (region config 2 or 3).
        NPU_REGIONCFG_1=$<if:$<STREQUAL:${MEMORY_ARENA},dram>,0,2>)
endif()

###############################################################################
# CTest
###############################################################################

# TODO Uncomment to enable ctest
# include(CTest)

# Uncomment if Python interpreter is needed
#set(Python3_FIND_STRATEGY LOCATION)
#find_package(Python3 COMPONENTS Interpreter)

# TODO Uncomment if ETHOSU_ARCH and ETHOSU_NUM_MACS are needed
# ethosu_get_architecture(${ETHOSU_TARGET_NPU_CONFIG})

set(ETHOSU_COMMAND_DEFAULT <TODO test command> CACHE INTERNAL "Default test command")

###############################################################################
# Applications
###############################################################################

add_subdirectory(${CORE_PLATFORM_PATH}/applications core_platform/applications)
add_subdirectory(../../applications applications)