diff options
Diffstat (limited to 'indra/cmake/WebRTC.cmake')
| -rw-r--r-- | indra/cmake/WebRTC.cmake | 81 | 
1 files changed, 81 insertions, 0 deletions
diff --git a/indra/cmake/WebRTC.cmake b/indra/cmake/WebRTC.cmake index 7fefaa4152..5fda2f71b9 100644 --- a/indra/cmake/WebRTC.cmake +++ b/indra/cmake/WebRTC.cmake @@ -6,7 +6,78 @@ include(Prebuilt)  add_library( ll::webrtc INTERFACE IMPORTED )  target_include_directories( ll::webrtc SYSTEM INTERFACE "${LIBS_PREBUILT_DIR}/include/webrtc" "${LIBS_PREBUILT_DIR}/include/webrtc/third_party/abseil-cpp") +if (DARWIN OR WINDOWS)  use_prebuilt_binary(webrtc) +elseif (NOT (CMAKE_SYSTEM_NAME MATCHES FreeBSD OR ($ENV{MSYSTEM_CARCH} MATCHES aarch64) OR (${LINUX_DISTRO} MATCHES debian AND CMAKE_SYSTEM_PROCESSOR MATCHES aarch64))) +    target_compile_definitions(ll::webrtc INTERFACE CM_WEBRTC=1) +    if (${PREBUILD_TRACKING_DIR}/sentinel_installed IS_NEWER_THAN ${PREBUILD_TRACKING_DIR}/webrtc_installed OR NOT ${webrtc_installed} EQUAL 0) +        if (DARWIN) +            set(WEBRTC_PLATFORM macos-arm64) +        elseif (CMAKE_SYSTEM_PROCESSOR MATCHES aarch64) +            set(WEBRTC_PLATFORM linux-arm64) +        else () +            set(WEBRTC_PLATFORM linux-x64) +        endif () +        if (NOT EXISTS ${CMAKE_BINARY_DIR}/libwebrtc-${WEBRTC_PLATFORM}.tar.xz) +            file(DOWNLOAD +                https://github.com/crow-misia/libwebrtc-bin/releases/download/137.7151.3.1/libwebrtc-${WEBRTC_PLATFORM}.tar.xz +                ${CMAKE_BINARY_DIR}/libwebrtc-${WEBRTC_PLATFORM}.tar.xz +                SHOW_PROGRESS +                ) +        endif () +        file(ARCHIVE_EXTRACT +            INPUT ${CMAKE_BINARY_DIR}/libwebrtc-${WEBRTC_PLATFORM}.tar.xz +            DESTINATION ${LIBS_PREBUILT_DIR} +            ) +        file(REMOVE_RECURSE ${LIBS_PREBUILT_DIR}/include/webrtc) +        file(MAKE_DIRECTORY ${LIBS_PREBUILT_DIR}/include/webrtc) +        foreach(directory +            api +            audio +            base +            build +            buildtools +            call +            common_audio +            common_video +            examples +            logging +            media +            modules +            net +            p2p +            pc +            rtc_base +            rtc_tools +            sdk +            stats +            system_wrappers +            test +            testing +            third_party +            tools +            video +            ) +            file(RENAME +                ${LIBS_PREBUILT_DIR}/include/${directory} +                ${LIBS_PREBUILT_DIR}/include/webrtc/${directory} +                ) +        endforeach() +        file(RENAME +            ${LIBS_PREBUILT_DIR}/lib/libwebrtc.a +            ${ARCH_PREBUILT_DIRS_RELEASE}/libwebrtc.a +            ) +        if (CMAKE_OSX_ARCHITECTURES MATCHES arm64) +            file(REMOVE_RECURSE ${ARCH_PREBUILT_DIRS_RELEASE}/WebRTC.framework) +            file(RENAME +                ${LIBS_PREBUILT_DIR}/Frameworks/WebRTC.xcframework/${WEBRTC_PLATFORM}/WebRTC.framework +                ${ARCH_PREBUILT_DIRS_RELEASE}/WebRTC.framework +                ) +            file(REMOVE_RECURSE ${LIBS_PREBUILT_DIR}/Frameworks) +        endif () +        file(WRITE ${PREBUILD_TRACKING_DIR}/webrtc_installed "0") +    endif () +endif ()  find_library(WEBRTC_LIBRARY      NAMES @@ -16,7 +87,17 @@ find_library(WEBRTC_LIBRARY  target_link_libraries( ll::webrtc INTERFACE ${WEBRTC_LIBRARY} )  if (DARWIN) +    if (CMAKE_OSX_ARCHITECTURES MATCHES x86_64) +        target_link_directories( ll::webrtc INTERFACE ${ARCH_PREBUILT_DIRS_RELEASE} ) +        target_link_libraries( ll::webrtc INTERFACE webrtc ) +    endif ()      target_link_libraries( ll::webrtc INTERFACE ll::oslibraries ) +    execute_process( +        COMMAND lipo libwebrtc.a +            -thin ${CMAKE_OSX_ARCHITECTURES} +            -output libwebrtc.a +        WORKING_DIRECTORY ${ARCH_PREBUILT_DIRS_RELEASE} +    )  elseif (LINUX)      target_link_libraries( ll::webrtc INTERFACE X11 )  endif ()  | 
