Use libwebrtc_command instead of execute_process

This commit is contained in:
Axel Isouard 2017-03-19 10:20:45 +01:00
parent bbdd74ce9a
commit 17ef828ce2
No known key found for this signature in database
GPG key ID: 4E64BB3EAAF31C29
2 changed files with 87 additions and 67 deletions

View file

@ -0,0 +1,30 @@
if(LIBWEBRTC_COMMAND_INCLUDED)
return()
endif(LIBWEBRTC_COMMAND_INCLUDED)
set(LIBWEBRTC_COMMAND_INCLUDED true)
include(CMakeParseArguments)
include(Environment)
function(libwebrtc_command)
set(ONE_VALUE_ARGS NAME COMMENT WORKING_DIRECTORY)
set(MULTI_VALUE_ARGS COMMAND DEPENDS)
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})
if (COMMAND_DEPENDS)
add_dependencies(${COMMAND_NAME} ${COMMAND_DEPENDS})
endif (COMMAND_DEPENDS)
endfunction()

View file

@ -11,37 +11,31 @@ endif (WIN32)
include(DepotTools) include(DepotTools)
include(GClient) include(GClient)
include(Environment) include(Environment)
include(LibWebRTCCommand)
message(STATUS "Synchronizing webrtc") libwebrtc_command(
set(_SYNC_COMMAND ${GCLIENT_EXECUTABLE} sync --nohooks) NAME webrtc-sync
execute_process(COMMAND ${PREFIX_EXECUTE} ${_SYNC_COMMAND} COMMAND ${GCLIENT_EXECUTABLE} sync --nohooks
WORKING_DIRECTORY ${WEBRTC_PARENT_DIR} WORKING_DIRECTORY "${WEBRTC_PARENT_DIR}"
RESULT_VARIABLE _SYNCHRONIZED_WEBRTC) COMMENT "Synchronizing WebRTC"
)
if (NOT _SYNCHRONIZED_WEBRTC EQUAL 0) libwebrtc_command(
message(FATAL_ERROR "Unable to synchronize webrtc ${PREFIX_EXECUTE} ${_SYNC_COMMAND}") NAME webrtc-clang
endif (NOT _SYNCHRONIZED_WEBRTC EQUAL 0) COMMAND ${PYTHON_EXECUTABLE} src/tools/clang/scripts/update.py
WORKING_DIRECTORY "${WEBRTC_PARENT_DIR}"
message(STATUS "Updating clang") COMMENT "Updating clang"
set(_UPDATE_CLANG_COMMAND ${PYTHON_EXECUTABLE} src/tools/clang/scripts/update.py) DEPENDS webrtc-sync
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) if (UNIX AND NOT APPLE)
message(STATUS "Retrieving sysroot") libwebrtc_command(
set(_SYSROOT_COMMAND ${PYTHON_EXECUTABLE} ${WEBRTC_PARENT_DIR}/src/build/linux/sysroot_scripts/install-sysroot.py --running-as-hook) NAME webrtc-toolchain
execute_process(COMMAND ${PREFIX_EXECUTE} ${_SYSROOT_COMMAND} COMMAND ${PYTHON_EXECUTABLE} ${WEBRTC_PARENT_DIR}/src/build/linux/sysroot_scripts/install-sysroot.py --running-as-hook
WORKING_DIRECTORY ${WEBRTC_PARENT_DIR} WORKING_DIRECTORY "${WEBRTC_PARENT_DIR}"
RESULT_VARIABLE _SYSROOT_RETRIEVED) COMMENT "Retrieving sysroot"
DEPENDS webrtc-sync
if (NOT _SYSROOT_RETRIEVED EQUAL 0) )
message(FATAL_ERROR "Unable to retrieve the sysroot")
endif (NOT _SYSROOT_RETRIEVED EQUAL 0)
set(_PLATFORM linux*) set(_PLATFORM linux*)
set(_FOLDER linux64) set(_FOLDER linux64)
@ -49,62 +43,58 @@ elseif (APPLE)
set(_PLATFORM darwin) set(_PLATFORM darwin)
set(_FOLDER mac) set(_FOLDER mac)
elseif (WIN32) elseif (WIN32)
message(STATUS "Retrieving Visual Studio toolchain") libwebrtc_command(
set(_TOOLCHAIN_COMMAND ${PYTHON_EXECUTABLE} src/build/vs_toolchain.py update) NAME webrtc-toolchain
execute_process(COMMAND ${PREFIX_EXECUTE} ${_TOOLCHAIN_COMMAND} COMMAND ${PYTHON_EXECUTABLE} src/build/vs_toolchain.py update
WORKING_DIRECTORY ${WEBRTC_PARENT_DIR} WORKING_DIRECTORY "${WEBRTC_PARENT_DIR}"
RESULT_VARIABLE _VS_TOOLCHAIN_RETRIEVED) COMMENT "Retrieving Visual Studio toolchain"
DEPENDS webrtc-sync
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(_PLATFORM win32)
set(_FOLDER win) set(_FOLDER win)
set(_SUFFIX .exe) set(_SUFFIX .exe)
endif (UNIX AND NOT APPLE) endif (UNIX AND NOT APPLE)
message(STATUS "Fetching gn${_SUFFIX} for ${_PLATFORM}")
set(_GN_COMMAND download_from_google_storage --no_resume --platform=${_PLATFORM} set(_GN_COMMAND download_from_google_storage --no_resume --platform=${_PLATFORM}
--no_auth --bucket chromium-gn --no_auth --bucket chromium-gn
-s src/buildtools/${_FOLDER}/gn${_SUFFIX}.sha1) -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) libwebrtc_command(
message(FATAL_ERROR "Unable to retrieve clang-format${_SUFFIX}") NAME webrtc-gn
endif (NOT _GN_RETRIEVED EQUAL 0) COMMAND ${_GN_COMMAND}
WORKING_DIRECTORY "${WEBRTC_PARENT_DIR}"
COMMENT "Fetching gn${_SUFFIX} for ${_PLATFORM}"
DEPENDS webrtc-sync
)
message(STATUS "Fetching clang-format${_SUFFIX} for ${_PLATFORM}")
set(_CLANG_FORMAT_COMMAND download_from_google_storage --no_resume set(_CLANG_FORMAT_COMMAND download_from_google_storage --no_resume
--platform=${_PLATFORM} --no_auth --bucket chromium-clang-format --platform=${_PLATFORM} --no_auth --bucket chromium-clang-format
-s src/buildtools/${_FOLDER}/clang-format${_SUFFIX}.sha1) -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) libwebrtc_command(
message(FATAL_ERROR "Unable to retrieve clang-format${_SUFFIX}") NAME webrtc-clang-format
endif (NOT _CLANG_FORMAT_RETRIEVED EQUAL 0) COMMAND ${_CLANG_FORMAT_COMMAND}
WORKING_DIRECTORY "${WEBRTC_PARENT_DIR}"
COMMENT "Fetching clang-format${_SUFFIX} for ${_PLATFORM}"
DEPENDS webrtc-sync
)
include(Gn) include(Gn)
message(STATUS "Generating build files: ${_GEN_COMMAND}") libwebrtc_command(
execute_process(COMMAND ${PREFIX_EXECUTE} ${_GEN_COMMAND} NAME webrtc-generate
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMAND ${_GEN_COMMAND}
RESULT_VARIABLE _BUILD_GENERATED) WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
COMMENT "Generating build files"
DEPENDS webrtc-clang webrtc-toolchain webrtc-gn webrtc-clang-format
)
if (NOT _BUILD_GENERATED EQUAL 0) set(_NINJA_COMMAND ninja ${NINJA_ARGS} -C out/Default pc)
message(FATAL_ERROR "Unable to execute ${_GEN_COMMAND}") libwebrtc_command(
endif (NOT _BUILD_GENERATED EQUAL 0) NAME webrtc-build
COMMAND ${_NINJA_COMMAND}
message(STATUS "Running ninja") WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
set(_NINJA_COMMAND ninja ${NINJA_ARGS} -C out/Default) COMMENT "Running ninja"
execute_process(COMMAND ${PREFIX_EXECUTE} ${_NINJA_COMMAND} DEPENDS webrtc-generate
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)