blob: 14abd4333c0f5d13eb637f4af2dfddf2f86f13cc [file] [log] [blame] [edit]
# 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
#
cmake_minimum_required(VERSION 3.19)
# Find prebuilt _portable_lib.<EXT_SUFFIX>.so. This file should be installed under
# <site-packages>/executorch/share/cmake
# Find python
if(DEFINED ENV{CONDA_DEFAULT_ENV} AND NOT $ENV{CONDA_DEFAULT_ENV} STREQUAL "base")
set(PYTHON_EXECUTABLE
python
)
else()
set(PYTHON_EXECUTABLE
python3
)
endif()
# Get the Python version and platform information
execute_process(
COMMAND ${PYTHON_EXECUTABLE} -c "import sysconfig; print(sysconfig.get_config_var('EXT_SUFFIX'))"
OUTPUT_VARIABLE EXT_SUFFIX
RESULT_VARIABLE SYSCONFIG_RESULT
ERROR_VARIABLE SYSCONFIG_ERROR
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(SYSCONFIG_RESULT EQUAL 0)
message(STATUS "Sysconfig extension suffix: ${EXT_SUFFIX}")
else()
message(FATAL_ERROR "Failed to retrieve sysconfig config var EXT_SUFFIX: ${SYSCONFIG_ERROR}")
endif()
find_library(
_portable_lib_LIBRARY
NAMES _portable_lib${EXT_SUFFIX}
PATHS "${CMAKE_CURRENT_LIST_DIR}/../../extension/pybindings/"
)
set(EXECUTORCH_LIBRARIES)
set(EXECUTORCH_FOUND OFF)
if(_portable_lib_LIBRARY)
set(EXECUTORCH_FOUND ON)
message(STATUS "ExecuTorch portable library is found at ${_portable_lib_LIBRARY}")
list(APPEND EXECUTORCH_LIBRARIES _portable_lib)
add_library(_portable_lib STATIC IMPORTED)
set(EXECUTORCH_INCLUDE_DIRS ${CMAKE_CURRENT_LIST_DIR}/../../include)
set_target_properties(_portable_lib PROPERTIES
IMPORTED_LOCATION "${_portable_lib_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${EXECUTORCH_INCLUDE_DIRS}"
CXX_STANDARD 17
)
endif()