CMake: Retrieve Chromium and WebRTC separately

This commit is contained in:
Axel Isouard 2016-11-25 20:08:27 +01:00
parent 5c756a458c
commit 5fb6525b72
No known key found for this signature in database
GPG key ID: 4E64BB3EAAF31C29
8 changed files with 169 additions and 213 deletions

View file

@ -57,3 +57,5 @@ elseif(UNIX AND NOT APPLE)
endif(WIN32) endif(WIN32)
target_link_libraries(PeerConnection ${PEERCONNECTION_LIBRARIES}) target_link_libraries(PeerConnection ${PEERCONNECTION_LIBRARIES})
add_dependencies(PeerConnection libwebrtc_merge)

View file

@ -1,85 +0,0 @@
include(Common)
#
# Generate build files
#
set(LIBWEBRTC_GEN_ARGS use_gold=false)
if (NOT CMAKE_BUILD_TYPE MATCHES DEBUG)
set(LIBWEBRTC_GEN_ARGS ${LIBWEBRTC_GEN_ARGS} is_debug=false)
elseif (NOT CMAKE_BUILD_TYPE MATCHES DEBUG)
set(LIBWEBRTC_GEN_ARGS ${LIBWEBRTC_GEN_ARGS} is_debug=true)
endif (NOT CMAKE_BUILD_TYPE MATCHES DEBUG)
if (WIN32)
set(LIBWEBRTC_GEN_ARGS ${LIBWEBRTC_GEN_ARGS})
elseif (APPLE)
set(LIBWEBRTC_GEN_ARGS ${LIBWEBRTC_GEN_ARGS})
elseif (UNIX AND NOT APPLE)
set(LIBWEBRTC_GEN_ARGS ${LIBWEBRTC_GEN_ARGS})
endif (WIN32)
if (NOT BUILD_TESTS)
set(LIBWEBRTC_GEN_ARGS ${LIBWEBRTC_GEN_ARGS} rtc_include_tests=false)
endif (NOT BUILD_TESTS)
set(GENERATE_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"
libwebrtc_links)
#
# Run ninja
#
set(BUILD_WEBRTC_COMMAND
ninja -C out/Default libjingle_peerconnection field_trial_default metrics_default)
add_libwebrtc_command(libwebrtc_build
${CMAKE_BINARY_DIR}/src/out/Default/obj/root.stamp
"${BUILD_WEBRTC_COMMAND}"
${CMAKE_BINARY_DIR}/src
"Build WebRTC"
libwebrtc_generate_build)
#
# Merge libraries into a single one
#
if (WIN32)
set(LIBWEBRTC_OBJ_EXT *.obj)
elseif (UNIX AND NOT APPLE)
set(LIBWEBRTC_OBJ_EXT *.o)
elseif (APPLE)
set(LIBWEBRTC_OBJ_EXT *.a)
endif (WIN32)
file(GLOB_RECURSE LIBWEBRTC_OBJ_FILES
${CMAKE_BINARY_DIR}/src/out/Default/obj/${LIBWEBRTC_OBJ_EXT})
file(GLOB_RECURSE LIBWEBRTC_OBJ_EXCLUDED
${CMAKE_BINARY_DIR}/src/out/Default/obj/third_party/yasm/gen*/${LIBWEBRTC_OBJ_EXT}
${CMAKE_BINARY_DIR}/src/out/Default/obj/third_party/yasm/re2c/${LIBWEBRTC_OBJ_EXT}
${CMAKE_BINARY_DIR}/src/out/Default/obj/third_party/yasm/yasm/${LIBWEBRTC_OBJ_EXT}
${CMAKE_BINARY_DIR}/src/out/Default/obj/third_party/protobuf/protoc/${LIBWEBRTC_OBJ_EXT}
${CMAKE_BINARY_DIR}/src/out/Default/obj/third_party/protobuf/protobuf_full/${LIBWEBRTC_OBJ_EXT})
list(REMOVE_ITEM LIBWEBRTC_OBJ_FILES ${LIBWEBRTC_OBJ_EXCLUDED})
add_library(webrtc STATIC ${LIBWEBRTC_OBJ_FILES})
set_source_files_properties(${LIBWEBRTC_OBJ_FILES} PROPERTIES
EXTERNAL_OBJECT true
GENERATED true)
set_target_properties(webrtc PROPERTIES
LINKER_LANGUAGE C)
install(TARGETS webrtc
DESTINATION ${LIBWEBRTC_INSTALL_LIB_DIR}
COMPONENT Libraries)

View file

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

View file

