Define and use macros, set install directory paths

This commit is contained in:
Axel Isouard 2016-09-24 13:52:24 +02:00
parent 5ec1c72cf9
commit 5590dfbadc
4 changed files with 171 additions and 90 deletions

View file

@ -9,6 +9,13 @@ find_package(DepotTools REQUIRED)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
#
# Options
#
option(BUILD_TESTS "Build test binaries" OFF)
option(BUILD_EXAMPLES "Build examples binaries" OFF)
# #
# Versioning # Versioning
# #
@ -37,6 +44,28 @@ set(LIBWEBRTC_LIBRARY_PROPERTIES ${LIBWEBRTC_LIBRARY_PROPERTIES}
SOVERSION "${LIBWEBRTC_API_VERSION}" SOVERSION "${LIBWEBRTC_API_VERSION}"
) )
#
# Directories
#
if(NOT LIBWEBRTC_INSTALL_BIN_DIR)
set(LIBWEBRTC_INSTALL_BIN_DIR "bin")
endif()
if(NOT LIBWEBRTC_INSTALL_LIB_DIR)
set(LIBWEBRTC_INSTALL_LIB_DIR "lib")
endif()
if(NOT LIBWEBRTC_INSTALL_DATA_DIR)
set(LIBWEBRTC_INSTALL_DATA_DIR "share")
endif()
if(NOT LIBWEBRTC_INSTALL_INCLUDE_DIR)
set(LIBWEBRTC_INSTALL_INCLUDE_DIR "include")
endif()
if(NOT LIBWEBRTC_INSTALL_CMAKE_DIR)
set(LIBWEBRTC_INSTALL_CMAKE_DIR "lib")
endif()
set(LIBWEBRTC_LIBRARY ${CMAKE_STATIC_LIBRARY_PREFIX}webrtc${CMAKE_STATIC_LIBRARY_SUFFIX})
set(LIBWEBRTC_BUILD_ROOT ${CMAKE_SOURCE_DIR}/src/out/Default)
set(WEBRTC_CHROMIUM_DEPS git@github.com:aisouard/libwebrtc-chromium-deps.git) set(WEBRTC_CHROMIUM_DEPS git@github.com:aisouard/libwebrtc-chromium-deps.git)
add_subdirectory(Targets) add_subdirectory(Targets)

28
CMakeModules/Common.cmake Normal file
View file

