mirror of
https://github.com/UltraCoderRU/libwebrtc.git
synced 2026-01-28 03:15:11 +00:00
173 lines
No EOL
5.4 KiB
CMake
173 lines
No EOL
5.4 KiB
CMake
include(ExternalProject)
|
|
include(LibWebRTCCommand)
|
|
include(GClientConfig)
|
|
|
|
set(_DOWNLOAD_COMMAND ${GCLIENT_EXECUTABLE} sync --revision
|
|
${LIBWEBRTC_WEBRTC_REVISION} -D -n)
|
|
set(_BUILD_COMMAND ${PYTHON_EXECUTABLE} src/tools/clang/scripts/update.py)
|
|
|
|
ExternalProject_Add(
|
|
webrtc-src
|
|
PREFIX ${CMAKE_BINARY_DIR}
|
|
BINARY_DIR ${CMAKE_BINARY_DIR}
|
|
SOURCE_DIR ${CMAKE_BINARY_DIR}
|
|
DOWNLOAD_DIR ${CMAKE_BINARY_DIR}
|
|
|
|
DOWNLOAD_COMMAND ${PREFIX_EXECUTE} ${_DOWNLOAD_COMMAND}
|
|
BUILD_COMMAND ${PREFIX_EXECUTE} ${_BUILD_COMMAND}
|
|
INSTALL_COMMAND ""
|
|
)
|
|
|
|
set(_NEXT_DEPENDS webrtc-src)
|
|
if (UNIX AND NOT APPLE)
|
|
libwebrtc_command(
|
|
NAME webrtc-install-sysroot
|
|
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 ${_NEXT_DEPENDS}
|
|
)
|
|
set(_NEXT_DEPENDS webrtc-install-sysroot)
|
|
|
|
set(_PLATFORM linux*)
|
|
set(_FOLDER linux64)
|
|
elseif (APPLE)
|
|
set(_PLATFORM darwin)
|
|
set(_FOLDER mac)
|
|
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 ${_NEXT_DEPENDS}
|
|
)
|
|
set(_NEXT_DEPENDS webrtc-vs-toolchain)
|
|
|
|
set(_PLATFORM win32)
|
|
set(_FOLDER win)
|
|
set(_SUFFIX .exe)
|
|
endif (UNIX AND NOT APPLE)
|
|
|
|
libwebrtc_command(
|
|
NAME webrtc-fetch-gn
|
|
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}
|
|
)
|
|
|
|
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
|
|
)
|
|
|
|
#
|
|
# Android dependencies
|
|
set(_NEXT_DEPENDS webrtc-fetch-clang-format)
|
|
if (TARGET_OS STREQUAL "android")
|
|
libwebrtc_command(
|
|
NAME webrtc-android-fetch-play-services
|
|
COMMAND ${PYTHON_EXECUTABLE} src/build/android/play_services/update.py download
|
|
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
|
|
COMMENT "Fetching Google Play Services"
|
|
DEPENDS webrtc-fetch-clang-format
|
|
)
|
|
|
|
libwebrtc_command(
|
|
NAME webrtc-android-update-lastchange
|
|
COMMAND ${PYTHON_EXECUTABLE} src/build/util/lastchange.py -o src/build/util/LASTCHANGE
|
|
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
|
|
COMMENT "Updating src/build/util/LASTCHANGE"
|
|
DEPENDS webrtc-android-fetch-play-services
|
|
)
|
|
|
|
set(_NEXT_DEPENDS webrtc-android-update-lastchange)
|
|
foreach(_DEPENDENCY_NAME android-support-test-runner espresso guava hamcrest javax-inject)
|
|
string(REPLACE "-" "_" _DEPENDENCY_FOLDER ${_DEPENDENCY_NAME})
|
|
|
|
libwebrtc_command(
|
|
NAME webrtc-android-fetch-${_DEPENDENCY_NAME}
|
|
COMMAND ${PYTHON_EXECUTABLE} src/build/android/update_deps/update_third_party_deps.py download -b chromium-${_DEPENDENCY_NAME} -l third_party/${_DEPENDENCY_FOLDER}
|
|
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
|
|
COMMENT "Fetching Android dependency: ${_DEPENDENCY_NAME}"
|
|
DEPENDS ${_NEXT_DEPENDS}
|
|
)
|
|
|
|
set(_NEXT_DEPENDS webrtc-android-fetch-${_DEPENDENCY_NAME})
|
|
endforeach(_DEPENDENCY_NAME)
|
|
endif (TARGET_OS STREQUAL "android")
|
|
|
|
#
|
|
# Generate build files
|
|
set(_GEN_ARGS use_gold=false target_cpu=\\"${TARGET_CPU}\\" target_os=\\"${TARGET_OS}\\")
|
|
|
|
if (MSVC OR XCODE)
|
|
set(_GEN_ARGS ${_GEN_ARGS} is_debug=$<$<CONFIG:Debug>:true>$<$<CONFIG:Release>:false>)
|
|
elseif (CMAKE_BUILD_TYPE MATCHES Debug)
|
|
set(_GEN_ARGS ${_GEN_ARGS} is_debug=true)
|
|
else (MSVC OR XCODE)
|
|
set(_GEN_ARGS ${_GEN_ARGS} is_debug=false)
|
|
endif (MSVC OR XCODE)
|
|
|
|
if (BUILD_TESTS)
|
|
set(_GEN_ARGS ${_GEN_ARGS} rtc_include_tests=true)
|
|
else (BUILD_TESTS)
|
|
set(_GEN_ARGS ${_GEN_ARGS} rtc_include_tests=false)
|
|
endif (BUILD_TESTS)
|
|
|
|
if (LIBRARY_TYPE STREQUAL STATIC)
|
|
set(_GEN_ARGS ${_GEN_ARGS} is_component_build=false)
|
|
else (LIBRARY_TYPE STREQUAL STATIC)
|
|
set(_GEN_ARGS ${_GEN_ARGS} is_component_build=true)
|
|
endif (LIBRARY_TYPE STREQUAL STATIC)
|
|
|
|
if (WIN32)
|
|
set(_GEN_COMMAND gn gen out/Default --args="${_GEN_ARGS}")
|
|
elseif (UNIX)
|
|
set(_GEN_COMMAND gn gen out/Default --args='"${_GEN_ARGS}"')
|
|
endif (WIN32)
|
|
|
|
libwebrtc_command(
|
|
NAME webrtc-generate
|
|
COMMAND ${_GEN_COMMAND}
|
|
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/src"
|
|
COMMENT "Generating build files"
|
|
DEPENDS ${_NEXT_DEPENDS}
|
|
)
|
|
|
|
#
|
|
# Run ninja
|
|
libwebrtc_command(
|
|
NAME webrtc-build
|
|
COMMAND ninja ${NINJA_ARGS} -C out/Default
|
|
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/src"
|
|
COMMENT "Building WebRTC"
|
|
DEPENDS webrtc-generate
|
|
)
|
|
|
|
#
|
|
# Link the library
|
|
ExternalProject_Add(
|
|
libwebrtc
|
|
DEPENDS webrtc-build
|
|
|
|
INSTALL_DIR ${CMAKE_BINARY_DIR}
|
|
SOURCE_DIR ${CMAKE_SOURCE_DIR}/Targets/libwebrtc
|
|
BINARY_DIR ${CMAKE_BINARY_DIR}/libwebrtc
|
|
|
|
CMAKE_ARGS
|
|
-DLIBRARY_TYPE:STRING=${LIBRARY_TYPE}
|
|
-DTARGET_OS:STRING=${TARGET_OS}
|
|
-DWEBRTC_OUTPUT_DIR:PATH=${CMAKE_BINARY_DIR}/src/out/Default
|
|
-DWEBRTC_SOURCE_DIR:PATH=${CMAKE_BINARY_DIR}/src/webrtc
|
|
-DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_BINARY_DIR}
|
|
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
|
|
-DINSTALL_CMAKE_DIR:PATH=${CMAKE_BINARY_DIR}/lib/cmake/LibWebRTC
|
|
)
|
|
|
|
include(Install)
|
|
include(Package) |