@ -1,70 +0,0 @@
include(Common)
#
# Fetch
#
set(GCLIENT_CONFIG_COMMAND
${DEPOTTOOLS_GCLIENT_EXECUTABLE} config --name src
https://chromium.googlesource.com/external/webrtc.git)
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_COMMAND
${DEPOTTOOLS_GCLIENT_EXECUTABLE} sync
--revision ${LIBWEBRTC_WEBRTC_REVISION} -n -D)
add_libwebrtc_command(libwebrtc_sync
${CMAKE_BINARY_DIR}/src/all.gyp
"${GCLIENT_SYNC_COMMAND}"
${CMAKE_BINARY_DIR}
"Retrieving WebRTC source code"
libwebrtc_config)
#
# Sync Chromium
#
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
"${GIT_CLONE_COMMAND}"
${CMAKE_BINARY_DIR}
"Retrieving Chromium dependencies"
libwebrtc_sync)
#
# Update Clang
#
set(UPDATE_CLANG_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_CLANG_COMMAND}"
${CMAKE_BINARY_DIR}/src
"Updating clang"
libwebrtc_chromium_deps)
#
# Setup Links
#
set(SETUP_LINKS_COMMAND python setup_links.py)
add_libwebrtc_command(libwebrtc_links
${CMAKE_BINARY_DIR}/src/tools/clang
"${SETUP_LINKS_COMMAND}"
${CMAKE_BINARY_DIR}/src
"Creating symbolic links"
libwebrtc_clang)

View file

@ -1,54 +0,0 @@
#
# Install headers
#
install(
DIRECTORY ${CMAKE_BINARY_DIR}/src/webrtc
DESTINATION ${LIBWEBRTC_INSTALL_INCLUDE_DIR}
FILES_MATCHING PATTERN "*.h"
)
#
# Create package
#
set(CPACK_PACKAGE_NAME "${LIBWEBRTC_MAJOR_VERSION}")
set(CPACK_PACKAGE_VERSION_MAJOR "${LIBWEBRTC_MAJOR_VERSION}")
set(CPACK_PACKAGE_VERSION_MINOR "${LIBWEBRTC_MINOR_VERSION}")
set(CPACK_PACKAGE_VERSION_PATCH "${LIBWEBRTC_PATCH_VERSION}")
if (WIN)
set(CPACK_GENERATOR "ZIP")
else (WIN)
set(CPACK_GENERATOR "TGZ")
endif (WIN)
if (CMAKE_SYSTEM_NAME MATCHES "Linux")
set(LIBWEBRTC_PLATFORM "linux")
elseif (CMAKE_SYSTEM_NAME MATCHES "Darwin")
set(LIBWEBRTC_PLATFORM "mac")
elseif (CMAKE_SYSTEM_NAME MATCHES "Windows")
set(LIBWEBRTC_PLATFORM "win32")
endif ()
if (CMAKE_SYSTEM_PROCESSOR MATCHES "^arm")
set(LIBWEBRTC_ARCH "arm")
elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "^i.86$")
set(LIBWEBRTC_ARCH "x86")
elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "^x86.64$")
set(LIBWEBRTC_ARCH "x64")
elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64")
set(LIBWEBRTC_ARCH "x64")
elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "powerpc")
set(LIBWEBRTC_ARCH "ppc")
elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "powerpc64")
set(LIBWEBRTC_ARCH "ppc64")
else ()
set(LIBWEBRTC_ARCH "${CMAKE_SYSTEM_PROCESSOR}")
endif ()
set(CPACK_INCLUDE_TOPLEVEL_DIRECTORY 0)
set(CPACK_PACKAGE_FILE_NAME "libwebrtc-${LIBWEBRTC_VERSION}-${LIBWEBRTC_PLATFORM}-${LIBWEBRTC_ARCH}")
set(CPACK_PACKAGE_INSTALL_DIRECTORY "libwebrtc")
include(CPack)

View file

