UNPKG

gst-kit

Version:

Node.js binding for GStreamer, providing high-level APIs for multimedia streaming and processing

161 lines (141 loc) 5.21 kB
cmake_minimum_required(VERSION 3.10) project(gst_kit) # Set C++ standard set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) # Find required packages find_package(PkgConfig REQUIRED) pkg_check_modules(GSTREAMER REQUIRED gstreamer-1.0) pkg_check_modules(GSTREAMER_APP REQUIRED gstreamer-app-1.0) pkg_check_modules(GSTREAMER_RTP REQUIRED gstreamer-rtp-1.0) pkg_check_modules(GLIB REQUIRED glib-2.0) pkg_check_modules(GOBJECT REQUIRED gobject-2.0) # Find node-addon-api find_path(NODE_ADDON_API_DIR NAMES napi.h PATHS ${CMAKE_JS_INC} ${CMAKE_CURRENT_SOURCE_DIR}/node_modules/node-addon-api ${CMAKE_CURRENT_SOURCE_DIR}/../node_modules/node-addon-api NO_DEFAULT_PATH ) if(NOT NODE_ADDON_API_DIR) message(FATAL_ERROR "node-addon-api not found. Please ensure dependencies are installed:\n" " npm install\n" "Searched in:\n" " - ${CMAKE_JS_INC}\n" " - ${CMAKE_CURRENT_SOURCE_DIR}/node_modules/node-addon-api\n" " - ${CMAKE_CURRENT_SOURCE_DIR}/../node_modules/node-addon-api") endif() # Include directories include_directories( ${CMAKE_JS_INC} ${NODE_ADDON_API_DIR} ${GSTREAMER_INCLUDE_DIRS} ${GSTREAMER_APP_INCLUDE_DIRS} ${GSTREAMER_RTP_INCLUDE_DIRS} ${GLIB_INCLUDE_DIRS} ${GOBJECT_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/src/cpp ) # Add library directories for linking if(WIN32) # Detect Windows architecture for GStreamer path if(CMAKE_SIZEOF_VOID_P EQUAL 8) if(CMAKE_SYSTEM_PROCESSOR MATCHES "ARM64|aarch64") set(GSTREAMER_ARCH "arm64") set(GSTREAMER_ENV_VAR "GSTREAMER_1_0_ROOT_MSVC_ARM64") else() set(GSTREAMER_ARCH "x86_64") set(GSTREAMER_ENV_VAR "GSTREAMER_1_0_ROOT_MSVC_X86_64") endif() else() # 32-bit x86 set(GSTREAMER_ARCH "x86") set(GSTREAMER_ENV_VAR "GSTREAMER_1_0_ROOT_MSVC_X86") endif() message(STATUS "Detected Windows architecture: ${GSTREAMER_ARCH}") # Windows-specific library directory setup if(DEFINED ENV{${GSTREAMER_ENV_VAR}}) link_directories("$ENV{${GSTREAMER_ENV_VAR}}/lib") message(STATUS "Added Windows GStreamer lib directory: $ENV{${GSTREAMER_ENV_VAR}}/lib") endif() # Also add from pkg-config library directories if(GSTREAMER_LIBRARY_DIRS) link_directories(${GSTREAMER_LIBRARY_DIRS}) message(STATUS "Added pkg-config library directories: ${GSTREAMER_LIBRARY_DIRS}") endif() if(GSTREAMER_APP_LIBRARY_DIRS) link_directories(${GSTREAMER_APP_LIBRARY_DIRS}) endif() if(GSTREAMER_RTP_LIBRARY_DIRS) link_directories(${GSTREAMER_RTP_LIBRARY_DIRS}) endif() if(GLIB_LIBRARY_DIRS) link_directories(${GLIB_LIBRARY_DIRS}) endif() if(GOBJECT_LIBRARY_DIRS) link_directories(${GOBJECT_LIBRARY_DIRS}) endif() else() # Unix-like systems: use library directories from pkg-config link_directories( ${GSTREAMER_LIBRARY_DIRS} ${GSTREAMER_APP_LIBRARY_DIRS} ${GSTREAMER_RTP_LIBRARY_DIRS} ${GLIB_LIBRARY_DIRS} ${GOBJECT_LIBRARY_DIRS} ) endif() # Set output directories set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/Release") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/Release") # Add GStreamer Kit native addon library add_library(gst_kit_addon SHARED src/cpp/addon.cpp src/cpp/pipeline.cpp src/cpp/element.cpp src/cpp/type-conversion.cpp src/cpp/async-workers.cpp ) # Set output name and properties (keep .node extension for Node.js compatibility) set_target_properties(gst_kit_addon PROPERTIES PREFIX "" SUFFIX ".node" OUTPUT_NAME "gst_kit" LIBRARY_OUTPUT_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}" RUNTIME_OUTPUT_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}" LIBRARY_OUTPUT_DIRECTORY_RELEASE "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}" RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}" ) # Link GStreamer and Node.js libraries target_link_libraries(gst_kit_addon ${CMAKE_JS_LIB} ${GSTREAMER_LIBRARIES} ${GSTREAMER_APP_LIBRARIES} ${GSTREAMER_RTP_LIBRARIES} ${GLIB_LIBRARIES} ${GOBJECT_LIBRARIES} ) # Windows-specific compiler flag fixes if(WIN32) # Remove Unix-specific flags that cause warnings on Windows string(REPLACE "-fPIC" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") string(REPLACE "-O3" "" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}") # Add Windows-specific optimizations set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /O2") message(STATUS "Windows build detected - adjusted compiler flags") endif() # Set build type if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release) endif() # Set compiler flags set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3") # Add compile definitions for Node.js addon target_compile_definitions(gst_kit_addon PRIVATE NAPI_CPP_EXCEPTIONS BUILDING_NODE_EXTENSION )