diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..e9677be --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "Dependencies/depot_tools"] + path = Dependencies/depot_tools + url = https://chromium.googlesource.com/chromium/tools/depot_tools.git diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..edd4731 --- /dev/null +++ b/CMakeLists.txt @@ -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) \ No newline at end of file diff --git a/CMakeModules/FindDepotTools.cmake b/CMakeModules/FindDepotTools.cmake new file mode 100644 index 0000000..ddd6332 --- /dev/null +++ b/CMakeModules/FindDepotTools.cmake @@ -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." + ) \ No newline at end of file diff --git a/Dependencies/depot_tools b/Dependencies/depot_tools new file mode 160000 index 0000000..15ab082 --- /dev/null +++ b/Dependencies/depot_tools @@ -0,0 +1 @@ +Subproject commit 15ab08227b961ddce83db7e41fb83b9288ff9ccc diff --git a/Targets/Build/CMakeLists.txt b/Targets/Build/CMakeLists.txt new file mode 100644 index 0000000..bd26a9b --- /dev/null +++ b/Targets/Build/CMakeLists.txt @@ -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) \ No newline at end of file diff --git a/Targets/CMakeLists.txt b/Targets/CMakeLists.txt new file mode 100644 index 0000000..2ef9269 --- /dev/null +++ b/Targets/CMakeLists.txt @@ -0,0 +1,4 @@ +add_subdirectory(Fetch) +add_subdirectory(Build) +add_subdirectory(Test) +add_subdirectory(Install) \ No newline at end of file diff --git a/Targets/Fetch/CMakeLists.txt b/Targets/Fetch/CMakeLists.txt new file mode 100644 index 0000000..2536d9b --- /dev/null +++ b/Targets/Fetch/CMakeLists.txt @@ -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) \ No newline at end of file diff --git a/Targets/Install/CMakeLists.txt b/Targets/Install/CMakeLists.txt new file mode 100644 index 0000000..e69de29 diff --git a/Targets/Test/CMakeLists.txt b/Targets/Test/CMakeLists.txt new file mode 100644 index 0000000..e69de29