Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -314,10 +314,12 @@ else ()
set (_py_dev_found Python3_Development.Module_FOUND)
endif ()
if (USE_PYTHON AND ${_py_dev_found} AND NOT BUILD_OIIOUTIL_ONLY)
if (OIIO_BUILD_PYTHON_PYBIND11)
if (OIIO_BUILD_PYTHON_PYBIND11
OR OIIO_PYTHON_BINDINGS_BACKEND STREQUAL "nanobind")
add_subdirectory (src/python)
endif ()
if (OIIO_BUILD_PYTHON_NANOBIND)
if (OIIO_BUILD_PYTHON_NANOBIND
AND OIIO_PYTHON_BINDINGS_BACKEND STREQUAL "both")
add_subdirectory (src/python-nanobind)
endif ()
else ()
Expand Down
51 changes: 35 additions & 16 deletions src/cmake/pythonutils.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -263,25 +263,44 @@ macro (setup_python_module_nanobind)
OUTPUT_NAME ${lib_MODULE}
DEBUG_POSTFIX "")

if (SKBUILD)
set (_nanobind_install_dir .)
if (OIIO_PYTHON_BINDINGS_BACKEND STREQUAL "both")
if (SKBUILD)
set (_nanobind_install_dir .)
else ()
set (_nanobind_install_dir ${PYTHON_SITE_DIR})
endif ()

# Keep nanobind modules isolated in the build tree so they don't alter
# how the existing top-level OpenImageIO module is imported during tests.
set_target_properties (${target_name} PROPERTIES
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib/python/nanobind/OpenImageIO
ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib/python/nanobind/OpenImageIO
)

install (TARGETS ${target_name}
RUNTIME DESTINATION ${_nanobind_install_dir} COMPONENT user
LIBRARY DESTINATION ${_nanobind_install_dir} COMPONENT user)

if (lib_PACKAGE_FILES)
install (FILES ${lib_PACKAGE_FILES}
DESTINATION ${_nanobind_install_dir} COMPONENT user)
endif ()
else ()
set (_nanobind_install_dir ${PYTHON_SITE_DIR})
endif ()
if (SKBUILD)
set (PYTHON_SITE_DIR .)
endif ()

# Keep nanobind modules isolated in the build tree so they don't alter
# how the existing top-level OpenImageIO module is imported during tests.
set_target_properties (${target_name} PROPERTIES
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib/python/nanobind/OpenImageIO
ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib/python/nanobind/OpenImageIO
)
set_target_properties (${target_name} PROPERTIES
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib/python/site-packages
ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib/python/site-packages
)

install (TARGETS ${target_name}
RUNTIME DESTINATION ${_nanobind_install_dir} COMPONENT user
LIBRARY DESTINATION ${_nanobind_install_dir} COMPONENT user)
install (TARGETS ${target_name}
RUNTIME DESTINATION ${PYTHON_SITE_DIR} COMPONENT user
LIBRARY DESTINATION ${PYTHON_SITE_DIR} COMPONENT user)

if (lib_PACKAGE_FILES)
install (FILES ${lib_PACKAGE_FILES}
DESTINATION ${_nanobind_install_dir} COMPONENT user)
install (FILES __init__.py stubs/OpenImageIO/__init__.pyi stubs/OpenImageIO/py.typed
DESTINATION ${PYTHON_SITE_DIR} COMPONENT user)
endif ()

endmacro ()
24 changes: 11 additions & 13 deletions src/python-nanobind/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@
# https://github.com/AcademySoftwareFoundation/OpenImageIO

set (nanobind_srcs
py_oiio.cpp
py_paramvalue.cpp
py_roi.cpp
py_imagespec.cpp
py_typedesc.cpp)
${CMAKE_CURRENT_SOURCE_DIR}/../python/py_oiio.cpp
${CMAKE_CURRENT_SOURCE_DIR}/../python/py_paramvalue.cpp
${CMAKE_CURRENT_SOURCE_DIR}/../python/py_roi.cpp
${CMAKE_CURRENT_SOURCE_DIR}/../python/py_imagespec.cpp
${CMAKE_CURRENT_SOURCE_DIR}/../python/py_typedesc.cpp)

set (nanobind_build_package_dir ${CMAKE_BINARY_DIR}/lib/python/nanobind/OpenImageIO)
file (MAKE_DIRECTORY ${nanobind_build_package_dir})
Expand All @@ -20,13 +20,11 @@ setup_python_module_nanobind (
MODULE _OpenImageIO
SOURCES ${nanobind_srcs}
LIBS OpenImageIO
PACKAGE_FILES __init__.py
)

if (OIIO_PYTHON_BINDINGS_BACKEND STREQUAL "nanobind")
if (SKBUILD)
install (FILES __init__.py DESTINATION . COMPONENT user)
else ()
install (FILES __init__.py
DESTINATION ${PYTHON_SITE_DIR} COMPONENT user)
endif ()
endif ()
target_compile_definitions (PyOpenImageIONanobind
PRIVATE OIIO_PY_BACKEND_NANOBIND
OIIO_PY_NANOBIND_ISOLATED_PACKAGE)
target_include_directories (PyOpenImageIONanobind
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../python)
Loading
Loading