6.4 KiB
libwebrtc 
This repository contains a collection of CMake scripts to help you embed Google's native WebRTC implementation inside your project as simple as this:
cmake_minimum_required(VERSION 3.3)
project(sample)
find_package(LibWebRTC REQUIRED)
include(${LIBWEBRTC_USE_FILE})
set(SOURCE_FILES main.cpp)
add_executable(sample ${SOURCE_FILES})
target_link_libraries(sample ${LIBWEBRTC_LIBRARIES})
Prerequisites
- CMake 3.3 or later
- Python 2.7 (optional for Windows since it will use the interpreter located
inside the
depot_toolsinstallation)
Debian & Ubuntu
- Required development packages:
# apt-get install build-essential libglib2.0-dev libgtk2.0-dev libxtst-dev \
libxss-dev libpci-dev libdbus-1-dev libgconf2-dev \
libgnome-keyring-dev libnss3-dev libasound2-dev libpulse-dev \
libudev-dev
- GCC & G++ 4.8 or later, for C++11 support
macOS
- OS X 10.11 or later
- Xcode 7.3.1 or later
Windows
-
Windows 7 x64 or later
-
Visual Studio 2015/2017
Make sure that you install the following components:
- Visual C++, which will select three sub-categories including MFC
- Universal Windows Apps Development Tools
- Tools (1.4.1) and Windows 10 SDK (10.0.14393)
-
Windows 10 SDK with Debugging Tools for Windows or Windows Driver Kit 10 installed in the same Windows 10 SDK installation directory.
Compiling
Clone the repository, create an output directory, browse inside it, then run CMake to configure project.
git clone https://github.com/UltraCoderRU/libwebrtc-build.git
cd libwebrtc-build
mkdir build
cd build
# Linux:
cmake -DCMAKE_BUILD_TYPE=<Debug/Release> -DCMAKE_INSTALL_PREFIX=<install_path> ..
# Windows
cmake -G "Visual Studio 15 2017 Win64" -DCMAKE_INSTALL_PREFIX=<install_path> ..
After configuration build library using standard CMake commands.
# Linux:
cmake --build .
sudo cmake --build . --target install
# Windows:
cmake --build . --config <Debug/Release> --target INSTALL
The library will be located inside the lib subdirectory of the <install_path>.
The include subdirectory will contain the header files.
CMake scripts will be placed inside the lib/cmake/LibWebRTC subdirectory.
Using WebRTC in your project
To import LibWebRTC into your CMake project use find_package:
find_package(LibWebRTC REQUIRED)
include(${LIBWEBRTC_USE_FILE})
target_link_libraries(my-app ${LIBWEBRTC_LIBRARIES})
You should add library installation path to CMAKE_INSTALL_PREFIX variable
while configuring your project:
cmake -DCMAKE_PREFIX_PATH=<install_path> ...
Fetching a specific revision
The latest working release will be fetched by default, unless you decide to retrieve a specific commit by setting it's hash into the WEBRTC_REVISION CMake variable, or another branch head ref into the WEBRTC_BRANCH_HEAD variable.
cmake -DWEBRTC_REVISION=be22d51 ..
cmake -DWEBRTC_BRANCH_HEAD=refs/branch-heads/4103 ..
If both variables are set, it will focus on fetching the commit defined inside WEBRTC_REVISION.
Configuration
The library will be compiled and usable on the same host's platform and architecture. Here are some CMake flags which could be useful if you need to perform cross-compiling.
-
BUILD_DEB_PACKAGE
Generate Debian package, defaults to OFF, available under Linux only.
-
BUILD_RPM_PACKAGE
Generate Red Hat package, defaults to OFF, available under Linux only.
-
BUILD_TESTS
Build WebRTC unit tests and mocked classes such as
FakeAudioCaptureModule. -
BUILD_SAMPLE
Build an executable located inside the
samplefolder. -
DEPOT_TOOLS_PATH
Set this variable to your own
depot_toolsdirectory. This will prevent CMake from fetching the one matching with the desired WebRTC revision. -
GN_EXTRA_ARGS
Add extra arguments to the
gn gen --argsparameter. -
NINJA_ARGS
Arguments to pass while executing the
ninjacommand. -
TARGET_OS
Target operating system, the value will be used inside the
--target_osargument of thegn gencommand. The value must be one of the following:androidchromeosioslinuxmacnaclwin
-
TARGET_CPU
Target architecture, the value will be used inside the
--target_cpuargument of thegn gencommand. The value must be one of the following:x86x64armarm64mipsel
-
WEBRTC_BRANCH_HEAD
Set the branch head ref to retrieve, it is set to the latest working one. This variable is ignored if WEBRTC_REVISION is set.
-
WEBRTC_REVISION
Set a specific commit hash to check-out.
Status
The following table displays the current state of this project, including supported platforms and architectures.
| x86 | x64 | arm | arm64 | |
| Linux | ✔ | ✔ | - | - |
|---|---|---|---|---|
| macOS | - | ✔ | - | - |
| Windows | ✔ | ✔ | - | - |
Acknowledgements
Many thanks to Dr. Alex Gouaillard for being an excellent mentor for this project.
Everything started from his « Automating libwebrtc build with CMake » blog article, which was a great source of inspiration for me to create the easiest way to link the WebRTC library in any native project.