xref: /aosp_15_r20/external/executorch/examples/mediatek/CMakeLists.txt (revision 523fa7a60841cd1ecfb9cc4201f1ca8b03ed023a)
1# Copyright (c) 2024 MediaTek Inc.
2#
3# Licensed under the BSD License (the "License"); you may not use this file
4# except in compliance with the License. See the license file in the root
5# directory of this source tree for more details.
6
7cmake_minimum_required(VERSION 3.19)
8project(mediatek_example)
9
10message(CMAKE_PREFIX_PATH: ${CMAKE_PREFIX_PATH})
11
12set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
13if(NOT CMAKE_CXX_STANDARD)
14  set(CMAKE_CXX_STANDARD 17)
15endif()
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)
23include(${EXECUTORCH_ROOT}/build/Codegen.cmake)
24
25if(NOT PYTHON_EXECUTABLE)
26  resolve_python_executable()
27endif()
28
29set(_common_compile_options -Wno-deprecated-declarations -fPIC)
30
31# Let files say "include <executorch/path/to/header.h>".
32set(_common_include_directories ${EXECUTORCH_ROOT}/..)
33
34#
35# The `_<target>_srcs` lists are defined by including ${EXECUTORCH_SRCS_FILE}.
36#
37set(EXECUTORCH_SRCS_FILE
38    "${CMAKE_CURRENT_BINARY_DIR}/../../executorch_srcs.cmake"
39)
40extract_sources(${EXECUTORCH_SRCS_FILE})
41include(${EXECUTORCH_SRCS_FILE})
42
43# Find prebuilt libraries. executorch package should contain portable_ops_lib,
44# etdump, bundled_program.
45find_package(executorch CONFIG REQUIRED)
46target_compile_options(executorch INTERFACE -DET_EVENT_TRACER_ENABLED)
47find_package(gflags REQUIRED)
48
49link_directories(${EXECUTORCH_ROOT}/cmake-android-out/lib)
50
51if(${ANDROID})
52  message("Build MTK Android Examples")
53
54  get_filename_component(
55    EXECUTORCH_SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../.." ABSOLUTE
56  )
57  set(_mtk_executor_runner__srcs ${_executor_runner__srcs})
58  list(TRANSFORM _mtk_executor_runner__srcs PREPEND "${EXECUTORCH_SOURCE_DIR}/")
59  list(FILTER _mtk_executor_runner__srcs EXCLUDE REGEX ".*executor_runner.cpp$")
60  list(PREPEND _mtk_executor_runner__srcs
61       ${CMAKE_CURRENT_LIST_DIR}/executor_runner/mtk_executor_runner.cpp
62  )
63
64  add_executable(mtk_executor_runner ${_mtk_executor_runner__srcs})
65
66  target_include_directories(
67    mtk_executor_runner
68    PUBLIC ${_common_include_directories}
69           ${EXECUTORCH_ROOT}/cmake-android-out/third-party/gflags/include
70  )
71
72  target_link_libraries(
73    mtk_executor_runner ${_executor_runner_libs} executorch neuron_backend
74    gflags
75  )
76  target_compile_options(mtk_executor_runner PUBLIC ${_common_compile_options})
77
78  set(_mtk_oss_executor_runner__srcs ${_executor_runner__srcs})
79  list(
80      TRANSFORM
81      _mtk_oss_executor_runner__srcs
82      PREPEND
83      "${EXECUTORCH_SOURCE_DIR}/"
84  )
85  list(
86      FILTER
87      _mtk_oss_executor_runner__srcs
88      EXCLUDE REGEX
89      ".*executor_runner.cpp$"
90  )
91  list(
92      PREPEND
93      _mtk_oss_executor_runner__srcs
94      ${CMAKE_CURRENT_LIST_DIR}/executor_runner/mtk_oss_executor_runner.cpp
95  )
96
97  add_executable(mtk_oss_executor_runner ${_mtk_oss_executor_runner__srcs})
98
99  target_include_directories(mtk_oss_executor_runner
100      PUBLIC
101      ${_common_include_directories}
102      ${EXECUTORCH_ROOT}/cmake-android-out/third-party/gflags/include
103  )
104
105  target_link_libraries(mtk_oss_executor_runner
106      ${_executor_runner_libs}
107      executorch
108      neuron_backend
109      gflags
110  )
111  target_compile_options(mtk_oss_executor_runner
112      PUBLIC
113      ${_common_compile_options}
114  )
115
116  set(_mtk_llama_executor_runner__srcs ${_mtk_executor_runner__srcs})
117  list(FILTER _mtk_llama_executor_runner__srcs EXCLUDE REGEX
118       ".*executor_runner.cpp$"
119  )
120  list(PREPEND _mtk_llama_executor_runner__srcs
121       ${CMAKE_CURRENT_LIST_DIR}/executor_runner/mtk_llama_executor_runner.cpp
122  )
123  # Build ABSL and RE2
124  set(EXTENSIONS_LLM_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../extension/llm)
125  set(THIRD_PARTY_ABSL_DIR ${EXTENSIONS_LLM_DIR}/third-party/abseil-cpp)
126  set(THIRD_PARTY_RE2_DIR ${EXTENSIONS_LLM_DIR}/third-party/re2)
127  set(ABSL_ENABLE_INSTALL ON)
128  set(ABSL_PROPAGATE_CXX_STD ON)
129  set(_pic_flag ${CMAKE_POSITION_INDEPENDENT_CODE})
130  set(CMAKE_POSITION_INDEPENDENT_CODE ON)
131  add_subdirectory(
132    ${THIRD_PARTY_ABSL_DIR} ${CMAKE_CURRENT_BINARY_DIR}/third-party/abseil
133  )
134  add_subdirectory(
135    ${THIRD_PARTY_RE2_DIR} ${CMAKE_CURRENT_BINARY_DIR}/third-party/re2
136  )
137  set(CMAKE_POSITION_INDEPENDENT_CODE ${_pic_flag})
138
139  # Build tokenizers
140  set(LLAMA2_TOKENIZER_DIR ${EXTENSIONS_LLM_DIR}/tokenizer)
141  add_library(tokenizer STATIC)
142  target_include_directories(
143    tokenizer PUBLIC ${_common_include_directories} ${THIRD_PARTY_ABSL_DIR}
144                     ${THIRD_PARTY_RE2_DIR}
145  )
146  target_link_libraries(tokenizer PRIVATE re2::re2)
147  target_sources(
148    tokenizer
149    PRIVATE
150      ${LLAMA2_TOKENIZER_DIR}/tiktoken.cpp
151      ${LLAMA2_TOKENIZER_DIR}/bpe_tokenizer.cpp
152      ${CMAKE_CURRENT_SOURCE_DIR}/../models/llama/tokenizer/llama_tiktoken.cpp
153  )
154
155  # Include directory for neuron headers
156  include_directories(
157    BEFORE ${_common_include_directories}
158    ${CMAKE_CURRENT_SOURCE_DIR}/../../backends/mediatek/runtime/include
159  )
160
161  # Build Llama Executor static library
162  add_subdirectory(executor_runner/llama_runner)
163
164  # Build Llama Executor Runner
165  add_executable(mtk_llama_executor_runner ${_mtk_llama_executor_runner__srcs})
166
167  target_link_libraries(
168    mtk_llama_executor_runner
169    ${_executor_runner_libs}
170    ${NEURON_BUFFER_ALLOCATOR_LIB}
171    neuron_backend
172    gflags
173    mtk_llama_executor_lib
174    tokenizer
175  )
176  target_compile_options(
177    mtk_llama_executor_runner PUBLIC ${_common_compile_options}
178  )
179endif()
180