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