@ -0,0 +1,121 @@
include(Common)
include(ExternalProject)
ExternalProject_Add(chromium
SOURCE_DIR ${CMAKE_BINARY_DIR}/src/chromium/src
GIT_REPOSITORY ${LIBWEBRTC_CHROMIUM_DEPS}
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND "")
ExternalProject_Add(webrtc
DEPENDS chromium
PREFIX ${CMAKE_BINARY_DIR}
BINARY_DIR ${CMAKE_BINARY_DIR}
SOURCE_DIR ${CMAKE_BINARY_DIR}
DOWNLOAD_DIR ${CMAKE_BINARY_DIR}
DOWNLOAD_COMMAND ""
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND "")
#
# Configure gclient
#
set(GCLIENT_CONFIG_COMMAND
${DEPOTTOOLS_GCLIENT_EXECUTABLE} config --name src
https://chromium.googlesource.com/external/webrtc.git)
ExternalProject_Add_Step(webrtc config
COMMAND ${GCLIENT_CONFIG_COMMAND}
COMMENT "Configure gclient"
WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
#
# Synchronize
#
set(GCLIENT_SYNC_COMMAND
${DEPOTTOOLS_GCLIENT_EXECUTABLE} sync
--revision ${LIBWEBRTC_WEBRTC_REVISION} -n -D)
ExternalProject_Add_Step(webrtc sync
DEPENDEES config
COMMAND ${GCLIENT_SYNC_COMMAND}
COMMENT "Synchronize WebRTC"
WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
#
# Update clang
#
set(UPDATE_CLANG_COMMAND python chromium/src/tools/clang/scripts/update.py)
ExternalProject_Add_Step(webrtc clang
DEPENDEES sync
COMMAND ${UPDATE_CLANG_COMMAND}
COMMENT "Update clang"
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/src)
#
# Generate symbolic links
#
set(SETUP_LINKS_COMMAND python setup_links.py)
ExternalProject_Add_Step(webrtc links
DEPENDEES clang
COMMAND ${SETUP_LINKS_COMMAND}
COMMENT "Generate symbolic links"
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/src)
#
# Generate build files
#
set(LIBWEBRTC_GEN_ARGS use_gold=false)
if (NOT CMAKE_BUILD_TYPE MATCHES DEBUG)
set(LIBWEBRTC_GEN_ARGS ${LIBWEBRTC_GEN_ARGS} is_debug=false)
elseif (NOT CMAKE_BUILD_TYPE MATCHES DEBUG)
set(LIBWEBRTC_GEN_ARGS ${LIBWEBRTC_GEN_ARGS} is_debug=true)
endif (NOT CMAKE_BUILD_TYPE MATCHES DEBUG)
if (WIN32)
set(LIBWEBRTC_GEN_ARGS ${LIBWEBRTC_GEN_ARGS})
elseif (APPLE)
set(LIBWEBRTC_GEN_ARGS ${LIBWEBRTC_GEN_ARGS})
elseif (UNIX AND NOT APPLE)
set(LIBWEBRTC_GEN_ARGS ${LIBWEBRTC_GEN_ARGS})
endif (WIN32)
if (NOT BUILD_TESTS)
set(LIBWEBRTC_GEN_ARGS ${LIBWEBRTC_GEN_ARGS} rtc_include_tests=false)
endif (NOT BUILD_TESTS)
set(LIBWEBRTC_GEN_CMD gn gen out/Default --args=\"${LIBWEBRTC_GEN_ARGS}\")
add_libwebrtc_command(webrtc-generate
"Generate"
"${LIBWEBRTC_GEN_CMD}"
${CMAKE_BINARY_DIR}/src
"Generating build files"
webrtc)
#
# Run the build command
#
set(LIBWEBRTC_BUILD_CMD ninja -C out/Default)
add_libwebrtc_command(webrtc-build
"Build"
"${LIBWEBRTC_BUILD_CMD}"
${CMAKE_BINARY_DIR}/src
"Building WebRTC"
webrtc-generate)
#
# Link the library
#
ExternalProject_Add(libwebrtc
DEPENDS webrtc-build
INSTALL_COMMAND ""
SOURCE_DIR ${CMAKE_SOURCE_DIR}/Targets/libwebrtc
BINARY_DIR ${CMAKE_BINARY_DIR}/libwebrtc
CMAKE_ARGS
-DLIBWEBRTC_OUTPUT_DIR:STRING=${CMAKE_BINARY_DIR}/src/out/Default
-DLIBWEBRTC_INSTALL_LIB_DIR:PATH=${LIBWEBRTC_INSTALL_LIB_DIR})

View file

@ -0,0 +1,45 @@
cmake_minimum_required(VERSION 2.8)
project(libwebrtc)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
${CMAKE_SOURCE_DIR}/CMakeModules)
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
if (WIN32)
set(LIBWEBRTC_OBJ_EXT obj)
elseif (UNIX AND NOT APPLE)
set(LIBWEBRTC_OBJ_EXT o)
elseif (APPLE)
set(LIBWEBRTC_OBJ_EXT a)
endif (WIN32)
file(GLOB_RECURSE LIBWEBRTC_OBJ_FILES
${LIBWEBRTC_OUTPUT_DIR}/obj/*.${LIBWEBRTC_OBJ_EXT})
file(GLOB_RECURSE LIBWEBRTC_OBJ_EXCLUDED
${LIBWEBRTC_OUTPUT_DIR}/obj/third_party/yasm/gen*/*.${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/protobuf/protoc/*.${LIBWEBRTC_OBJ_EXT}
${LIBWEBRTC_OUTPUT_DIR}/obj/third_party/protobuf/protobuf_full/*.${LIBWEBRTC_OBJ_EXT})
list(LENGTH LIBWEBRTC_OBJ_EXCLUDED LIBWEBRTC_OBJ_EXCLUDED_LEN)
if(${LIBWEBRTC_OBJ_EXCLUDED_LEN} GREATER "0")
list(REMOVE_ITEM LIBWEBRTC_OBJ_FILES ${LIBWEBRTC_OBJ_EXCLUDED})
endif()
add_library(webrtc STATIC ${LIBWEBRTC_OBJ_FILES})
set_source_files_properties(${LIBWEBRTC_OBJ_FILES} PROPERTIES
EXTERNAL_OBJECT true
GENERATED true)
set_target_properties(webrtc PROPERTIES
LINKER_LANGUAGE C)
install(TARGETS webrtc
DESTINATION ${LIBWEBRTC_INSTALL_LIB_DIR}
COMPONENT Libraries)