Build
VAST uses CMake as build system. Aside from a modern C++20 compiler, you need to ensure availability of the dependencies in the table below.
We provide a Nix flake to setup an environment in which all dependencies are
available. Run nix develop
inside the main source directory. You can also
delegate the entire build process to Nix by invoking nix build
, but be aware
that this method does not support incremental
builds.
Dependencies
Every release of VAST includes an SBOM in SPDX format that lists all dependencies and their versions.
Required | Dependency | Version | Description |
---|---|---|---|
✓ | C++ Compiler | C++20 required | VAST is tested to compile with GCC >= 12.0 and Clang >= 15.0. |
✓ | CMake | >= 3.19 | Cross-platform tool for building, testing and packaging software. |
✓ | CAF | >= 0.18.7 | Implementation of the actor model in C++. (Bundled as submodule.) |
✓ | OpenSSL | Utilities for secure networking and cryptography. | |
✓ | FlatBuffers | >= 1.12.0 | Memory-efficient cross-platform serialization library. |
✓ | Boost | >= 1.81.0 | Required as a general utility library. |
✓ | Apache Arrow | >= 8.0.0 | Required for in-memory data representation. Must be built with Compute, Zstd and Parquet enabled. |
✓ | re2 | Required for regular expressione evaluation. | |
✓ | yaml-cpp | >= 0.6.2 | Required for reading YAML configuration files. |
✓ | simdjson | >= 3.1.0 | Required for high-performance JSON parsing. (Bundled as submodule.) |
✓ | spdlog | >= 1.5 | Required for logging. |
✓ | fmt | >= 8.1.1 | Required for formatted text output. |
✓ | xxHash | >= 0.8.0 | Required for computing fast hash digests. |
✓ | robin-map | >= 0.6.3 | Fast hash map and hash set using robin hood hashing. (Bundled as subtree.) |
✓ | fast_float | >= 3.2.0 | Required for parsing floating point numbers. (Bundled as submodule.) |
libpcap | Required for building the pcap plugin. | ||
http-parser | Required for building the web plugin. | ||
poetry | Required for building the Python bindings. | ||
Doxygen | Required to build documentation for libvast. | ||
Pandoc | Required to build manpage for VAST. |
The minimum specified versions reflect those versions that we use in CI and manual testing. Older versions may still work in select cases.
Compile
Building VAST involves the following steps:
Download the latest release or clone the repository recursively:
git clone https://github.com/tenzir/vast
cd vast
git submodule update --init --recursive -- libvast pluginsConfigure the build with CMake. For faster builds, we recommend passing
-G Ninja
tocmake
.cmake -B build
# CMake defaults to a "Debug" build. When performance matters, use "Release"
cmake -B build -DCMAKE_BUILD_TYPE=ReleaseOptionally, you can use the CMake TUI to visually configure the build:
ccmake build
The source tree also contains a set of CMake presets that combine various configuration options into curated build flavors. You can list them with:
cmake --list-presets
Build the executable:
cmake --build build --target all
Test
After you have built the executable, run the unit and integration tests to verify that your build works as expected:
Run component-level unit tests:
ctest --test-dir build
Run end-to-end integration tests:
cmake --build build --target integration
Install
- Install VAST system-wide.
cmake --install build
If you prefer to install into a custom install prefix, install with --prefix
/path/to/install/prefix
.
To remove debug symbols from the installed binaries and libraries, pass
--strip
.
To install only files relevant for running VAST and not for plugin development
pass --component Runtime
.
Clean
In case you want to make changes to your build environment, we recommend deleting the build tree entirely:
rm -rf build
This avoids subtle configuration glitches of transitive dependencies. For
example, CMake doesn't disable assertions when switching from a Debug
to
a Release
build, but would do so when starting with a fresh build of type
Release
.