xref: /aosp_15_r20/external/executorch/backends/apple/mps/CMakeLists.txt (revision 523fa7a60841cd1ecfb9cc4201f1ca8b03ed023a)
1#
2# Copyright (c) 2023 Apple Inc. All rights reserved. Provided subject to the
3# LICENSE file in the top level directory.
4#
5
6cmake_minimum_required(VERSION 3.19)
7
8set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
9
10if(NOT CMAKE_CXX_STANDARD)
11  set(CMAKE_CXX_STANDARD 17)
12endif()
13
14# Source root directory for executorch.
15if(NOT EXECUTORCH_ROOT)
16  set(EXECUTORCH_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../..)
17endif()
18
19include(${EXECUTORCH_ROOT}/build/Utils.cmake)
20
21if(NOT PYTHON_EXECUTABLE)
22  resolve_python_executable()
23endif()
24
25if(NOT FLATC_EXECUTABLE)
26  set(FLATC_EXECUTABLE flatc)
27endif()
28
29set(_common_compile_options -Wno-deprecated-declarations)
30set(_common_include_directories ${EXECUTORCH_ROOT}/..)
31
32set(_mps_schema__include_dir "${CMAKE_BINARY_DIR}/schema/include")
33
34# Paths to headers generated from the .fbs files.
35set(_mps_schema__outputs)
36foreach(fbs_file ${_mps_schema__srcs})
37  string(REGEX REPLACE "serialization/([^/]+)[.]fbs$" "\\1_generated.h"
38                       generated "${fbs_file}"
39  )
40  list(APPEND _mps_schema__outputs
41       "${_mps_schema__include_dir}/executorch/${generated}"
42  )
43endforeach()
44
45# Generate the headers from the .fbs files.
46add_custom_command(
47  OUTPUT ${_mps_schema__outputs}
48  COMMAND
49    ${FLATC_EXECUTABLE} --cpp --cpp-std c++11 --scoped-enums -o
50    "${_mps_schema__include_dir}/executorch/backends/apple/mps"
51    ${_mps_schema__srcs}
52  WORKING_DIRECTORY ${EXECUTORCH_ROOT}
53  COMMENT "Generating mps_schema headers"
54  VERBATIM
55)
56
57add_library(mps_schema INTERFACE ${_mps_schema__outputs})
58set_target_properties(mps_schema PROPERTIES LINKER_LANGUAGE CXX)
59target_include_directories(
60  mps_schema
61  INTERFACE ${_mps_schema__include_dir}
62            ${EXECUTORCH_ROOT}/third-party/flatbuffers/include
63            ${_common_include_directories}
64)
65
66list(TRANSFORM _mps_backend__srcs PREPEND "${EXECUTORCH_ROOT}/")
67add_library(mpsdelegate ${_mps_backend__srcs})
68
69find_library(FOUNDATION_FRAMEWORK Foundation)
70find_library(METAL_FRAMEWORK Metal)
71find_library(MPS_FRAMEWORK MetalPerformanceShaders)
72find_library(MPS_GRAPH_FRAMEWORK MetalPerformanceShadersGraph)
73
74target_link_libraries(
75  mpsdelegate
76  PRIVATE bundled_program
77          mps_schema
78          executorch_core
79          ${FOUNDATION_FRAMEWORK}
80          ${METAL_FRAMEWORK}
81          ${MPS_FRAMEWORK}
82          ${MPS_GRAPH_FRAMEWORK}
83)
84
85target_link_options_shared_lib(mpsdelegate)
86target_compile_options(mpsdelegate PUBLIC ${_common_compile_options})
87target_compile_options(mpsdelegate PRIVATE "-fno-objc-arc")
88
89install(
90  TARGETS mpsdelegate
91  DESTINATION lib
92  INCLUDES
93  DESTINATION ${_common_include_directories}
94)
95