OpenVDB: Dependencies

OpenVDB 13.0.0

Loading...
Searching...
No Matches
Dependencies

# Contents

- OpenVDB Components
  - Dependency Table
  - Known Issues
- Installing Dependencies
  - Using UNIX apt-get
  - Using Homebrew

Note: The dependency information on this page details a complete requirements list for building OpenVDB as a standalone package. If you wish to use OpenVDB with a supported 3rd party DCC (Houdini/Maya), make sure you've first read the Building OpenVDB information.

There are a number of optional and required dependencies necessary when building different components of OpenVDB. Below you'll find a full list of all dependencies, any minimum/recommended version requirements and some guides for getting these dependencies installed. You'll also find information on any known issues with particular software. Please report any issues not listed here to the OpenVDB TSC.

Note that OpenVDB is production tested against the [VFX Reference Platform] (https://www.vfxplatform.com/). Not all dependencies exist in the VFX Reference Platform, but for those that do, their specified versions are always recommended.

# OpenVDB Components

Component | Requirements | Optional
--- | --- | ---
OpenVDB Core Library | CMake, C++17 compiler, TBB::tbb | Blosc, ZLib, Log4cplus, Imath::Imath, Boost::iostream
OpenVDB Print | Core Library dependencies | -
OpenVDB LOD | Core Library dependencies | -
OpenVDB Render | Core Library dependencies | OpenEXR, Imath::Imath, libpng
OpenVDB View | Core Library dependencies, OpenGL, GLFW3, GLEW* | -
OpenVDB Python | Core Library dependencies, Python, nanobind | -
OpenVDB AX | Core Library dependencies, LLVM | Bison, Flex
NanoVDB | - | Core Library, CUDA, TBB, Blosc, ZLib
OpenVDB UnitTests | Core Library dependencies, GoogleTest, numpy* | -
OpenVDB Documentation | Doxygen | -

- * GLEW is only required for building the vdb_view binary on Windows.
- * numpy only required for python binding unit tests
- Note - Bison and Flex are only required for re-generation of the AX grammar which is not typically necessary for the majority of users.

## Dependency Table

Package | Minimum | Recommended | Description | apt-get | Homebrew | Source
--- | --- | --- | --- | --- | --- | ---
CMake | 3.24 | Latest | Cross-platform family of tools designed to help build software | Y | Y | https://cmake.org
GCC | 11.2.1 | 11.2.1 | C++ 17 Compiler: The GNU Compiler Collection | Y | Y | https://www.gnu.org/software/gcc
Clang | 5.0 | Latest | C++ 17 Compiler: A C language family frontend for LLVM | Y | Y | https://clang.llvm.org
Intel ICC | 19 | Latest | C++ 17 Compiler: Intels C++ Compiler | Y | Y | https://software.intel.com/en-us/c-compilers
MSVC | 19.30 | 19.30 | C++ 17 Compiler: Microsoft Visual C++ Compiler | Y | Y | https://visualstudio.microsoft.com/vs
Imath | 3.2 | >= 3.3 | Half precision floating points | Y | Y | http://www.openexr.com
OpenEXR | 3.2 | >= 3.3 | EXR serialization support | Y | Y | http://www.openexr.com
TBB | 2020.3 | >= 2021 | Threading Building Blocks - template library for task parallelism | Y | Y | https://www.threadingbuildingblocks.org
ZLIB | 1.2.7 | Latest | Compression library for disk serialization compression | Y | Y | https://www.zlib.net
Boost | 1.82 | >= 1.85 | Components: iostreams | Y | Y | https://www.boost.org
LLVM | 15.0.0* | 18.0.0 | Target-independent code generation | Y | Y | https://llvm.org/
Bison | 3.7.0 | 3.7.0 | General-purpose parser generator | Y | Y | https://www.gnu.org/software/gcc
Flex | 2.6.4 | 2.6.4 | Fast lexical analyzer generator | Y | Y | https://github.com/westes/flex
Python | 3.10 | 3.11 | The python interpreter and libraries | Y | Y | https://www.python.org
nanobind** | 2.0.0 | >= 2.5.0 | C++/python bindings | Y | Y | https://nanobind.readthedocs.io
GoogleTest | 1.10 | Latest | A unit testing framework module for C++ | Y | Y | https://github.com/google/googletest
Blosc | 1.17.0* | Latest | Recommended dependency for improved disk compression | Y | Y | https://github.com/Blosc/c-blosc/releases
Log4cplus | 1.1.2 | Latest | An optional dependency for improved OpenVDB Logging | Y | Y | https://github.com/log4cplus/log4cplus
libpng | - | Latest | Library for manipulating PNG images | Y | Y | http://www.libpng.org/pub/png/libpng.html
GLFW | 3.3 | Latest | Simple API for OpenGL development | Y | Y | https://www.glfw.org
OpenGL | 3.2 | Latest | Environment for developing portable graphics applications | Y | Y | https://www.opengl.org
GLEW | 1.0.0 | Latest | A cross-platform OpenGL extension loading library. | Y | Y | http://glew.sourceforge.net
CUDA | - | Latest | Parallel computing platform for graphical processing units. | Y | N | https://developer.nvidia.com/cuda-downloads
Doxygen | 1.8.8 | 1.8.11 | Documentation generation from C++ | Y | Y | http://www.doxygen.nl

- * See the note in known issues regarding supported blosc/llvm versions.
- ** See the note in known issues regarding supported nanobind build issues.

## Known Issues

- On Linux, LLVM == 17 has symbol issues which makes it incompatible when used with the OpenVDB Python plugin. LLVM versions greater than 18 should be preferred.
- GLFW: Crash with GLFW 3.2.1 when used with EGL on Linux. OpenVDB View may segfault on closure. Fixed in GLFW 3.3
- Blosc: OpenVDB has historically used an old version of blosc (1.5.0) to serialize .vdb files. OpenVDB has moved to a new blosc version minimum of 1.17.0. We have tested a range of blosc versions and found that the following versions are NOT compatible with OpenVDB caches written using blosc 1.5.0. Additionally these versions of blosc may generally not be compatible with OpenVDB itself. Avoid using these versions and upgrade to the new minimum of 1.17.0 where possible.
- All versions from 1.11.0 through to, but excluding, 1.14.0.
- Versions 1.16.0 and 1.16.1.

For more information see:

- https://www.blosc.org/posts/new-forward-compat-policy/
- https://github.com/Blosc/c-blosc/issues/260
- https://github.com/Blosc/c-blosc/issues/261
- nanobind: Nanobind requires a fast-hash-map implementation library called tsl-robin-map. If you're installing nanobind through homebrew, this library may not be installed correctly and OpenVDB's CMake will only produce a warning. Make sure to also: brew install robin-map.

# Installing Dependencies

This section details a number of ways to get you up and running with the required OpenVDB dependencies.

## Using UNIX apt-get

You can use apt to automatically install required packages. Note that different Ubuntu distributions will have different versions available. You can use apt pinning to request newer versions of specific package from later distributions if the required version isn't available by default (see man apt_preferences). For example, the below settings will request TBB specifically from Ubuntu 22.04 (Jammy).

Package: libtbb-dev
Pin: release n=jammy
Pin-Priority: 990

Alternatively you can install any missing dependencies manually or through other package managers.

#!/bin/bash
# Core library
apt-get install cmake # CMake
apt-get install libtbb-dev # TBB
apt-get install zlibc # zlib
apt-get install libboost-iostreams-dev # Boost::iostream
apt-get install libblosc-dev # Blosc
# AX
apt-get install llvm-15-dev # LLVM
# Python
apt-get install python-dev # Python
pip install nanobind # nanobind
# Optional
apt-get install libpng-dev # libpng
apt-get install libopenexr-dev # OpenEXR
apt-get install liblog4cplus-dev # Log4cplus
apt-get install googletest # GoogleTest
# vdb_view
apt-get install libglfw3-dev # GLFW
# Documentation
apt-get install doxygen # doxygen
# CUDA for NanoVDB
apt-get install nvidia-cuda-toolkit # CUDA

## Using Homebrew

Homebrew is a package manager for UNIX systems and is an alternative to apt-get or manual installation from source.

#!/bin/bash
# Core library
brew install cmake # CMake
brew install tbb # TBB
brew install zlib # zlib
brew install boost # Boost
brew install c-blosc # blosc
# AX
brew install llvm # LLVM
# Python
brew install python # Python
brew install nanobind robin-map # nanobind
# Unit Tests
brew install gtest # GoogleTest
# vdb_view
brew install glfw # GLFW
# vdb_render
brew install openexr # OpenEXR
brew install libpng # libpng
# Documentation
brew install doxygen # Doxygen