91 lines
2.5 KiB
CMake
91 lines
2.5 KiB
CMake
cmake_minimum_required(VERSION 3.10.0)
|
|
project(ai-box VERSION 0.1.0 LANGUAGES C CXX)
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
|
|
if (POLICY CMP0091)
|
|
cmake_policy(SET CMP0091 NEW)
|
|
endif (POLICY CMP0091)
|
|
|
|
if(NOT DEFINED CMAKE_BUILD_TYPE)
|
|
set(CMAKE_BUILD_TYPE Release)
|
|
endif()
|
|
|
|
set(NODE_COMMON_SOURCES)
|
|
set(NODE_ADDON_FOUND OFF)
|
|
|
|
include_directories(cxx)
|
|
|
|
# NodeJS
|
|
execute_process(
|
|
COMMAND node ${CMAKE_SOURCE_DIR}/thirdpart/cmake-js-util.js --include
|
|
RESULT_VARIABLE CMAKE_JS_RESULT
|
|
OUTPUT_VARIABLE CMAKE_JS_INC
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
)
|
|
if(CMAKE_JS_RESULT EQUAL 0)
|
|
execute_process(
|
|
COMMAND node ${CMAKE_SOURCE_DIR}/thirdpart/cmake-js-util.js --src
|
|
RESULT_VARIABLE CMAKE_JS_RESULT
|
|
OUTPUT_VARIABLE CMAKE_JS_SRC
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
)
|
|
if(CMAKE_JS_RESULT EQUAL 0)
|
|
execute_process(
|
|
COMMAND node ${CMAKE_SOURCE_DIR}/thirdpart/cmake-js-util.js --lib
|
|
RESULT_VARIABLE CMAKE_JS_RESULT
|
|
OUTPUT_VARIABLE CMAKE_JS_LIB
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
)
|
|
endif()
|
|
|
|
# NAPI
|
|
if(CMAKE_JS_RESULT EQUAL 0)
|
|
execute_process(
|
|
COMMAND node ${CMAKE_SOURCE_DIR}/thirdpart/cmake-js-util.js --napi
|
|
RESULT_VARIABLE CMAKE_JS_RESULT
|
|
OUTPUT_VARIABLE NODE_ADDON_API_DIR
|
|
)
|
|
endif()
|
|
if(CMAKE_JS_RESULT EQUAL 0)
|
|
message(STATUS "CMAKE_JS_INC: ${CMAKE_JS_INC}")
|
|
message(STATUS "CMAKE_JS_SRC: ${CMAKE_JS_SRC}")
|
|
message(STATUS "CMAKE_JS_LIB: ${CMAKE_JS_LIB}")
|
|
message(STATUS "NODE_ADDON_API_DIR: ${NODE_ADDON_API_DIR}")
|
|
include_directories(${CMAKE_JS_INC} ${NODE_ADDON_API_DIR})
|
|
set(NODE_ADDON_FOUND ON)
|
|
endif()
|
|
endif()
|
|
if(NOT (CMAKE_JS_RESULT EQUAL 0))
|
|
message(FATAL_ERROR "cmake js config failed")
|
|
endif()
|
|
|
|
|
|
# OpenCV
|
|
set(OpenCV_CMAKE_FILE ${CMAKE_SOURCE_DIR}/thirdpart/OpenCV/${CMAKE_BUILD_TYPE}/config.cmake)
|
|
if(EXISTS ${OpenCV_CMAKE_FILE})
|
|
include(${OpenCV_CMAKE_FILE})
|
|
message(STATUS "OpenCV_LIB_DIR: ${OpenCV_LIB_DIR}")
|
|
message(STATUS "OpenCV_INCLUDE_DIR: ${OpenCV_INCLUDE_DIR}")
|
|
message(STATUS "OpenCV_LIBS: ${OpenCV_LIBS}")
|
|
include_directories(${OpenCV_INCLUDE_DIRS})
|
|
link_directories(${OpenCV_LIB_DIR})
|
|
else()
|
|
message(FATAL_ERROR "OpenCV config failed")
|
|
endif()
|
|
|
|
# 构建目标
|
|
add_library(cv SHARED ${CMAKE_JS_SRC}
|
|
cxx/node.cc
|
|
cxx/mat.cc
|
|
cxx/videocap.cc
|
|
cxx/util.cc
|
|
)
|
|
target_link_libraries(cv ${CMAKE_JS_LIB} ${OpenCV_LIBS})
|
|
set_target_properties(cv PROPERTIES PREFIX "" SUFFIX ".node")
|
|
|
|
|
|
if(MSVC AND NODE_ADDON_FOUND)
|
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
|
|
execute_process(COMMAND ${CMAKE_AR} /def:${CMAKE_JS_NODELIB_DEF} /out:${CMAKE_JS_NODELIB_TARGET} ${CMAKE_STATIC_LINKER_FLAGS})
|
|
endif()
|