You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
169 lines
4.6 KiB
CMake
169 lines
4.6 KiB
CMake
# 최소 CMake 버전 정의
|
|
cmake_minimum_required(VERSION 3.10)
|
|
project(v4l2onvif)
|
|
|
|
# GSOAP 기본 설정
|
|
set(GSOAP_PREFIX "/usr/local")
|
|
set(GSOAP_BIN "${GSOAP_PREFIX}/bin")
|
|
set(GSOAP_PLUGINS "${GSOAP_PREFIX}/share/gsoap/plugin")
|
|
set(GSOAP_BASE "${GSOAP_PREFIX}/share/gsoap")
|
|
|
|
# C++ 표준 및 빌드 플래그 설정
|
|
set(CMAKE_CXX_STANDARD 11)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g2 -I inc -I ws-discovery/gsoap/ -I gen -I ${GSOAP_PREFIX}/include -I ${GSOAP_PLUGINS} -DWITH_DOM -DWITH_OPENSSL -DSOAP_PURE_VIRTUAL -fpermissive -pthread")
|
|
set(CMAKE_EXE_LINKER_FLAGS "-static-libstdc++ -static-libgcc -L${GSOAP_PREFIX}/lib -ldl -lpthread")
|
|
|
|
# SYSROOT 환경 변수 확인
|
|
set(SYSROOT $ENV{CXX_SYSROOT})
|
|
if (NOT SYSROOT)
|
|
execute_process(COMMAND ${CMAKE_CXX_COMPILER} --print-sysroot OUTPUT_VARIABLE SYSROOT OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
endif()
|
|
|
|
# 버전 관리
|
|
find_package(Git REQUIRED)
|
|
execute_process(
|
|
COMMAND git describe --tags --always --dirty
|
|
OUTPUT_VARIABLE VERSION
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
)
|
|
add_compile_definitions(VERSION="${VERSION}")
|
|
|
|
# include 디렉토리 설정
|
|
include_directories(
|
|
${CMAKE_SOURCE_DIR}/inc
|
|
${GEN_DIR}
|
|
${CMAKE_SOURCE_DIR}/ws-discovery/gsoap
|
|
${GSOAP_PREFIX}/include
|
|
${GSOAP_PLUGINS}
|
|
gen
|
|
v4l2rtspserver/inc
|
|
v4l2rtspserver/libv4l2cpp/inc
|
|
v4l2rtspserver/live/groupsock/include
|
|
v4l2rtspserver/live/liveMedia/include
|
|
v4l2rtspserver/live/UsageEnvironment/include
|
|
v4l2rtspserver/live/BasicUsageEnvironment/include
|
|
v4l2rtspserver/src
|
|
v4l2rtspserver/libv4l2cpp/src
|
|
v4l2rtspserver/libv4l2cpp/inc
|
|
)
|
|
link_directories(${GSOAP_PREFIX}/lib)
|
|
|
|
# 컴파일 옵션
|
|
add_compile_options(
|
|
-std=c++11 -g2 -fpermissive -pthread
|
|
-DWITH_DOM -DWITH_OPENSSL -DSOAP_PURE_VIRTUAL
|
|
)
|
|
|
|
# GSOAP 관련 파일 설정
|
|
file(GLOB WSSE_SRC
|
|
"${GSOAP_PLUGINS}/wsseapi.c"
|
|
"${GSOAP_PLUGINS}/smdevp.c"
|
|
"${GSOAP_PLUGINS}/mecevp.c"
|
|
"${GSOAP_PLUGINS}/wsaapi.c"
|
|
"${GSOAP_BASE}/custom/struct_timeval.c"
|
|
)
|
|
|
|
# C 파일의 속성을 C++로 설정
|
|
set_source_files_properties(
|
|
${WSSE_SRC}
|
|
PROPERTIES LANGUAGE CXX
|
|
)
|
|
|
|
# SOAP 관련 파일
|
|
file(GLOB SOAP_SRC "gen/soapC_*.cpp")
|
|
file(GLOB SERVER_OBJ
|
|
"gen/soap*.o"
|
|
)
|
|
file(GLOB CLIENT_OBJ
|
|
"gen/soap*.o"
|
|
)
|
|
file(GLOB ONVIF_SRC "src/server*.cpp")
|
|
|
|
# RTSP 및 V4L2 라이브러리 소스 파일
|
|
file(GLOB V4L2RTSP_SRC
|
|
${CMAKE_SOURCE_DIR}/v4l2rtspserver/src/*.cpp
|
|
)
|
|
file(GLOB V4L2CPP_SRC
|
|
${CMAKE_SOURCE_DIR}/v4l2rtspserver/libv4l2cpp/src/*.cpp
|
|
)
|
|
|
|
# 라이브러리 생성
|
|
add_library(libserver STATIC ${SERVER_OBJ} ${SOAP_SRC})
|
|
add_library(libclient STATIC ${CLIENT_OBJ} ${SOAP_SRC} gen/soapNotificationConsumerBindingService.cpp)
|
|
add_library(libonvif STATIC ${ONVIF_SRC})
|
|
|
|
# ws-discovery 설정
|
|
set(WSD_GSOAP_DIR ${CMAKE_SOURCE_DIR}/ws-discovery/gsoap)
|
|
|
|
# libwsdd.a 생성 명령 추가
|
|
add_custom_command(
|
|
OUTPUT ${CMAKE_BINARY_DIR}/libwsdd.a
|
|
COMMAND git submodule init ws-discovery
|
|
COMMAND git submodule update ws-discovery
|
|
COMMAND ${CMAKE_MAKE_PROGRAM} -C ${WSD_GSOAP_DIR} libwsdd.a
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${WSD_GSOAP_DIR}/libwsdd.a ${CMAKE_BINARY_DIR}/libwsdd.a
|
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
|
COMMENT "Building libwsdd.a from ${WSD_GSOAP_DIR}"
|
|
VERBATIM
|
|
)
|
|
|
|
# libwsdd 타겟 생성
|
|
add_custom_target(libwsdd DEPENDS ${CMAKE_BINARY_DIR}/libwsdd.a)
|
|
|
|
# onvif-server 실행 파일 생성
|
|
add_executable(onvif-server
|
|
src/onvif-server.o
|
|
src/onvif_impl.o
|
|
${WSSE_SRC}
|
|
gen/soapNotificationConsumerBindingProxy.o
|
|
gen/soapDisplayBindingProxy.o
|
|
${V4L2RTSP_SRC}
|
|
${V4L2CPP_SRC}
|
|
)
|
|
add_dependencies(onvif-server libwsdd)
|
|
|
|
target_link_libraries(onvif-server
|
|
PRIVATE
|
|
libserver
|
|
libclient
|
|
libonvif
|
|
gsoapssl++
|
|
gsoap++
|
|
ssl
|
|
crypto
|
|
dl
|
|
pthread
|
|
liveMedia
|
|
groupsock
|
|
BasicUsageEnvironment
|
|
UsageEnvironment
|
|
z
|
|
${CMAKE_BINARY_DIR}/libwsdd.a
|
|
)
|
|
|
|
# onvif-client 실행 파일 생성
|
|
add_executable(onvif-client
|
|
src/onvif-client.o
|
|
${WSSE_SRC}
|
|
)
|
|
|
|
target_link_libraries(onvif-client
|
|
PRIVATE
|
|
libclient
|
|
libonvif
|
|
gsoapssl++
|
|
gsoap++
|
|
ssl
|
|
crypto
|
|
dl
|
|
pthread
|
|
liveMedia
|
|
groupsock
|
|
BasicUsageEnvironment
|
|
UsageEnvironment
|
|
z
|
|
)
|
|
|
|
# 설치 경로 설정
|
|
install(TARGETS onvif-server onvif-client DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) |