diff --git a/Samples/PeerConnection/CMakeLists.txt b/Samples/PeerConnection/CMakeLists.txt index e44248f..bbc70a8 100644 --- a/Samples/PeerConnection/CMakeLists.txt +++ b/Samples/PeerConnection/CMakeLists.txt @@ -57,3 +57,5 @@ elseif(UNIX AND NOT APPLE) endif(WIN32) target_link_libraries(PeerConnection ${PEERCONNECTION_LIBRARIES}) + +add_dependencies(PeerConnection libwebrtc_merge) \ No newline at end of file diff --git a/Targets/Build/CMakeLists.txt b/Targets/Build/CMakeLists.txt deleted file mode 100644 index a6e71f0..0000000 --- a/Targets/Build/CMakeLists.txt +++ /dev/null @@ -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) \ No newline at end of file diff --git a/Targets/CMakeLists.txt b/Targets/CMakeLists.txt index 2ef9269..5bced46 100644 --- a/Targets/CMakeLists.txt +++ b/Targets/CMakeLists.txt @@ -1,4 +1 @@ -add_subdirectory(Fetch) -add_subdirectory(Build) -add_subdirectory(Test) -add_subdirectory(Install) \ No newline at end of file +add_subdirectory(WebRTC) \ No newline at end of file diff --git a/Targets/Fetch/CMakeLists.txt b/Targets/Fetch/CMakeLists.txt deleted file mode 100644 index 7f73d18..0000000 --- a/Targets/Fetch/CMakeLists.txt +++ /dev/null @@ -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) diff --git a/Targets/Install/CMakeLists.txt b/Targets/Install/CMakeLists.txt deleted file mode 100644 index b1511eb..0000000 --- a/Targets/Install/CMakeLists.txt +++ /dev/null @@ -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) diff --git a/Targets/Test/CMakeLists.txt b/Targets/Test/CMakeLists.txt deleted file mode 100644 index e69de29..0000000 diff --git a/Targets/WebRTC/CMakeLists.txt b/Targets/WebRTC/CMakeLists.txt new file mode 100644 index 0000000..f428751 --- /dev/null +++ b/Targets/WebRTC/CMakeLists.txt @@ -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}) diff --git a/Targets/libwebrtc/CMakeLists.txt b/Targets/libwebrtc/CMakeLists.txt new file mode 100644 index 0000000..e099ebb --- /dev/null +++ b/Targets/libwebrtc/CMakeLists.txt @@ -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) \ No newline at end of file