Skip to content

Latest commit

 

History

History
163 lines (111 loc) · 4.36 KB

File metadata and controls

163 lines (111 loc) · 4.36 KB

Developer tools

This SDK uses several tools and checks to enforce code quality. All of these are also enforced in CI on PRs.

Clang tools

  • clang-tidy — static analysis. See .clang-tidy for the enabled checks. Enforced in CI on PR.
  • clang-format — code formatting and style consistency. See .clang-format for the rules. Enforced in CI on PR.

Note (Windows): clang-tidy is not currently driven by our scripts on Windows. The MSBuild CMake generator doesn't emit compile_commands.json, which clang-tidy requires. The Ninja generator does, so manual invocation is possible. clang-format similarly needs to be installed and run manually on Windows, pointing at the root .clang-format.

Install

macOS:

brew install llvm

This installs clang-format, clang-tidy, and run-clang-tidy. Homebrew may ask you to add /opt/homebrew/opt/llvm/bin (Apple Silicon) or /usr/local/opt/llvm/bin (Intel) to your PATH.

Linux (Ubuntu/Debian):

sudo apt-get install clang-format clang-tidy clang-tools

Run clang-tidy

  1. Generate compile_commands.json and the protobuf headers via a release build:

    ./build.sh release
  2. Run the wrapper, which uses the same file set, regex filters, and .clang-tidy config as CI:

    ./scripts/clang-tidy.sh

The wrapper forwards extra arguments to run-clang-tidy:

./scripts/clang-tidy.sh -j 4                                # Number of cores
./scripts/clang-tidy.sh -checks='-*,misc-const-correctness' # Only specific checks
./scripts/clang-tidy.sh -fix                                # Apply fixes

Output is captured to clang-tidy.log at the repo root, since the terminal buffer often can't hold all of it.

Run clang-format

./scripts/clang-format.sh

With no arguments, runs against every relevant file in the repository against the rules in .clang-format.

./scripts/clang-format.sh --fix                                # Rewrite files in place
./scripts/clang-format.sh src/room.cpp include/livekit/room.h  # Check just these files
./scripts/clang-format.sh --fix src/room.cpp                   # Fix just this file

Output is captured to clang-format.log at the repo root.


Pre-commit hook

A simple pre-commit hook that auto-formats staged C/C++ files using the project's .clang-format rules:

./scripts/install-pre-commit.sh

This installs .git/hooks/pre-commit. Re-run after git clone on a fresh checkout.


Memory checks (valgrind)

Run valgrind against the integration or stress test binaries to check for memory leaks and other issues:

valgrind --leak-check=full ./build-debug/bin/livekit_integration_tests
valgrind --leak-check=full ./build-debug/bin/livekit_stress_tests

valgrind is Linux-only. On macOS, use leaks or Instruments instead.


API documentation (Doxygen)

API reference is generated from headers using Doxygen. To rebuild locally:

./scripts/generate-docs.sh

Output lands under docs/doxygen/html/. The deployed reference is at docs.livekit.io/reference/client-sdk-cpp/.

To view the generated documentation locally, open docs/doxygen/html/index.html in your browser.

For details on the Doxygen configuration and CI pipeline, see the doxygen/ folder.


Development tips

Bump the pinned Rust submodule

cd client-sdk-cpp
git fetch origin
git switch -c try-rust-main origin/main

# Sync submodule URLs and check out what origin/main pins (recursively):
git submodule sync --recursive
git submodule update --init --recursive --checkout

# If the nested submodule under yuv-sys didn't materialize, force it:
git -C client-sdk-rust/yuv-sys submodule sync --recursive
git -C client-sdk-rust/yuv-sys submodule update --init --recursive --checkout

# Sanity check:
git submodule status --recursive

If yuv-sys fails to build

cargo clean -p yuv-sys
cargo build -p yuv-sys -vv

Full clean (Rust + C++ build folders)

To delete all build artifacts from both Rust and C++ folders, plus the local-install folder:

./build.sh clean-all