Skip to content
Open
Show file tree
Hide file tree
Changes from 2 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
10 changes: 9 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1125,7 +1125,15 @@ if (EMSCRIPTEN)
endif()

if (DEPTHAI_BUILD_PYTHON)
add_subdirectory(bindings/python)
if(DEPTHAI_PYTHON_EMBEDDED_MODULE_TARGET)
set(TARGET_EMBED_ALIAS "embed")
set(TARGET_EMBED_NAME ${PROJECT_NAME}-${TARGET_EMBED_ALIAS} CACHE INTERNAL "Embedded Python module target name")
add_subdirectory(bindings/python)
set_target_properties(${TARGET_EMBED_NAME} PROPERTIES EXPORT_NAME ${TARGET_EMBED_ALIAS})
list(APPEND targets_to_export ${TARGET_EMBED_NAME})
else ()
add_subdirectory(bindings/python)
endif ()
endif()

########################
Expand Down
44 changes: 43 additions & 1 deletion bindings/python/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ option(DEPTHAI_PYTHON_ENABLE_TESTS "Enable tests" OFF)
option(DEPTHAI_PYTHON_ENABLE_EXAMPLES "Enable examples" OFF)
option(DEPTHAI_PYTHON_BUILD_DOCSTRINGS "Generate docstrings from header files if module 'pybind11_mkdoc' available" ON)
option(DEPTHAI_PYTHON_EMBEDDED_MODULE "Create an embeddable module" OFF)
cmake_dependent_option(DEPTHAI_PYTHON_EMBEDDED_MODULE_TARGET "Create an additional target with pybind embedded module" OFF DEPTHAI_PYTHON_EMBEDDED_MODULE && TARGET_EMBED_NAME OFF)

# Add pybind11 dependency
#add_subdirectory(pybind11-2.5.0)
Expand Down Expand Up @@ -171,6 +172,9 @@ endif()

# Add files for python module
if(DEPTHAI_PYTHON_EMBEDDED_MODULE)
if (DEPTHAI_PYTHON_EMBEDDED_MODULE_TARGET)
add_library(${TARGET_EMBED_NAME} SHARED ${SOURCE_LIST})
endif ()
add_library(${TARGET_NAME} ${SOURCE_LIST})
else()
pybind11_add_module(${TARGET_NAME} ${SOURCE_LIST})
Expand Down Expand Up @@ -273,8 +277,15 @@ endif()
target_include_directories(${TARGET_NAME} PRIVATE src ${DOCSTRINGS_INCLUDE_PLACEHOLDER_DIR} "${CMAKE_CURRENT_LIST_DIR}/../../src")
if(DEPTHAI_MERGED_TARGET)
target_include_directories(${TARGET_NAME} PRIVATE external/pybind11_opencv_numpy)
if (DEPTHAI_PYTHON_EMBEDDED_MODULE_TARGET)
target_include_directories(${TARGET_EMBED_NAME} PRIVATE external/pybind11_opencv_numpy)
endif ()
endif()

if (DEPTHAI_PYTHON_EMBEDDED_MODULE_TARGET)
target_include_directories(${TARGET_EMBED_NAME} PRIVATE src ${DOCSTRINGS_INCLUDE_PLACEHOLDER_DIR} "${CMAKE_CURRENT_LIST_DIR}/../../src")
endif ()

set(DEPTHAI_LINK_TARGET depthai::core)
if(NOT DEPTHAI_MERGED_TARGET)
list(APPEND DEPTHAI_LINK_TARGET depthai::opencv)
Expand All @@ -299,16 +310,48 @@ target_link_libraries(${TARGET_NAME}
spdlog::spdlog
)

if (DEPTHAI_PYTHON_EMBEDDED_MODULE_TARGET)
target_link_libraries(${TARGET_EMBED_NAME}
PUBLIC
# pybind11
pybind11::embed
depthai::core
PRIVATE
hedley
pybind11_json
xtensor-python
spdlog::spdlog
)
endif ()

string(TIMESTAMP BUILD_DATETIME "%Y-%m-%d %H:%M:%S +0000" UTC)

# Add embedded module option, otherwise link to pybind11 as usual
if(DEPTHAI_PYTHON_EMBEDDED_MODULE)
target_compile_definitions(${TARGET_NAME} PRIVATE DEPTHAI_PYTHON_EMBEDDED_MODULE)
if (DEPTHAI_PYTHON_EMBEDDED_MODULE_TARGET)
target_compile_definitions(${TARGET_EMBED_NAME}
PRIVATE
DEPTHAI_PYTHON_VERSION="${DEPTHAI_PYTHON_VERSION}"
DEPTHAI_PYTHON_COMMIT_HASH="${BUILD_COMMIT}"
DEPTHAI_PYTHON_COMMIT_DATETIME="${BUILD_COMMIT_DATETIME}"
DEPTHAI_PYTHON_BUILD_DATETIME="${BUILD_DATETIME}"
DEPTHAI_PYTHON_EMBEDDED_MODULE
)
endif ()
endif()

if(DEPTHAI_ENABLE_REMOTE_CONNECTION)
target_compile_definitions(${TARGET_NAME} PRIVATE DEPTHAI_ENABLE_REMOTE_CONNECTION)
if (DEPTHAI_PYTHON_EMBEDDED_MODULE_TARGET)
target_compile_definitions(${TARGET_EMBED_NAME} PRIVATE DEPTHAI_ENABLE_REMOTE_CONNECTION)
endif ()
endif()
if(DEPTHAI_ENABLE_EVENTS_MANAGER)
target_compile_definitions(${TARGET_NAME} PRIVATE DEPTHAI_ENABLE_EVENTS_MANAGER)
if (DEPTHAI_PYTHON_EMBEDDED_MODULE_TARGET)
target_compile_definitions(${TARGET_EMBED_NAME} PRIVATE DEPTHAI_ENABLE_EVENTS_MANAGER)
endif ()
endif()

# Add the clang-format target
Expand Down Expand Up @@ -356,7 +399,6 @@ execute_process(COMMAND ${PYTHON_EXECUTABLE} "-c" "${version_command}"
)


string(TIMESTAMP BUILD_DATETIME "%Y-%m-%d %H:%M:%S +0000" UTC)
target_compile_definitions(${TARGET_NAME}
PRIVATE
DEPTHAI_PYTHON_VERSION="${DEPTHAI_PYTHON_VERSION}"
Expand Down
2 changes: 2 additions & 0 deletions bindings/python/src/py_bindings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,9 @@

#ifdef DEPTHAI_PYTHON_EMBEDDED_MODULE
#include <pybind11/embed.h>
// Don't think this symbol ever exists? Not finding it using `objdump -T libdepthai-core.so | grep bindngs`
extern "C" void depthai_bindings_init() {} // to force inclusion
extern "C" PyObject* pybind11_init_impl_depthai();
#endif

// Specify module
Expand Down