mirror of
https://github.com/UltraCoderRU/libwebrtc.git
synced 2026-01-28 11:15:13 +00:00
Major refactoring
This commit is contained in:
parent
91e9726542
commit
9392f069e4
3 changed files with 122 additions and 102 deletions
23
CMakeModules/LibWebRTCCommand.cmake
Normal file
23
CMakeModules/LibWebRTCCommand.cmake
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
include(CMakeParseArguments)
|
||||||
|
|
||||||
|
function(libwebrtc_command)
|
||||||
|
set(ONE_VALUE_ARGS NAME COMMENT DEPENDS WORKING_DIRECTORY)
|
||||||
|
set(MULTI_VALUE_ARGS COMMAND)
|
||||||
|
cmake_parse_arguments(COMMAND "" "${ONE_VALUE_ARGS}" "${MULTI_VALUE_ARGS}" ${ARGN} )
|
||||||
|
|
||||||
|
set(CMF_DIR ${CMAKE_BINARY_DIR}/CMakeFiles)
|
||||||
|
set(STAMP_FILE "${CMF_DIR}/${COMMAND_NAME}-complete")
|
||||||
|
|
||||||
|
add_custom_command(
|
||||||
|
OUTPUT ${STAMP_FILE}
|
||||||
|
COMMENT ${COMMAND_COMMENT}
|
||||||
|
COMMAND ${PREFIX_EXECUTE} ${COMMAND_COMMAND}
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E touch ${STAMP_FILE}
|
||||||
|
WORKING_DIRECTORY ${COMMAND_WORKING_DIRECTORY}
|
||||||
|
VERBATIM
|
||||||
|
)
|
||||||
|
|
||||||
|
add_custom_target(${COMMAND_NAME} ALL DEPENDS ${STAMP_FILE})
|
||||||
|
|
||||||
|
add_dependencies(${COMMAND_NAME} ${COMMAND_DEPENDS})
|
||||||
|
endfunction()
|
||||||
|
|
@ -1,120 +1,117 @@
|
||||||
include(ExternalProject)
|
include(ExternalProject)
|
||||||
include(LibWebRTCPrefix)
|
include(LibWebRTCCommand)
|
||||||
include(LibWebRTCConfig)
|
include(LibWebRTCConfig)
|
||||||
|
include(LibWebRTCPrefix)
|
||||||
|
|
||||||
set(GCLIENT_SYNC_COMMAND
|
ExternalProject_Add(
|
||||||
${DEPOTTOOLS_GCLIENT_EXECUTABLE} sync
|
webrtc-src
|
||||||
--revision ${LIBWEBRTC_WEBRTC_REVISION} -D)
|
|
||||||
|
|
||||||
set(RETRIEVE_SYSROOT_COMMAND echo)
|
|
||||||
if (UNIX AND NOT APPLE)
|
|
||||||
set(RETRIEVE_SYSROOT_COMMAND ${CMAKE_BINARY_DIR}/src/build/linux/sysroot_scripts/install-sysroot.py --arch=amd64)
|
|
||||||
endif (UNIX AND NOT APPLE)
|
|
||||||
|
|
||||||
set(UPDATE_CLANG_COMMAND ${PYTHON_EXECUTABLE} src/tools/clang/scripts/update.py)
|
|
||||||
|
|
||||||
ExternalProject_Add(webrtc-src
|
|
||||||
PREFIX ${CMAKE_BINARY_DIR}
|
PREFIX ${CMAKE_BINARY_DIR}
|
||||||
BINARY_DIR ${CMAKE_BINARY_DIR}
|
BINARY_DIR ${CMAKE_BINARY_DIR}
|
||||||
SOURCE_DIR ${CMAKE_BINARY_DIR}
|
SOURCE_DIR ${CMAKE_BINARY_DIR}
|
||||||
DOWNLOAD_DIR ${CMAKE_BINARY_DIR}
|
DOWNLOAD_DIR ${CMAKE_BINARY_DIR}
|
||||||
|
|
||||||
#DOWNLOAD_COMMAND ${PREFIX_EXECUTE} ${GCLIENT_CONFIG_COMMAND}
|
DOWNLOAD_COMMAND ${PREFIX_EXECUTE} ${DEPOTTOOLS_GCLIENT_EXECUTABLE} sync --revision ${LIBWEBRTC_WEBRTC_REVISION} -D -n
|
||||||
DOWNLOAD_COMMAND ${PREFIX_EXECUTE} ${GCLIENT_SYNC_COMMAND}
|
BUILD_COMMAND ${PREFIX_EXECUTE} ${PYTHON_EXECUTABLE} src/tools/clang/scripts/update.py
|
||||||
UPDATE_COMMAND ${PREFIX_EXECUTE} ${UPDATE_CLANG_COMMAND}
|
|
||||||
BUILD_COMMAND ${RETRIEVE_SYSROOT_COMMAND}
|
|
||||||
|
|
||||||
INSTALL_COMMAND ""
|
INSTALL_COMMAND ""
|
||||||
|
|
||||||
LOG_DOWNLOAD 1)
|
LOG_DOWNLOAD 1
|
||||||
|
)
|
||||||
|
|
||||||
#
|
set(_NEXT_DEPENDS webrtc-src)
|
||||||
# Retrieve buildtools binaries
|
if (UNIX AND NOT APPLE)
|
||||||
#
|
libwebrtc_command(
|
||||||
add_custom_command(
|
NAME webrtc-install-sysroot
|
||||||
OUTPUT "Buildtools"
|
COMMAND ${CMAKE_BINARY_DIR}/src/build/linux/sysroot_scripts/install-sysroot.py --running-as-hook
|
||||||
|
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
|
||||||
|
COMMENT "Installing Linux sysroots"
|
||||||
|
DEPENDS webrtc-src
|
||||||
|
)
|
||||||
|
set(_NEXT_DEPENDS webrtc-install-sysroot)
|
||||||
|
|
||||||
COMMAND ${PREFIX_EXECUTE} download_from_google_storage --no_resume --platform=linux* --no_auth --bucket chromium-gn -s src/buildtools/linux64/gn.sha1
|
set(_PLATFORM linux*)
|
||||||
COMMAND ${PREFIX_EXECUTE} download_from_google_storage --no_resume --platform=linux* --no_auth --bucket chromium-clang-format -s src/buildtools/linux64/clang-format.sha1
|
set(_FOLDER linux64)
|
||||||
COMMAND ${PREFIX_EXECUTE} download_from_google_storage --no_resume --platform=darwin --no_auth --bucket chromium-gn -s src/buildtools/mac/gn.sha1
|
elseif (APPLE)
|
||||||
COMMAND ${PREFIX_EXECUTE} download_from_google_storage --no_resume --platform=darwin --no_auth --bucket chromium-clang-format -s src/buildtools/mac/clang-format.sha1
|
set(_PLATFORM darwin)
|
||||||
COMMAND ${PREFIX_EXECUTE} download_from_google_storage --no_resume --platform=win32 --no_auth --bucket chromium-gn -s src/buildtools/win/gn.exe.sha1
|
set(_FOLDER mac)
|
||||||
COMMAND ${PREFIX_EXECUTE} download_from_google_storage --no_resume --platform=win32 --no_auth --bucket chromium-clang-format -s src/buildtools/win/clang-format.exe.sha1
|
elseif (WIN32)
|
||||||
|
libwebrtc_command(
|
||||||
|
NAME webrtc-vs-toolchain
|
||||||
|
COMMAND ${PYTHON_EXECUTABLE} src/build/vs_toolchain.py update
|
||||||
|
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
|
||||||
|
COMMENT "Updating Visual Studio toolchain"
|
||||||
|
DEPENDS webrtc-src
|
||||||
|
)
|
||||||
|
set(_NEXT_DEPENDS webrtc-vs-toolchain)
|
||||||
|
|
||||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
set(_PLATFORM win32)
|
||||||
COMMENT "Populating buildtools folder")
|
set(_FOLDER win)
|
||||||
|
set(_SUFFIX .exe)
|
||||||
|
endif (UNIX AND NOT APPLE)
|
||||||
|
|
||||||
add_custom_target(
|
libwebrtc_command(
|
||||||
webrtc-buildtools ALL
|
NAME webrtc-fetch-gn
|
||||||
DEPENDS "Buildtools")
|
COMMAND download_from_google_storage --no_resume --platform=${_PLATFORM} --no_auth --bucket chromium-gn -s src/buildtools/${_FOLDER}/gn${_SUFFIX}.sha1
|
||||||
|
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
|
||||||
|
COMMENT "Fetching gn binary"
|
||||||
|
DEPENDS ${_NEXT_DEPENDS}
|
||||||
|
)
|
||||||
|
|
||||||
add_dependencies(webrtc-buildtools webrtc-src)
|
libwebrtc_command(
|
||||||
|
NAME webrtc-fetch-clang-format
|
||||||
|
COMMAND download_from_google_storage --no_resume --platform=${_PLATFORM} --no_auth --bucket chromium-clang-format -s src/buildtools/${_FOLDER}/clang-format${_SUFFIX}.sha1
|
||||||
|
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
|
||||||
|
COMMENT "Fetching clang-format binary"
|
||||||
|
DEPENDS webrtc-fetch-gn
|
||||||
|
)
|
||||||
|
|
||||||
#
|
#
|
||||||
# Generate build files
|
# Generate build files
|
||||||
#
|
#
|
||||||
set(LIBWEBRTC_GEN_ARGS use_gold=false target_cpu=\\"${TARGET_CPU}\\" target_os=\\"${TARGET_OS}\\")
|
set(_GEN_ARGS use_gold=false target_cpu="${TARGET_CPU}" target_os="${TARGET_OS}")
|
||||||
|
|
||||||
if (NOT CMAKE_BUILD_TYPE MATCHES DEBUG)
|
if (NOT CMAKE_BUILD_TYPE MATCHES DEBUG)
|
||||||
set(LIBWEBRTC_GEN_ARGS ${LIBWEBRTC_GEN_ARGS} is_debug=false)
|
set(_GEN_ARGS ${_GEN_ARGS} is_debug=false)
|
||||||
elseif (NOT CMAKE_BUILD_TYPE MATCHES DEBUG)
|
elseif (NOT CMAKE_BUILD_TYPE MATCHES DEBUG)
|
||||||
set(LIBWEBRTC_GEN_ARGS ${LIBWEBRTC_GEN_ARGS} is_debug=true)
|
set(_GEN_ARGS ${_GEN_ARGS} is_debug=true)
|
||||||
endif (NOT CMAKE_BUILD_TYPE MATCHES DEBUG)
|
endif (NOT CMAKE_BUILD_TYPE MATCHES DEBUG)
|
||||||
|
|
||||||
if (NOT BUILD_TESTS)
|
if (NOT BUILD_TESTS)
|
||||||
set(LIBWEBRTC_GEN_ARGS ${LIBWEBRTC_GEN_ARGS} rtc_include_tests=false)
|
set(_GEN_ARGS ${_GEN_ARGS} rtc_include_tests=false)
|
||||||
endif (NOT BUILD_TESTS)
|
endif (NOT BUILD_TESTS)
|
||||||
|
|
||||||
if (WIN32)
|
if (WIN32)
|
||||||
set(LIBWEBRTC_GEN_ARGS ${LIBWEBRTC_GEN_ARGS})
|
set(_GEN_ARGS ${_GEN_ARGS})
|
||||||
set(LIBWEBRTC_GEN_COMMAND gn gen out/Default --args="${LIBWEBRTC_GEN_ARGS}")
|
set(_GEN_COMMAND gn gen out/Default --args=${_GEN_ARGS})
|
||||||
elseif (APPLE)
|
elseif (UNIX)
|
||||||
set(LIBWEBRTC_GEN_ARGS ${LIBWEBRTC_GEN_ARGS})
|
set(_GEN_ARGS ${_GEN_ARGS})
|
||||||
set(LIBWEBRTC_GEN_COMMAND gn gen out/Default --args='"${LIBWEBRTC_GEN_ARGS}"')
|
set(_GEN_COMMAND gn gen out/Default --args='${_GEN_ARGS}')
|
||||||
elseif (UNIX AND NOT APPLE)
|
|
||||||
set(LIBWEBRTC_GEN_ARGS ${LIBWEBRTC_GEN_ARGS})
|
|
||||||
set(LIBWEBRTC_GEN_COMMAND gn gen out/Default --args='"${LIBWEBRTC_GEN_ARGS}"')
|
|
||||||
endif (WIN32)
|
endif (WIN32)
|
||||||
|
|
||||||
|
libwebrtc_command(
|
||||||
add_custom_command(
|
NAME webrtc-generate
|
||||||
OUTPUT "Generate"
|
COMMAND ${_GEN_COMMAND}
|
||||||
|
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/src"
|
||||||
COMMAND ${PREFIX_EXECUTE} ${LIBWEBRTC_GEN_COMMAND}
|
COMMENT "Generating build files"
|
||||||
|
DEPENDS webrtc-fetch-clang-format
|
||||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/src
|
)
|
||||||
COMMENT "Generating build files")
|
|
||||||
|
|
||||||
add_custom_target(
|
|
||||||
webrtc-generate ALL
|
|
||||||
DEPENDS "Generate")
|
|
||||||
|
|
||||||
add_dependencies(webrtc-generate webrtc-buildtools)
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Run the build command
|
# Run ninja
|
||||||
#
|
#
|
||||||
set(LIBWEBRTC_BUILD_COMMAND ninja ${NINJA_ARGS} -C out/Default)
|
libwebrtc_command(
|
||||||
|
NAME webrtc-build
|
||||||
add_custom_command(
|
COMMAND ninja -C out/Default
|
||||||
OUTPUT "Build"
|
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/src"
|
||||||
|
COMMENT "Building WebRTC"
|
||||||
COMMAND ${PREFIX_EXECUTE} ${LIBWEBRTC_BUILD_COMMAND}
|
DEPENDS webrtc-generate
|
||||||
|
)
|
||||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/src
|
|
||||||
COMMENT "Building WebRTC")
|
|
||||||
|
|
||||||
add_custom_target(
|
|
||||||
webrtc-ninja ALL
|
|
||||||
DEPENDS "Build")
|
|
||||||
|
|
||||||
add_dependencies(webrtc-ninja webrtc-generate)
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Link the library
|
# Link the library
|
||||||
#
|
#
|
||||||
ExternalProject_Add(libwebrtc
|
ExternalProject_Add(
|
||||||
DEPENDS webrtc-ninja
|
libwebrtc
|
||||||
|
DEPENDS webrtc-build
|
||||||
|
|
||||||
INSTALL_DIR ${CMAKE_BINARY_DIR}
|
INSTALL_DIR ${CMAKE_BINARY_DIR}
|
||||||
SOURCE_DIR ${CMAKE_SOURCE_DIR}/Targets/libwebrtc
|
SOURCE_DIR ${CMAKE_SOURCE_DIR}/Targets/libwebrtc
|
||||||
|
|
@ -124,4 +121,5 @@ ExternalProject_Add(libwebrtc
|
||||||
-DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}
|
-DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}
|
||||||
-DLIBWEBRTC_INCLUDE_DIR:STRING=${CMAKE_BINARY_DIR}/src/webrtc
|
-DLIBWEBRTC_INCLUDE_DIR:STRING=${CMAKE_BINARY_DIR}/src/webrtc
|
||||||
-DLIBWEBRTC_OUTPUT_DIR:PATH=${CMAKE_BINARY_DIR}/src/out/Default
|
-DLIBWEBRTC_OUTPUT_DIR:PATH=${CMAKE_BINARY_DIR}/src/out/Default
|
||||||
-DTARGET_OS:STRING=${TARGET_OS})
|
-DTARGET_OS:STRING=${TARGET_OS}
|
||||||
|
)
|
||||||
|
|
@ -23,7 +23,11 @@ file(GLOB_RECURSE LIBWEBRTC_OBJ_EXCLUDED
|
||||||
${LIBWEBRTC_OUTPUT_DIR}/obj/third_party/yasm/re2c/*.${LIBWEBRTC_OBJ_EXT}
|
${LIBWEBRTC_OUTPUT_DIR}/obj/third_party/yasm/re2c/*.${LIBWEBRTC_OBJ_EXT}
|
||||||
${LIBWEBRTC_OUTPUT_DIR}/obj/third_party/yasm/yasm/*.${LIBWEBRTC_OBJ_EXT}
|
${LIBWEBRTC_OUTPUT_DIR}/obj/third_party/yasm/yasm/*.${LIBWEBRTC_OBJ_EXT}
|
||||||
${LIBWEBRTC_OUTPUT_DIR}/obj/third_party/protobuf/protoc/*.${LIBWEBRTC_OBJ_EXT}
|
${LIBWEBRTC_OUTPUT_DIR}/obj/third_party/protobuf/protoc/*.${LIBWEBRTC_OBJ_EXT}
|
||||||
${LIBWEBRTC_OUTPUT_DIR}/obj/third_party/protobuf/protobuf_full/*.${LIBWEBRTC_OBJ_EXT})
|
${LIBWEBRTC_OUTPUT_DIR}/obj/third_party/protobuf/protobuf_full/*.${LIBWEBRTC_OBJ_EXT}
|
||||||
|
${LIBWEBRTC_OUTPUT_DIR}/obj/webrtc/examples/*.${LIBWEBRTC_OBJ_EXT}
|
||||||
|
${LIBWEBRTC_OUTPUT_DIR}/obj/webrtc/tools/*.${LIBWEBRTC_OBJ_EXT}
|
||||||
|
${LIBWEBRTC_OUTPUT_DIR}/obj/webrtc/modules/video_capture/video_capture/video_capture_external.${LIBWEBRTC_OBJ_EXT}
|
||||||
|
${LIBWEBRTC_OUTPUT_DIR}/obj/webrtc/modules/video_capture/video_capture/device_info_external.${LIBWEBRTC_OBJ_EXT})
|
||||||
|
|
||||||
list(LENGTH LIBWEBRTC_OBJ_EXCLUDED LIBWEBRTC_OBJ_EXCLUDED_LEN)
|
list(LENGTH LIBWEBRTC_OBJ_EXCLUDED LIBWEBRTC_OBJ_EXCLUDED_LEN)
|
||||||
|
|
||||||
|
|
@ -31,12 +35,7 @@ if (${LIBWEBRTC_OBJ_EXCLUDED_LEN} GREATER "0")
|
||||||
list(REMOVE_ITEM LIBWEBRTC_OBJ_FILES ${LIBWEBRTC_OBJ_EXCLUDED})
|
list(REMOVE_ITEM LIBWEBRTC_OBJ_FILES ${LIBWEBRTC_OBJ_EXCLUDED})
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (TARGET_OS STREQUAL "android")
|
|
||||||
set(ANDROID_NDK ${CMAKE_INSTALL_PREFIX}/src/third_party/android_tools/ndk)
|
|
||||||
add_library(webrtc SHARED ${LIBWEBRTC_OBJ_FILES})
|
|
||||||
else ()
|
|
||||||
add_library(webrtc STATIC ${LIBWEBRTC_OBJ_FILES})
|
add_library(webrtc STATIC ${LIBWEBRTC_OBJ_FILES})
|
||||||
endif ()
|
|
||||||
|
|
||||||
set_source_files_properties(${LIBWEBRTC_OBJ_FILES} PROPERTIES
|
set_source_files_properties(${LIBWEBRTC_OBJ_FILES} PROPERTIES
|
||||||
EXTERNAL_OBJECT true
|
EXTERNAL_OBJECT true
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue