openvino/cmake/developer_package/cross_compile/python_helpers.cmake

75 lines
2.7 KiB
CMake

# Copyright (C) 2018-2024 Intel Corporation
# SPDX-License-Identifier: Apache-2.0
#
function(ov_detect_python_module_extension)
if(NOT ENABLE_PYTHON)
# python is just disabled
return()
endif()
if(PYTHON_MODULE_EXTENSION)
# exit if it's already defined
return()
endif()
if(NOT CMAKE_CROSSCOMPILING)
# in case of native compilation FindPython3.cmake properly detects PYTHON_MODULE_EXTENSION
return()
endif()
if(RISCV64)
set(python3_config riscv64-linux-gnu-python3-config)
elseif(AARCH64)
set(python3_config aarch64-linux-gnu-python3-config)
elseif(X86_64)
set(python3_config x86_64-linux-gnu-python3-config)
else()
message(WARNING "Python cross-compilation warning: ${OV_ARCH} is unknown for python build. Please, specify PYTHON_MODULE_EXTENSION explicitly")
endif()
find_host_program(python3_config_exec NAMES ${python3_config})
if(python3_config_exec)
execute_process(COMMAND ${python3_config_exec} --extension-suffix
RESULT_VARIABLE EXIT_CODE
OUTPUT_VARIABLE PYTHON_MODULE_EXTENSION
ERROR_VARIABLE ERROR_TEXT
OUTPUT_STRIP_TRAILING_WHITESPACE)
if(NOT EXIT_CODE EQUAL 0)
message(FATAL_ERROR "Internal error: failed to execute ${python3_config_exec}")
endif()
set(PYTHON_MODULE_EXTENSION ${PYTHON_MODULE_EXTENSION} PARENT_SCOPE)
else()
message(FATAL_ERROR [=[PYTHON_MODULE_EXTENSION will not be properly detected. Please, either:
1. Install libpython3-dev for target architecture
2. Explicitly specify PYTHON_MODULE_EXTENSION
]=])
endif()
endfunction()
# Wrapper for find_package(Python3) to allow cross-compilation
macro(ov_find_python3 find_package_mode)
if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.18)
set(python3_development_component Development.Module)
else()
set(python3_development_component Development)
endif()
if(CMAKE_CROSSCOMPILING AND LINUX)
# allow to find python headers from host in case of cross-compilation
# e.g. install libpython3-dev:<foreign arch> and finds its headers
set(_old_CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ${CMAKE_FIND_ROOT_PATH_MODE_INCLUDE})
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH)
ov_cross_compile_define_debian_arch()
endif()
find_package(Python3 ${find_package_mode} COMPONENTS Interpreter ${python3_development_component})
if(CMAKE_CROSSCOMPILING AND LINUX)
ov_cross_compile_define_debian_arch_reset()
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ${_old_CMAKE_FIND_ROOT_PATH_MODE_INCLUDE})
endif()
unset(python3_development_component)
endmacro()