Manage depot_tools, replace modules, remove Targets folder, fixes #33

This commit is contained in:
Axel Isouard 2017-03-18 16:13:36 +01:00
parent 5a602922c0
commit b59291f093
No known key found for this signature in database
GPG key ID: 4E64BB3EAAF31C29
11 changed files with 381 additions and 308 deletions

View file

@ -23,5 +23,82 @@ if (NOT WIN32)
find_package(PythonInterp 2.7 REQUIRED) find_package(PythonInterp 2.7 REQUIRED)
endif (NOT WIN32) endif (NOT WIN32)
add_subdirectory(Targets) include(ExternalProject)
if (NOT HAS_OWN_DEPOT_TOOLS)
if (WIN32)
set(GCLIENT_EXECUTABLE ${CMAKE_BINARY_DIR}/depot_tools/src/depot-tools/gclient.bat)
else (WIN32)
set(GCLIENT_EXECUTABLE ${CMAKE_BINARY_DIR}/depot_tools/src/depot-tools/gclient)
endif (WIN32)
ExternalProject_Add(
depot-tools
GIT_REPOSITORY https://chromium.googlesource.com/chromium/tools/depot_tools
PREFIX ${CMAKE_BINARY_DIR}/depot_tools
CONFIGURE_COMMAND ""
UPDATE_COMMAND ""
PATCH_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
)
set(_NEXT_DEPENDS depot-tools)
set(DEPOT_TOOLS_PATH ${CMAKE_BINARY_DIR}/depot_tools/src/depot-tools)
endif (NOT HAS_OWN_DEPOT_TOOLS)
ExternalProject_Add(
webrtc-src
DEPENDS ${_NEXT_DEPENDS}
GIT_REPOSITORY https://chromium.googlesource.com/external/webrtc
PREFIX ${CMAKE_BINARY_DIR}/webrtc
BINARY_DIR ${CMAKE_BINARY_DIR}/webrtc/build
DOWNLOAD_DIR ${CMAKE_BINARY_DIR}/webrtc/src
SOURCE_DIR ${CMAKE_BINARY_DIR}/webrtc/src
STAMP_DIR ${CMAKE_BINARY_DIR}/webrtc/stamp
TMP_DIR ${CMAKE_BINARY_DIR}/webrtc/tmp
PATCH_COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/webrtc/CMakeLists.txt.in ${CMAKE_BINARY_DIR}/webrtc/src/CMakeLists.txt
UPDATE_COMMAND ""
INSTALL_COMMAND ""
CMAKE_ARGS
-DDEPOT_TOOLS_PATH:PATH=${DEPOT_TOOLS_PATH}
-DGCLIENT_EXECUTABLE:PATH=${GCLIENT_EXECUTABLE}
-DHAS_OWN_DEPOT_TOOLS:PATH=${HAS_OWN_DEPOT_TOOLS}
-DCMAKE_MODULE_PATH:PATH=${CMAKE_MODULE_PATH}
-DTARGET_CPU=${TARGET_CPU}
-DTARGET_OS=${TARGET_OS}
-DWEBRTC_BRANCH_HEAD=${WEBRTC_BRANCH_HEAD}
-DWEBRTC_PARENT_DIR:PATH=${CMAKE_BINARY_DIR}/webrtc
-DWEBRTC_REVISION=${WEBRTC_REVISION}
-DWEBRTC_ROOT_DIR:PATH=${CMAKE_BINARY_DIR}
)
ExternalProject_Add(
libwebrtc
DEPENDS webrtc-src
INSTALL_DIR ${CMAKE_BINARY_DIR}
SOURCE_DIR ${CMAKE_SOURCE_DIR}/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}/webrtc/src/out/Default
-DWEBRTC_SOURCE_DIR:PATH=${CMAKE_BINARY_DIR}/webrtc/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)
export(PACKAGE LibWebRTC) export(PACKAGE LibWebRTC)

View file

