NOTE: If you're building a new Datadog library/profiler or want to contribute to Datadog's existing tools, you've come to the right place! Otherwise, this is possibly not the droid you were looking for. |
![]() |
See CONTRIBUTING.md
.
Build libdatadog
as usual with cargo build
.
You can generate a release using the builder crate. This will trigger all the necessary steps to create the libraries, binaries, headers and package config files needed to use a pre-built libdatadog binary in a (non-rust) project.
The default build does not include any capability so you'll need to list all features you want to include. You can see a full, up-to-date list of features in the builder/Cargo.toml
file.
Here's one example of using the builder crate:
mkdir output-folder
cargo run --bin release --features profiling,telemetry,data-pipeline,symbolizer,crashtracker,library-config,log,ddsketch -- --out output-folder
- Rust 1.84.1 or newer with cargo. See the Cargo.toml for information about bumping this version.
cbindgen
0.29cmake
andprotoc
This project uses cargo-nextest to run tests.
cargo nextest run
The simplest way to install cargo-nextest is to use cargo install
like this.
cargo install --locked '[email protected]'
- Install the Dev Containers Extension in VS Code.
- Open a local VS Code window on the cloned repository.
- Open the command palette (
Ctrl+Shift+P
orCmd+Shift+P
on macOS) and select "Dev Containers: Reopen in Container". - Choose the Rust Container.
- VS Code will open a new window connected to the selected container.
A dockerfile is provided to run tests in a Ubuntu linux environment. This is particularly useful for running and debugging linux-only tests on macOS.
To build the docker image, from the root directory of the libdatadog project run
docker build -f local-linux.Dockerfile -t libdatadog-linux .
To start the docker container, you can run
docker run -it --privileged -v "$(pwd)":/libdatadog -v cargo-cache:/home/user/.cargo libdatadog-linux
This will:
- Start the container in privileged mode to allow the container to run docker-in-docker, which is necessary for some integration tests.
- Mount the current directory (the root of the libdatadog workspace) into the container at
/libdatadog
. - Mount a named volume
cargo-cache
to cache the cargo dependencies at ~/.cargo. This is helpful to avoid re-downloading dependencies every time you start the container, but isn't absolutely necessary.
The $CARGO_TARGET_DIR
environment variable is set to /libdatadog/docker-linux-target
in the container, so cargo will use the target directory in the mounted volume to avoid conflicts with the host's default target directory of libdatadog/target
.
Tracing integration tests require docker to be installed and running. If you don't have docker installed or you want to skip these tests, you can run:
cargo nextest run -E '!test(tracing_integration_tests::)'