# Copyright (c) Meta Platforms, Inc. and affiliates. # All rights reserved. # # This source code is licensed under the BSD-style license found in the # LICENSE file in the root directory of this source tree. # Config defining how CMake should find ExecuTorch package. CMake will search # for this file and find ExecuTorch package if it is installed. Typical usage # is: # # find_package(executorch REQUIRED) # ------- # # Finds the ExecuTorch library # # This will define the following variables: # # EXECUTORCH_FOUND -- True if the system has the ExecuTorch library # EXECUTORCH_INCLUDE_DIRS -- The include directories for ExecuTorch # EXECUTORCH_LIBRARIES -- Libraries to link against # # The actual values for these variables will be different from what executorch-config.cmake # in executorch pip package gives, but we wanted to keep the contract of exposing these # CMake variables. cmake_minimum_required(VERSION 3.19) set(_root "${CMAKE_CURRENT_LIST_DIR}/../..") set(required_lib_list executorch executorch_core portable_kernels) set(EXECUTORCH_LIBRARIES) set(EXECUTORCH_INCLUDE_DIRS ${_root}) foreach(lib ${required_lib_list}) set(lib_var "LIB_${lib}") add_library(${lib} STATIC IMPORTED) find_library( ${lib_var} ${lib} HINTS "${_root}" CMAKE_FIND_ROOT_PATH_BOTH ) set_target_properties(${lib} PROPERTIES IMPORTED_LOCATION "${${lib_var}}") target_include_directories(${lib} INTERFACE ${_root}) list(APPEND EXECUTORCH_LIBRARIES ${lib}) endforeach() # If we reach here, ET required libraries are found. set(EXECUTORCH_FOUND ON) target_link_libraries(executorch INTERFACE executorch_core) if(CMAKE_BUILD_TYPE MATCHES "Debug") set(FLATCCRT_LIB flatccrt_d) else() set(FLATCCRT_LIB flatccrt) endif() set(lib_list etdump bundled_program extension_data_loader ${FLATCCRT_LIB} coremldelegate mpsdelegate neuron_backend qnn_executorch_backend portable_ops_lib extension_module extension_module_static extension_runner_util extension_tensor extension_threadpool extension_training xnnpack_backend # Start XNNPACK Lib Deps XNNPACK microkernels-prod kleidiai # End XNNPACK Lib Deps cpuinfo pthreadpool vulkan_backend optimized_kernels cpublas eigen_blas optimized_ops_lib optimized_native_cpu_ops_lib quantized_kernels quantized_ops_lib quantized_ops_aot_lib ) foreach(lib ${lib_list}) # Name of the variable which stores result of the find_library search set(lib_var "LIB_${lib}") find_library( ${lib_var} ${lib} HINTS "${_root}" CMAKE_FIND_ROOT_PATH_BOTH ) if(NOT ${lib_var}) message("${lib} library is not found. If needed rebuild with the proper options in CMakeLists.txt" ) else() if("${lib}" STREQUAL "extension_module" AND (NOT CMAKE_TOOLCHAIN_IOS)) add_library(${lib} SHARED IMPORTED) else() # Building a share library on iOS requires code signing, so it's easier to # keep all libs as static when CMAKE_TOOLCHAIN_IOS is used add_library(${lib} STATIC IMPORTED) endif() set_target_properties(${lib} PROPERTIES IMPORTED_LOCATION "${${lib_var}}") target_include_directories(${lib} INTERFACE ${_root}) list(APPEND EXECUTORCH_LIBRARIES ${lib}) endif() endforeach()