@ -0,0 +1,75 @@
if (HAS_OWN_DEPOT_TOOLS)
return()
endif (HAS_OWN_DEPOT_TOOLS)
if (WEBRTC_REVISION)
message(STATUS "Retrieving date for commit ${WEBRTC_REVISION}")
execute_process(COMMAND ${GIT_EXECUTABLE} log -1 --format=%ci ${WEBRTC_REVISION}
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE _WEBRTC_COMMIT_DATE)
if (NOT _WEBRTC_COMMIT_DATE)
message(FATAL_ERROR "-- Unable to find webrtc commit date at ${WEBRTC_REVISION}")
endif (NOT _WEBRTC_COMMIT_DATE)
elseif (WEBRTC_BRANCH_HEAD)
message(STATUS "Retrieving branch-heads refspecs")
execute_process(COMMAND ${GIT_EXECUTABLE} config remote.origin.fetch +refs/branch-heads/*:refs/remotes/branch-heads/* ^\\+refs/branch-heads/\\*:.*$
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
RESULT_VARIABLE _ADD_REMOTE_RESULT)
if (NOT _ADD_REMOTE_RESULT EQUAL 0)
message(FATAL_ERROR "-- Unable to add branch-heads refspec")
endif (NOT _ADD_REMOTE_RESULT EQUAL 0)
message(STATUS "Fetching ${WEBRTC_BRANCH_HEAD}")
execute_process(COMMAND ${GIT_EXECUTABLE} fetch origin ${WEBRTC_BRANCH_HEAD}
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
RESULT_VARIABLE _WEBRTC_FETCH_RESULT)
if (NOT _WEBRTC_FETCH_RESULT EQUAL 0)
message(FATAL_ERROR "-- Unable to fetch ${WEBRTC_BRANCH_HEAD}")
endif (NOT _WEBRTC_FETCH_RESULT EQUAL 0)
message(STATUS "Checking out ${WEBRTC_BRANCH_HEAD}")
execute_process(COMMAND ${GIT_EXECUTABLE} checkout FETCH_HEAD
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
RESULT_VARIABLE _WEBRTC_CHECKOUT_RESULT)
if (NOT _WEBRTC_CHECKOUT_RESULT EQUAL 0)
message(FATAL_ERROR "-- Unable to checkout ${WEBRTC_BRANCH_HEAD}")
endif (NOT _WEBRTC_CHECKOUT_RESULT EQUAL 0)
message(STATUS "Retrieving date for commit ${WEBRTC_BRANCH_HEAD}")
execute_process(COMMAND ${GIT_EXECUTABLE} log -1 --format=%ci
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE _WEBRTC_COMMIT_DATE
RESULT_VARIABLE _WEBRTC_COMMIT_DATE_RESULT)
if (NOT _WEBRTC_COMMIT_DATE_RESULT EQUAL 0)
message(FATAL_ERROR "-- Unable to retrieve the commit date")
endif (NOT _WEBRTC_COMMIT_DATE_RESULT EQUAL 0)
else (WEBRTC_REVISION)
message(FATAL_ERROR "-- Both WEBRTC_REVISION and WEBRTC_BRANCH_HEAD variables are undefined")
endif (WEBRTC_REVISION)
string(STRIP ${_WEBRTC_COMMIT_DATE} _WEBRTC_COMMIT_DATE)
message(STATUS "Retrieving depot_tools commit before ${_WEBRTC_COMMIT_DATE}")
execute_process(COMMAND ${GIT_EXECUTABLE} rev-list -n 1 --before=\"${_WEBRTC_COMMIT_DATE}\" master
WORKING_DIRECTORY ${DEPOT_TOOLS_PATH}
OUTPUT_VARIABLE _DEPOT_TOOLS_COMMIT)
if (NOT _DEPOT_TOOLS_COMMIT)
message(FATAL_ERROR "-- Unable to find depot_tools commit before ${_WEBRTC_COMMIT_DATE}")
endif (NOT _DEPOT_TOOLS_COMMIT)
string(STRIP ${_DEPOT_TOOLS_COMMIT} _DEPOT_TOOLS_COMMIT)
message(STATUS "Checking out depot_tools to commit ${_DEPOT_TOOLS_COMMIT}")
execute_process(COMMAND ${GIT_EXECUTABLE} checkout ${_DEPOT_TOOLS_COMMIT}
WORKING_DIRECTORY ${DEPOT_TOOLS_PATH}
RESULT_VARIABLE _DEPOT_TOOLS_CHECKED_OUT)
if (NOT _DEPOT_TOOLS_CHECKED_OUT EQUAL 0)
message(FATAL_ERROR "-- Unable to checkout depot_tools to commit ${_DEPOT_TOOLS_COMMIT}")
endif (NOT _DEPOT_TOOLS_CHECKED_OUT EQUAL 0)

View file

@ -1,35 +1,24 @@
if(PREFIX_INCLUDED) set(_WEBRTC_PATH ${DEPOT_TOOLS_PATH})
return() set(_DEPOT_TOOLS_ENV PATH=${_WEBRTC_PATH})
endif(PREFIX_INCLUDED)
set(PREFIX_INCLUDED true)
#
# Generate environment variables
#
if (DEPOT_TOOLS_PATH)
set(WEBRTC_PATH ${DEPOT_TOOLS_PATH})
else (DEPOT_TOOLS_PATH)
set(WEBRTC_PATH ${CMAKE_BINARY_DIR}/depot_tools)
endif (DEPOT_TOOLS_PATH)
if (WIN32) if (WIN32)
get_filename_component(DEPOT_TOOLS_PYTHON_PATH get_filename_component(DEPOT_TOOLS_PYTHON_PATH
"${WEBRTC_PATH}/python276_bin" "${_WEBRTC_PATH}/python276_bin"
REALPATH) REALPATH)
list(APPEND WEBRTC_PATH ${DEPOT_TOOLS_PYTHON_PATH}) list(APPEND _WEBRTC_PATH ${DEPOT_TOOLS_PYTHON_PATH})
endif (WIN32) endif (WIN32)
list(APPEND WEBRTC_PATH $ENV{PATH}) list(APPEND _WEBRTC_PATH $ENV{PATH})
if (WIN32) if (WIN32)
string(REGEX REPLACE "/" "\\\\" WEBRTC_PATH "${WEBRTC_PATH}") string(REGEX REPLACE "/" "\\\\" _WEBRTC_PATH "${_WEBRTC_PATH}")
string(REGEX REPLACE ";" "\\\;" WEBRTC_PATH "${WEBRTC_PATH}") string(REGEX REPLACE ";" "\\\;" _WEBRTC_PATH "${_WEBRTC_PATH}")
else (WIN32) else (WIN32)
string(REGEX REPLACE ";" ":" WEBRTC_PATH "${WEBRTC_PATH}") string(REGEX REPLACE ";" ":" _WEBRTC_PATH "${_WEBRTC_PATH}")
endif (WIN32) endif (WIN32)
get_filename_component(CHROMIUM_PYTHONPATH get_filename_component(_CHROMIUM_PYTHONPATH
"${CMAKE_BINARY_DIR}/src/build" "${CMAKE_SOURCE_DIR}/build"
REALPATH) REALPATH)
if (WIN32) if (WIN32)
@ -49,10 +38,11 @@ else (WIN32)
endif (WIN32) endif (WIN32)
file(WRITE ${PREFIX_FILENAME} "${PREFIX_HEADER} file(WRITE ${PREFIX_FILENAME} "${PREFIX_HEADER}
${PREFIX_COMMAND} PATH=${WEBRTC_PATH} ${PREFIX_COMMAND} PATH=${_WEBRTC_PATH}
${PREFIX_COMMAND} PYTHONPATH=${CHROMIUM_PYTHONPATH} ${PREFIX_COMMAND} PYTHONPATH=${_CHROMIUM_PYTHONPATH}
${PREFIX_COMMAND} DEPOT_TOOLS_WIN_TOOLCHAIN=0 ${PREFIX_COMMAND} DEPOT_TOOLS_WIN_TOOLCHAIN=0
${PREFIX_COMMAND} DEPOT_TOOLS_UPDATE=0 ${PREFIX_COMMAND} DEPOT_TOOLS_UPDATE=0
${PREFIX_COMMAND} CHROME_HEADLESS=1 ${PREFIX_COMMAND} CHROME_HEADLESS=1
${PREFIX_EVAL} ${PREFIX_EVAL}
") ")

View file

@ -0,0 +1,22 @@
file(WRITE ${WEBRTC_PARENT_DIR}/.gclient "solutions = [
{
\"url\": \"https://chromium.googlesource.com/external/webrtc.git\",
\"managed\": False,
\"name\": \"src\",
\"deps_file\": \"DEPS\",
\"custom_deps\": {},
},
]
")
if (TARGET_OS STREQUAL "android")
file(APPEND ${WEBRTC_PARENT_DIR}/.gclient "target_os = [\"android\", \"unix\"]")
elseif (TARGET_OS STREQUAL "ios")
file(APPEND ${WEBRTC_PARENT_DIR}/.gclient "target_os = [\"ios\", \"mac\"]")
elseif (TARGET_OS STREQUAL "linux")
file(APPEND ${WEBRTC_PARENT_DIR}/.gclient "target_os = [\"unix\"]")
elseif (TARGET_OS STREQUAL "mac")
file(APPEND ${WEBRTC_PARENT_DIR}/.gclient "target_os = [\"mac\"]")
elseif (TARGET_OS STREQUAL "win")
file(APPEND ${WEBRTC_PARENT_DIR}/.gclient "target_os = [\"win\"]")
endif (TARGET_OS STREQUAL "android")

View file

@ -1,30 +0,0 @@
if(GCLIENT_CONFIG_INCLUDED)
return()
endif(GCLIENT_CONFIG_INCLUDED)
set(GCLIENT_CONFIG_INCLUDED true)
#
# Retrieve WebRTC source code
#
file(WRITE ${CMAKE_BINARY_DIR}/.gclient "solutions = [
{
\"url\": \"https://chromium.googlesource.com/external/webrtc.git\",
\"managed\": False,
\"name\": \"src\",
\"deps_file\": \"DEPS\",
\"custom_deps\": {},
},
]
")
if (TARGET_OS STREQUAL "android")
file(APPEND ${CMAKE_BINARY_DIR}/.gclient "target_os = [\"android\", \"unix\"]")
elseif (TARGET_OS STREQUAL "ios")
file(APPEND ${CMAKE_BINARY_DIR}/.gclient "target_os = [\"ios\", \"mac\"]")
elseif (TARGET_OS STREQUAL "linux")
file(APPEND ${CMAKE_BINARY_DIR}/.gclient "target_os = [\"unix\"]")
elseif (TARGET_OS STREQUAL "mac")
file(APPEND ${CMAKE_BINARY_DIR}/.gclient "target_os = [\"mac\"]")
elseif (TARGET_OS STREQUAL "win")
file(APPEND ${CMAKE_BINARY_DIR}/.gclient "target_os = [\"win\"]")
endif (TARGET_OS STREQUAL "android")

35
CMakeModules/Gn.cmake Normal file
View file

@ -0,0 +1,35 @@
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=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 (GN_EXTRA_ARGS)
set(_GEN_ARGS "${_GEN_ARGS} ${GN_EXTRA_ARGS}")
endif (GN_EXTRA_ARGS)
set(_GN_OUT_DIR out/Default)
set(_GEN_COMMAND_LINE gn gen ${_GN_OUT_DIR} --args=\"${_GEN_ARGS}\")
if (WIN32)
set(_SCRIPT_SUFFIX .bat)
elseif (UNIX)
set(_SCRIPT_SUFFIX .sh)
set(_GEN_COMMAND sh)
endif (WIN32)
string(REPLACE ";" " " _GEN_COMMAND_STR "${_GEN_COMMAND_LINE}")
set(_GN_SCRIPT_FILENAME ${WEBRTC_PARENT_DIR}/gn-gen${_SCRIPT_SUFFIX})
file(WRITE ${_GN_SCRIPT_FILENAME} ${_GEN_COMMAND_STR})
set(_GEN_COMMAND ${_GEN_COMMAND} ${_GN_SCRIPT_FILENAME})

View file

@ -1,28 +0,0 @@
if(LIBWEBRTC_COMMAND_INCLUDED)
return()
endif(LIBWEBRTC_COMMAND_INCLUDED)
set(LIBWEBRTC_COMMAND_INCLUDED true)
include(CMakeParseArguments)
include(Prefix)
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}
)
add_custom_target(${COMMAND_NAME} ALL DEPENDS ${STAMP_FILE})
add_dependencies(${COMMAND_NAME} ${COMMAND_DEPENDS})
endfunction()

View file

@ -1,205 +0,0 @@
include(ExternalProject)
include(LibWebRTCCommand)
include(GClientConfig)
set(_DOWNLOAD_COMMAND ${GCLIENT_EXECUTABLE} sync --with_branch_heads --nohooks)
if (WEBRTC_REVISION)
set(_DOWNLOAD_COMMAND ${_DOWNLOAD_COMMAND} --revision ${WEBRTC_REVISION})
endif (WEBRTC_REVISION)
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 ""
INSTALL_COMMAND ""
)
set(_NEXT_DEPENDS webrtc-src)
if (NOT WEBRTC_REVISION)
libwebrtc_command(
NAME webrtc-fetch-refs
COMMAND ${GIT_EXECUTABLE} fetch origin ${WEBRTC_BRANCH_HEAD}
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/src"
COMMENT "Fetching branch heads"
DEPENDS webrtc-src
)
libwebrtc_command(
NAME webrtc-checkout-fetch-head
COMMAND ${GIT_EXECUTABLE} checkout FETCH_HEAD
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/src"
COMMENT "Checking out fetch head"
DEPENDS webrtc-fetch-refs
)
set(_NEXT_DEPENDS webrtc-checkout-fetch-head)
endif (NOT WEBRTC_REVISION)
libwebrtc_command(
NAME webrtc-update-clang
COMMAND ${PYTHON_EXECUTABLE} src/tools/clang/scripts/update.py
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
COMMENT "Updating clang"
DEPENDS ${_NEXT_DEPENDS}
)
set(_NEXT_DEPENDS webrtc-update-clang)
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)
set(_GEN_ARGS ${_GEN_ARGS} ${GN_EXTRA_ARGS})
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)

View file

@ -0,0 +1,27 @@
if (DEPOT_TOOLS_PATH)
return()
endif (DEPOT_TOOLS_PATH)
include(ExternalProject)
if (WIN32)
set(GCLIENT_EXECUTABLE ${CMAKE_BINARY_DIR}/depot_tools/gclient.bat)
else (WIN32)
set(GCLIENT_EXECUTABLE ${CMAKE_BINARY_DIR}/depot_tools/gclient)
endif (WIN32)
ExternalProject_Add(
depot-tools
GIT_REPOSITORY https://chromium.googlesource.com/chromium/tools/depot_tools
PREFIX ${CMAKE_BINARY_DIR}/depot_tools
CONFIGURE_COMMAND ""
UPDATE_COMMAND ""
PATCH_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
)
set(_NEXT_DEPENDS depot-tools)

110
webrtc/CMakeLists.txt.in Normal file
View file

@ -0,0 +1,110 @@
cmake_minimum_required(VERSION 3.3)
project(webrtc)
find_package(Git REQUIRED)
if (WIN32)
set(PYTHON_EXECUTABLE ${DEPOT_TOOLS_PATH}/python.bat)
else (WIN32)
find_package(PythonInterp 2.7 REQUIRED)
endif (WIN32)
include(DepotTools)
include(GClient)
include(Environment)
message(STATUS "Synchronizing webrtc")
set(_SYNC_COMMAND ${GCLIENT_EXECUTABLE} sync --nohooks)
execute_process(COMMAND ${PREFIX_EXECUTE} ${_SYNC_COMMAND}
WORKING_DIRECTORY ${WEBRTC_PARENT_DIR}
RESULT_VARIABLE _SYNCHRONIZED_WEBRTC)
if (NOT _SYNCHRONIZED_WEBRTC EQUAL 0)
message(FATAL_ERROR "Unable to synchronize webrtc ${PREFIX_EXECUTE} ${_SYNC_COMMAND}")
endif (NOT _SYNCHRONIZED_WEBRTC EQUAL 0)
message(STATUS "Updating clang")
set(_UPDATE_CLANG_COMMAND ${PYTHON_EXECUTABLE} src/tools/clang/scripts/update.py)
execute_process(COMMAND ${PREFIX_EXECUTE} ${_UPDATE_CLANG_COMMAND}
WORKING_DIRECTORY ${WEBRTC_PARENT_DIR}
RESULT_VARIABLE _CLANG_UPDATED)
if (NOT _CLANG_UPDATED EQUAL 0)
message(FATAL_ERROR "Unable to update clang")
endif (NOT _CLANG_UPDATED EQUAL 0)
if (UNIX AND NOT APPLE)
message(STATUS "Retrieving sysroot")
set(_SYSROOT_COMMAND ${PYTHON_EXECUTABLE} ${WEBRTC_PARENT_DIR}/src/build/linux/sysroot_scripts/install-sysroot.py --running-as-hook)
execute_process(COMMAND ${PREFIX_EXECUTE} ${_SYSROOT_COMMAND}
WORKING_DIRECTORY ${WEBRTC_PARENT_DIR}
RESULT_VARIABLE _SYSROOT_RETRIEVED)
if (NOT _SYSROOT_RETRIEVED EQUAL 0)
message(FATAL_ERROR "Unable to retrieve the sysroot")
endif (NOT _SYSROOT_RETRIEVED EQUAL 0)
set(_PLATFORM linux*)
set(_FOLDER linux64)
elseif (APPLE)
set(_PLATFORM darwin)
set(_FOLDER mac)
elseif (WIN32)
message(STATUS "Retrieving Visual Studio toolchain")
set(_TOOLCHAIN_COMMAND ${PYTHON_EXECUTABLE} src/build/vs_toolchain.py update)
execute_process(COMMAND ${PREFIX_EXECUTE} ${_TOOLCHAIN_COMMAND}
WORKING_DIRECTORY ${WEBRTC_PARENT_DIR}
RESULT_VARIABLE _VS_TOOLCHAIN_RETRIEVED)
if (NOT _VS_TOOLCHAIN_RETRIEVED EQUAL 0)
message(FATAL_ERROR "Unable to retrieve Visual Studio toolchain")
endif (NOT _VS_TOOLCHAIN_RETRIEVED EQUAL 0)
set(_PLATFORM win32)
set(_FOLDER win)
set(_SUFFIX .exe)
endif (UNIX AND NOT APPLE)
message(STATUS "Fetching gn${_SUFFIX} for ${_PLATFORM}")
set(_GN_COMMAND download_from_google_storage --no_resume --platform=${_PLATFORM}
--no_auth --bucket chromium-gn
-s src/buildtools/${_FOLDER}/gn${_SUFFIX}.sha1)
execute_process(COMMAND ${PREFIX_EXECUTE} ${_GN_COMMAND}
WORKING_DIRECTORY ${WEBRTC_PARENT_DIR}
RESULT_VARIABLE _GN_RETRIEVED)
if (NOT _GN_RETRIEVED EQUAL 0)
message(FATAL_ERROR "Unable to retrieve clang-format${_SUFFIX}")
endif (NOT _GN_RETRIEVED EQUAL 0)
message(STATUS "Fetching clang-format${_SUFFIX} for ${_PLATFORM}")
set(_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)
execute_process(COMMAND ${PREFIX_EXECUTE} ${_CLANG_FORMAT_COMMAND}
WORKING_DIRECTORY ${WEBRTC_PARENT_DIR}
RESULT_VARIABLE _CLANG_FORMAT_RETRIEVED)
if (NOT _CLANG_FORMAT_RETRIEVED EQUAL 0)
message(FATAL_ERROR "Unable to retrieve clang-format${_SUFFIX}")
endif (NOT _CLANG_FORMAT_RETRIEVED EQUAL 0)
include(Gn)
message(STATUS "Generating build files: ${_GEN_COMMAND}")
execute_process(COMMAND ${PREFIX_EXECUTE} ${_GEN_COMMAND}
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
RESULT_VARIABLE _BUILD_GENERATED)
if (NOT _BUILD_GENERATED EQUAL 0)
message(FATAL_ERROR "Unable to execute ${_GEN_COMMAND}")
endif (NOT _BUILD_GENERATED EQUAL 0)
message(STATUS "Running ninja")
set(_NINJA_COMMAND ninja ${NINJA_ARGS} -C out/Default)
execute_process(COMMAND ${PREFIX_EXECUTE} ${_NINJA_COMMAND}
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
RESULT_VARIABLE _NINJA_DONE)
if (NOT _NINJA_DONE EQUAL 0)
message(FATAL_ERROR "Unable to build webrtc")
endif (NOT _NINJA_DONE EQUAL 0)