Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Z
ZLMediaKit
概览
Overview
Details
Activity
Cycle Analytics
版本库
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
问题
0
Issues
0
列表
Board
标记
里程碑
合并请求
0
Merge Requests
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
Snippets
成员
Collapse sidebar
Close sidebar
活动
图像
聊天
创建新问题
作业
提交
Issue Boards
Open sidebar
张翔宇
ZLMediaKit
Commits
9d3ead61
Commit
9d3ead61
authored
Jul 25, 2022
by
Xiaofeng Wang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
整理 CMakeLists.txt
parent
8192b37c
隐藏空白字符变更
内嵌
并排
正在显示
10 个修改的文件
包含
993 行增加
和
625 行删除
+993
-625
3rdpart/CMakeLists.txt
+185
-0
CMakeLists.txt
+373
-482
api/CMakeLists.txt
+67
-28
api/tests/CMakeLists.txt
+39
-20
player/CMakeLists.txt
+57
-34
server/CMakeLists.txt
+42
-21
src/CMakeLists.txt
+65
-0
srt/CMakeLists.txt
+44
-0
tests/CMakeLists.txt
+51
-40
webrtc/CMakeLists.txt
+70
-0
没有找到文件。
3rdpart/CMakeLists.txt
0 → 100644
查看文件 @
9d3ead61
# MIT License
#
# Copyright (c) 2016-2022 The ZLMediaKit project authors. All Rights Reserved.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
#
##############################################################################
# jsoncpp
aux_source_directory
(
${
CMAKE_CURRENT_SOURCE_DIR
}
/jsoncpp JSONCPP_SRC_LIST
)
add_library
(
jsoncpp STATIC
${
JSONCPP_SRC_LIST
}
)
target_compile_options
(
jsoncpp
PRIVATE
${
COMPILE_OPTIONS_DEFAULT
}
)
target_include_directories
(
jsoncpp
PRIVATE
"$<BUILD_INTERFACE:
${
CMAKE_CURRENT_SOURCE_DIR
}
>"
PUBLIC
"$<BUILD_INTERFACE:
${
CMAKE_CURRENT_SOURCE_DIR
}
>"
)
update_cached_list
(
MK_LINK_LIBRARIES jsoncpp
)
##############################################################################
# media-server
set
(
MediaServer_ROOT
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/media-server"
)
# TODO: 补一个函数处理各种库
# 添加 mov、flv 库用于 MP4 录制
if
(
ENABLE_MP4
)
message
(
STATUS
"ENABLE_MP4 defined"
)
# MOV
set
(
MediaServer_MOV_ROOT
${
MediaServer_ROOT
}
/libmov
)
aux_source_directory
(
${
MediaServer_MOV_ROOT
}
/include MOV_SRC_LIST
)
aux_source_directory
(
${
MediaServer_MOV_ROOT
}
/source MOV_SRC_LIST
)
add_library
(
mov STATIC
${
MOV_SRC_LIST
}
)
add_library
(
MediaServer::mov ALIAS mov
)
target_compile_definitions
(
mov
PUBLIC -DENABLE_MP4
)
target_compile_options
(
mov
PRIVATE
${
COMPILE_OPTIONS_DEFAULT
}
)
target_include_directories
(
mov
PRIVATE
"$<BUILD_INTERFACE:
${
MediaServer_MOV_ROOT
}
/include>"
PUBLIC
"$<BUILD_INTERFACE:
${
MediaServer_MOV_ROOT
}
/include>"
)
# FLV
set
(
MediaServer_FLV_ROOT
${
MediaServer_ROOT
}
/libflv
)
aux_source_directory
(
${
MediaServer_FLV_ROOT
}
/include FLV_SRC_LIST
)
aux_source_directory
(
${
MediaServer_FLV_ROOT
}
/source FLV_SRC_LIST
)
add_library
(
flv STATIC
${
FLV_SRC_LIST
}
)
add_library
(
MediaServer::flv ALIAS flv
)
target_compile_options
(
flv
PRIVATE
${
COMPILE_OPTIONS_DEFAULT
}
)
target_include_directories
(
flv
PRIVATE
"$<BUILD_INTERFACE:
${
MediaServer_FLV_ROOT
}
/include>"
PUBLIC
"$<BUILD_INTERFACE:
${
MediaServer_FLV_ROOT
}
/include>"
)
update_cached_list
(
MK_LINK_LIBRARIES
MediaServer::flv MediaServer::mov
)
update_cached_list
(
MK_COMPILE_DEFINITIONS
ENABLE_MP4
)
endif
()
# 添加 mpeg 用于支持 ts 生成
if
(
ENABLE_RTPPROXY OR ENABLE_HLS
)
# mpeg
set
(
MediaServer_MPEG_ROOT
${
MediaServer_ROOT
}
/libmpeg
)
aux_source_directory
(
${
MediaServer_MPEG_ROOT
}
/include MPEG_SRC_LIST
)
aux_source_directory
(
${
MediaServer_MPEG_ROOT
}
/source MPEG_SRC_LIST
)
add_library
(
mpeg STATIC
${
MPEG_SRC_LIST
}
)
add_library
(
MediaServer::mpeg ALIAS mpeg
)
target_compile_options
(
mpeg
PRIVATE
${
COMPILE_OPTIONS_DEFAULT
}
)
target_include_directories
(
mpeg
PRIVATE
"$<BUILD_INTERFACE:
${
MediaServer_MPEG_ROOT
}
/include>"
PUBLIC
"$<BUILD_INTERFACE:
${
MediaServer_MPEG_ROOT
}
/include>"
)
update_cached_list
(
MK_LINK_LIBRARIES MediaServer::mpeg
)
if
(
ENABLE_RTPPROXY
)
update_cached_list
(
MK_COMPILE_DEFINITIONS ENABLE_RTPPROXY
)
endif
()
if
(
ENABLE_HLS
)
update_cached_list
(
MK_COMPILE_DEFINITIONS ENABLE_HLS
)
endif
()
endif
()
##############################################################################
# toolkit
# TODO: 改造 toolkit 以便直接引用
include
(
CheckStructHasMember
)
include
(
CheckSymbolExists
)
# 检查 sendmmsg 相关依赖并设置对应的宏
#list(APPEND CMAKE_REQUIRED_DEFINITIONS -D_GNU_SOURCE)
check_struct_has_member
(
"struct mmsghdr"
msg_hdr sys/socket.h HAVE_MMSG_HDR
)
check_symbol_exists
(
sendmmsg sys/socket.h HAVE_SENDMMSG_API
)
check_symbol_exists
(
recvmmsg sys/socket.h HAVE_RECVMMSG_API
)
set
(
COMPILE_DEFINITIONS
)
if
(
HAVE_MMSG_HDR
)
list
(
APPEND COMPILE_DEFINITIONS HAVE_MMSG_HDR
)
endif
()
if
(
HAVE_SENDMMSG_API
)
list
(
APPEND COMPILE_DEFINITIONS HAVE_SENDMMSG_API
)
endif
()
if
(
HAVE_RECVMMSG_API
)
list
(
APPEND COMPILE_DEFINITIONS HAVE_RECVMMSG_API
)
endif
()
set
(
ToolKit_ROOT
${
CMAKE_CURRENT_SOURCE_DIR
}
/ZLToolKit
)
# 收集源代码
file
(
GLOB ToolKit_SRC_LIST
${
ToolKit_ROOT
}
/src/*/*.cpp
${
ToolKit_ROOT
}
/src/*/*.h
${
ToolKit_ROOT
}
/src/*/*.c
)
if
(
IOS
)
list
(
APPEND ToolKit_SRC_LIST
${
ToolKit_ROOT
}
/Network/Socket_ios.mm
)
endif
()
# 去除 win32 的适配代码
if
(
NOT WIN32
)
list
(
REMOVE_ITEM ToolKit_SRC_LIST
${
ToolKit_ROOT
}
/win32/getopt.c
)
else
()
# 防止 Windows.h 包含 Winsock.h
list
(
APPEND COMPILE_DEFINITIONS
WIN32_LEAN_AND_MEAN MP4V2_NO_STDINT_DEFS
# 禁用警告
_CRT_SECURE_NO_WARNINGS _WINSOCK_DEPRECATED_NO_WARNINGS
)
endif
()
# 添加库
add_library
(
zltoolkit STATIC
${
ToolKit_SRC_LIST
}
)
add_library
(
ZLMediaKit::ToolKit ALIAS zltoolkit
)
target_compile_definitions
(
zltoolkit
PRIVATE
${
COMPILE_DEFINITIONS
}
)
target_compile_options
(
zltoolkit
PRIVATE
${
COMPILE_OPTIONS_DEFAULT
}
)
target_include_directories
(
zltoolkit
PRIVATE
"$<BUILD_INTERFACE:
${
ToolKit_ROOT
}
/src>"
PUBLIC
"$<BUILD_INTERFACE:
${
ToolKit_ROOT
}
>/src"
)
update_cached_list
(
MK_LINK_LIBRARIES ZLMediaKit::ToolKit
)
if
(
USE_SOLUTION_FOLDERS
AND
(
NOT GROUP_BY_EXPLORER
))
# 在 IDE 中对文件进行分组, 源文件和头文件分开
set_file_group
(
${
ToolKit_ROOT
}
/src
${
ToolKit_SRC_LIST
}
)
endif
()
# 未在使用
if
(
ENABLE_CXX_API
)
# 保留目录结构
install
(
DIRECTORY
${
ToolKit_ROOT
}
/
DESTINATION
${
INSTALL_PATH_INCLUDE
}
/ZLToolKit
REGEX
"(.*[.](md|cpp)|win32)$"
EXCLUDE
)
install
(
TARGETS zltoolkit
DESTINATION
${
INSTALL_PATH_LIB
}
)
endif
()
CMakeLists.txt
查看文件 @
9d3ead61
project
(
ZLMediaKit
)
# MIT License
#
# Copyright (c) 2016-2022 The ZLMediaKit project authors. All Rights Reserved.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
#
cmake_minimum_required
(
VERSION 3.1.3
)
include
(
CheckStructHasMember
)
include
(
CheckSymbolExists
)
# 检查sendmmsg相关依赖并设置对应的宏
list
(
APPEND CMAKE_REQUIRED_DEFINITIONS -D_GNU_SOURCE
)
check_struct_has_member
(
"struct mmsghdr"
msg_hdr sys/socket.h HAVE_MMSG_HDR
)
check_symbol_exists
(
sendmmsg sys/socket.h HAVE_SENDMMSG_API
)
check_symbol_exists
(
recvmmsg sys/socket.h HAVE_RECVMMSG_API
)
# 加载自定义模块
list
(
APPEND CMAKE_MODULE_PATH
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/cmake"
)
if
(
HAVE_MMSG_HDR
)
add_definitions
(
-DHAVE_MMSG_HDR
)
endif
()
if
(
HAVE_SENDMMSG_API
)
add_definitions
(
-DHAVE_SENDMMSG_API
)
endif
()
if
(
HAVE_RECVMMSG_API
)
add_definitions
(
-DHAVE_RECVMMSG_API
)
endif
()
#使能c++11
project
(
ZLMediaKit LANGUAGES C CXX
)
# 使能 C++11
set
(
CMAKE_CXX_STANDARD 11
)
#加载自定义模块
set
(
CMAKE_MODULE_PATH
${
CMAKE_MODULE_PATH
}
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/cmake"
)
set
(
DEP_ROOT_DIR
${
CMAKE_SOURCE_DIR
}
/3rdpart/external-
${
CMAKE_SYSTEM_NAME
}
)
if
(
NOT EXISTS
${
DEP_ROOT_DIR
}
)
file
(
MAKE_DIRECTORY
${
DEP_ROOT_DIR
}
)
endif
()
find_program
(
CCACHE_FOUND ccache
)
if
(
CCACHE_FOUND
)
set_property
(
GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache
)
set_property
(
GLOBAL PROPERTY RULE_LAUNCH_LINK ccache
)
endif
(
CCACHE_FOUND
)
#add_compile_options(-D__STDC_FORMAT_MACROS)
if
(
CMAKE_COMPILER_IS_GNUCXX
)
add_compile_options
(
-D__STDC_FORMAT_MACROS
)
message
(
STATUS
"-D__STDC_FORMAT_MACROS"
)
endif
(
CMAKE_COMPILER_IS_GNUCXX
)
#set(CMAKE_BUILD_TYPE "Release")
if
(
"
${
CMAKE_BUILD_TYPE
}
"
STREQUAL
""
)
set
(
CMAKE_BUILD_TYPE
"Debug"
)
endif
()
message
(
STATUS
"编译类型:
${
CMAKE_BUILD_TYPE
}
"
)
#设置bin和lib库目录
set
(
RELEASE_DIR
${
CMAKE_CURRENT_SOURCE_DIR
}
/release
)
if
(
CMAKE_SYSTEM_NAME MATCHES
"Linux"
)
SET
(
LIBRARY_OUTPUT_PATH
${
RELEASE_DIR
}
/linux/
${
CMAKE_BUILD_TYPE
}
)
SET
(
EXECUTABLE_OUTPUT_PATH
${
RELEASE_DIR
}
/linux/
${
CMAKE_BUILD_TYPE
}
)
add_compile_options
(
-fPIC -Wall -Wno-unused-variable -Wno-unused-value
)
INCLUDE
(
CheckCXXSourceCompiles
)
file
(
READ
${
CMAKE_CURRENT_SOURCE_DIR
}
/cmake/checks/atomic_check.cpp atomic_check_cpp
)
CHECK_CXX_SOURCE_COMPILES
(
"
${
atomic_check_cpp
}
"
HAVE_CXX_ATOMICS_WITHOUT_LIB
)
if
(
NOT HAVE_CXX_ATOMICS_WITHOUT_LIB
)
list
(
APPEND CMAKE_REQUIRED_LIBRARIES
"atomic"
)
CHECK_CXX_SOURCE_COMPILES
(
"
${
atomic_check_cpp
}
"
HAVE_CXX_ATOMICS_WITH_LIB
)
if
(
NOT HAVE_CXX_ATOMICS_WITH_LIB
)
message
(
WARNING
"Compiler doesn't support std::atomic<long long>"
)
else
()
set
(
CMAKE_CXX_LINK_FLAGS
"
${
CMAKE_CXX_LINK_FLAGS
}
-latomic"
)
endif
()
endif
()
elseif
(
CMAKE_SYSTEM_NAME MATCHES
"Windows"
)
if
(
CMAKE_CL_64
)
set
(
CL_32_64 64
)
else
()
set
(
CL_32_64 32
)
endif
()
SET
(
LIBRARY_OUTPUT_PATH
${
RELEASE_DIR
}
/windows
${
CL_32_64
}
/
${
CMAKE_BUILD_TYPE
}
)
SET
(
EXECUTABLE_OUTPUT_PATH
${
RELEASE_DIR
}
/windows
${
CL_32_64
}
/
${
CMAKE_BUILD_TYPE
}
)
elseif
(
CMAKE_SYSTEM_NAME MATCHES
"Darwin"
)
SET
(
LIBRARY_OUTPUT_PATH
${
RELEASE_DIR
}
/mac/
${
CMAKE_BUILD_TYPE
}
)
SET
(
EXECUTABLE_OUTPUT_PATH
${
RELEASE_DIR
}
/mac/
${
CMAKE_BUILD_TYPE
}
)
add_compile_options
(
-Wall -Wno-unused-variable -Wno-unused-value
)
endif
()
LINK_DIRECTORIES
(
${
LIBRARY_OUTPUT_PATH
}
)
#设置工程源码根目录
set
(
ToolKit_Root
${
CMAKE_CURRENT_SOURCE_DIR
}
/3rdpart/ZLToolKit/src
)
set
(
MediaKit_Root
${
CMAKE_CURRENT_SOURCE_DIR
}
/src
)
set
(
MediaServer_Root
${
CMAKE_CURRENT_SOURCE_DIR
}
/3rdpart/media-server
)
#设置头文件目录
INCLUDE_DIRECTORIES
(
${
ToolKit_Root
}
)
INCLUDE_DIRECTORIES
(
${
MediaKit_Root
}
)
INCLUDE_DIRECTORIES
(
${
CMAKE_CURRENT_SOURCE_DIR
}
/3rdpart
)
option
(
ENABLE_HLS
"Enable HLS"
true
)
option
(
ENABLE_OPENSSL
"Enable OpenSSL"
true
)
option
(
ENABLE_MYSQL
"Enable MySQL"
false
)
option
(
ENABLE_FAAC
"Enable FAAC"
false
)
option
(
ENABLE_X264
"Enable x264"
false
)
option
(
ENABLE_MP4
"Enable MP4"
true
)
option
(
ENABLE_RTPPROXY
"Enable RTPPROXY"
true
)
option
(
ENABLE_API
"Enable C API SDK"
true
)
option
(
ENABLE_CXX_API
"Enable C++ API SDK"
false
)
option
(
ENABLE_TESTS
"Enable Tests"
true
)
option
(
ENABLE_SERVER
"Enable Server"
true
)
option
(
ENABLE_SERVER_LIB
"Enable server as android static library"
false
)
option
(
ENABLE_MEM_DEBUG
"Enable Memory Debug"
false
)
option
(
ENABLE_ASAN
"Enable Address Sanitize"
false
)
option
(
ENABLE_WEBRTC
"Enable WebRTC"
true
)
option
(
ENABLE_PLAYER
"Enable Player"
true
)
option
(
ENABLE_FFMPEG
"Enable FFmpeg"
false
)
option
(
ENABLE_MSVC_MT
"Enable MSVC Mt/Mtd lib"
true
)
option
(
ENABLE_API_STATIC_LIB
"Enable mk_api static lib"
false
)
option
(
ENABLE_API
"Enable C API SDK"
ON
)
option
(
ENABLE_API_STATIC_LIB
"Enable mk_api static lib"
OFF
)
option
(
ENABLE_ASAN
"Enable Address Sanitize"
OFF
)
option
(
ENABLE_CXX_API
"Enable C++ API SDK"
OFF
)
option
(
ENABLE_FAAC
"Enable FAAC"
OFF
)
option
(
ENABLE_FFMPEG
"Enable FFmpeg"
OFF
)
option
(
ENABLE_HLS
"Enable HLS"
ON
)
option
(
ENABLE_JEMALLOC_STATIC
"Enable static linking to the jemalloc library"
OFF
)
option
(
ENABLE_MEM_DEBUG
"Enable Memory Debug"
OFF
)
option
(
ENABLE_MP4
"Enable MP4"
ON
)
option
(
ENABLE_MSVC_MT
"Enable MSVC Mt/Mtd lib"
ON
)
option
(
ENABLE_MYSQL
"Enable MySQL"
OFF
)
option
(
ENABLE_OPENSSL
"Enable OpenSSL"
ON
)
option
(
ENABLE_PLAYER
"Enable Player"
ON
)
option
(
ENABLE_RTPPROXY
"Enable RTPPROXY"
ON
)
option
(
ENABLE_SERVER
"Enable Server"
ON
)
option
(
ENABLE_SERVER_LIB
"Enable server as android static library"
OFF
)
option
(
ENABLE_SRT
"Enable SRT"
ON
)
option
(
ENABLE_TESTS
"Enable Tests"
ON
)
option
(
ENABLE_WEBRTC
"Enable WebRTC"
ON
)
option
(
ENABLE_X264
"Enable x264"
OFF
)
option
(
USE_SOLUTION_FOLDERS
"Enable solution dir supported"
ON
)
option
(
ENABLE_SRT
"Enable SRT"
true
)
option
(
ENABLE_JEMALLOC_STATIC
"Enable static linking to the jemalloc library"
false
)
# ----------------------------------------------------------------------------
# Solution folders:
# ----------------------------------------------------------------------------
if
(
USE_SOLUTION_FOLDERS
)
set_property
(
GLOBAL PROPERTY USE_FOLDERS ON
)
set_property
(
GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER
"CMakeTargets"
)
##############################################################################
if
(
"
${
CMAKE_BUILD_TYPE
}
"
STREQUAL
""
)
set
(
CMAKE_BUILD_TYPE
"Debug"
)
endif
()
function
(
set_file_group prefix
)
message
(
STATUS
"set_file_group "
${
prefix
}
" "
${
ARGC
}
)
foreach
(
FILE IN LISTS ARGN 1
)
# Get the directory of the source file
get_filename_component
(
PARENT_DIR
"
${
FILE
}
"
DIRECTORY
)
# Remove common directory prefix to make the group
string
(
REPLACE
"
${
prefix
}
"
""
GROUP
"
${
PARENT_DIR
}
"
)
# Make sure we are using windows slashes
string
(
REPLACE
"/"
"
\\
"
GROUP
"
${
GROUP
}
"
)
# Group into "Source Files" and "Header Files"
#if ("${FILE}" MATCHES ".*\\.cpp")
# set(GROUP "Source Files${GROUP}")
#elseif("${FILE}" MATCHES ".*\\.h")
# set(GROUP "Header Files${GROUP}")
#endif()
#message(STATUS ${GROUP} " : " ${FILE})
source_group
(
"
${
GROUP
}
"
FILES
"
${
FILE
}
"
)
endforeach
()
endfunction
()
message
(
STATUS
"编译类型:
${
CMAKE_BUILD_TYPE
}
"
)
# 方便排查编译问题, 需要 FORCE CACHE, 否则需要命令行设置才生效
set
(
CMAKE_VERBOSE_MAKEFILE ON CACHE INTERNAL
""
FORCE
)
if
(
MSVC AND ENABLE_MSVC_MT
)
set
(
CompilerFlags
CMAKE_CXX_FLAGS
CMAKE_CXX_FLAGS_DEBUG
CMAKE_CXX_FLAGS_RELEASE
CMAKE_C_FLAGS
CMAKE_C_FLAGS_DEBUG
CMAKE_C_FLAGS_RELEASE
)
foreach
(
CompilerFlag
${
CompilerFlags
}
)
string
(
REPLACE
"/MD"
"/MT"
${
CompilerFlag
}
"
${${
CompilerFlag
}}
"
)
endforeach
()
set
(
CMAKE_INCLUDE_CURRENT_DIR ON
)
# 安装路径
if
(
NOT CMAKE_INSTALL_PREFIX
)
if
(
UNIX
)
set
(
INSTALL_PATH_LIB lib
${
LIB_SUFFIX
}
)
set
(
INSTALL_PATH_INCLUDE include
)
set
(
INSTALL_PATH_RUNTIME bin
)
elseif
(
WIN32
)
# Windows 下安装到了用户主目录下?
set
(
INSTALL_PATH_LIB $ENV{HOME}/
${
CMAKE_PROJECT_NAME
}
/lib
)
set
(
INSTALL_PATH_INCLUDE $ENV{HOME}/
${
CMAKE_PROJECT_NAME
}
/include
)
else
()
message
(
WARNING
"该平台(
${
CMAKE_SYSTEM_NAME
}
)下暂未设置安装路径"
)
endif
()
else
()
set
(
INSTALL_PATH_LIB
${
CMAKE_INSTALL_PREFIX
}
/lib
${
LIB_SUFFIX
}
)
set
(
INSTALL_PATH_INCLUDE
${
CMAKE_INSTALL_PREFIX
}
/include
)
set
(
INSTALL_PATH_RUNTIME
${
CMAKE_INSTALL_PREFIX
}
/bin
)
endif
()
# 添加git版本信息
string
(
TOLOWER
${
CMAKE_SYSTEM_NAME
}
SYSTEM_NAME_LOWER
)
# 设置输出目录, 包括 bin, lib 以及其他文件
# Windows 也不再区分 32/64
set
(
OUTPUT_DIR
${
CMAKE_CURRENT_SOURCE_DIR
}
/release/
${
SYSTEM_NAME_LOWER
}
/
${
CMAKE_BUILD_TYPE
}
)
set
(
LIBRARY_OUTPUT_PATH
${
OUTPUT_DIR
}
)
set
(
EXECUTABLE_OUTPUT_PATH
${
OUTPUT_DIR
}
)
# 添加 git 版本信息
set
(
COMMIT_HASH
"Git_NotFound_Unkown_commit"
)
set
(
BRANCH_NAME
"Git_NotFound_Unkown_branch"
)
set
(
BUILD_TIME
""
)
string
(
TIMESTAMP BUILD_TIME
"%Y
/%m/%d-
%H:%M:%S"
)
string
(
TIMESTAMP BUILD_TIME
"%Y
-%m-%d
%H:%M:%S"
)
find_package
(
Git QUIET
)
if
(
GIT_FOUND
)
execute_process
(
COMMAND
${
GIT_EXECUTABLE
}
log -1 --pretty=format:%h
OUTPUT_VARIABLE COMMIT_HASH
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
WORKING_DIRECTORY
${
CMAKE_CURRENT_SOURCE_DIR
}
)
execute_process
(
COMMAND
${
GIT_EXECUTABLE
}
symbolic-ref --short -q HEAD
OUTPUT_VARIABLE BRANCH_NAME
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
WORKING_DIRECTORY
${
CMAKE_CURRENT_SOURCE_DIR
}
)
endif
()
if
(
GIT_FOUND
)
execute_process
(
COMMAND
${
GIT_EXECUTABLE
}
rev-parse --short=7 HEAD
OUTPUT_VARIABLE COMMIT_HASH
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
WORKING_DIRECTORY
${
CMAKE_CURRENT_SOURCE_DIR
}
)
execute_process
(
COMMAND
${
GIT_EXECUTABLE
}
symbolic-ref --short -q HEAD
OUTPUT_VARIABLE BRANCH_NAME
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
WORKING_DIRECTORY
${
CMAKE_CURRENT_SOURCE_DIR
}
)
endif
()
configure_file
(
${
CMAKE_CURRENT_SOURCE_DIR
}
/version.h.ini
${
CMAKE_BINARY_DIR
}
/version.h
@ONLY
)
${
CMAKE_CURRENT_SOURCE_DIR
}
/version.h.ini
${
CMAKE_BINARY_DIR
}
/version.h
@ONLY
)
add_definitions
(
-DENABLE_VERSION
)
include_directories
(
${
CMAKE_BINARY_DIR
}
)
message
(
STATUS
"Git version is
${
BRANCH_NAME
}
:
${
COMMIT_HASH
}
:
${
BUILD_TIME
}
"
)
if
(
ENABLE_MEM_DEBUG
)
set
(
CMAKE_CXX_FLAGS
"
${
CMAKE_CXX_FLAGS
}
-Wl,-wrap,free -Wl,-wrap,malloc -Wl,-wrap,realloc -Wl,-wrap,calloc"
)
set
(
CMAKE_C_FLAGS
"
${
CMAKE_C_FLAGS
}
-Wl,-wrap,free -Wl,-wrap,malloc -Wl,-wrap,realloc -Wl,-wrap,calloc"
)
add_definitions
(
-DENABLE_MEM_DEBUG
)
message
(
STATUS
"已启用内存调试功能"
)
endif
()
if
(
ENABLE_ASAN
)
set
(
CMAKE_CXX_FLAGS
"
${
CMAKE_CXX_FLAGS
}
-fsanitize=address -fno-omit-frame-pointer"
)
set
(
CMAKE_C_FLAGS
"
${
CMAKE_C_FLAGS
}
-fsanitize=address -fno-omit-frame-pointer"
)
message
(
STATUS
"已启用Address Sanitize"
)
endif
()
set
(
LINK_LIB_LIST zlmediakit zltoolkit
)
if
(
ENABLE_FFMPEG
)
find_package
(
PkgConfig QUIET
)
#查找ffmpeg/libutil是否安装
if
(
PKG_CONFIG_FOUND
)
pkg_check_modules
(
AVUTIL QUIET IMPORTED_TARGET libavutil
)
if
(
AVUTIL_FOUND
)
include_directories
(
${
AVUTIL_INCLUDE_DIRS
}
)
link_directories
(
${
AVUTIL_LIBRARY_DIRS
}
)
list
(
APPEND LINK_LIB_LIST
${
AVUTIL_LIBRARIES
}
)
message
(
STATUS
"found library:
${
AVUTIL_LIBRARIES
}
"
)
endif
()
endif
()
##############################################################################
#查找ffmpeg/libavcodec是否安装
if
(
PKG_CONFIG_FOUND
)
pkg_check_modules
(
AVCODEC QUIET IMPORTED_TARGET libavcodec
)
if
(
AVCODEC_FOUND
)
include_directories
(
${
AVCODEC_INCLUDE_DIRS
}
)
link_directories
(
${
AVCODEC_LIBRARY_DIRS
}
)
list
(
APPEND LINK_LIB_LIST
${
AVCODEC_LIBRARIES
}
)
message
(
STATUS
"found library:
${
AVCODEC_LIBRARIES
}
"
)
endif
()
endif
()
# 方便修改全局变量
function
(
update_cached name value
)
set
(
"
${
name
}
"
"
${
value
}
"
CACHE INTERNAL
"*** Internal ***"
FORCE
)
endfunction
()
#查找ffmpeg/libswscale是否安装
if
(
PKG_CONFIG_FOUND
)
pkg_check_modules
(
SWSCALE QUIET IMPORTED_TARGET libswscale
)
if
(
SWSCALE_FOUND
)
include_directories
(
${
SWSCALE_INCLUDE_DIRS
}
)
link_directories
(
${
SWSCALE_LIBRARY_DIRS
}
)
list
(
APPEND LINK_LIB_LIST
${
SWSCALE_LIBRARIES
}
)
message
(
STATUS
"found library:
${
SWSCALE_LIBRARIES
}
"
)
endif
()
endif
()
function
(
update_cached_list name
)
set
(
_tmp_list
"
${${
name
}}
"
)
list
(
APPEND _tmp_list
"
${
ARGN
}
"
)
list
(
REMOVE_DUPLICATES _tmp_list
)
update_cached
(
${
name
}
"
${
_tmp_list
}
"
)
endfunction
()
#查找ffmpeg/libswresample是否安装
if
(
PKG_CONFIG_FOUND
)
pkg_check_modules
(
SWRESAMPLE QUIET IMPORTED_TARGET libswresample
)
if
(
SWRESAMPLE_FOUND
)
include_directories
(
${
SWRESAMPLE_INCLUDE_DIRS
}
)
link_directories
(
${
SWRESAMPLE_LIBRARY_DIRS
}
)
list
(
APPEND LINK_LIB_LIST
${
SWRESAMPLE_LIBRARIES
}
)
message
(
STATUS
"found library:
${
SWRESAMPLE_LIBRARIES
}
"
)
endif
()
endif
()
# TODO:
function
(
set_file_group prefix
)
message
(
STATUS
"set_file_group "
${
prefix
}
" "
${
ARGC
}
)
foreach
(
FILE IN LISTS ARGN 1
)
# Get the directory of the source file
get_filename_component
(
PARENT_DIR
"
${
FILE
}
"
DIRECTORY
)
#查找ffmpeg/libutil是否安装
if
(
NOT AVUTIL_FOUND
)
find_package
(
AVUTIL QUIET
)
if
(
AVUTIL_FOUND
)
include_directories
(
${
AVUTIL_INCLUDE_DIR
}
)
list
(
APPEND LINK_LIB_LIST
${
AVUTIL_LIBRARIES
}
)
message
(
STATUS
"found library:
${
AVUTIL_LIBRARIES
}
"
)
endif
()
endif
()
# Remove common directory prefix to make the group
string
(
REPLACE
"
${
prefix
}
"
""
GROUP
"
${
PARENT_DIR
}
"
)
#查找ffmpeg/libavcodec是否安装
if
(
NOT AVCODEC_FOUND
)
find_package
(
AVCODEC QUIET
)
if
(
AVCODEC_FOUND
)
include_directories
(
${
AVCODEC_INCLUDE_DIR
}
)
list
(
APPEND LINK_LIB_LIST
${
AVCODEC_LIBRARIES
}
)
message
(
STATUS
"found library:
${
AVCODEC_LIBRARIES
}
"
)
endif
()
endif
()
# Make sure we are using windows slashes
string
(
REPLACE
"/"
"
\\
"
GROUP
"
${
GROUP
}
"
)
#查找ffmpeg/libswscale是否安装
if
(
NOT SWSCALE_FOUND
)
find_package
(
SWSCALE QUIET
)
if
(
SWSCALE_FOUND
)
include_directories
(
${
SWSCALE_INCLUDE_DIR
}
)
list
(
APPEND LINK_LIB_LIST
${
SWSCALE_LIBRARIES
}
)
message
(
STATUS
"found library:
${
SWSCALE_LIBRARIES
}
"
)
endif
()
endif
()
source_group
(
"
${
GROUP
}
"
FILES
"
${
FILE
}
"
)
endforeach
()
endfunction
()
#查找ffmpeg/libswresample是否安装
if
(
NOT SWRESAMPLE_FOUND
)
find_package
(
SWRESAMPLE QUIET
)
if
(
SWRESAMPLE_FOUND
)
include_directories
(
${
SWRESAMPLE_INCLUDE_DIRS
}
)
list
(
APPEND LINK_LIB_LIST
${
SWRESAMPLE_LIBRARIES
}
)
message
(
STATUS
"found library:
${
SWRESAMPLE_LIBRARIES
}
"
)
endif
()
endif
()
if
(
AVUTIL_FOUND AND AVCODEC_FOUND AND SWSCALE_FOUND AND SWRESAMPLE_FOUND
)
add_definitions
(
-DENABLE_FFMPEG
)
list
(
APPEND LINK_LIB_LIST
${
CMAKE_DL_LIBS
}
)
else
()
set
(
ENABLE_FFMPEG off
)
message
(
WARNING
"ffmpeg相关功能未找到"
)
find_program
(
CCACHE_FOUND ccache
)
if
(
CCACHE_FOUND
)
set_property
(
GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache
)
set_property
(
GLOBAL PROPERTY RULE_LAUNCH_LINK ccache
)
endif
()
if
(
UNIX
)
# UNIX/Linux/Darwin
set
(
COMPILE_OPTIONS_DEFAULT
"-fPIC"
"-Wall;-Wextra"
"-Wno-unused-function;-Wno-unused-parameter;-Wno-unused-variable"
"-Wno-error=extra;-Wno-error=missing-field-initializers;-Wno-error=type-limits"
)
elseif
(
WIN32
)
# TODO: /wd4819 应该是不会生效
set
(
COMPILE_OPTIONS_DEFAULT
"/wd4819"
)
endif
()
# mediakit 以及各个 runtime 依赖
update_cached_list
(
MK_LINK_LIBRARIES
""
)
update_cached_list
(
MK_COMPILE_DEFINITIONS ENABLE_VERSION
)
# 多个模块依赖 ffmpeg 相关库, 统一查找
if
(
ENABLE_FFMPEG
)
find_package
(
PkgConfig QUIET
)
# 查找 ffmpeg/libutil 是否安装
if
(
PKG_CONFIG_FOUND
)
pkg_check_modules
(
AVUTIL QUIET IMPORTED_TARGET libavutil
)
if
(
AVUTIL_FOUND
)
update_cached_list
(
MK_LINK_LIBRARIES PkgConfig::AVUTIL
)
message
(
STATUS
"found library:
${
AVUTIL_LIBRARIES
}
"
)
endif
()
endif
()
# 查找 ffmpeg/libavcodec 是否安装
if
(
PKG_CONFIG_FOUND
)
pkg_check_modules
(
AVCODEC QUIET IMPORTED_TARGET libavcodec
)
if
(
AVCODEC_FOUND
)
update_cached_list
(
MK_LINK_LIBRARIES PkgConfig::AVCODEC
)
message
(
STATUS
"found library:
${
AVCODEC_LIBRARIES
}
"
)
endif
()
endif
()
# 查找 ffmpeg/libswscale 是否安装
if
(
PKG_CONFIG_FOUND
)
pkg_check_modules
(
SWSCALE QUIET IMPORTED_TARGET libswscale
)
if
(
SWSCALE_FOUND
)
update_cached_list
(
MK_LINK_LIBRARIES PkgConfig::SWSCALE
)
message
(
STATUS
"found library:
${
SWSCALE_LIBRARIES
}
"
)
endif
()
endif
()
# 查找 ffmpeg/libswresample 是否安装
if
(
PKG_CONFIG_FOUND
)
pkg_check_modules
(
SWRESAMPLE QUIET IMPORTED_TARGET libswresample
)
if
(
SWRESAMPLE_FOUND
)
update_cached_list
(
MK_LINK_LIBRARIES PkgConfig::SWRESAMPLE
)
message
(
STATUS
"found library:
${
SWRESAMPLE_LIBRARIES
}
"
)
endif
()
endif
()
# 查找 ffmpeg/libutil 是否安装
if
(
NOT AVUTIL_FOUND
)
find_package
(
AVUTIL QUIET
)
if
(
AVUTIL_FOUND
)
include_directories
(
SYSTEM
${
AVUTIL_INCLUDE_DIR
}
)
update_cached_list
(
MK_LINK_LIBRARIES
${
AVUTIL_LIBRARIES
}
)
message
(
STATUS
"found library:
${
AVUTIL_LIBRARIES
}
"
)
endif
()
endif
()
# 查找 ffmpeg/libavcodec 是否安装
if
(
NOT AVCODEC_FOUND
)
find_package
(
AVCODEC QUIET
)
if
(
AVCODEC_FOUND
)
include_directories
(
SYSTEM
${
AVCODEC_INCLUDE_DIR
}
)
update_cached_list
(
MK_LINK_LIBRARIES
${
AVCODEC_LIBRARIES
}
)
message
(
STATUS
"found library:
${
AVCODEC_LIBRARIES
}
"
)
endif
()
endif
()
# 查找 ffmpeg/libswscale 是否安装
if
(
NOT SWSCALE_FOUND
)
find_package
(
SWSCALE QUIET
)
if
(
SWSCALE_FOUND
)
include_directories
(
SYSTEM
${
SWSCALE_INCLUDE_DIR
}
)
update_cached_list
(
MK_LINK_LIBRARIES
${
SWSCALE_LIBRARIES
}
)
message
(
STATUS
"found library:
${
SWSCALE_LIBRARIES
}
"
)
endif
()
endif
()
# 查找 ffmpeg/libswresample 是否安装
if
(
NOT SWRESAMPLE_FOUND
)
find_package
(
SWRESAMPLE QUIET
)
if
(
SWRESAMPLE_FOUND
)
include_directories
(
SYSTEM
${
SWRESAMPLE_INCLUDE_DIRS
}
)
update_cached_list
(
MK_LINK_LIBRARIES
${
SWRESAMPLE_LIBRARIES
}
)
message
(
STATUS
"found library:
${
SWRESAMPLE_LIBRARIES
}
"
)
endif
()
endif
()
if
(
AVUTIL_FOUND AND AVCODEC_FOUND AND SWSCALE_FOUND AND SWRESAMPLE_FOUND
)
update_cached_list
(
MK_COMPILE_DEFINITIONS ENABLE_FFMPEG
)
update_cached_list
(
MK_LINK_LIBRARIES
${
CMAKE_DL_LIBS
}
)
else
()
set
(
ENABLE_FFMPEG OFF
)
message
(
WARNING
"ffmpeg 相关功能未找到"
)
endif
()
endif
()
endif
()
if
(
ENABLE_MEM_DEBUG
)
list
(
APPEND COMPILE_OPTIONS_DEFAULT
"-Wl,-wrap,free;-Wl,-wrap,malloc;-Wl,-wrap,realloc;-Wl,-wrap,calloc"
)
update_cached_list
(
MK_COMPILE_DEFINITIONS ENABLE_MEM_DEBUG
)
message
(
STATUS
"已启用内存调试功能"
)
endif
()
if
(
ENABLE_ASAN
)
list
(
APPEND COMPILE_OPTIONS_DEFAULT
"-fsanitize=address;-fno-omit-frame-pointer"
)
message
(
STATUS
"已启用 Address Sanitize"
)
endif
()
# TODO: 下载静态编译 jemalloc 后静态编译链接?
set
(
DEP_ROOT_DIR
${
CMAKE_CURRENT_SOURCE_DIR
}
/3rdpart/external-
${
CMAKE_SYSTEM_NAME
}
)
if
(
ENABLE_JEMALLOC_STATIC
)
include
(
cmake/Jemalloc.cmake
)
include_directories
(
${
DEP_ROOT_DIR
}
/
${
JEMALLOC_NAME
}
/include/jemalloc
)
link_directories
(
${
DEP_ROOT_DIR
}
/
${
JEMALLOC_NAME
}
/lib
)
set
(
JEMALLOC_ROOT_DIR
"
${
DEP_ROOT_DIR
}
/
${
JEMALLOC_NAME
}
"
)
endif
()
if
(
NOT EXISTS
${
DEP_ROOT_DIR
}
)
file
(
MAKE_DIRECTORY
${
DEP_ROOT_DIR
}
)
endif
()
#默认链接jemalloc库避免内存碎片
include
(
Jemalloc
)
include_directories
(
SYSTEM
${
DEP_ROOT_DIR
}
/
${
JEMALLOC_NAME
}
/include/jemalloc
)
link_directories
(
${
DEP_ROOT_DIR
}
/
${
JEMALLOC_NAME
}
/lib
)
# 用于影响后续查找过程
set
(
JEMALLOC_ROOT_DIR
"
${
DEP_ROOT_DIR
}
/
${
JEMALLOC_NAME
}
"
)
endif
()
# 默认链接 jemalloc 库避免内存碎片
find_package
(
JEMALLOC QUIET
)
if
(
JEMALLOC_FOUND
)
message
(
STATUS
"found library:
\"
${
JEMALLOC_LIBRARIES
}
\"
"
)
include_directories
(
${
JEMALLOC_INCLUDE_DIR
}
)
list
(
APPEND LINK_LIB_LIST
${
JEMALLOC_LIBRARIES
}
)
endif
()
if
(
JEMALLOC_FOUND
)
message
(
STATUS
"found library:
${
JEMALLOC_LIBRARIES
}
"
)
include_directories
(
${
JEMALLOC_INCLUDE_DIR
}
)
update_cached_list
(
MK_LINK_LIBRARIES
${
JEMALLOC_LIBRARIES
}
)
endif
()
#
查找openssl
是否安装
#
查找 openssl
是否安装
find_package
(
OpenSSL QUIET
)
if
(
OPENSSL_FOUND AND ENABLE_OPENSSL
)
message
(
STATUS
"found library:
${
OPENSSL_LIBRARIES
}
,
ENABLE_OPENSSL defined"
)
include_directories
(
${
OPENSSL_INCLUDE_DIR
}
)
add_definitions
(
-D
ENABLE_OPENSSL
)
list
(
APPEND LINK_LIB_LIST
${
OPENSSL_LIBRARIES
}
)
if
(
CMAKE_SYSTEM_NAME MATCHES
"Linux"
AND OPENSSL_USE_STATIC_LIBS
)
list
(
APPEND LINK_LIB_LIST dl
)
endif
()
else
()
set
(
ENABLE_OPENSSL off
)
message
(
WARNING
"openssl未找到,rtmp将不支持flash播放器,https/wss/rtsps/rtmps
也将失效"
)
endif
()
if
(
OPENSSL_FOUND AND ENABLE_OPENSSL
)
message
(
STATUS
"found library:
${
OPENSSL_LIBRARIES
}
,
ENABLE_OPENSSL defined"
)
include_directories
(
${
OPENSSL_INCLUDE_DIR
}
)
update_cached_list
(
MK_COMPILE_DEFINITIONS
ENABLE_OPENSSL
)
update_cached_list
(
MK_LINK_LIBRARIES
${
OPENSSL_LIBRARIES
}
)
if
(
CMAKE_SYSTEM_NAME MATCHES
"Linux"
AND OPENSSL_USE_STATIC_LIBS
)
update_cached_list
(
MK_LINK_LIBRARIES
${
CMAKE_DL_LIBS
}
)
endif
()
else
()
set
(
ENABLE_OPENSSL OFF
)
message
(
WARNING
"openssl 未找到, rtmp 将不支持 flash 播放器, https/wss/rtsps/rtmps
也将失效"
)
endif
()
#
查找mysql
是否安装
#
查找 mysql
是否安装
find_package
(
MYSQL QUIET
)
if
(
MYSQL_FOUND AND ENABLE_MYSQL
)
message
(
STATUS
"found library:
${
MYSQL_LIBRARIES
}
,ENABLE_MYSQL defined"
)
include_directories
(
${
MYSQL_INCLUDE_DIR
}
)
include_directories
(
${
MYSQL_INCLUDE_DIR
}
/mysql
)
add_definitions
(
-DENABLE_MYSQL
)
list
(
APPEND LINK_LIB_LIST
${
MYSQL_LIBRARIES
}
)
endif
()
#查找x264是否安装
if
(
MYSQL_FOUND AND ENABLE_MYSQL
)
message
(
STATUS
"found library:
${
MYSQL_LIBRARIES
}
, ENABLE_MYSQL defined"
)
include_directories
(
SYSTEM
${
MYSQL_INCLUDE_DIR
}
${
MYSQL_INCLUDE_DIR
}
/mysql
)
update_cached_list
(
MK_COMPILE_DEFINITIONS ENABLE_MYSQL
)
update_cached_list
(
MK_LINK_LIBRARIES
${
MYSQL_LIBRARIES
}
)
endif
()
# 查找 x264 是否安装
find_package
(
X264 QUIET
)
if
(
X264_FOUND AND ENABLE_X264
)
message
(
STATUS
"found library:
${
X264_LIBRARIES
}
,ENABLE_X264 defined"
)
include_directories
(
${
X264_INCLUDE_DIRS
}
)
add_definitions
(
-DENABLE_X264
)
list
(
APPEND LINK_LIB_LIST
${
X264_LIBRARIES
}
)
endif
()
#查找faac是否安装
find_package
(
FAAC QUIET
)
if
(
FAAC_FOUND AND ENABLE_FAAC
)
message
(
STATUS
"found library:
${
FAAC_LIBRARIES
}
,ENABLE_FAAC defined"
)
include_directories
(
${
FAAC_INCLUDE_DIR
}
)
add_definitions
(
-DENABLE_FAAC
)
list
(
APPEND LINK_LIB_LIST
${
FAAC_LIBRARIES
}
)
endif
()
#set(VS_FALGS "/wd4819 /wd4996 /wd4018 /wd4267 /wd4244 /wd4101 /wd4828 /wd4309 /wd4573 /wd4996" )
set
(
VS_FALGS
"/wd4819"
)
#添加mpeg用于支持ts生成
if
(
ENABLE_RTPPROXY OR ENABLE_HLS
)
include_directories
(
${
MediaServer_Root
}
/libmpeg/include
)
aux_source_directory
(
${
MediaServer_Root
}
/libmpeg/include src_mpeg
)
aux_source_directory
(
${
MediaServer_Root
}
/libmpeg/source src_mpeg
)
add_library
(
mpeg STATIC
${
src_mpeg
}
)
list
(
APPEND LINK_LIB_LIST mpeg
)
list
(
APPEND CXX_API_TARGETS mpeg
)
if
(
MSVC
)
set_target_properties
(
mpeg PROPERTIES COMPILE_FLAGS
${
VS_FALGS
}
)
endif
()
endif
()
if
(
X264_FOUND AND ENABLE_X264
)
message
(
STATUS
"found library:
${
X264_LIBRARIES
}
, ENABLE_X264 defined"
)
include_directories
(
SYSTEM
${
X264_INCLUDE_DIRS
}
)
#添加mov、flv库用于MP4录制
if
(
ENABLE_MP4
)
message
(
STATUS
"ENABLE_MP4 defined"
)
add_definitions
(
-DENABLE_MP4
)
update_cached_list
(
MK_COMPILE_DEFINITIONS ENABLE_X264
)
update_cached_list
(
MK_LINK_LIBRARIES
${
X264_LIBRARIES
}
)
endif
()
include_directories
(
${
MediaServer_Root
}
/libmov/include
)
include_directories
(
${
MediaServer_Root
}
/libflv/include
)
# 查找 faac 是否安装
find_package
(
FAAC QUIET
)
if
(
FAAC_FOUND AND ENABLE_FAAC
)
message
(
STATUS
"found library:
${
FAAC_LIBRARIES
}
, ENABLE_FAAC defined"
)
include_directories
(
SYSTEM
${
FAAC_INCLUDE_DIR
}
)
update_cached_list
(
MK_COMPILE_DEFINITIONS ENABLE_FAAC
)
update_cached_list
(
MK_LINK_LIBRARIES
${
FAAC_LIBRARIES
}
)
endif
()
aux_source_directory
(
${
MediaServer_Root
}
/libmov/include src_mov
)
aux_source_directory
(
${
MediaServer_Root
}
/libmov/source src_mov
)
if
(
WIN32
)
update_cached_list
(
MK_LINK_LIBRARIES WS2_32 Iphlpapi shlwapi
)
elseif
(
NOT ANDROID OR IOS
)
update_cached_list
(
MK_LINK_LIBRARIES pthread
)
endif
()
aux_source_directory
(
${
MediaServer_Root
}
/libflv/include src_flv
)
aux_source_directory
(
${
MediaServer_Root
}
/libflv/source src_flv
)
if
(
CMAKE_SYSTEM_NAME MATCHES
"Linux"
)
include
(
CheckCXXSourceCompiles
)
file
(
READ
${
CMAKE_CURRENT_SOURCE_DIR
}
/cmake/checks/atomic_check.cpp atomic_check_cpp
)
check_cxx_source_compiles
(
"
${
atomic_check_cpp
}
"
HAVE_CXX_ATOMICS_WITHOUT_LIB
)
if
(
NOT HAVE_CXX_ATOMICS_WITHOUT_LIB
)
# cmake --help-policy CMP0075
list
(
APPEND CMAKE_REQUIRED_LIBRARIES
"atomic"
)
check_cxx_source_compiles
(
"
${
atomic_check_cpp
}
"
HAVE_CXX_ATOMICS_WITH_LIB
)
if
(
NOT HAVE_CXX_ATOMICS_WITH_LIB
)
message
(
WARNING
"Compiler doesn't support std::atomic<long long>"
)
else
()
update_cached_list
(
MK_LINK_LIBRARIES atomic
)
endif
()
endif
()
endif
()
add_library
(
mov STATIC
${
src_mov
}
)
add_library
(
flv STATIC
${
src_flv
}
)
list
(
APPEND LINK_LIB_LIST mov flv
)
list
(
APPEND CXX_API_TARGETS mov flv
)
# ----------------------------------------------------------------------------
# Solution folders:
# ----------------------------------------------------------------------------
if
(
USE_SOLUTION_FOLDERS
)
set_property
(
GLOBAL PROPERTY USE_FOLDERS ON
)
set_property
(
GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER
"CMakeTargets"
)
endif
()
if
(
MSVC
)
set_target_properties
(
mov flv PROPERTIES COMPILE_FLAGS
${
VS_FALGS
}
)
endif
()
endif
()
if
(
ENABLE_RTPPROXY
)
message
(
STATUS
"ENABLE_RTPPROXY defined"
)
add_definitions
(
-DENABLE_RTPPROXY
)
endif
()
if
(
ENABLE_HLS
)
message
(
STATUS
"ENABLE_HLS defined"
)
add_definitions
(
-DENABLE_HLS
)
endif
()
#收集源代码
file
(
GLOB ToolKit_src_list
${
ToolKit_Root
}
/*/*.cpp
${
ToolKit_Root
}
/*/*.h
${
ToolKit_Root
}
/*/*.c
)
if
(
IOS
)
list
(
APPEND ToolKit_src_list
${
ToolKit_Root
}
/Network/Socket_ios.mm
)
endif
()
file
(
GLOB MediaKit_src_list
${
MediaKit_Root
}
/*/*.cpp
${
MediaKit_Root
}
/*/*.h
${
MediaKit_Root
}
/*/*.c
)
#去除win32的适配代码
if
(
NOT WIN32
)
list
(
REMOVE_ITEM ToolKit_src_list
${
ToolKit_Root
}
/win32/getopt.c
)
else
()
#防止Windows.h包含Winsock.h
add_definitions
(
-DWIN32_LEAN_AND_MEAN -DMP4V2_NO_STDINT_DEFS -D_CRT_SECURE_NO_WARNINGS -D_WINSOCK_DEPRECATED_NO_WARNINGS
)
endif
()
if
(
USE_SOLUTION_FOLDERS
AND
(
NOT GROUP_BY_EXPLORER
))
# 在 IDE 中对文件进行分组,源文件和头文件分开
set_file_group
(
${
ToolKit_Root
}
${
ToolKit_src_list
}
)
set_file_group
(
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/src"
${
MediaKit_src_list
}
)
if
(
MSVC AND ENABLE_MSVC_MT
)
set
(
CompilerFlags
CMAKE_CXX_FLAGS
CMAKE_CXX_FLAGS_DEBUG
CMAKE_CXX_FLAGS_RELEASE
CMAKE_C_FLAGS
CMAKE_C_FLAGS_DEBUG
CMAKE_C_FLAGS_RELEASE
)
# TODO: 通常应该不需要替换
foreach
(
CompilerFlag
${
CompilerFlags
}
)
string
(
REPLACE
"/MD"
"/MT"
${
CompilerFlag
}
"
${${
CompilerFlag
}}
"
)
endforeach
()
endif
()
#添加库
add_library
(
zltoolkit STATIC
${
ToolKit_src_list
}
)
add_library
(
zlmediakit STATIC
${
MediaKit_src_list
}
)
list
(
APPEND CXX_API_TARGETS zltoolkit zlmediakit
)
##############################################################################
#安装目录
if
(
WIN32
)
set
(
INSTALL_PATH_LIB $ENV{HOME}/
${
CMAKE_PROJECT_NAME
}
/lib
)
set
(
INSTALL_PATH_INCLUDE $ENV{HOME}/
${
CMAKE_PROJECT_NAME
}
/include
)
else
()
set
(
INSTALL_PATH_LIB lib
${
LIB_SUFFIX
}
)
set
(
INSTALL_PATH_INCLUDE include
)
set
(
INSTALL_PATH_EXECUTABLE bin
)
endif
()
if
(
ENABLE_CXX_API
)
# 保留目录结构
install
(
DIRECTORY
${
ToolKit_Root
}
/ DESTINATION
${
INSTALL_PATH_INCLUDE
}
/ZLToolKit REGEX
"(.*[.](md|cpp)|win32)$"
EXCLUDE
)
install
(
DIRECTORY
${
MediaKit_Root
}
/ DESTINATION
${
INSTALL_PATH_INCLUDE
}
/ZLMediaKit REGEX
".*[.](md|cpp)$"
EXCLUDE
)
install
(
TARGETS
${
CXX_API_TARGETS
}
DESTINATION
${
INSTALL_PATH_LIB
}
)
endif
()
if
(
WIN32
)
list
(
APPEND LINK_LIB_LIST WS2_32 Iphlpapi shlwapi
)
if
(
MSVC
)
set_target_properties
(
zltoolkit PROPERTIES COMPILE_FLAGS
${
VS_FALGS
}
)
set_target_properties
(
zlmediakit PROPERTIES COMPILE_FLAGS
${
VS_FALGS
}
)
endif
()
elseif
(
NOT ANDROID OR IOS
)
list
(
APPEND LINK_LIB_LIST pthread
)
endif
()
#复制文件过来
file
(
COPY
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/www"
DESTINATION
${
EXECUTABLE_OUTPUT_PATH
}
)
file
(
COPY
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/conf/config.ini"
DESTINATION
${
EXECUTABLE_OUTPUT_PATH
}
)
if
(
ENABLE_WEBRTC
)
#查找srtp是否安装
find_package
(
SRTP QUIET
)
if
(
SRTP_FOUND AND ENABLE_OPENSSL
)
message
(
STATUS
"found library:
${
SRTP_LIBRARIES
}
"
)
include_directories
(
${
SRTP_INCLUDE_DIRS
}
)
list
(
APPEND LINK_LIB_LIST
${
SRTP_LIBRARIES
}
)
add_definitions
(
-DENABLE_WEBRTC
)
include_directories
(
./webrtc
)
file
(
GLOB SRC_WEBRTC_LIST ./webrtc/*.cpp ./webrtc/*.h ./webrtc/*.hpp
)
add_library
(
webrtc
${
SRC_WEBRTC_LIST
}
)
list
(
APPEND LINK_LIB_LIST webrtc
)
message
(
STATUS
"webrtc功能已开启"
)
find_package
(
SCTP QUIET
)
if
(
SCTP_FOUND
)
message
(
STATUS
"found library:
${
SCTP_INCLUDE_DIRS
}
${
SCTP_LIBRARIES
}
"
)
include_directories
(
${
SCTP_INCLUDE_DIRS
}
)
list
(
APPEND LINK_LIB_LIST
${
SCTP_LIBRARIES
}
)
add_definitions
(
-DENABLE_SCTP
)
message
(
STATUS
"webrtc datachannel功能已打开"
)
endif
()
else
()
set
(
ENABLE_WEBRTC off
)
message
(
WARNING
"srtp未找到, webrtc相关功能打开失败"
)
endif
()
endif
()
if
(
ENABLE_SRT
)
add_definitions
(
-DENABLE_SRT
)
include_directories
(
./srt
)
file
(
GLOB SRC_SRT_LIST ./srt/*.cpp ./srt/*.h ./srt/*.hpp
)
add_library
(
srt
${
SRC_SRT_LIST
}
)
list
(
APPEND LINK_LIB_LIST srt
)
message
(
STATUS
"srt 功能已开启"
)
endif
()
# for version.h
include_directories
(
${
CMAKE_CURRENT_BINARY_DIR
}
)
add_subdirectory
(
3rdpart
)
#添加c库
if
(
ENABLE_API
)
add_subdirectory
(
api
)
endif
()
add_subdirectory
(
src
)
#ios不编译可执行程序
if
(
IOS
)
return
()
if
(
ENABLE_SRT
)
add_subdirectory
(
srt
)
endif
()
#测试程序
if
(
ENABLE_TESTS
)
add_subdirectory
(
tests
)
endif
()
if
(
ENABLE_WEBRTC
)
add_subdirectory
(
webrtc
)
endif
()
#主服务器
if
(
ENABLE_SERVER
)
add_subdirectory
(
server
)
endif
()
if
(
ENABLE_API
)
add_subdirectory
(
api
)
endif
()
#播放器
if
(
ENABLE_PLAYER
)
# IOS 不编译可执行程序
if
(
NOT IOS
)
if
(
ENABLE_PLAYER AND ENABLE_FFMPEG
)
add_subdirectory
(
player
)
endif
()
endif
()
add_subdirectory
(
server
)
# 复制文件过来
file
(
COPY
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/www"
DESTINATION
${
EXECUTABLE_OUTPUT_PATH
}
)
file
(
COPY
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/conf/config.ini"
DESTINATION
${
EXECUTABLE_OUTPUT_PATH
}
)
if
(
ENABLE_SERVER_LIB
)
set
(
LINK_LIB_LIST
${
LINK_LIB_LIST
}
PARENT_SCOPE
)
endif
()
if
(
ENABLE_TESTS
)
add_subdirectory
(
tests
)
endif
()
endif
()
api/CMakeLists.txt
查看文件 @
9d3ead61
include_directories
(
include source
)
# MIT License
#
# Copyright (c) 2016-2022 The ZLMediaKit project authors. All Rights Reserved.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
#
include
(
GenerateExportHeader
)
file
(
GLOB api_src_list include/*.h source/*.cpp source/*.h source/*.c
)
file
(
GLOB API_SRC_LIST
include/*.h
source/*.c
source/*.cpp
source/*.h
)
set
(
LINK_LIBRARIES
${
MK_LINK_LIBRARIES
}
jsoncpp
)
if
(
IOS
)
add_library
(
mk_api STATIC
${
api_src_list
}
)
target_link_libraries
(
mk_api
${
LINK_LIB_LIST
}
jsoncpp
)
return
()
if
(
IOS
)
add_library
(
mk_api STATIC
${
API_SRC_LIST
}
)
target_link_libraries
(
mk_api
PRIVATE
${
LINK_LIBRARIES
}
)
return
()
endif
()
add_definitions
(
-DGENERATE_EXPORT
)
include_directories
(
${
CMAKE_BINARY_DIR
}
)
set
(
COMPILE_DEFINITIONS
${
MK_COMPILE_DEFINITIONS
}
)
list
(
APPEND COMPILE_DEFINITIONS GENERATE_EXPORT
)
if
(
ENABLE_API_STATIC_LIB
)
add_definitions
(
-DMediaKitApi_STATIC
)
add_library
(
mk_api STATIC
${
api_src_list
}
)
else
()
add_library
(
mk_api SHARED
${
api_src_list
}
)
endif
()
if
(
ENABLE_API_STATIC_LIB
)
add_library
(
mk_api STATIC
${
API_SRC_LIST
}
)
list
(
APPEND COMPILE_DEFINITIONS MediaKitApi_STATIC
)
else
()
add_library
(
mk_api SHARED
${
API_SRC_LIST
}
)
endif
()
if
(
CMAKE_SYSTEM_NAME MATCHES
"Linux"
)
target_link_libraries
(
mk_api -Wl,--start-group jsoncpp
${
LINK_LIB_LIST
}
-Wl,--end-group
)
else
()
target_link_libraries
(
mk_api jsoncpp
${
LINK_LIB_LIST
}
)
endif
()
target_compile_definitions
(
mk_api
PRIVATE
${
COMPILE_DEFINITIONS
}
)
target_include_directories
(
mk_api
PRIVATE
"$<BUILD_INTERFACE:
${
CMAKE_CURRENT_BINARY_DIR
}
>"
"$<BUILD_INTERFACE:
${
CMAKE_CURRENT_SOURCE_DIR
}
/include>"
PUBLIC
"$<BUILD_INTERFACE:
${
CMAKE_CURRENT_SOURCE_DIR
}
/include>"
)
if
(
CMAKE_SYSTEM_NAME MATCHES
"Linux"
)
target_link_libraries
(
mk_api -Wl,--start-group
${
LINK_LIBRARIES
}
-Wl,--end-group
)
else
()
target_link_libraries
(
mk_api jsoncpp
${
LINK_LIBRARIES
}
)
endif
()
generate_export_header
(
mk_api
EXPORT_MACRO_NAME API_EXPORT
BASE_NAME MK_API
STATIC_DEFINE MediaKitApi_STATIC
EXPORT_FILE_NAME
"
${
CMAKE_BINARY_DIR
}
/mk_export.h"
)
EXPORT_MACRO_NAME API_EXPORT
BASE_NAME MK_API
STATIC_DEFINE MediaKitApi_STATIC
EXPORT_FILE_NAME
"
${
CMAKE_BINARY_DIR
}
/mk_export.h"
)
add_subdirectory
(
tests
)
file
(
GLOB api_header_list include/*.h
${
CMAKE_BINARY_DIR
}
/*.h
)
install
(
FILES
${
api_header_list
}
DESTINATION
${
INSTALL_PATH_INCLUDE
}
)
install
(
TARGETS mk_api ARCHIVE DESTINATION
${
INSTALL_PATH_LIB
}
LIBRARY DESTINATION
${
INSTALL_PATH_LIB
}
)
\ No newline at end of file
file
(
GLOB API_HEADER_LIST include/*.h
${
CMAKE_CURRENT_BINARY_DIR
}
/*.h
)
install
(
FILES
${
API_HEADER_LIST
}
DESTINATION
${
INSTALL_PATH_INCLUDE
}
)
install
(
TARGETS mk_api
ARCHIVE DESTINATION
${
INSTALL_PATH_LIB
}
LIBRARY DESTINATION
${
INSTALL_PATH_LIB
}
)
api/tests/CMakeLists.txt
查看文件 @
9d3ead61
aux_source_directory
(
. TEST_SRC_LIST
)
include_directories
(
${
PROJECT_BINARY_DIR
}
/api
)
# MIT License
#
# Copyright (c) 2016-2022 The ZLMediaKit project authors. All Rights Reserved.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
#
aux_source_directory
(
${
CMAKE_CURRENT_SOURCE_DIR
}
TEST_SRC_LIST
)
foreach
(
TEST_SRC
${
TEST_SRC_LIST
}
)
STRING
(
REGEX REPLACE
"^
\\
./|
\\
.c[a-zA-Z0-9_]*$"
""
TEST_EXE_NAME
${
TEST_SRC
}
)
if
(
NOT ENABLE_FFMPEG
)
# 过滤掉依赖 FFmpeg 的测试模块
if
(
"
${
TEST_EXE_NAME
}
"
MATCHES
"player_opencv"
)
continue
()
endif
()
endif
()
message
(
STATUS
"add c api tester:
${
TEST_EXE_NAME
}
"
)
set
(
exe_name api_tester_
${
TEST_EXE_NAME
}
)
add_executable
(
${
exe_name
}
${
TEST_SRC
}
)
if
(
USE_SOLUTION_FOLDERS
)
SET_PROPERTY
(
TARGET
${
exe_name
}
PROPERTY FOLDER
"api_test"
)
get_filename_component
(
TEST_EXE_NAME
${
TEST_SRC
}
NAME_WE
)
if
(
NOT ENABLE_FFMPEG
)
# 过滤掉依赖 FFmpeg 的测试模块
if
(
"
${
TEST_EXE_NAME
}
"
MATCHES
"player_opencv"
)
continue
()
endif
()
endif
()
if
(
MSVC
)
set_target_properties
(
${
exe_name
}
PROPERTIES COMPILE_FLAGS
${
VS_FALGS
}
)
endif
()
message
(
STATUS
"add c api tester:
${
TEST_EXE_NAME
}
"
)
set
(
exe_name api_tester_
${
TEST_EXE_NAME
}
)
add_executable
(
${
exe_name
}
${
TEST_SRC
}
)
if
(
USE_SOLUTION_FOLDERS
)
set_property
(
TARGET
${
exe_name
}
PROPERTY FOLDER
"api_test"
)
endif
()
target_link_libraries
(
${
exe_name
}
mk_api
)
target_link_libraries
(
${
exe_name
}
mk_api
)
target_compile_options
(
${
exe_name
}
PRIVATE
${
COMPILE_OPTIONS_DEFAULT
}
)
endforeach
()
...
...
player/CMakeLists.txt
查看文件 @
9d3ead61
if
(
NOT ENABLE_FFMPEG
)
return
()
endif
()
# MIT License
#
# Copyright (c) 2016-2022 The ZLMediaKit project authors. All Rights Reserved.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
#
set
(
LINK_LIBRARIES
${
MK_LINK_LIBRARIES
}
)
find_package
(
PkgConfig QUIET
)
#查找SDL2是否安装
if
(
PKG_CONFIG_FOUND
)
pkg_check_modules
(
SDL2 QUIET IMPORTED_TARGET sdl2
)
if
(
SDL2_FOUND
)
include_directories
(
${
SDL2_INCLUDE_DIRS
}
)
link_directories
(
${
SDL2_LIBRARY_DIRS
}
)
list
(
APPEND LINK_LIB_LIST
${
SDL2_LIBRARIES
}
)
message
(
STATUS
"found library:
${
SDL2_LIBRARIES
}
"
)
endif
()
else
()
find_package
(
SDL2 QUIET
)
if
(
SDL2_FOUND
)
include_directories
(
${
SDL2_INCLUDE_DIR
}
)
list
(
APPEND LINK_LIB_LIST
${
SDL2_LIBRARY
}
)
message
(
STATUS
"found library:
${
SDL2_LIBRARY
}
"
)
endif
(
SDL2_FOUND
)
endif
()
# 查找 SDL2 是否安装
if
(
PKG_CONFIG_FOUND
)
pkg_check_modules
(
SDL2 QUIET IMPORTED_TARGET sdl2
)
if
(
SDL2_FOUND
)
list
(
APPEND LINK_LIBRARIES PkgConfig::SDL2
)
message
(
STATUS
"found library:
${
SDL2_LIBRARIES
}
"
)
endif
()
else
()
find_package
(
SDL2 QUIET
)
if
(
SDL2_FOUND
)
include_directories
(
SYSTEM
${
SDL2_INCLUDE_DIR
}
)
list
(
APPEND LINK_LIBRARIES
${
SDL2_LIBRARY
}
)
message
(
STATUS
"found library:
${
SDL2_LIBRARY
}
"
)
endif
()
endif
()
set
(
PLAYER_NAME
"test_player"
)
#
如果
ffmpeg/libavcodec ffmpeg/libavcodec SDL 都安装了则编译播放器
if
(
NOT SDL2_FOUND
)
message
(
STATUS
"
${
PLAYER_NAME
}
disabled, please install sdl2 ffmpeg/libavcodec ffmpeg/libavutil ffmpeg/libswresample"
)
return
()
endif
()
#
如果
ffmpeg/libavcodec ffmpeg/libavcodec SDL 都安装了则编译播放器
if
(
NOT SDL2_FOUND
)
message
(
WARNING
"
${
PLAYER_NAME
}
disabled, please install sdl2 ffmpeg/libavcodec ffmpeg/libavutil ffmpeg/libswresample"
)
return
()
endif
()
message
(
STATUS
"
${
PLAYER_NAME
}
enabled"
)
aux_source_directory
(
. SRC_LIST
)
add_executable
(
${
PLAYER_NAME
}
${
SRC_LIST
}
)
target_compile_definitions
(
${
PLAYER_NAME
}
PRIVATE
${
MK_COMPILE_DEFINITIONS
}
)
target_compile_options
(
${
PLAYER_NAME
}
PRIVATE
${
COMPILE_OPTIONS_DEFAULT
}
)
if
(
MSVC
)
set_target_properties
(
${
PLAYER_NAME
}
PROPERTIES COMPILE_FLAGS
${
VS_FALGS
}
)
set_target_properties
(
${
PLAYER_NAME
}
PROPERTIES LINK_FLAGS
"/SAFESEH:NO /SUBSYSTEM:WINDOWS"
)
endif
()
# TODO: 统一参数?
if
(
MSVC
)
set_target_properties
(
${
PLAYER_NAME
}
PROPERTIES LINK_FLAGS
"/SAFESEH:NO /SUBSYSTEM:WINDOWS"
)
endif
()
if
(
CMAKE_SYSTEM_NAME MATCHES
"Linux"
)
target_link_libraries
(
${
PLAYER_NAME
}
-Wl,--start-group
${
LINK_LIB_LIST
}
-Wl,--end-group
)
else
()
target_link_libraries
(
${
PLAYER_NAME
}
${
LINK_LIB_LIST
}
)
endif
()
if
(
CMAKE_SYSTEM_NAME MATCHES
"Linux"
)
target_link_libraries
(
${
PLAYER_NAME
}
-Wl,--start-group
${
LINK_LIBRARIES
}
-Wl,--end-group
)
else
()
target_link_libraries
(
${
PLAYER_NAME
}
${
LINK_LIBRARIES
}
)
endif
()
server/CMakeLists.txt
查看文件 @
9d3ead61
include_directories
(
../3rdpart
)
file
(
GLOB jsoncpp_src_list ../3rdpart/jsoncpp/*.cpp ../3rdpart/jsoncpp/*.h
)
add_library
(
jsoncpp STATIC
${
jsoncpp_src_list
}
)
file
(
GLOB MediaServer_src_list ./*.cpp ./*.h
)
# MIT License
#
# Copyright (c) 2016-2022 The ZLMediaKit project authors. All Rights Reserved.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
#
if
(
ENABLE_SERVER_LIB
)
add_definitions
(
-DDISABLE_MAIN
)
add_library
(
MediaServer STATIC
${
MediaServer_src_list
}
)
list
(
APPEND LINK_LIB_LIST MediaServer jsoncpp
)
set
(
LINK_LIB_LIST
${
LINK_LIB_LIST
}
PARENT_SCOPE
)
return
()
endif
()
file
(
GLOB MediaServer_SRC_LIST ./*.cpp ./*.h
)
add_executable
(
MediaServer
${
MediaServer_src_list
}
)
set
(
COMPILE_DEFINITIONS
${
MK_COMPILE_DEFINITIONS
}
)
if
(
MSVC
)
set_target_properties
(
MediaServer PROPERTIES COMPILE_FLAGS
${
VS_FALGS
}
)
else
()
install
(
TARGETS MediaServer DESTINATION
${
INSTALL_PATH_EXECUTABLE
}
)
if
(
ENABLE_SERVER_LIB
)
list
(
APPEND COMPILE_DEFINITIONS DISABLE_MAIN
)
add_library
(
MediaServer STATIC
${
MediaServer_SRC_LIST
}
)
target_compile_definitions
(
MediaServer
PRIVATE
${
COMPILE_DEFINITIONS
}
)
target_compile_options
(
MediaServer
PRIVATE
${
COMPILE_OPTIONS_DEFAULT
}
)
update_cached
(
MK_LINK_LIBRARIES MediaServer
)
return
()
endif
()
if
(
CMAKE_SYSTEM_NAME MATCHES
"Linux"
)
target_link_libraries
(
MediaServer -Wl,--start-group jsoncpp
${
LINK_LIB_LIST
}
-Wl,--end-group
)
else
()
target_link_libraries
(
MediaServer jsoncpp
${
LINK_LIB_LIST
}
)
endif
()
add_executable
(
MediaServer
${
MediaServer_SRC_LIST
}
)
install
(
TARGETS MediaServer DESTINATION
${
INSTALL_PATH_RUNTIME
}
)
if
(
CMAKE_SYSTEM_NAME MATCHES
"Linux"
)
target_link_libraries
(
MediaServer -Wl,--start-group
${
MK_LINK_LIBRARIES
}
-Wl,--end-group
)
else
()
target_link_libraries
(
MediaServer
${
MK_LINK_LIBRARIES
}
)
endif
()
src/CMakeLists.txt
0 → 100644
查看文件 @
9d3ead61
# MIT License
#
# Copyright (c) 2016-2022 The ZLMediaKit project authors. All Rights Reserved.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
#
file
(
GLOB MediaKit_SRC_LIST
${
CMAKE_CURRENT_SOURCE_DIR
}
/*/*.c
${
CMAKE_CURRENT_SOURCE_DIR
}
/*/*.cpp
${
CMAKE_CURRENT_SOURCE_DIR
}
/*/*.h
)
if
(
USE_SOLUTION_FOLDERS
AND
(
NOT GROUP_BY_EXPLORER
))
# 在 IDE 中对文件进行分组, 源文件和头文件分开
set_file_group
(
"
${
CMAKE_CURRENT_SOURCE_DIR
}
"
${
MediaKit_SRC_LIST
}
)
endif
()
# 添加库
add_library
(
zlmediakit STATIC
${
MediaKit_SRC_LIST
}
)
add_library
(
ZLMediaKit::MediaKit ALIAS zlmediakit
)
set
(
LINK_LIBRARIES
${
MK_LINK_LIBRARIES
}
)
list
(
REMOVE_ITEM LINK_LIBRARIES ZLMediaKit::MediaKit
)
set
(
COMPILE_DEFINITIONS
${
MK_COMPILE_DEFINITIONS
}
)
target_compile_definitions
(
zlmediakit
PRIVATE
${
COMPILE_DEFINITIONS
}
)
target_compile_options
(
zlmediakit
PRIVATE
${
COMPILE_OPTIONS_DEFAULT
}
)
target_link_libraries
(
zlmediakit
PRIVATE
${
LINK_LIBRARIES
}
)
target_include_directories
(
zlmediakit
PRIVATE
"$<BUILD_INTERFACE:
${
CMAKE_CURRENT_SOURCE_DIR
}
>"
PUBLIC
"$<BUILD_INTERFACE:
${
CMAKE_CURRENT_SOURCE_DIR
}
>"
)
update_cached_list
(
MK_LINK_LIBRARIES ZLMediaKit::MediaKit
)
# 未在使用
if
(
ENABLE_CXX_API
)
# 保留目录结构
install
(
DIRECTORY
${
MediaKit_Root
}
/
DESTINATION
${
INSTALL_PATH_INCLUDE
}
/ZLMediaKit
REGEX
".*[.](md|cpp)$"
EXCLUDE
)
install
(
TARGETS zlmediakit
DESTINATION
${
INSTALL_PATH_LIB
}
)
endif
()
srt/CMakeLists.txt
0 → 100644
查看文件 @
9d3ead61
# MIT License
#
# Copyright (c) 2016-2022 The ZLMediaKit project authors. All Rights Reserved.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
#
file
(
GLOB SRT_SRC_LIST *.cpp *.h *.hpp
)
add_library
(
srt STATIC
${
SRT_SRC_LIST
}
)
add_library
(
ZLMediaKit::SRT ALIAS srt
)
target_link_libraries
(
srt
PUBLIC
ZLMediaKit::MediaKit
ZLMediaKit::ToolKit
)
target_compile_options
(
srt
PRIVATE
${
COMPILE_OPTIONS_DEFAULT
}
)
target_include_directories
(
srt
PRIVATE
"$<BUILD_INTERFACE:
${
CMAKE_CURRENT_SOURCE_DIR
}
>"
PUBLIC
"$<BUILD_INTERFACE:
${
CMAKE_CURRENT_SOURCE_DIR
}
>"
"$<BUILD_INTERFACE:
${
CMAKE_CURRENT_SOURCE_DIR
}
/..>"
)
update_cached_list
(
MK_COMPILE_DEFINITIONS ENABLE_SRT
)
update_cached_list
(
MK_LINK_LIBRARIES ZLMediaKit::SRT
)
message
(
STATUS
"srt 功能已开启"
)
tests/CMakeLists.txt
查看文件 @
9d3ead61
execute_process
(
COMMAND cp
${
CMAKE_CURRENT_SOURCE_DIR
}
/default.pem
${
EXECUTABLE_OUTPUT_PATH
}
/
)
# MIT License
#
# Copyright (c) 2016-2022 The ZLMediaKit project authors. All Rights Reserved.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
#
execute_process
(
COMMAND cp
${
CMAKE_CURRENT_SOURCE_DIR
}
/default.pem
${
EXECUTABLE_OUTPUT_PATH
}
/
)
aux_source_directory
(
. TEST_SRC_LIST
)
foreach
(
TEST_SRC
${
TEST_SRC_LIST
}
)
get_filename_component
(
TEST_EXE_NAME
${
TEST_SRC
}
NAME_WE
)
if
(
NOT ENABLE_WEBRTC
)
# 暂时过滤掉依赖 WebRTC 的测试模块
if
(
"
${
TEST_EXE_NAME
}
"
MATCHES
"test_rtcp_nack"
)
continue
()
endif
()
endif
()
message
(
STATUS
"add test:
${
TEST_EXE_NAME
}
"
)
add_executable
(
${
TEST_EXE_NAME
}
${
TEST_SRC
}
)
if
(
USE_SOLUTION_FOLDERS
)
SET_PROPERTY
(
TARGET
${
TEST_EXE_NAME
}
PROPERTY FOLDER
"test"
)
endif
()
if
(
MSVC
)
set_target_properties
(
${
TEST_EXE_NAME
}
PROPERTIES COMPILE_FLAGS
${
VS_FALGS
}
)
endif
()
if
(
CMAKE_SYSTEM_NAME MATCHES
"Linux"
)
target_link_libraries
(
${
TEST_EXE_NAME
}
-Wl,--start-group
${
LINK_LIB_LIST
}
-Wl,--end-group
)
else
()
target_link_libraries
(
${
TEST_EXE_NAME
}
${
LINK_LIB_LIST
}
)
endif
()
endforeach
()
foreach
(
TEST_SRC
${
TEST_SRC_LIST
}
)
get_filename_component
(
TEST_EXE_NAME
${
TEST_SRC
}
NAME_WE
)
if
(
NOT ENABLE_WEBRTC
)
# 暂时过滤掉依赖 WebRTC 的测试模块
if
(
"
${
TEST_EXE_NAME
}
"
MATCHES
"test_rtcp_nack"
)
continue
()
endif
()
endif
()
message
(
STATUS
"add test:
${
TEST_EXE_NAME
}
"
)
add_executable
(
${
TEST_EXE_NAME
}
${
TEST_SRC
}
)
if
(
USE_SOLUTION_FOLDERS
)
SET_PROPERTY
(
TARGET
${
TEST_EXE_NAME
}
PROPERTY FOLDER
"test"
)
endif
()
if
(
MSVC
)
set_target_properties
(
${
TEST_EXE_NAME
}
PROPERTIES COMPILE_FLAGS
${
VS_FALGS
}
)
endif
()
if
(
CMAKE_SYSTEM_NAME MATCHES
"Linux"
)
target_link_libraries
(
${
TEST_EXE_NAME
}
-Wl,--start-group
${
MK_LINK_LIBRARIES
}
-Wl,--end-group
)
else
()
target_link_libraries
(
${
TEST_EXE_NAME
}
${
MK_LINK_LIBRARIES
}
)
endif
()
endforeach
()
webrtc/CMakeLists.txt
0 → 100644
查看文件 @
9d3ead61
# MIT License
#
# Copyright (c) 2016-2022 The ZLMediaKit project authors. All Rights Reserved.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
#
# 查找 srtp 是否安装
find_package
(
SRTP QUIET
)
if
(
NOT SRTP_FOUND OR NOT ENABLE_OPENSSL
)
set
(
ENABLE_WEBRTC OFF
)
message
(
WARNING
"srtp 未找到, WebRTC 相关功能打开失败"
)
return
()
endif
()
message
(
STATUS
"found library:
${
SRTP_LIBRARIES
}
"
)
include_directories
(
SYSTEM
${
SRTP_INCLUDE_DIRS
}
)
set
(
LINK_LIBRARIES
${
SRTP_LIBRARIES
}
)
find_package
(
SCTP QUIET
)
if
(
SCTP_FOUND
)
message
(
STATUS
"found library:
${
SCTP_INCLUDE_DIRS
}
${
SCTP_LIBRARIES
}
"
)
include_directories
(
SYSTEM
${
SCTP_INCLUDE_DIRS
}
)
update_cached_list
(
MK_COMPILE_DEFINITIONS ENABLE_SCTP
)
update_cached_list
(
LINK_LIBRARIES
${
SCTP_LIBRARIES
}
)
message
(
STATUS
"WebRTC datachannel 功能已打开"
)
endif
()
file
(
GLOB WEBRTC_SRC_LIST
${
CMAKE_CURRENT_SOURCE_DIR
}
/*.cpp
${
CMAKE_CURRENT_SOURCE_DIR
}
/*.h
${
CMAKE_CURRENT_SOURCE_DIR
}
/*.hpp
)
add_library
(
webrtc
${
WEBRTC_SRC_LIST
}
)
add_library
(
ZLMediaKit::WebRTC ALIAS webrtc
)
target_compile_options
(
webrtc
PRIVATE
${
COMPILE_OPTIONS_DEFAULT
}
)
target_link_libraries
(
webrtc
PRIVATE
ZLMediaKit::MediaKit
ZLMediaKit::ToolKit
PUBLIC
${
LINK_LIBRARIES
}
)
target_include_directories
(
webrtc
PRIVATE
"$<BUILD_INTERFACE:
${
CMAKE_CURRENT_SOURCE_DIR
}
>"
PUBLIC
"$<BUILD_INTERFACE:
${
CMAKE_CURRENT_SOURCE_DIR
}
/..>"
)
message
(
STATUS
"WebRTC 功能已开启"
)
update_cached_list
(
MK_COMPILE_DEFINITIONS ENABLE_WEBRTC
)
update_cached_list
(
MK_LINK_LIBRARIES ZLMediaKit::WebRTC
${
LINK_LIBRARIES
}
)
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论