@ -0,0 +1,28 @@
set(LIBWEBRTC_ENV_COMMAND ${CMAKE_COMMAND} -E env \"PATH=${CMAKE_SOURCE_DIR}/Dependencies/depot_tools:$ENV{PATH}\")
macro(add_libwebrtc_command
ARG_NAME
ARG_OUTPUT
ARG_COMMAND
ARG_WORKING_DIRECTORY
ARG_COMMENT
)
set (ARG_DEPENDENCIES ${ARGN})
add_custom_command(
OUTPUT ${ARG_OUTPUT}
COMMAND ${ARG_COMMAND}
WORKING_DIRECTORY ${ARG_WORKING_DIRECTORY}
COMMENT ${ARG_COMMENT}
)
add_custom_target(
${ARG_NAME} ALL
DEPENDS ${ARG_OUTPUT}
)
list(LENGTH ARG_DEPENDENCIES NUM_ARG_DEPENDENCIES)
if (${NUM_ARG_DEPENDENCIES} GREATER 0)
add_dependencies(${ARG_NAME} ${ARG_DEPENDENCIES})
endif ()
endmacro()

View file

@ -1,53 +1,82 @@
include(Common)
# #
# Generate build files # Generate build files
# #
add_custom_command( set(LIBWEBRTC_GEN_ARGS "")
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' if(NOT CMAKE_BUILD_TYPE MATCHES DEBUG)
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/src set(LIBWEBRTC_GEN_ARGS is_debug=false)
COMMENT "Generate build files" endif(NOT CMAKE_BUILD_TYPE MATCHES DEBUG)
if(NOT BUILD_TESTS)
set(LIBWEBRTC_GEN_ARGS ${LIBWEBRTC_GEN_ARGS} rtc_include_tests=false)
endif(NOT BUILD_TESTS)
set(GENERATE_BUILD_DEPENDENCY libwebrtc_patch)
if(NOT BUILD_EXAMPLES)
set(GENERATE_BUILD_DEPENDENCY libwebrtc_links)
endif(NOT BUILD_EXAMPLES)
set(GENERATE_COMMAND
${LIBWEBRTC_ENV_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"
${GENERATE_BUILD_DEPENDENCY}
) )
add_custom_target( #
webrtc_generate_build ALL # Revert examples
DEPENDS ${CMAKE_BINARY_DIR}/Nevermind #
)
add_dependencies(webrtc_generate_build webrtc_links) if(NOT BUILD_EXAMPLES)
set(PATCH_COMMAND sed -i "s/'include_examples%': 0/'include_examples%': 1/g" src/all.gyp)
add_libwebrtc_command(libwebrtc_revert
None
"${PATCH_COMMAND}"
${CMAKE_BINARY_DIR}
"Reverting build definitions"
libwebrtc_generate_build
)
endif(NOT BUILD_EXAMPLES)
# #
# Run ninja # Run ninja
# #
add_custom_command( set(NINJA_DEPENDENCY libwebrtc_generate_build)
OUTPUT ${CMAKE_BINARY_DIR}/src/out/Default/obj/root.stamp if(NOT BUILD_EXAMPLES)
COMMAND ${CMAKE_COMMAND} -E env \"PATH=${CMAKE_SOURCE_DIR}/Dependencies/depot_tools:$ENV{PATH}\" ninja -C out/Default set(GENERATE_BUILD_DEPENDENCY libwebrtc_revert)
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/src endif(NOT BUILD_EXAMPLES)
COMMENT "Build WebRTC"
)
add_custom_target( set(BUILD_WEBRTC_COMMAND
webrtc_build ALL ${LIBWEBRTC_ENV_COMMAND} ninja -C out/Default libjingle_peerconnection)
DEPENDS ${CMAKE_BINARY_DIR}/src/out/Default/obj/root.stamp
)
add_dependencies(webrtc_build webrtc_generate_build) add_libwebrtc_command(libwebrtc_build
${CMAKE_BINARY_DIR}/src/out/Default/obj/root.stamp
"${BUILD_WEBRTC_COMMAND}"
${CMAKE_BINARY_DIR}/src
"Build WebRTC"
${NINJA_DEPENDENCY}
)
# #
# Merge libraries into a single one # Merge libraries into a single one
# #
add_custom_command( set(MERGE_COMMAND
OUTPUT ${CMAKE_BINARY_DIR}/libwebrtc.a python webrtc/build/merge_libs.py out/Default ${CMAKE_BINARY_DIR}/${WEBRTC_LIBRARY})
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( add_libwebrtc_command(libwebrtc_merge
webrtc_merge ALL ${CMAKE_BINARY_DIR}/${WEBRTC_LIBRARY}
DEPENDS ${CMAKE_BINARY_DIR}/libwebrtc.a "${MERGE_COMMAND}"
${CMAKE_BINARY_DIR}/src
"Merging libraries into ${WEBRTC_LIBRARY}"
libwebrtc_build
) )
add_dependencies(webrtc_merge webrtc_build)

View file

@ -1,96 +1,91 @@
include(Common)
# #
# Fetch # Fetch
# #
set(gclient_config set(GCLIENT_CONFIG_COMMAND
${DEPOTTOOLS_GCLIENT_EXECUTABLE} config --name src ${DEPOTTOOLS_GCLIENT_EXECUTABLE} config --name src
https://chromium.googlesource.com/external/webrtc.git https://chromium.googlesource.com/external/webrtc.git
) )
add_custom_command( add_libwebrtc_command(libwebrtc_config
OUTPUT ${CMAKE_BINARY_DIR}/.gclient ${CMAKE_BINARY_DIR}/.gclient
COMMAND ${gclient_config} "${GCLIENT_CONFIG_COMMAND}"
WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}
COMMENT "Configuring gclient to pull webrtc code" "Configuring gclient to pull webrtc code"
)
add_custom_target(
webrtc_config ALL
DEPENDS ${CMAKE_BINARY_DIR}/.gclient
) )
# #
# Sync # Sync
# #
set(gclient_sync set(GCLIENT_SYNC_COMMAND
${DEPOTTOOLS_GCLIENT_EXECUTABLE} sync -n -D ${DEPOTTOOLS_GCLIENT_EXECUTABLE} sync -n -D
) )
add_custom_command( add_libwebrtc_command(libwebrtc_sync
OUTPUT ${CMAKE_BINARY_DIR}/src/all.gyp ${CMAKE_BINARY_DIR}/src/all.gyp
COMMAND ${gclient_sync} "${GCLIENT_SYNC_COMMAND}"
WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}
COMMENT "Retrieving WebRTC source code" "Retrieving WebRTC source code"
libwebrtc_config
) )
add_custom_target(
webrtc_sync ALL
DEPENDS ${CMAKE_BINARY_DIR}/src/all.gyp
)
add_dependencies(webrtc_sync webrtc_config)
# #
# Sync Chromium # Sync Chromium
# #
add_custom_command( set(GIT_CLONE_COMMAND git clone ${LIBWEBRTC_CHROMIUM_DEPS} ${CMAKE_BINARY_DIR}/src/chromium/src)
OUTPUT ${CMAKE_BINARY_DIR}/src/chromium/src/DEPS
COMMAND git clone ${WEBRTC_CHROMIUM_DEPS} ${CMAKE_BINARY_DIR}/src/chromium/src add_libwebrtc_command(libwebrtc_chromium_deps
WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}/src/chromium/src/DEPS
COMMENT "Retrieving Chromium dependencies" "${GIT_CLONE_COMMAND}"
${CMAKE_BINARY_DIR}
"Retrieving Chromium dependencies"
libwebrtc_sync
) )
add_custom_target( #
webrtc_chromium_deps ALL # Update Clang
DEPENDS ${CMAKE_BINARY_DIR}/src/chromium/src/DEPS #
)
add_dependencies(webrtc_chromium_deps webrtc_sync) set(UPDATE_CLAND_COMMAND ${LIBWEBRTC_ENV_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_CLAND_COMMAND}"
${CMAKE_BINARY_DIR}/src
"Updating clang"
libwebrtc_chromium_deps
)
# #
# Setup Links # Setup Links
# #
add_custom_command( set(SETUP_LINKS_COMMAND ${LIBWEBRTC_ENV_COMMAND} python setup_links.py)
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( add_libwebrtc_command(libwebrtc_links
webrtc_links ALL ${CMAKE_BINARY_DIR}/src/tools/clang
DEPENDS ${CMAKE_BINARY_DIR}/src/build "${SETUP_LINKS_COMMAND}"
${CMAKE_BINARY_DIR}/src
"Creating symbolic links"
libwebrtc_clang
) )
add_dependencies(webrtc_links webrtc_chromium_deps)
# #
# Remove examples # Remove examples
# #
add_custom_command( if(NOT BUILD_EXAMPLES)
OUTPUT None set(PATCH_COMMAND sed -i "s/'include_examples%': 1/'include_examples%': 0/g" src/all.gyp)
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( add_libwebrtc_command(libwebrtc_patch
webrtc_patch ALL None
DEPENDS None "${PATCH_COMMAND}"
${CMAKE_BINARY_DIR}
"Patching build definitions"
libwebrtc_links
) )
endif(NOT BUILD_EXAMPLES)
add_dependencies(webrtc_patch webrtc_links)