# Compilation For more details and other workflows see the "Advanced guide" below. ## Checking out the code ```bash 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: ```bash 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: ```bash 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: ```bash 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: ```bash 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. ```bash sudo apt install clang export CC=clang CXX=clang++ ``` ## Building ```bash 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 ```bash sudo cmake --install . ``` ## Advanced guide ### Building with Docker We build a common environment based on Debian/Ubuntu using Docker. Other systems may have different combinations of versions and dependencies that have not been tested and may not work. For those cases we recommend using the Docker container as explained in the [step by step guide](doc/developing_in_docker.md). ### Building JPEG XL for developers For experienced developers, we provide build instructions for several other environments: * [Building on Debian](doc/developing_in_debian.md) * Building on Windows with [vcpkg](doc/developing_in_windows_vcpkg.md) (Visual Studio 2019) * Building on Windows with [MSYS2](doc/developing_in_windows_msys.md) * [Cross Compiling for Windows with Crossroad](doc/developing_with_crossroad.md) If you encounter any difficulties, please use Docker instead.