xref: /aosp_15_r20/external/executorch/examples/cadence/CMakeLists.txt (revision 523fa7a60841cd1ecfb9cc4201f1ca8b03ed023a)
1# Copyright (c) Meta Platforms, Inc. and affiliates.
2# All rights reserved.
3#
4# This source code is licensed under the BSD-style license found in the
5# LICENSE file in the root directory of this source tree.
6
7# Set the minimum required version of CMake for this project.
8cmake_minimum_required(VERSION 3.10)
9
10if(NOT CMAKE_CXX_STANDARD)
11  set(CMAKE_CXX_STANDARD 17)
12endif()
13
14# Set the project name.
15project(cadence_executorch_example)
16
17# Source root directory for executorch.
18if(NOT EXECUTORCH_ROOT)
19  set(EXECUTORCH_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../..)
20endif()
21
22include(${EXECUTORCH_ROOT}/build/Utils.cmake)
23
24if(NOT PYTHON_EXECUTABLE)
25  resolve_python_executable()
26endif()
27
28# Let files say "include <executorch/path/to/header.h>".
29set(_common_include_directories ${EXECUTORCH_ROOT}/..)
30
31# Find prebuilt executorch lib
32find_package(executorch CONFIG REQUIRED)
33
34add_compile_options(
35  -DSDK_DEBUGCONSOLE=1
36  -DSERIAL_PORT_TYPE_UART=1
37  -DDEBUG_CONSOLE_RX_ENABLE=0
38  -DDEBUG
39  -DCPU_MIMXRT685SFVKB_dsp
40  -DMCUXPRESSO_SDK
41  -g
42  -O0
43  -Wall
44  -fsigned-char
45  -Wno-missing-braces
46  -fmessage-length=0
47  -DPRINTF_FLOAT_ENABLE=1
48)
49
50if(NOT DEFINED NXP_SDK_ROOT_DIR)
51  message(FATAL_ERROR "NXP_SDK_ROOT_DIR is not set")
52endif()
53
54# lint_cmake: -linelength
55set(SOURCES
56    ${NXP_SDK_ROOT_DIR}/components/lists/fsl_component_generic_list.c
57    ${NXP_SDK_ROOT_DIR}/components/uart/fsl_adapter_usart.c
58    ${NXP_SDK_ROOT_DIR}/devices/MIMXRT685S/drivers/fsl_clock.c
59    ${NXP_SDK_ROOT_DIR}/devices/MIMXRT685S/drivers/fsl_common.c
60    ${NXP_SDK_ROOT_DIR}/devices/MIMXRT685S/drivers/fsl_common_dsp.c
61    ${NXP_SDK_ROOT_DIR}/devices/MIMXRT685S/drivers/fsl_flexcomm.c
62    ${NXP_SDK_ROOT_DIR}/devices/MIMXRT685S/drivers/fsl_gpio.c
63    ${NXP_SDK_ROOT_DIR}/devices/MIMXRT685S/drivers/fsl_mu.c
64    ${NXP_SDK_ROOT_DIR}/devices/MIMXRT685S/drivers/fsl_reset.c
65    ${NXP_SDK_ROOT_DIR}/devices/MIMXRT685S/drivers/fsl_usart.c
66    ${NXP_SDK_ROOT_DIR}/devices/MIMXRT685S/system_MIMXRT685S_dsp.c
67    ${NXP_SDK_ROOT_DIR}/devices/MIMXRT685S/utilities/debug_console_lite/fsl_assert.c
68    ${NXP_SDK_ROOT_DIR}/devices/MIMXRT685S/utilities/debug_console_lite/fsl_debug_console.c
69    ${NXP_SDK_ROOT_DIR}/boards/evkmimxrt685/dsp_examples/mu_polling/dsp/board_hifi4.c
70    ${NXP_SDK_ROOT_DIR}/boards/evkmimxrt685/dsp_examples/mu_polling/dsp/pin_mux.c
71    ${NXP_SDK_ROOT_DIR}/devices/MIMXRT685S/utilities/str/fsl_str.c
72)
73
74add_library(dsp_mu_polling_libs STATIC ${SOURCES})
75
76target_include_directories(
77  dsp_mu_polling_libs
78  PUBLIC ${NXP_SDK_ROOT_DIR}
79         ${NXP_SDK_ROOT_DIR}/components/uart
80         ${NXP_SDK_ROOT_DIR}/devices/MIMXRT685S/drivers
81         ${NXP_SDK_ROOT_DIR}/devices/MIMXRT685S/utilities/debug_console_lite
82         ${NXP_SDK_ROOT_DIR}/components/lists
83         ${NXP_SDK_ROOT_DIR}/devices/MIMXRT685S
84         ${NXP_SDK_ROOT_DIR}/CMSIS/Core/Include
85         ${NXP_SDK_ROOT_DIR}/devices/MIMXRT685S/utilities/str
86         ${NXP_SDK_ROOT_DIR}/boards/evkmimxrt685/dsp_examples/mu_polling/dsp
87)
88
89add_library(extension_runner_util STATIC IMPORTED)
90set_property(
91  TARGET extension_runner_util
92  PROPERTY
93    IMPORTED_LOCATION
94    "${CMAKE_CURRENT_LIST_DIR}/../../cmake-out/extension/runner_util/libextension_runner_util.a"
95)
96
97add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/hifi/operators)
98add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/hifi/kernels)
99
100# Generate the model header file
101add_custom_command(
102  OUTPUT ${CMAKE_BINARY_DIR}/model_pte.h
103  COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_LIST_DIR}/utils/gen_header.py
104          --model_path ${MODEL_PATH} --header_output_path ${CMAKE_BINARY_DIR}
105  COMMENT "Converting .pte model to header file..."
106  DEPENDS ${CMAKE_CURRENT_LIST_DIR}/utils/gen_header.py
107)
108
109add_custom_target(gen_model_header DEPENDS ${CMAKE_BINARY_DIR}/model_pte.h)
110
111add_executable(cadence_executorch_example executor_runner.cpp)
112add_dependencies(cadence_executorch_example gen_model_header)
113
114# lint_cmake: -linelength
115target_include_directories(
116  cadence_executorch_example PUBLIC ${ROOT_DIR}/.. ${CMAKE_BINARY_DIR}
117                                    ${_common_include_directories}
118)
119
120target_link_options(
121  cadence_executorch_example PRIVATE
122  -mlsp=${NXP_SDK_ROOT_DIR}/devices/MIMXRT685S/xtensa/min-rt
123)
124target_link_libraries(
125  cadence_executorch_example dsp_mu_polling_libs cadence_ops_lib
126  extension_runner_util executorch
127)
128
129add_custom_command(
130  TARGET cadence_executorch_example
131  POST_BUILD
132  COMMAND
133    ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_LIST_DIR}/utils/post_compilation.py
134    ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME} ${CMAKE_BINARY_DIR}
135  COMMENT
136    "Generating .bin files that can be used to flash the DSP with. Copy over
137    the dsp_text_release.bin and dsp_data_release.bin that are generated into
138    your NXP MCUXpresso IDE workspace and flash the DSP with these binaries."
139    DEPENDS
140    ${CMAKE_CURRENT_LIST_DIR}/utils/post_compilation.py
141)
142