1*523fa7a6SAndroid Build Coastguard Worker 2*523fa7a6SAndroid Build Coastguard Worker# Copyright (c) Meta Platforms, Inc. and affiliates. 3*523fa7a6SAndroid Build Coastguard Worker# All rights reserved. 4*523fa7a6SAndroid Build Coastguard Worker# 5*523fa7a6SAndroid Build Coastguard Worker# This source code is licensed under the BSD-style license found in the 6*523fa7a6SAndroid Build Coastguard Worker# LICENSE file in the root directory of this source tree. 7*523fa7a6SAndroid Build Coastguard Worker 8*523fa7a6SAndroid Build Coastguard Worker# Config defining how CMake should find ExecuTorch package. CMake will search 9*523fa7a6SAndroid Build Coastguard Worker# for this file and find ExecuTorch package if it is installed. Typical usage 10*523fa7a6SAndroid Build Coastguard Worker# is: 11*523fa7a6SAndroid Build Coastguard Worker# 12*523fa7a6SAndroid Build Coastguard Worker# find_package(executorch REQUIRED) 13*523fa7a6SAndroid Build Coastguard Worker# ------- 14*523fa7a6SAndroid Build Coastguard Worker# 15*523fa7a6SAndroid Build Coastguard Worker# Finds the ExecuTorch library 16*523fa7a6SAndroid Build Coastguard Worker# 17*523fa7a6SAndroid Build Coastguard Worker# This will define the following variables: 18*523fa7a6SAndroid Build Coastguard Worker# 19*523fa7a6SAndroid Build Coastguard Worker# EXECUTORCH_FOUND -- True if the system has the ExecuTorch library 20*523fa7a6SAndroid Build Coastguard Worker# EXECUTORCH_INCLUDE_DIRS -- The include directories for ExecuTorch 21*523fa7a6SAndroid Build Coastguard Worker# EXECUTORCH_LIBRARIES -- Libraries to link against 22*523fa7a6SAndroid Build Coastguard Worker# 23*523fa7a6SAndroid Build Coastguard Worker# The actual values for these variables will be different from what executorch-config.cmake 24*523fa7a6SAndroid Build Coastguard Worker# in executorch pip package gives, but we wanted to keep the contract of exposing these 25*523fa7a6SAndroid Build Coastguard Worker# CMake variables. 26*523fa7a6SAndroid Build Coastguard Worker 27*523fa7a6SAndroid Build Coastguard Workercmake_minimum_required(VERSION 3.19) 28*523fa7a6SAndroid Build Coastguard Worker 29*523fa7a6SAndroid Build Coastguard Workerset(_root "${CMAKE_CURRENT_LIST_DIR}/../..") 30*523fa7a6SAndroid Build Coastguard Workerset(required_lib_list executorch executorch_core portable_kernels) 31*523fa7a6SAndroid Build Coastguard Workerset(EXECUTORCH_LIBRARIES) 32*523fa7a6SAndroid Build Coastguard Workerset(EXECUTORCH_INCLUDE_DIRS ${_root}) 33*523fa7a6SAndroid Build Coastguard Workerforeach(lib ${required_lib_list}) 34*523fa7a6SAndroid Build Coastguard Worker set(lib_var "LIB_${lib}") 35*523fa7a6SAndroid Build Coastguard Worker add_library(${lib} STATIC IMPORTED) 36*523fa7a6SAndroid Build Coastguard Worker find_library( 37*523fa7a6SAndroid Build Coastguard Worker ${lib_var} ${lib} 38*523fa7a6SAndroid Build Coastguard Worker HINTS "${_root}" 39*523fa7a6SAndroid Build Coastguard Worker CMAKE_FIND_ROOT_PATH_BOTH 40*523fa7a6SAndroid Build Coastguard Worker ) 41*523fa7a6SAndroid Build Coastguard Worker set_target_properties(${lib} PROPERTIES IMPORTED_LOCATION "${${lib_var}}") 42*523fa7a6SAndroid Build Coastguard Worker target_include_directories(${lib} INTERFACE ${_root}) 43*523fa7a6SAndroid Build Coastguard Worker list(APPEND EXECUTORCH_LIBRARIES ${lib}) 44*523fa7a6SAndroid Build Coastguard Workerendforeach() 45*523fa7a6SAndroid Build Coastguard Worker 46*523fa7a6SAndroid Build Coastguard Worker# If we reach here, ET required libraries are found. 47*523fa7a6SAndroid Build Coastguard Workerset(EXECUTORCH_FOUND ON) 48*523fa7a6SAndroid Build Coastguard Worker 49*523fa7a6SAndroid Build Coastguard Workertarget_link_libraries(executorch INTERFACE executorch_core) 50*523fa7a6SAndroid Build Coastguard Worker 51*523fa7a6SAndroid Build Coastguard Workerif(CMAKE_BUILD_TYPE MATCHES "Debug") 52*523fa7a6SAndroid Build Coastguard Worker set(FLATCCRT_LIB flatccrt_d) 53*523fa7a6SAndroid Build Coastguard Workerelse() 54*523fa7a6SAndroid Build Coastguard Worker set(FLATCCRT_LIB flatccrt) 55*523fa7a6SAndroid Build Coastguard Workerendif() 56*523fa7a6SAndroid Build Coastguard Worker 57*523fa7a6SAndroid Build Coastguard Workerset(lib_list 58*523fa7a6SAndroid Build Coastguard Worker etdump 59*523fa7a6SAndroid Build Coastguard Worker bundled_program 60*523fa7a6SAndroid Build Coastguard Worker extension_data_loader 61*523fa7a6SAndroid Build Coastguard Worker ${FLATCCRT_LIB} 62*523fa7a6SAndroid Build Coastguard Worker coremldelegate 63*523fa7a6SAndroid Build Coastguard Worker mpsdelegate 64*523fa7a6SAndroid Build Coastguard Worker neuron_backend 65*523fa7a6SAndroid Build Coastguard Worker qnn_executorch_backend 66*523fa7a6SAndroid Build Coastguard Worker portable_ops_lib 67*523fa7a6SAndroid Build Coastguard Worker extension_module 68*523fa7a6SAndroid Build Coastguard Worker extension_module_static 69*523fa7a6SAndroid Build Coastguard Worker extension_runner_util 70*523fa7a6SAndroid Build Coastguard Worker extension_tensor 71*523fa7a6SAndroid Build Coastguard Worker extension_threadpool 72*523fa7a6SAndroid Build Coastguard Worker extension_training 73*523fa7a6SAndroid Build Coastguard Worker xnnpack_backend 74*523fa7a6SAndroid Build Coastguard Worker # Start XNNPACK Lib Deps 75*523fa7a6SAndroid Build Coastguard Worker XNNPACK 76*523fa7a6SAndroid Build Coastguard Worker microkernels-prod 77*523fa7a6SAndroid Build Coastguard Worker kleidiai 78*523fa7a6SAndroid Build Coastguard Worker # End XNNPACK Lib Deps 79*523fa7a6SAndroid Build Coastguard Worker cpuinfo 80*523fa7a6SAndroid Build Coastguard Worker pthreadpool 81*523fa7a6SAndroid Build Coastguard Worker vulkan_backend 82*523fa7a6SAndroid Build Coastguard Worker optimized_kernels 83*523fa7a6SAndroid Build Coastguard Worker cpublas 84*523fa7a6SAndroid Build Coastguard Worker eigen_blas 85*523fa7a6SAndroid Build Coastguard Worker optimized_ops_lib 86*523fa7a6SAndroid Build Coastguard Worker optimized_native_cpu_ops_lib 87*523fa7a6SAndroid Build Coastguard Worker quantized_kernels 88*523fa7a6SAndroid Build Coastguard Worker quantized_ops_lib 89*523fa7a6SAndroid Build Coastguard Worker quantized_ops_aot_lib 90*523fa7a6SAndroid Build Coastguard Worker) 91*523fa7a6SAndroid Build Coastguard Workerforeach(lib ${lib_list}) 92*523fa7a6SAndroid Build Coastguard Worker # Name of the variable which stores result of the find_library search 93*523fa7a6SAndroid Build Coastguard Worker set(lib_var "LIB_${lib}") 94*523fa7a6SAndroid Build Coastguard Worker find_library( 95*523fa7a6SAndroid Build Coastguard Worker ${lib_var} ${lib} 96*523fa7a6SAndroid Build Coastguard Worker HINTS "${_root}" 97*523fa7a6SAndroid Build Coastguard Worker CMAKE_FIND_ROOT_PATH_BOTH 98*523fa7a6SAndroid Build Coastguard Worker ) 99*523fa7a6SAndroid Build Coastguard Worker if(NOT ${lib_var}) 100*523fa7a6SAndroid Build Coastguard Worker message("${lib} library is not found. 101*523fa7a6SAndroid Build Coastguard Worker If needed rebuild with the proper options in CMakeLists.txt" 102*523fa7a6SAndroid Build Coastguard Worker ) 103*523fa7a6SAndroid Build Coastguard Worker else() 104*523fa7a6SAndroid Build Coastguard Worker if("${lib}" STREQUAL "extension_module" AND (NOT CMAKE_TOOLCHAIN_IOS)) 105*523fa7a6SAndroid Build Coastguard Worker add_library(${lib} SHARED IMPORTED) 106*523fa7a6SAndroid Build Coastguard Worker else() 107*523fa7a6SAndroid Build Coastguard Worker # Building a share library on iOS requires code signing, so it's easier to 108*523fa7a6SAndroid Build Coastguard Worker # keep all libs as static when CMAKE_TOOLCHAIN_IOS is used 109*523fa7a6SAndroid Build Coastguard Worker add_library(${lib} STATIC IMPORTED) 110*523fa7a6SAndroid Build Coastguard Worker endif() 111*523fa7a6SAndroid Build Coastguard Worker set_target_properties(${lib} PROPERTIES IMPORTED_LOCATION "${${lib_var}}") 112*523fa7a6SAndroid Build Coastguard Worker target_include_directories(${lib} INTERFACE ${_root}) 113*523fa7a6SAndroid Build Coastguard Worker list(APPEND EXECUTORCH_LIBRARIES ${lib}) 114*523fa7a6SAndroid Build Coastguard Worker endif() 115*523fa7a6SAndroid Build Coastguard Workerendforeach() 116