xref: /aosp_15_r20/external/executorch/build/executorch-wheel-config.cmake (revision 523fa7a60841cd1ecfb9cc4201f1ca8b03ed023a)
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