1*523fa7a6SAndroid Build Coastguard Worker# Copyright (c) Meta Platforms, Inc. and affiliates. 2*523fa7a6SAndroid Build Coastguard Worker# All rights reserved. 3*523fa7a6SAndroid Build Coastguard Worker# 4*523fa7a6SAndroid Build Coastguard Worker# This source code is licensed under the BSD-style license found in the 5*523fa7a6SAndroid Build Coastguard Worker# LICENSE file in the root directory of this source tree. 6*523fa7a6SAndroid Build Coastguard Worker 7*523fa7a6SAndroid Build Coastguard Worker# Config defining how CMake should find ExecuTorch package. CMake will search 8*523fa7a6SAndroid Build Coastguard Worker# for this file and find ExecuTorch package if it is installed. Typical usage 9*523fa7a6SAndroid Build Coastguard Worker# is: 10*523fa7a6SAndroid Build Coastguard Worker# 11*523fa7a6SAndroid Build Coastguard Worker# find_package(executorch REQUIRED) 12*523fa7a6SAndroid Build Coastguard Worker# ------- 13*523fa7a6SAndroid Build Coastguard Worker# 14*523fa7a6SAndroid Build Coastguard Worker# Finds the ExecuTorch library 15*523fa7a6SAndroid Build Coastguard Worker# 16*523fa7a6SAndroid Build Coastguard Worker# This will define the following variables: 17*523fa7a6SAndroid Build Coastguard Worker# 18*523fa7a6SAndroid Build Coastguard Worker# EXECUTORCH_FOUND -- True if the system has the ExecuTorch library 19*523fa7a6SAndroid Build Coastguard Worker# EXECUTORCH_INCLUDE_DIRS -- The include directories for ExecuTorch 20*523fa7a6SAndroid Build Coastguard Worker# EXECUTORCH_LIBRARIES -- Libraries to link against 21*523fa7a6SAndroid Build Coastguard Worker# 22*523fa7a6SAndroid Build Coastguard Workercmake_minimum_required(VERSION 3.19) 23*523fa7a6SAndroid Build Coastguard Worker 24*523fa7a6SAndroid Build Coastguard Worker# Find prebuilt _portable_lib.<EXT_SUFFIX>.so. This file should be installed under 25*523fa7a6SAndroid Build Coastguard Worker# <site-packages>/executorch/share/cmake 26*523fa7a6SAndroid Build Coastguard Worker 27*523fa7a6SAndroid Build Coastguard Worker# Find python 28*523fa7a6SAndroid Build Coastguard Workerif(DEFINED ENV{CONDA_DEFAULT_ENV} AND NOT $ENV{CONDA_DEFAULT_ENV} STREQUAL "base") 29*523fa7a6SAndroid Build Coastguard Worker set(PYTHON_EXECUTABLE 30*523fa7a6SAndroid Build Coastguard Worker python 31*523fa7a6SAndroid Build Coastguard Worker ) 32*523fa7a6SAndroid Build Coastguard Workerelse() 33*523fa7a6SAndroid Build Coastguard Worker set(PYTHON_EXECUTABLE 34*523fa7a6SAndroid Build Coastguard Worker python3 35*523fa7a6SAndroid Build Coastguard Worker ) 36*523fa7a6SAndroid Build Coastguard Workerendif() 37*523fa7a6SAndroid Build Coastguard Worker 38*523fa7a6SAndroid Build Coastguard Worker# Get the Python version and platform information 39*523fa7a6SAndroid Build Coastguard Workerexecute_process( 40*523fa7a6SAndroid Build Coastguard Worker COMMAND ${PYTHON_EXECUTABLE} -c "import sysconfig; print(sysconfig.get_config_var('EXT_SUFFIX'))" 41*523fa7a6SAndroid Build Coastguard Worker OUTPUT_VARIABLE EXT_SUFFIX 42*523fa7a6SAndroid Build Coastguard Worker RESULT_VARIABLE SYSCONFIG_RESULT 43*523fa7a6SAndroid Build Coastguard Worker ERROR_VARIABLE SYSCONFIG_ERROR 44*523fa7a6SAndroid Build Coastguard Worker OUTPUT_STRIP_TRAILING_WHITESPACE 45*523fa7a6SAndroid Build Coastguard Worker) 46*523fa7a6SAndroid Build Coastguard Worker 47*523fa7a6SAndroid Build Coastguard Workerif(SYSCONFIG_RESULT EQUAL 0) 48*523fa7a6SAndroid Build Coastguard Worker message(STATUS "Sysconfig extension suffix: ${EXT_SUFFIX}") 49*523fa7a6SAndroid Build Coastguard Workerelse() 50*523fa7a6SAndroid Build Coastguard Worker message(FATAL_ERROR "Failed to retrieve sysconfig config var EXT_SUFFIX: ${SYSCONFIG_ERROR}") 51*523fa7a6SAndroid Build Coastguard Workerendif() 52*523fa7a6SAndroid Build Coastguard Worker 53*523fa7a6SAndroid Build Coastguard Workerfind_library( 54*523fa7a6SAndroid Build Coastguard Worker _portable_lib_LIBRARY 55*523fa7a6SAndroid Build Coastguard Worker NAMES _portable_lib${EXT_SUFFIX} 56*523fa7a6SAndroid Build Coastguard Worker PATHS "${CMAKE_CURRENT_LIST_DIR}/../../extension/pybindings/" 57*523fa7a6SAndroid Build Coastguard Worker) 58*523fa7a6SAndroid Build Coastguard Worker 59*523fa7a6SAndroid Build Coastguard Workerset(EXECUTORCH_LIBRARIES) 60*523fa7a6SAndroid Build Coastguard Workerset(EXECUTORCH_FOUND OFF) 61*523fa7a6SAndroid Build Coastguard Workerif(_portable_lib_LIBRARY) 62*523fa7a6SAndroid Build Coastguard Worker set(EXECUTORCH_FOUND ON) 63*523fa7a6SAndroid Build Coastguard Worker message(STATUS "ExecuTorch portable library is found at ${_portable_lib_LIBRARY}") 64*523fa7a6SAndroid Build Coastguard Worker list(APPEND EXECUTORCH_LIBRARIES _portable_lib) 65*523fa7a6SAndroid Build Coastguard Worker add_library(_portable_lib STATIC IMPORTED) 66*523fa7a6SAndroid Build Coastguard Worker set(EXECUTORCH_INCLUDE_DIRS ${CMAKE_CURRENT_LIST_DIR}/../../include) 67*523fa7a6SAndroid Build Coastguard Worker set_target_properties(_portable_lib PROPERTIES 68*523fa7a6SAndroid Build Coastguard Worker IMPORTED_LOCATION "${_portable_lib_LIBRARY}" 69*523fa7a6SAndroid Build Coastguard Worker INTERFACE_INCLUDE_DIRECTORIES "${EXECUTORCH_INCLUDE_DIRS}" 70*523fa7a6SAndroid Build Coastguard Worker CXX_STANDARD 17 71*523fa7a6SAndroid Build Coastguard Worker ) 72*523fa7a6SAndroid Build Coastguard Workerendif() 73