mirror of
https://github.com/UltraCoderRU/libwebrtc.git
synced 2026-01-28 11:15:13 +00:00
Define and use macros, set install directory paths
This commit is contained in:
parent
5ec1c72cf9
commit
5590dfbadc
4 changed files with 171 additions and 90 deletions
|
|
@ -9,6 +9,13 @@ find_package(DepotTools REQUIRED)
|
||||||
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
||||||
|
|
||||||
|
#
|
||||||
|
# Options
|
||||||
|
#
|
||||||
|
|
||||||
|
option(BUILD_TESTS "Build test binaries" OFF)
|
||||||
|
option(BUILD_EXAMPLES "Build examples binaries" OFF)
|
||||||
|
|
||||||
#
|
#
|
||||||
# Versioning
|
# Versioning
|
||||||
#
|
#
|
||||||
|
|
@ -37,6 +44,28 @@ set(LIBWEBRTC_LIBRARY_PROPERTIES ${LIBWEBRTC_LIBRARY_PROPERTIES}
|
||||||
SOVERSION "${LIBWEBRTC_API_VERSION}"
|
SOVERSION "${LIBWEBRTC_API_VERSION}"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Directories
|
||||||
|
#
|
||||||
|
|
||||||
|
if(NOT LIBWEBRTC_INSTALL_BIN_DIR)
|
||||||
|
set(LIBWEBRTC_INSTALL_BIN_DIR "bin")
|
||||||
|
endif()
|
||||||
|
if(NOT LIBWEBRTC_INSTALL_LIB_DIR)
|
||||||
|
set(LIBWEBRTC_INSTALL_LIB_DIR "lib")
|
||||||
|
endif()
|
||||||
|
if(NOT LIBWEBRTC_INSTALL_DATA_DIR)
|
||||||
|
set(LIBWEBRTC_INSTALL_DATA_DIR "share")
|
||||||
|
endif()
|
||||||
|
if(NOT LIBWEBRTC_INSTALL_INCLUDE_DIR)
|
||||||
|
set(LIBWEBRTC_INSTALL_INCLUDE_DIR "include")
|
||||||
|
endif()
|
||||||
|
if(NOT LIBWEBRTC_INSTALL_CMAKE_DIR)
|
||||||
|
set(LIBWEBRTC_INSTALL_CMAKE_DIR "lib")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(LIBWEBRTC_LIBRARY ${CMAKE_STATIC_LIBRARY_PREFIX}webrtc${CMAKE_STATIC_LIBRARY_SUFFIX})
|
||||||
|
set(LIBWEBRTC_BUILD_ROOT ${CMAKE_SOURCE_DIR}/src/out/Default)
|
||||||
set(WEBRTC_CHROMIUM_DEPS git@github.com:aisouard/libwebrtc-chromium-deps.git)
|
set(WEBRTC_CHROMIUM_DEPS git@github.com:aisouard/libwebrtc-chromium-deps.git)
|
||||||
|
|
||||||
add_subdirectory(Targets)
|
add_subdirectory(Targets)
|
||||||
28
CMakeModules/Common.cmake
Normal file
28
CMakeModules/Common.cmake
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
set(LIBWEBRTC_ENV_COMMAND ${CMAKE_COMMAND} -E env \"PATH=${CMAKE_SOURCE_DIR}/Dependencies/depot_tools:$ENV{PATH}\")
|
||||||
|
|
||||||
|
macro(add_libwebrtc_command
|
||||||
|
ARG_NAME
|
||||||
|
ARG_OUTPUT
|
||||||
|
ARG_COMMAND
|
||||||
|
ARG_WORKING_DIRECTORY
|
||||||
|
ARG_COMMENT
|
||||||
|
)
|
||||||
|
set (ARG_DEPENDENCIES ${ARGN})
|
||||||
|
|
||||||
|
add_custom_command(
|
||||||
|
OUTPUT ${ARG_OUTPUT}
|
||||||
|
COMMAND ${ARG_COMMAND}
|
||||||
|
WORKING_DIRECTORY ${ARG_WORKING_DIRECTORY}
|
||||||
|
COMMENT ${ARG_COMMENT}
|
||||||
|
)
|
||||||
|
|
||||||
|
add_custom_target(
|
||||||
|
${ARG_NAME} ALL
|
||||||
|
DEPENDS ${ARG_OUTPUT}
|
||||||
|
)
|
||||||
|
|
||||||
|
list(LENGTH ARG_DEPENDENCIES NUM_ARG_DEPENDENCIES)
|
||||||
|
if (${NUM_ARG_DEPENDENCIES} GREATER 0)
|
||||||
|
add_dependencies(${ARG_NAME} ${ARG_DEPENDENCIES})
|
||||||
|
endif ()
|
||||||
|
endmacro()
|
||||||
|
|
@ -1,53 +1,82 @@
|
||||||
|
include(Common)
|
||||||
|
|
||||||
#
|
#
|
||||||
# Generate build files
|
# Generate build files
|
||||||
#
|
#
|
||||||
|
|
||||||
add_custom_command(
|
set(LIBWEBRTC_GEN_ARGS "")
|
||||||
OUTPUT ${CMAKE_BINARY_DIR}/Nevermind
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E env \"PATH=${CMAKE_SOURCE_DIR}/Dependencies/depot_tools:$ENV{PATH}\" gn gen out/Default --args='is_debug=false rtc_include_tests=false'
|
if(NOT CMAKE_BUILD_TYPE MATCHES DEBUG)
|
||||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/src
|
set(LIBWEBRTC_GEN_ARGS is_debug=false)
|
||||||
COMMENT "Generate build files"
|
endif(NOT CMAKE_BUILD_TYPE MATCHES DEBUG)
|
||||||
|
|
||||||
|
if(NOT BUILD_TESTS)
|
||||||
|
set(LIBWEBRTC_GEN_ARGS ${LIBWEBRTC_GEN_ARGS} rtc_include_tests=false)
|
||||||
|
endif(NOT BUILD_TESTS)
|
||||||
|
|
||||||
|
set(GENERATE_BUILD_DEPENDENCY libwebrtc_patch)
|
||||||
|
if(NOT BUILD_EXAMPLES)
|
||||||
|
set(GENERATE_BUILD_DEPENDENCY libwebrtc_links)
|
||||||
|
endif(NOT BUILD_EXAMPLES)
|
||||||
|
|
||||||
|
set(GENERATE_COMMAND
|
||||||
|
${LIBWEBRTC_ENV_COMMAND} gn gen out/Default --args='${LIBWEBRTC_GEN_ARGS}')
|
||||||
|
|
||||||
|
add_libwebrtc_command(libwebrtc_generate_build
|
||||||
|
${CMAKE_BINARY_DIR}/Nevermind
|
||||||
|
"${GENERATE_COMMAND}"
|
||||||
|
${CMAKE_BINARY_DIR}/src
|
||||||
|
"Generate build files"
|
||||||
|
${GENERATE_BUILD_DEPENDENCY}
|
||||||
)
|
)
|
||||||
|
|
||||||
add_custom_target(
|
#
|
||||||
webrtc_generate_build ALL
|
# Revert examples
|
||||||
DEPENDS ${CMAKE_BINARY_DIR}/Nevermind
|
#
|
||||||
)
|
|
||||||
|
|
||||||
add_dependencies(webrtc_generate_build webrtc_links)
|
if(NOT BUILD_EXAMPLES)
|
||||||
|
set(PATCH_COMMAND sed -i "s/'include_examples%': 0/'include_examples%': 1/g" src/all.gyp)
|
||||||
|
|
||||||
|
add_libwebrtc_command(libwebrtc_revert
|
||||||
|
None
|
||||||
|
"${PATCH_COMMAND}"
|
||||||
|
${CMAKE_BINARY_DIR}
|
||||||
|
"Reverting build definitions"
|
||||||
|
libwebrtc_generate_build
|
||||||
|
)
|
||||||
|
endif(NOT BUILD_EXAMPLES)
|
||||||
|
|
||||||
#
|
#
|
||||||
# Run ninja
|
# Run ninja
|
||||||
#
|
#
|
||||||
|
|
||||||
add_custom_command(
|
set(NINJA_DEPENDENCY libwebrtc_generate_build)
|
||||||
OUTPUT ${CMAKE_BINARY_DIR}/src/out/Default/obj/root.stamp
|
if(NOT BUILD_EXAMPLES)
|
||||||
COMMAND ${CMAKE_COMMAND} -E env \"PATH=${CMAKE_SOURCE_DIR}/Dependencies/depot_tools:$ENV{PATH}\" ninja -C out/Default
|
set(GENERATE_BUILD_DEPENDENCY libwebrtc_revert)
|
||||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/src
|
endif(NOT BUILD_EXAMPLES)
|
||||||
COMMENT "Build WebRTC"
|
|
||||||
)
|
|
||||||
|
|
||||||
add_custom_target(
|
set(BUILD_WEBRTC_COMMAND
|
||||||
webrtc_build ALL
|
${LIBWEBRTC_ENV_COMMAND} ninja -C out/Default libjingle_peerconnection)
|
||||||
DEPENDS ${CMAKE_BINARY_DIR}/src/out/Default/obj/root.stamp
|
|
||||||
)
|
|
||||||
|
|
||||||
add_dependencies(webrtc_build webrtc_generate_build)
|
add_libwebrtc_command(libwebrtc_build
|
||||||
|
${CMAKE_BINARY_DIR}/src/out/Default/obj/root.stamp
|
||||||
|
"${BUILD_WEBRTC_COMMAND}"
|
||||||
|
${CMAKE_BINARY_DIR}/src
|
||||||
|
"Build WebRTC"
|
||||||
|
${NINJA_DEPENDENCY}
|
||||||
|
)
|
||||||
|
|
||||||
#
|
#
|
||||||
# Merge libraries into a single one
|
# Merge libraries into a single one
|
||||||
#
|
#
|
||||||
|
|
||||||
add_custom_command(
|
set(MERGE_COMMAND
|
||||||
OUTPUT ${CMAKE_BINARY_DIR}/libwebrtc.a
|
python webrtc/build/merge_libs.py out/Default ${CMAKE_BINARY_DIR}/${WEBRTC_LIBRARY})
|
||||||
COMMAND python webrtc/build/merge_libs.py out/Default ${CMAKE_BINARY_DIR}/libwebrtc.a
|
|
||||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/src
|
|
||||||
COMMENT "Merging libraries into libwebrtc.a"
|
|
||||||
)
|
|
||||||
|
|
||||||
add_custom_target(
|
add_libwebrtc_command(libwebrtc_merge
|
||||||
webrtc_merge ALL
|
${CMAKE_BINARY_DIR}/${WEBRTC_LIBRARY}
|
||||||
DEPENDS ${CMAKE_BINARY_DIR}/libwebrtc.a
|
"${MERGE_COMMAND}"
|
||||||
|
${CMAKE_BINARY_DIR}/src
|
||||||
|
"Merging libraries into ${WEBRTC_LIBRARY}"
|
||||||
|
libwebrtc_build
|
||||||
)
|
)
|
||||||
|
|
||||||
add_dependencies(webrtc_merge webrtc_build)
|
|
||||||
|
|
@ -1,96 +1,91 @@
|
||||||
|
include(Common)
|
||||||
|
|
||||||
#
|
#
|
||||||
# Fetch
|
# Fetch
|
||||||
#
|
#
|
||||||
|
|
||||||
set(gclient_config
|
set(GCLIENT_CONFIG_COMMAND
|
||||||
${DEPOTTOOLS_GCLIENT_EXECUTABLE} config --name src
|
${DEPOTTOOLS_GCLIENT_EXECUTABLE} config --name src
|
||||||
https://chromium.googlesource.com/external/webrtc.git
|
https://chromium.googlesource.com/external/webrtc.git
|
||||||
)
|
)
|
||||||
|
|
||||||
add_custom_command(
|
add_libwebrtc_command(libwebrtc_config
|
||||||
OUTPUT ${CMAKE_BINARY_DIR}/.gclient
|
${CMAKE_BINARY_DIR}/.gclient
|
||||||
COMMAND ${gclient_config}
|
"${GCLIENT_CONFIG_COMMAND}"
|
||||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
${CMAKE_BINARY_DIR}
|
||||||
COMMENT "Configuring gclient to pull webrtc code"
|
"Configuring gclient to pull webrtc code"
|
||||||
)
|
|
||||||
|
|
||||||
add_custom_target(
|
|
||||||
webrtc_config ALL
|
|
||||||
DEPENDS ${CMAKE_BINARY_DIR}/.gclient
|
|
||||||
)
|
)
|
||||||
|
|
||||||
#
|
#
|
||||||
# Sync
|
# Sync
|
||||||
#
|
#
|
||||||
|
|
||||||
set(gclient_sync
|
set(GCLIENT_SYNC_COMMAND
|
||||||
${DEPOTTOOLS_GCLIENT_EXECUTABLE} sync -n -D
|
${DEPOTTOOLS_GCLIENT_EXECUTABLE} sync -n -D
|
||||||
)
|
)
|
||||||
|
|
||||||
add_custom_command(
|
add_libwebrtc_command(libwebrtc_sync
|
||||||
OUTPUT ${CMAKE_BINARY_DIR}/src/all.gyp
|
${CMAKE_BINARY_DIR}/src/all.gyp
|
||||||
COMMAND ${gclient_sync}
|
"${GCLIENT_SYNC_COMMAND}"
|
||||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
${CMAKE_BINARY_DIR}
|
||||||
COMMENT "Retrieving WebRTC source code"
|
"Retrieving WebRTC source code"
|
||||||
|
libwebrtc_config
|
||||||
)
|
)
|
||||||
|
|
||||||
add_custom_target(
|
|
||||||
webrtc_sync ALL
|
|
||||||
DEPENDS ${CMAKE_BINARY_DIR}/src/all.gyp
|
|
||||||
)
|
|
||||||
|
|
||||||
add_dependencies(webrtc_sync webrtc_config)
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Sync Chromium
|
# Sync Chromium
|
||||||
#
|
#
|
||||||
|
|
||||||
add_custom_command(
|
set(GIT_CLONE_COMMAND git clone ${LIBWEBRTC_CHROMIUM_DEPS} ${CMAKE_BINARY_DIR}/src/chromium/src)
|
||||||
OUTPUT ${CMAKE_BINARY_DIR}/src/chromium/src/DEPS
|
|
||||||
COMMAND git clone ${WEBRTC_CHROMIUM_DEPS} ${CMAKE_BINARY_DIR}/src/chromium/src
|
add_libwebrtc_command(libwebrtc_chromium_deps
|
||||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
${CMAKE_BINARY_DIR}/src/chromium/src/DEPS
|
||||||
COMMENT "Retrieving Chromium dependencies"
|
"${GIT_CLONE_COMMAND}"
|
||||||
|
${CMAKE_BINARY_DIR}
|
||||||
|
"Retrieving Chromium dependencies"
|
||||||
|
libwebrtc_sync
|
||||||
)
|
)
|
||||||
|
|
||||||
add_custom_target(
|
#
|
||||||
webrtc_chromium_deps ALL
|
# Update Clang
|
||||||
DEPENDS ${CMAKE_BINARY_DIR}/src/chromium/src/DEPS
|
#
|
||||||
)
|
|
||||||
|
|
||||||
add_dependencies(webrtc_chromium_deps webrtc_sync)
|
set(UPDATE_CLAND_COMMAND ${LIBWEBRTC_ENV_COMMAND} python chromium/src/tools/clang/scripts/update.py)
|
||||||
|
|
||||||
|
add_libwebrtc_command(libwebrtc_clang
|
||||||
|
${CMAKE_BINARY_DIR}/src/chromium/src/third_party/llvm-build
|
||||||
|
"${UPDATE_CLAND_COMMAND}"
|
||||||
|
${CMAKE_BINARY_DIR}/src
|
||||||
|
"Updating clang"
|
||||||
|
libwebrtc_chromium_deps
|
||||||
|
)
|
||||||
|
|
||||||
#
|
#
|
||||||
# Setup Links
|
# Setup Links
|
||||||
#
|
#
|
||||||
|
|
||||||
add_custom_command(
|
set(SETUP_LINKS_COMMAND ${LIBWEBRTC_ENV_COMMAND} python setup_links.py)
|
||||||
OUTPUT ${CMAKE_BINARY_DIR}/src/build
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E env \"PATH=${CMAKE_SOURCE_DIR}/Dependencies/depot_tools:$ENV{PATH}\" python setup_links.py
|
|
||||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/src
|
|
||||||
COMMENT "Creating symbolic links"
|
|
||||||
)
|
|
||||||
|
|
||||||
add_custom_target(
|
add_libwebrtc_command(libwebrtc_links
|
||||||
webrtc_links ALL
|
${CMAKE_BINARY_DIR}/src/tools/clang
|
||||||
DEPENDS ${CMAKE_BINARY_DIR}/src/build
|
"${SETUP_LINKS_COMMAND}"
|
||||||
|
${CMAKE_BINARY_DIR}/src
|
||||||
|
"Creating symbolic links"
|
||||||
|
libwebrtc_clang
|
||||||
)
|
)
|
||||||
|
|
||||||
add_dependencies(webrtc_links webrtc_chromium_deps)
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Remove examples
|
# Remove examples
|
||||||
#
|
#
|
||||||
|
|
||||||
add_custom_command(
|
if(NOT BUILD_EXAMPLES)
|
||||||
OUTPUT None
|
set(PATCH_COMMAND sed -i "s/'include_examples%': 1/'include_examples%': 0/g" src/all.gyp)
|
||||||
COMMAND sed -i "s/'include_examples%': 1/'include_examples%': 0/g" src/all.gyp
|
|
||||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
|
||||||
COMMENT "Patching build files"
|
|
||||||
)
|
|
||||||
|
|
||||||
add_custom_target(
|
add_libwebrtc_command(libwebrtc_patch
|
||||||
webrtc_patch ALL
|
None
|
||||||
DEPENDS None
|
"${PATCH_COMMAND}"
|
||||||
|
${CMAKE_BINARY_DIR}
|
||||||
|
"Patching build definitions"
|
||||||
|
libwebrtc_links
|
||||||
)
|
)
|
||||||
|
endif(NOT BUILD_EXAMPLES)
|
||||||
add_dependencies(webrtc_patch webrtc_links)
|
|
||||||
Loading…
Add table
Reference in a new issue