diff --git a/CMakeLists.txt b/CMakeLists.txt index a0d4eae..52c5214 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,7 +16,12 @@ list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) include(FindLibraries) include(TargetOsAndCpu) -set(ENV{PATH} "${CMAKE_SOURCE_DIR}/depot_tools:$ENV{PATH}") +include(Utils) +prependPath("${CMAKE_SOURCE_DIR}/depot_tools") +if (WIN32) + set(ENV{DEPOT_TOOLS_WIN_TOOLCHAIN} 0) +endif() + set(WEBRTC_SOURCE_DIR "${CMAKE_SOURCE_DIR}/webrtc/src") set(WEBRTC_BUILD_DIR "${CMAKE_BINARY_DIR}/webrtc") @@ -26,7 +31,6 @@ message(STATUS "WebRTC version: ${WEBRTC_VERSION}") if (MSVC) # Always build with dynamic runtime on MSVC - include(PatchFile) patch_file(${WEBRTC_SOURCE_DIR}/build/config/win/BUILD.gn ":static_crt" ":dynamic_crt") endif () diff --git a/cmake/AddWebRTCTarget.cmake b/cmake/AddWebRTCTarget.cmake index 14569d6..3e36001 100644 --- a/cmake/AddWebRTCTarget.cmake +++ b/cmake/AddWebRTCTarget.cmake @@ -1,10 +1,6 @@ function(add_webrtc_target SOURCE_DIR BUILD_DIR) - set(GEN_ARGS_COMMON "target_cpu=\"${TARGET_CPU}\" target_os=\"${TARGET_OS}\" is_component_build=false use_gold=false use_custom_libcxx=false use_custom_libcxx_for_host=false rtc_enable_protobuf=false") - - if (MSVC) - set(GEN_ARGS_COMMON "${GEN_ARGS_COMMON} is_clang=false") - endif () + set(GEN_ARGS_COMMON "target_cpu=\"${TARGET_CPU}\" target_os=\"${TARGET_OS}\" is_component_build=false use_gold=false use_custom_libcxx=false use_custom_libcxx_for_host=false rtc_enable_protobuf=false rtc_build_examples=false rtc_build_tools=false") set(GEN_ARGS_DEBUG "${GEN_ARGS_COMMON} is_debug=true") set(GEN_ARGS_RELEASE "${GEN_ARGS_COMMON} is_debug=false") @@ -19,14 +15,18 @@ function(add_webrtc_target SOURCE_DIR BUILD_DIR) set(GN_EXECUTABLE gn) endif () - if (MSVC) + macro(run_gn DIRECTORY) + execute_process(COMMAND ${GN_EXECUTABLE} gen ${DIRECTORY} "--args=${GEN_ARGS}" WORKING_DIRECTORY ${SOURCE_DIR}) + endmacro() + + if (CMAKE_GENERATOR MATCHES "Visual Studio") # Debug config message(STATUS "Running gn for debug configuration...") set(GEN_ARGS "${GEN_ARGS_DEBUG}") if (GN_EXTRA_ARGS) set(GEN_ARGS "${GEN_ARGS} ${GN_EXTRA_ARGS}") endif () - execute_process(COMMAND ${GN_EXECUTABLE} gen ${BUILD_DIR}/Debug "--args=${GEN_ARGS}" WORKING_DIRECTORY ${SOURCE_DIR}) + run_gn("${BUILD_DIR}/Debug") # Release config message(STATUS "Running gn for release configuration...") @@ -34,7 +34,7 @@ function(add_webrtc_target SOURCE_DIR BUILD_DIR) if (GN_EXTRA_ARGS) set(GEN_ARGS "${GEN_ARGS} ${GN_EXTRA_ARGS}") endif () - execute_process(COMMAND ${GN_EXECUTABLE} gen ${BUILD_DIR}/Release "--args=${GEN_ARGS}" WORKING_DIRECTORY ${SOURCE_DIR}) + run_gn("${BUILD_DIR}/Release") else () message(STATUS "Running gn...") if (CMAKE_BUILD_TYPE STREQUAL "Debug") @@ -45,15 +45,25 @@ function(add_webrtc_target SOURCE_DIR BUILD_DIR) if (GN_EXTRA_ARGS) set(GEN_ARGS "${GEN_ARGS} ${GN_EXTRA_ARGS}") endif () - execute_process(COMMAND ${GN_EXECUTABLE} gen ${BUILD_DIR} "--args=${GEN_ARGS}" WORKING_DIRECTORY ${SOURCE_DIR}) + run_gn("${BUILD_DIR}") endif () - if (MSVC) - add_custom_target(webrtc-build ALL ninja -C "${BUILD_DIR}/$" :webrtc jsoncpp libyuv) - add_custom_target(webrtc-clean ${GN_EXECUTABLE} clean "${BUILD_DIR}/$" WORKING_DIRECTORY ${SOURCE_DIR}) + macro(add_custom_command_with_path TARGET_NAME) + add_custom_command(TARGET ${TARGET_NAME} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E env "PATH=$ENV{PATH}" ${ARGN} + WORKING_DIRECTORY ${SOURCE_DIR} + VERBATIM + ) + endmacro() + + add_custom_target(webrtc-build ALL) + add_custom_target(webrtc-clean) + if (CMAKE_GENERATOR MATCHES "Visual Studio") + add_custom_command_with_path(webrtc-build ninja -C "${BUILD_DIR}/$" :webrtc jsoncpp libyuv) + add_custom_command_with_path(webrtc-clean ${GN_EXECUTABLE} clean "${BUILD_DIR}/$") else () - add_custom_target(webrtc-build ALL ninja -C "${BUILD_DIR}" :webrtc jsoncpp libyuv) - add_custom_target(webrtc-clean ${GN_EXECUTABLE} clean "${BUILD_DIR}" WORKING_DIRECTORY ${SOURCE_DIR}) + add_custom_command_with_path(webrtc-build ninja -C "${BUILD_DIR}" :webrtc jsoncpp libyuv) + add_custom_command_with_path(webrtc-clean ${GN_EXECUTABLE} clean "${BUILD_DIR}") endif () endfunction() diff --git a/cmake/PatchFile.cmake b/cmake/PatchFile.cmake deleted file mode 100644 index f529d08..0000000 --- a/cmake/PatchFile.cmake +++ /dev/null @@ -1,7 +0,0 @@ -function(patch_file TARGET_FILE SEARCH_REGEX REPLACE_REGEX) - -file(READ ${TARGET_FILE} filedata) -string(REGEX REPLACE ${SEARCH_REGEX} ${REPLACE_REGEX} filedata "${filedata}") -file(WRITE ${TARGET_FILE} "${filedata}") - -endfunction() diff --git a/cmake/Utils.cmake b/cmake/Utils.cmake new file mode 100644 index 0000000..53b0c0c --- /dev/null +++ b/cmake/Utils.cmake @@ -0,0 +1,13 @@ +function(patch_file TARGET_FILE SEARCH_REGEX REPLACE_REGEX) + file(READ ${TARGET_FILE} filedata) + string(REGEX REPLACE ${SEARCH_REGEX} ${REPLACE_REGEX} filedata "${filedata}") + file(WRITE ${TARGET_FILE} "${filedata}") +endfunction() + +function(prependPath DIRECTORY) + if (WIN32) + set(ENV{PATH} "${DIRECTORY};$ENV{PATH}") + else() + set(ENV{PATH} "${DIRECTORY}:$ENV{PATH}") + endif() +endfunction() diff --git a/libwebrtc/CMakeLists.txt b/libwebrtc/CMakeLists.txt index b466633..c93574d 100644 --- a/libwebrtc/CMakeLists.txt +++ b/libwebrtc/CMakeLists.txt @@ -56,14 +56,29 @@ if (MSVC) endif() # Install library -if (MSVC) +if (WIN32) + set(LIBRARY_FILENAME_DEBUG "webrtcd.lib") + set(LIBRARY_FILENAME_RELEASE "webrtc.lib") +else() + set(LIBRARY_FILENAME_DEBUG "libwebrtcd.a") + set(LIBRARY_FILENAME_RELEASE "libwebrtc.a") +endif() +if (CMAKE_GENERATOR MATCHES "Visual Studio") install(FILES ${WEBRTC_BUILD_DIR}/Debug/obj/webrtc.lib DESTINATION lib RENAME "webrtcd.lib" CONFIGURATIONS Debug) - install(FILES ${WEBRTC_BUILD_DIR}/Release/obj/webrtc.lib DESTINATION lib RENAME "webrtc.lib" CONFIGURATIONS Release) + install(FILES ${WEBRTC_BUILD_DIR}/Release/obj/webrtc.lib DESTINATION lib CONFIGURATIONS Release) else () if (CMAKE_BUILD_TYPE STREQUAL "Debug") - install(FILES ${WEBRTC_BUILD_DIR}/obj/libwebrtc.a DESTINATION lib RENAME "libwebrtcd.a") + if (WIN32) + install(FILES ${WEBRTC_BUILD_DIR}/obj/webrtc.lib DESTINATION lib RENAME "webrtcd.lib") + else() + install(FILES ${WEBRTC_BUILD_DIR}/obj/libwebrtc.a DESTINATION lib RENAME "libwebrtcd.a") + endif() else () - install(FILES ${WEBRTC_BUILD_DIR}/obj/libwebrtc.a DESTINATION lib RENAME "libwebrtc.a") + if (WIN32) + install(FILES ${WEBRTC_BUILD_DIR}/obj/webrtc.lib DESTINATION lib) + else() + install(FILES ${WEBRTC_BUILD_DIR}/obj/libwebrtc.a DESTINATION lib) + endif() endif () endif () @@ -75,7 +90,7 @@ install(FILES DESTINATION "lib/cmake/LibWebRTC" ) -if (MSVC) +if (CMAKE_GENERATOR MATCHES "Visual Studio") install(FILES LibWebRTCTargets-debug.cmake DESTINATION "lib/cmake/LibWebRTC" CONFIGURATIONS Debug) install(FILES LibWebRTCTargets-release.cmake DESTINATION "lib/cmake/LibWebRTC" CONFIGURATIONS Release) else ()