blob: 44112ce51db98d38caded16830d233f56613ca69 [file] [log] [blame]
# Copyright 2020 The IREE Authors
#
# Licensed under the Apache License v2.0 with LLVM Exceptions.
# See https://llvm.org/LICENSE.txt for license information.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
if(NOT nanobind_FOUND)
find_package(nanobind CONFIG QUIET)
if(NOT nanobind_FOUND)
execute_process(
COMMAND "${Python_EXECUTABLE}" -m nanobind --cmake_dir
OUTPUT_STRIP_TRAILING_WHITESPACE
OUTPUT_VARIABLE NB_DIR
RESULT_VARIABLE RC)
if(RC AND NOT RC EQUAL 0)
message(WARNING "Probing for nanobind failed. Please install the project's Python dependencies or '${Python_EXECUTABLE} -m pip install nanobind'")
endif()
list(APPEND CMAKE_PREFIX_PATH "${NB_DIR}")
endif()
find_package(nanobind CONFIG REQUIRED)
endif()
set(_EXTRA_INSTALL_TOOL_TARGETS)
set(_TRACY_ENABLED OFF)
if(IREE_BUILD_TRACY)
message(STATUS "Bundling Tracy CLI tools with Python API")
set(_TRACY_ENABLED ON)
list(APPEND _EXTRA_INSTALL_TOOL_TARGETS "IREETracyCaptureServer")
endif()
################################################################################
# Package
################################################################################
# nanobind requires both RTTI and Exceptions, and it does not know that
# we have disabled them globally, so turn them back on. Since this is
# *the only* place in the codebase where we do this, just inline here.
# Note that this is playing with fire and the extension code is structured
# so as not to cause problems with RTTI cross-module issues.
iree_select_compiler_opts(_RTTI_AND_EXCEPTION_COPTS
CLANG_OR_GCC
"-frtti"
"-fexceptions"
MSVC_OR_CLANG_CL
# Configure exception handling for standard C++ behavior.
# - /EHs enables C++ catch-style exceptions
# - /EHc breaks unwinding across extern C boundaries, dramatically reducing
# unwind table size and associated exception handling overhead as the
# compiler can assume no exception will ever be thrown within any function
# annotated with extern "C".
# https://docs.microsoft.com/en-us/cpp/build/reference/eh-exception-handling-model
"/EHsc"
# Configure RTTI generation.
# - /GR - Enable generation of RTTI (default)
# - /GR- - Disables generation of RTTI
# https://docs.microsoft.com/en-us/cpp/build/reference/gr-enable-run-time-type-information?view=msvc-160
"/GR"
)
nanobind_add_module(iree_runtime_bindings_python_PyExtRt
NB_STATIC LTO
"binding.h"
"initialize_module.cc"
"invoke.h"
"invoke.cc"
"io.h"
"io.cc"
"hal.h"
"hal.cc"
"numpy_interop.h"
"numpy_interop.cc"
"py_module.h"
"py_module.cc"
"status_utils.cc"
"status_utils.h"
"vm.h"
"vm.cc"
)
target_link_libraries(iree_runtime_bindings_python_PyExtRt
PRIVATE
iree::base
iree::base::internal::flags
iree::hal
iree::hal::drivers
iree::hal::utils::allocators
iree::base::internal::file_io
iree::base::internal::path
iree::io::file_handle
iree::io::formats::gguf
iree::io::formats::irpa
iree::io::formats::safetensors
iree::io::parameter_index
iree::io::parameter_index_provider
iree::io::parameter_provider
iree::io::scope_map
iree::modules::io::parameters
iree::modules::hal
iree::schemas::parameter_archive
iree::tooling::device_util
iree::tooling::modules
iree::vm
iree::vm::bytecode::module
Python::NumPy
)
target_compile_options(iree_runtime_bindings_python_PyExtRt
PRIVATE
${IREE_DEFAULT_COPTS}
# Default COPTS disable exceptions/rtti. Re-enable them.
${_RTTI_AND_EXCEPTION_COPTS}
)
target_compile_definitions(iree_runtime_bindings_python_PyExtRt
PRIVATE
IREE_TRACING_HOOK_CPP_NEW_DELETE=0
)
set_target_properties(
iree_runtime_bindings_python_PyExtRt
PROPERTIES OUTPUT_NAME "iree/_runtime_libs/_runtime"
)
iree_py_library(
NAME
runtime
SRCS
"iree/runtime/__init__.py"
"iree/runtime/_binding.py"
"iree/runtime/_binding.pyi"
"iree/runtime/array_interop.py"
"iree/runtime/benchmark.py"
"iree/runtime/flags.py"
"iree/runtime/function.py"
"iree/runtime/io.py"
"iree/runtime/system_api.py"
"iree/runtime/system_setup.py"
"iree/runtime/tracing.py"
"iree/runtime/version.py"
"iree/_runtime/__init__.py"
"iree/_runtime/libs.py"
"iree/_runtime/scripts/iree_benchmark_trace/__main__.py"
"iree/_runtime/scripts/iree_benchmark_module/__main__.py"
"iree/_runtime/scripts/iree_cpuinfo/__main__.py"
"iree/_runtime/scripts/iree_convert_parameters/__main__.py"
"iree/_runtime/scripts/iree_create_parameters/__main__.py"
"iree/_runtime/scripts/iree_dump_module/__main__.py"
"iree/_runtime/scripts/iree_dump_parameters/__main__.py"
"iree/_runtime/scripts/iree_run_trace/__main__.py"
"iree/_runtime/scripts/iree_run_module/__main__.py"
"iree/_runtime/scripts/iree_tracy_capture/__main__.py"
PYEXT_DEPS
iree_runtime_bindings_python_PyExtRt
)
iree_symlink_tool(
TARGET runtime
FROM_TOOL_TARGET iree-benchmark-module
TO_EXE_NAME iree/_runtime_libs/iree-benchmark-module
)
iree_symlink_tool(
TARGET runtime
FROM_TOOL_TARGET iree-benchmark-trace
TO_EXE_NAME iree/_runtime_libs/iree-benchmark-trace
)
iree_symlink_tool(
TARGET runtime
FROM_TOOL_TARGET iree-convert-parameters
TO_EXE_NAME iree/_runtime_libs/iree-convert-parameters
)
iree_symlink_tool(
TARGET runtime
FROM_TOOL_TARGET iree-cpuinfo
TO_EXE_NAME iree/_runtime_libs/iree-cpuinfo
)
iree_symlink_tool(
TARGET runtime
FROM_TOOL_TARGET iree-create-parameters
TO_EXE_NAME iree/_runtime_libs/iree-create-parameters
)
iree_symlink_tool(
TARGET runtime
FROM_TOOL_TARGET iree-dump-module
TO_EXE_NAME iree/_runtime_libs/iree-dump-module
)
iree_symlink_tool(
TARGET runtime
FROM_TOOL_TARGET iree-dump-parameters
TO_EXE_NAME iree/_runtime_libs/iree-dump-parameters
)
iree_symlink_tool(
TARGET runtime
FROM_TOOL_TARGET iree-run-trace
TO_EXE_NAME iree/_runtime_libs/iree-run-trace
)
iree_symlink_tool(
TARGET runtime
FROM_TOOL_TARGET iree-run-module
TO_EXE_NAME iree/_runtime_libs/iree-run-module
)
if(_TRACY_ENABLED)
iree_symlink_tool(
TARGET runtime
FROM_TOOL_TARGET IREETracyCaptureServer
TO_EXE_NAME iree/_runtime_libs/iree-tracy-capture
)
endif()
################################################################################
# Tests
################################################################################
iree_py_test(
NAME
array_interop_test
SRCS
"tests/array_interop_test.py"
)
iree_py_test(
NAME
flags_test
SRCS
"tests/flags_test.py"
)
iree_py_test(
NAME
function_test
SRCS
"tests/function_test.py"
)
iree_py_test(
NAME
hal_test
SRCS
"tests/hal_test.py"
)
iree_py_test(
NAME
system_setup_test
SRCS
"tests/system_setup_test.py"
)
# These tests perform linking via the Compiler API, which is only supported
# in bundled-LLVM builds at the moment (#14086).
if(IREE_BUILD_BUNDLED_LLVM)
iree_py_test(
NAME
benchmark_test
SRCS
"tests/benchmark_test.py"
)
iree_py_test(
NAME
io_test
SRCS
"tests/io_test.py"
)
iree_py_test(
NAME
system_api_test
SRCS
"tests/system_api_test.py"
)
iree_py_test(
NAME
vm_test
SRCS
"tests/vm_test.py"
)
endif()
iree_py_test(
NAME
vm_types_test
SRCS
"tests/vm_types_test.py"
)
################################################################################
# Install
################################################################################
set(_INSTALL_DIR "python_packages/iree_runtime")
set(_INSTALL_COMPONENT "IreePythonPackage-runtime")
# Install iree/runtime/*.py files verbatim into the tree.
# We do this at the package level so as to avoid any loose files
# from outside (i.e. tests, etc).
install(
DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/iree/runtime/"
COMPONENT "${_INSTALL_COMPONENT}"
DESTINATION "${_INSTALL_DIR}/iree/runtime/"
FILES_MATCHING PATTERN "*.py"
)
# _runtime.so -> python_packages/iree_runtime/iree/_runtime.so
install(
TARGETS iree_runtime_bindings_python_PyExtRt
DESTINATION "${_INSTALL_DIR}/iree/_runtime_libs"
COMPONENT "${_INSTALL_COMPONENT}"
)
# Install tools into python_packages/iree_runtime/iree/runtime
#
# Our runtime/... directory is included by the root CMakeLists before the
# tools/ directory which defines these targets, so we defer the install() to
# the end of the root file. While deferred calls are generally fragile, this
# install is purely a leaf feature (with no other calls depending on its
# sequencing), so this use is okay.
cmake_language(EVAL CODE "
cmake_language(DEFER DIRECTORY \"${IREE_SOURCE_DIR}\"
CALL install
TARGETS
iree-cpuinfo
iree-benchmark-module
iree-benchmark-trace
iree-convert-parameters
iree-create-parameters
iree-dump-module
iree-dump-parameters
iree-run-module
iree-run-trace
${_EXTRA_INSTALL_TOOL_TARGETS}
DESTINATION \"${_INSTALL_DIR}/iree/_runtime_libs\"
COMPONENT \"${_INSTALL_COMPONENT}\"
)
")