Major refactoring

This commit is contained in:
Axel Isouard 2017-01-28 11:32:47 +01:00
parent 91e9726542
commit 9392f069e4
No known key found for this signature in database
GPG key ID: 4E64BB3EAAF31C29
3 changed files with 122 additions and 102 deletions

View 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()

View file

@ -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}
)

View file

@ -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") add_library(webrtc STATIC ${LIBWEBRTC_OBJ_FILES})
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})
endif ()
set_source_files_properties(${LIBWEBRTC_OBJ_FILES} PROPERTIES set_source_files_properties(${LIBWEBRTC_OBJ_FILES} PROPERTIES
EXTERNAL_OBJECT true EXTERNAL_OBJECT true