Fetch and compile cmake targets

This commit is contained in:
Axel Isouard 2016-09-23 19:33:28 +02:00
parent b5715c6c93
commit fbca31f896
9 changed files with 185 additions and 0 deletions

3
.gitmodules vendored Normal file
View file

@ -0,0 +1,3 @@
[submodule "Dependencies/depot_tools"]
path = Dependencies/depot_tools
url = https://chromium.googlesource.com/chromium/tools/depot_tools.git

14
CMakeLists.txt Normal file
View file

@ -0,0 +1,14 @@
cmake_minimum_required(VERSION 3.2)
project(libwebrtc)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
${CMAKE_SOURCE_DIR}/CMakeModules)
find_package(Git REQUIRED)
find_package(DepotTools REQUIRED)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(WEBRTC_CHROMIUM_DEPS git@github.com:aisouard/libwebrtc-chromium-deps.git)
add_subdirectory(Targets)

View file

@ -0,0 +1,10 @@
find_program(DEPOTTOOLS_GCLIENT_EXECUTABLE
NAMES gclient gclient.bat
PATHS ${CMAKE_CURRENT_SOURCE_DIR}/Dependencies/depot_tools
)
include(${CMAKE_ROOT}/Modules/FindPackageHandleStandardArgs.cmake)
find_package_handle_standard_args(DepotTools
REQUIRED_VARS DEPOTTOOLS_GCLIENT_EXECUTABLE
FAIL_MESSAGE "Could not find the gclient executable."
)

1
Dependencies/depot_tools vendored Submodule

@ -0,0 +1 @@
Subproject commit 15ab08227b961ddce83db7e41fb83b9288ff9ccc

View file

@ -0,0 +1,53 @@
#
# 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"
)
add_custom_target(
webrtc_generate_build ALL
DEPENDS ${CMAKE_BINARY_DIR}/Nevermind
)
add_dependencies(webrtc_generate_build webrtc_links)
#
# 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"
)
add_custom_target(
webrtc_build ALL
DEPENDS ${CMAKE_BINARY_DIR}/src/out/Default/obj/root.stamp
)
add_dependencies(webrtc_build webrtc_generate_build)
#
# 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"
)
add_custom_target(
webrtc_merge ALL
DEPENDS ${CMAKE_BINARY_DIR}/libwebrtc.a
)
add_dependencies(webrtc_merge webrtc_build)

4
Targets/CMakeLists.txt Normal file
View file

@ -0,0 +1,4 @@
add_subdirectory(Fetch)
add_subdirectory(Build)
add_subdirectory(Test)
add_subdirectory(Install)

View file

@ -0,0 +1,100 @@
#
# Fetch
#
set(gclient_config
${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
)
#
# Sync
#
set(gclient_sync
${DEPOTTOOLS_GCLIENT_EXECUTABLE} sync -n -D
)
if(WEBRTC_REVISION)
set(gclient_sync ${gclient_sync} -r ${WEBRTC_REVISION})
endif()
add_custom_command(
OUTPUT ${CMAKE_BINARY_DIR}/src/all.gyp
COMMAND ${gclient_sync}
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
COMMENT "Retrieving WebRTC source code"
)
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"
)
add_custom_target(
webrtc_chromium_deps ALL
DEPENDS ${CMAKE_BINARY_DIR}/src/chromium/src/DEPS
)
add_dependencies(webrtc_chromium_deps webrtc_sync)
#
# 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"
)
add_custom_target(
webrtc_links ALL
DEPENDS ${CMAKE_BINARY_DIR}/src/build
)
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"
)
add_custom_target(
webrtc_patch ALL
DEPENDS None
)
add_dependencies(webrtc_patch webrtc_links)

View file

View file