mirror of
https://github.com/UltraCoderRU/libwebrtc.git
synced 2026-01-28 03:15:11 +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")
|
||||
|
||||
#
|
||||
# Options
|
||||
#
|
||||
|
||||
option(BUILD_TESTS "Build test binaries" OFF)
|
||||
option(BUILD_EXAMPLES "Build examples binaries" OFF)
|
||||
|
||||
#
|
||||
# Versioning
|
||||
#
|
||||
|
|
@ -37,6 +44,28 @@ set(LIBWEBRTC_LIBRARY_PROPERTIES ${LIBWEBRTC_LIBRARY_PROPERTIES}
|
|||
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)
|
||||
|
||||
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
|
||||
#
|
||||
|
||||
add_custom_command(
|
||||
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'
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/src
|
||||
COMMENT "Generate build files"
|
||||
set(LIBWEBRTC_GEN_ARGS "")
|
||||
|
||||
if(NOT CMAKE_BUILD_TYPE MATCHES DEBUG)
|
||||
set(LIBWEBRTC_GEN_ARGS is_debug=false)
|
||||
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
|
||||
DEPENDS ${CMAKE_BINARY_DIR}/Nevermind
|
||||
)
|
||||
#
|
||||
# Revert examples
|
||||
#
|
||||
|
||||
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
|
||||
#
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${CMAKE_BINARY_DIR}/src/out/Default/obj/root.stamp
|
||||
COMMAND ${CMAKE_COMMAND} -E env \"PATH=${CMAKE_SOURCE_DIR}/Dependencies/depot_tools:$ENV{PATH}\" ninja -C out/Default
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/src
|
||||
COMMENT "Build WebRTC"
|
||||
)
|
||||
set(NINJA_DEPENDENCY libwebrtc_generate_build)
|
||||
if(NOT BUILD_EXAMPLES)
|
||||
set(GENERATE_BUILD_DEPENDENCY libwebrtc_revert)
|
||||
endif(NOT BUILD_EXAMPLES)
|
||||
|
||||
add_custom_target(
|
||||
webrtc_build ALL
|
||||
DEPENDS ${CMAKE_BINARY_DIR}/src/out/Default/obj/root.stamp
|
||||
)
|
||||
set(BUILD_WEBRTC_COMMAND
|
||||
${LIBWEBRTC_ENV_COMMAND} ninja -C out/Default libjingle_peerconnection)
|
||||
|
||||
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
|
||||
#
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${CMAKE_BINARY_DIR}/libwebrtc.a
|
||||
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"
|
||||
)
|
||||
set(MERGE_COMMAND
|
||||
python webrtc/build/merge_libs.py out/Default ${CMAKE_BINARY_DIR}/${WEBRTC_LIBRARY})
|
||||
|
||||
add_custom_target(
|
||||
webrtc_merge ALL
|
||||
DEPENDS ${CMAKE_BINARY_DIR}/libwebrtc.a
|
||||
add_libwebrtc_command(libwebrtc_merge
|
||||
${CMAKE_BINARY_DIR}/${WEBRTC_LIBRARY}
|
||||
"${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
|
||||
#
|
||||
|
||||
set(gclient_config
|
||||
set(GCLIENT_CONFIG_COMMAND
|
||||
${DEPOTTOOLS_GCLIENT_EXECUTABLE} config --name src
|
||||
https://chromium.googlesource.com/external/webrtc.git
|
||||
)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${CMAKE_BINARY_DIR}/.gclient
|
||||
COMMAND ${gclient_config}
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||
COMMENT "Configuring gclient to pull webrtc code"
|
||||
)
|
||||
|
||||
add_custom_target(
|
||||
webrtc_config ALL
|
||||
DEPENDS ${CMAKE_BINARY_DIR}/.gclient
|
||||
add_libwebrtc_command(libwebrtc_config
|
||||
${CMAKE_BINARY_DIR}/.gclient
|
||||
"${GCLIENT_CONFIG_COMMAND}"
|
||||
${CMAKE_BINARY_DIR}
|
||||
"Configuring gclient to pull webrtc code"
|
||||
)
|
||||
|
||||
#
|
||||
# Sync
|
||||
#
|
||||
|
||||
set(gclient_sync
|
||||
set(GCLIENT_SYNC_COMMAND
|
||||
${DEPOTTOOLS_GCLIENT_EXECUTABLE} sync -n -D
|
||||
)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${CMAKE_BINARY_DIR}/src/all.gyp
|
||||
COMMAND ${gclient_sync}
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||
COMMENT "Retrieving WebRTC source code"
|
||||
add_libwebrtc_command(libwebrtc_sync
|
||||
${CMAKE_BINARY_DIR}/src/all.gyp
|
||||
"${GCLIENT_SYNC_COMMAND}"
|
||||
${CMAKE_BINARY_DIR}
|
||||
"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
|
||||
#
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${CMAKE_BINARY_DIR}/src/chromium/src/DEPS
|
||||
COMMAND git clone ${WEBRTC_CHROMIUM_DEPS} ${CMAKE_BINARY_DIR}/src/chromium/src
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||
COMMENT "Retrieving Chromium dependencies"
|
||||
set(GIT_CLONE_COMMAND git clone ${LIBWEBRTC_CHROMIUM_DEPS} ${CMAKE_BINARY_DIR}/src/chromium/src)
|
||||
|
||||
add_libwebrtc_command(libwebrtc_chromium_deps
|
||||
${CMAKE_BINARY_DIR}/src/chromium/src/DEPS
|
||||
"${GIT_CLONE_COMMAND}"
|
||||
${CMAKE_BINARY_DIR}
|
||||
"Retrieving Chromium dependencies"
|
||||
libwebrtc_sync
|
||||
)
|
||||
|
||||
add_custom_target(
|
||||
webrtc_chromium_deps ALL
|
||||
DEPENDS ${CMAKE_BINARY_DIR}/src/chromium/src/DEPS
|
||||
)
|
||||
#
|
||||
# Update Clang
|
||||
#
|
||||
|
||||
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
|
||||
#
|
||||
|
||||
add_custom_command(
|
||||
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"
|
||||
)
|
||||
set(SETUP_LINKS_COMMAND ${LIBWEBRTC_ENV_COMMAND} python setup_links.py)
|
||||
|
||||
add_custom_target(
|
||||
webrtc_links ALL
|
||||
DEPENDS ${CMAKE_BINARY_DIR}/src/build
|
||||
add_libwebrtc_command(libwebrtc_links
|
||||
${CMAKE_BINARY_DIR}/src/tools/clang
|
||||
"${SETUP_LINKS_COMMAND}"
|
||||
${CMAKE_BINARY_DIR}/src
|
||||
"Creating symbolic links"
|
||||
libwebrtc_clang
|
||||
)
|
||||
|
||||
add_dependencies(webrtc_links webrtc_chromium_deps)
|
||||
|
||||
#
|
||||
# Remove examples
|
||||
#
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT None
|
||||
COMMAND sed -i "s/'include_examples%': 1/'include_examples%': 0/g" src/all.gyp
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||
COMMENT "Patching build files"
|
||||
)
|
||||
if(NOT BUILD_EXAMPLES)
|
||||
set(PATCH_COMMAND sed -i "s/'include_examples%': 1/'include_examples%': 0/g" src/all.gyp)
|
||||
|
||||
add_custom_target(
|
||||
webrtc_patch ALL
|
||||
DEPENDS None
|
||||
)
|
||||
|
||||
add_dependencies(webrtc_patch webrtc_links)
|
||||
add_libwebrtc_command(libwebrtc_patch
|
||||
None
|
||||
"${PATCH_COMMAND}"
|
||||
${CMAKE_BINARY_DIR}
|
||||
"Patching build definitions"
|
||||
libwebrtc_links
|
||||
)
|
||||
endif(NOT BUILD_EXAMPLES)
|
||||
Loading…
Add table
Reference in a new issue