cmake_minimum_required(VERSION 3.14.1)
project(
MXSTREAM
LANGUAGES CXX C
VERSION 1.0.0)
option(COVERAGE "enable code coverage" OFF)
option(BUILD_TESTS "Build the tests" OFF)
set(CMAKE_CXX_STANDARD 14)
add_compile_options(-std=c++14 -fPIE -fstack-protector-all -fPIC -Wall -Wfloat-equal -pipe -fno-common)
add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0)
if(HIGH_TESTS)
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE hitestwrapper)
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK hitestwrapper)
endif()
add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0)
if(BUILD_TESTS)
add_compile_options(-g -O2)
add_link_options(-Wl,-z,relro,-z,now,-z,noexecstack -pie)
else()
add_link_options(-Wl,-z,relro,-z,now,-z,noexecstack -s -pie)
add_compile_options(-O2)
endif()
add_compile_options(-Wno-deprecated-declarations)
add_definitions(-Dgoogle=mindxsdk_private)
add_definitions(-DPy_LIMITED_API=0x03090000)
set(LIB_PREFIX "mindxsdk_")
set(INSTALL_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../output/${FRAME_PROJECT}/mxStream)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../include)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../include/Internal)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../module/StreamManager)
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
link_directories(${INSTALL_PATH}/lib)
get_filename_component(
OPENSOURCE_DIR
${CMAKE_CURRENT_SOURCE_DIR}/../../../opensource/output/${FRAME_PROJECT}/opensource
ABSOLUTE)
get_filename_component(
MXBASE_DIR
${CMAKE_CURRENT_SOURCE_DIR}/../../../mxBase/output/${FRAME_PROJECT}/mxBase
ABSOLUTE)
get_filename_component(
MXTOOLS_DIR
${CMAKE_CURRENT_SOURCE_DIR}/../../../mxTools/output/${FRAME_PROJECT}/mxTools
ABSOLUTE)
include_directories(${OPENSOURCE_DIR}/include)
include_directories(${OPENSOURCE_DIR}/include/gstreamer-1.0)
include_directories(${OPENSOURCE_DIR}/include/glib-2.0)
include_directories(${OPENSOURCE_DIR}/lib/glib-2.0/include)
include_directories(${OPENSOURCE_DIR}/include/gstreamer-1.0/)
link_directories(${OPENSOURCE_DIR}/lib)
link_directories(${OPENSOURCE_DIR}/lib64)
include_directories(${MXBASE_DIR}/include)
link_directories(${MXBASE_DIR}/lib)
include_directories(${MXTOOLS_DIR}/include)
link_directories(${MXTOOLS_DIR}/lib)
set(ASCEND_LIB $ENV{ASCEND_HOME}/$ENV{ASCEND_VERSION}/acllib)
include_directories(${ASCEND_LIB}/include)
include_directories($ENV{ASCEND_HOME}/ascend-toolkit/latest/include)
include_directories($ENV{ASCEND_HOME}/driver/include)
include_directories(
$ENV{ASCEND_HOME}/$ENV{ASCEND_VERSION}/$ENV{ARCH_PATTERN}/include)
include_directories($ENV{ASCEND_HOME}/$ENV{ASCEND_VERSION}/opp/include)
link_directories($ENV{ASCEND_HOME}/$ENV{ASCEND_VERSION}/opp/lib64)
link_directories(${ASCEND_LIB}/lib64)
link_directories($ENV{ASCEND_HOME}/driver/lib64)
link_directories($ENV{ASCEND_HOME}/$ENV{ASCEND_VERSION}/compiler/lib64)
link_directories($ENV{ASCEND_HOME}/driver/lib64/driver)
set(test_deps)
if(COVERAGE)
list(APPEND test_deps gcov)
endif()
set(PYTHON_STREAM_SRC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/module/PyUtils/PyDataHelper.cpp
${CMAKE_CURRENT_SOURCE_DIR}/module/Stream/PyPluginNode/PyPluginNode.cpp
${CMAKE_CURRENT_SOURCE_DIR}/module/Stream/PyStream/FunctionalStream.cpp
${CMAKE_CURRENT_SOURCE_DIR}/module/Stream/PyStream/SequentialStream.cpp
${CMAKE_CURRENT_SOURCE_DIR}/module/Stream/PyStream/StreamUtils.cpp
)
set(STREAM_TARGET_LIBRARY stream)
set_property(SOURCE SwigInterface/Stream.i PROPERTY CPLUSPLUS ON)
set_property(SOURCE SwigInterface/Stream.i PROPERTY SWIG_MODULE_NAME
${STREAM_TARGET_LIBRARY})
find_package(SWIG REQUIRED)
include(UseSWIG)
find_package(Python3 ${PYTHON_VERSION} EXACT REQUIRED COMPONENTS Interpreter
Development)
swig_add_library(
${STREAM_TARGET_LIBRARY}
LANGUAGE python
SOURCES SwigInterface/Stream.i ${PYTHON_STREAM_SRC_FILES})
target_include_directories(${STREAM_TARGET_LIBRARY} PRIVATE ${Python3_INCLUDE_DIRS})
target_link_directories(${STREAM_TARGET_LIBRARY} PRIVATE ${Python3_LIBRARIES})
swig_link_libraries(${STREAM_TARGET_LIBRARY} streammanager ${test_deps})
set(STREAM_MGR_SRC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/module/PyUtils/PyDataHelper.cpp
${CMAKE_CURRENT_SOURCE_DIR}/module/StreamManagerApi/StreamManagerApi.cpp
${CMAKE_CURRENT_SOURCE_DIR}/module/StreamManagerApi/StreamManagerInner.cpp
)
set(SWIG_TARGET_LIBRARY StreamManagerApi)
set_property(SOURCE SwigInterface/StreamManagerApi.i PROPERTY CPLUSPLUS ON)
set_property(SOURCE SwigInterface/StreamManagerApi.i PROPERTY SWIG_MODULE_NAME
${SWIG_TARGET_LIBRARY})
swig_add_library(
${SWIG_TARGET_LIBRARY}
LANGUAGE python
SOURCES SwigInterface/StreamManagerApi.i ${STREAM_MGR_SRC_FILES})
target_include_directories(${SWIG_TARGET_LIBRARY} PRIVATE ${Python3_INCLUDE_DIRS})
target_link_directories(${SWIG_TARGET_LIBRARY} PRIVATE ${Python3_LIBRARIES})
swig_link_libraries(${SWIG_TARGET_LIBRARY} mxbase
streammanager
${test_deps})
add_custom_command(
TARGET ${SWIG_TARGET_LIBRARY}
COMMAND echo "${SWIG_TARGET_LIBRARY} only support python3.7 or greater"
COMMAND
sed -i '/from sys import version_info as _swig_python_version_info/a\\if _swig_python_version_info < \(3, 7, 0\):\\n\ \ \ \ raise Exception\(\"StreamManagerApi only support python3.7 or greater\"\)'
${CMAKE_CURRENT_BINARY_DIR}/StreamManagerApi.py
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
install(TARGETS ${STREAM_TARGET_LIBRARY} LIBRARY
DESTINATION ${INSTALL_PATH}/python)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/StreamManagerApi.py
DESTINATION ${INSTALL_PATH}/python)
install(TARGETS ${SWIG_TARGET_LIBRARY} LIBRARY
DESTINATION ${INSTALL_PATH}/python)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/stream.py
DESTINATION ${INSTALL_PATH}/python)