src/CMakeLists.txt
Rama master · réplica de lectura del repositorio original.
# CMakeLists.txt for the ZoneMinder binaries
# Create files from the .in files
configure_file(zm_config_data.h.in "${CMAKE_BINARY_DIR}/zm_config_data.h" @ONLY)
# Group together all the source files that are used by all the binaries (zmc, zmu, zms etc)
set(ZM_BIN_SRC_FILES
zm_analysis_thread.cpp
zm_audio_detector.cpp
zm_poll_thread.cpp
zm_buffer.cpp
zm_camera.cpp
zm_comms.cpp
zm_config.cpp
zm_crypt.cpp
zm.cpp
zm_db.cpp
zm_decoder_thread.cpp
zm_group_permission.cpp
zm_monitor_permission.cpp
zm_mp4_sidx.cpp
zm_logger.cpp
zm_event.cpp
zm_eventstream.cpp
zm_event_tag.cpp
zm_exception.cpp
zm_fifo.cpp
zm_fifo_debug.cpp
zm_fifo_stream.cpp
zm_file_camera.cpp
zm_font.cpp
zm_frame.cpp
zm_group.cpp
zm_image.cpp
zm_jpeg.cpp
zm_libvnc_camera.cpp
zm_local_camera.cpp
zm_monitor.cpp
zm_monitor_monitorlink.cpp
zm_monitor_rtsp2web.cpp
zm_monitor_go2rtc.cpp
zm_monitor_janus.cpp
zm_monitor_amcrest.cpp
zm_monitor_onvif.cpp
zm_monitorlink_expression.cpp
#zm_monitorlink_token.cpp
zm_monitorstream.cpp
zm_mqtt.cpp
zm_ffmpeg.cpp
zm_ffmpeg_camera.cpp
zm_ffmpeg_input.cpp
zm_mpeg.cpp
zm_packet.cpp
zm_packetqueue.cpp
zm_poly.cpp
zm_regexp.cpp
zm_remote_camera.cpp
zm_remote_camera_http.cpp
zm_rtsp_auth.cpp
zm_rtsp_server_stream_source.cpp
zm_rtsp_server_stream_adts_source.cpp
zm_rtsp_server_stream_h264_source.cpp
zm_rtsp_server_stream_av1_source.cpp
zm_rtsp_server_stream_audio_source.cpp
zm_rtsp_server_stream_video_source.cpp
zm_server.cpp
zm_signal.cpp
zm_stream.cpp
zm_stream_socket.cpp
zm_stream_socket_client.cpp
zm_stream_socket_protocol.cpp
zm_swscale.cpp
zm_tag.cpp
zm_time.cpp
zm_uri.cpp
zm_user.cpp
zm_utils.cpp
zm_videostore.cpp
zm_zone.cpp
zm_storage.cpp)
if(GSOAP_FOUND)
set(ZM_BIN_SRC_FILES
${ZM_BIN_SRC_FILES}
bindings.h
${CMAKE_BINARY_DIR}/generated/soapPullPointSubscriptionBindingProxy.cpp
${CMAKE_BINARY_DIR}/generated/soapC.cpp
${GSOAP_PLUGIN_DIR}/smdevp.c
${GSOAP_PLUGIN_DIR}/mecevp.c
${GSOAP_PLUGIN_DIR}/wsaapi.c
${GSOAP_PLUGIN_DIR}/wsseapi.c
${GSOAP_PLUGIN_DIR}/logging.c
${GSOAP_PLUGIN_DIR}/../custom/struct_timeval.c
)
SET(GCC_COMPILE_FLAGS "-DWITH_OPENSSL -DWITH_DOM")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COMPILE_FLAGS}")
# gsoap's C plugins (smdevp.c, mecevp.c) need WITH_OPENSSL too, or stdsoap2.h
# skips <openssl/rand.h> and RAND_bytes is implicitly declared.
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${GCC_COMPILE_FLAGS}")
#Create the directory that will host files generated by GSOAP
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/generated)
#some files are generated by gsoap
set_source_files_properties( ${CMAKE_BINARY_DIR}/generated/soapClientLib.c PROPERTIES GENERATED TRUE )
set_source_files_properties( ${CMAKE_BINARY_DIR}/generated/soapC.c PROPERTIES GENERATED TRUE )
set_source_files_properties( ${CMAKE_BINARY_DIR}/generated/soapPullPointSubscriptionBindingProxy.cpp PROPERTIES GENERATED TRUE )
set_source_files_properties( ${GSOAP_PLUGIN_DIR}/smdevp.c PROPERTIES LANGUAGE C)
set_source_files_properties( ${GSOAP_PLUGIN_DIR}/mecevp.c PROPERTIES LANGUAGE C)
set_source_files_properties( ${GSOAP_PLUGIN_DIR}/wsaapi.c PROPERTIES LANGUAGE CXX)
set_source_files_properties( ${GSOAP_PLUGIN_DIR}/wsseapi.c PROPERTIES LANGUAGE CXX)
set_source_files_properties( ${GSOAP_PLUGIN_DIR}/logging.c PROPERTIES LANGUAGE C)
set_source_files_properties( ${GSOAP_PLUGIN_DIR}/../custom/struct_timeval.c PROPERTIES LANGUAGE CXX)
set_source_files_properties( ${GSOAP_PLUGIN_DIR}/smdevp.c PROPERTIES COMPILE_FLAGS "-Wno-implicit-fallthrough")
set_source_files_properties( ${GSOAP_PLUGIN_DIR}/mecevp.c PROPERTIES COMPILE_FLAGS "-Wno-implicit-fallthrough")
set_source_files_properties( ${GSOAP_PLUGIN_DIR}/wsaapi.c PROPERTIES COMPILE_FLAGS "-Wno-deprecated")
set_source_files_properties( ${GSOAP_PLUGIN_DIR}/wsseapi.c PROPERTIES COMPILE_FLAGS "-Wno-deprecated")
set_source_files_properties( ${GSOAP_PLUGIN_DIR}/logging.c PROPERTIES COMPILE_FLAGS "-Wno-deprecated")
set_source_files_properties( ${GSOAP_PLUGIN_DIR}/../custom/struct_timeval.c PROPERTIES COMPILE_FLAGS "-Wno-deprecated")
#Create a cmake target that generate gsoap files
add_custom_command(
OUTPUT ${CMAKE_BINARY_DIR}/generated/soapC.cpp
OUTPUT ${CMAKE_BINARY_DIR}/generated/soapPullPointSubscriptionBindingProxy.cpp
#COMMAND ${GSOAP_WSDL2H} -d -P -O2 -o ${CMAKE_BINARY_DIR}/generated/bindings.h http://www.onvif.org/onvif/ver10/events/wsdl/event.wsdl
#COMMAND echo '\#import \"wsse.h\"' >> ${CMAKE_BINARY_DIR}/generated/bindings.h
#COMMAND echo '\#import \"struct_timeval.h\"' >> ${CMAKE_BINARY_DIR}/generated/bindings.h
COMMAND ${GSOAP_SOAPCPP2} -a -n -2 -C -I ${GSOAP_PLUGIN_DIR}/.. -I ${GSOAP_PLUGIN_DIR}/../import/ -I ${GSOAP_PLUGIN_DIR}/../custom/ -d ${CMAKE_BINARY_DIR}/generated -j -x ${CMAKE_CURRENT_SOURCE_DIR}/bindings.h
COMMENT "CREATING STUBS AND GLUE CODE"
)
add_custom_target(GSOAP_GENERATION_TARGET
DEPENDS ${CMAKE_BINARY_DIR}/generated/soapC.cpp
DEPENDS ${CMAKE_BINARY_DIR}/generated/soapPullPointSubscriptionBindingProxy.cpp
DEPENDS ${GSOAP_PLUGIN_DIR}/smdevp.c
DEPENDS ${GSOAP_PLUGIN_DIR}/mecevp.c
DEPENDS ${GSOAP_PLUGIN_DIR}/wsaapi.c
DEPENDS ${GSOAP_PLUGIN_DIR}/wsseapi.c
DEPENDS ${GSOAP_PLUGIN_DIR}/logging.c
DEPENDS ${GSOAP_PLUGIN_DIR}/../custom/struct_timeval.c
)
endif()
# GCC 12+ only vectorizes with its very-cheap cost model at -O2, which leaves the
# per-pixel motion detection loop in zm_zone.cpp scalar in Release builds.
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
set_source_files_properties(zm_zone.cpp PROPERTIES COMPILE_OPTIONS "-fvect-cost-model=dynamic")
endif()
# A fix for cmake recompiling the source files for every target.
add_library(zm STATIC ${ZM_BIN_SRC_FILES})
target_include_directories(zm
PUBLIC
${CMAKE_BINARY_DIR}
${CMAKE_CURRENT_SOURCE_DIR}
../dep/booleval/include
${ZM_INCLUDE_DIRS}
)
if(ZM_STRIP_NEON)
target_compile_definitions(zm PRIVATE ZM_STRIP_NEON=1)
endif()
if(GSOAP_FOUND)
target_compile_definitions(zm PUBLIC WITH_GSOAP)
target_include_directories(zm
PUBLIC
${CMAKE_BINARY_DIR}/generated
${GSOAP_PLUGIN_DIR}/..
${GSOAP_INCLUDE_DIR})
endif()
target_link_libraries(zm
PUBLIC
FFMPEG::avcodec
FFMPEG::avdevice
FFMPEG::avformat
FFMPEG::avutil
FFMPEG::swresample
FFMPEG::swscale
libbcrypt::bcrypt
RtspServer::RtspServer
chmike::CxxUrl
martinmoene::span-lite
${ZM_BIN_LIBS}
${FILESYSTEM_LIBRARY}
PRIVATE
zm-core-interface)
if(GSOAP_FOUND)
target_link_libraries(zm
PUBLIC
${GSOAP_SSL_CXX_LIBRARIES}
${OPENSSL_SSL_LIBRARY}
${OPENSSL_CRYPTO_LIBRARY})
endif()
if(${ZM_JWT_BACKEND} STREQUAL "jwt_cpp")
target_link_libraries(zm
PUBLIC
jwt-cpp::jwt-cpp)
elseif(${ZM_JWT_BACKEND} STREQUAL "libjwt")
target_link_libraries(zm
PUBLIC
JWT::libjwt)
endif()
if(TARGET V4L2::videodev2)
target_link_libraries(zm
PRIVATE
V4L2::videodev2)
endif()
add_executable(zmc zmc.cpp)
add_executable(zma zma.cpp)
add_executable(zms zms.cpp)
add_executable(zmu zmu.cpp)
add_executable(zmbenchmark zmbenchmark.cpp)
if(GSOAP_FOUND)
#Make sure that the client is compiled only after gsoap has been processed
add_dependencies(zmc GSOAP_GENERATION_TARGET)
endif()
target_link_libraries(zmc
PRIVATE
zm-core-interface
zm
${ZM_EXTRA_LIBS}
${CMAKE_DL_LIBS})
target_link_libraries(zma
PRIVATE
zm-core-interface
zm
${ZM_EXTRA_LIBS}
${CMAKE_DL_LIBS})
target_link_libraries(zms
PRIVATE
zm-core-interface
zm
${ZM_EXTRA_LIBS}
${CMAKE_DL_LIBS})
target_link_libraries(zmu
PRIVATE
zm-core-interface
zm
${ZM_EXTRA_LIBS}
${CMAKE_DL_LIBS})
target_link_libraries(zmbenchmark
PRIVATE
zm-core-interface
zm
${ZM_EXTRA_LIBS}
${CMAKE_DL_LIBS})
# Generate man files for the binaries destined for the bin folder
if(BUILD_MAN)
foreach(CBINARY zmc zmu)
POD2MAN(${CMAKE_CURRENT_SOURCE_DIR}/${CBINARY}.cpp ${CBINARY} 8 ${ZM_MANPAGE_DEST_PREFIX})
endforeach(CBINARY zmc zmu)
endif()
install(TARGETS zmc zma zmu RUNTIME DESTINATION "${CMAKE_INSTALL_FULL_BINDIR}" PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
install(TARGETS zms RUNTIME DESTINATION "${ZM_CGIDIR}" PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
install(CODE "execute_process(COMMAND ln -sf zms nph-zms WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})")
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/nph-zms DESTINATION "${ZM_CGIDIR}")
if(HAVE_RTSP_SERVER)
add_executable(zm_rtsp_server zm_rtsp_server.cpp)
target_link_libraries(zm_rtsp_server
PRIVATE
zm-core-interface
zm
${ZM_EXTRA_LIBS}
${CMAKE_DL_LIBS})
install(TARGETS zm_rtsp_server RUNTIME DESTINATION "${CMAKE_INSTALL_FULL_BINDIR}" PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
endif()