gecko-dev/third_party/jpeg-xl/BUILDING.md

2.4 KiB

Compilation

For more details and other workflows see the "Advanced guide" below.

Checking out the code

git clone https://github.com/libjxl/libjxl.git --recursive --shallow-submodules

This repository uses git submodules to handle some third party dependencies under third_party, that's why it is important to pass --recursive. If you didn't check out with --recursive, or any submodule has changed, run:

git submodule update --init --recursive --depth 1 --recommend-shallow

The --shallow-submodules and --depth 1 --recommend-shallow options create shallow clones which only downloads the commits requested, and is all that is needed to build libjxl. Should full clones be necessary, you could always run:

git submodule foreach git fetch --unshallow
git submodule update --init --recursive

which pulls the rest of the commits in the submodules.

Important: If you downloaded a zip file or tarball from the web interface you won't get the needed submodules and the code will not compile. You can download these external dependencies from source running ./deps.sh. The git workflow described above is recommended instead.

Installing dependencies

Required dependencies for compiling the code, in a Debian/Ubuntu based distribution run:

sudo apt install cmake pkg-config libbrotli-dev

Optional dependencies for supporting other formats in the cjxl/djxl tools, in a Debian/Ubuntu based distribution run:

sudo apt install libgif-dev libjpeg-dev libopenexr-dev libpng-dev libwebp-dev

We recommend using a recent Clang compiler (version 7 or newer), for that install clang and set CC and CXX variables.

sudo apt install clang
export CC=clang CXX=clang++

Building

cd libjxl
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF ..
cmake --build . -- -j$(nproc)

The encoder/decoder tools will be available in the build/tools directory.

Installing

sudo cmake --install .

Building JPEG XL for developers

For experienced developers, we provide build instructions for several other environments: