mirror of
https://github.com/XRPLF/rippled.git
synced 2026-03-30 16:42:30 +00:00
96 lines
3.3 KiB
Markdown
96 lines
3.3 KiB
Markdown
# Using Nix Development Shell for xrpld Development
|
|
|
|
This guide explains how to use Nix to set up a reproducible development environment for xrpld. Using Nix eliminates the need to manually install utilities and ensures consistent tooling across different machines.
|
|
|
|
## Benefits of Using Nix
|
|
|
|
- **Reproducible environment**: Everyone gets the same versions of tools and compilers
|
|
- **No system pollution**: Dependencies are isolated and don't affect your system packages
|
|
- **Multiple compiler versions**: Easily switch between different GCC and Clang versions
|
|
- **Quick setup**: Get started with a single command
|
|
- **Works on Linux and macOS**: Consistent experience across platforms
|
|
|
|
## Install Nix
|
|
|
|
Please follow [the official installation instructions of nix package manager](https://nixos.org/download/) for your system.
|
|
|
|
## Entering the Development Shell
|
|
|
|
### Basic Usage
|
|
|
|
From the root of the xrpld repository, enter the default development shell:
|
|
|
|
```bash
|
|
nix --experimental-features 'nix-command flakes' develop
|
|
```
|
|
|
|
This will:
|
|
|
|
- Download and set up all required development tools (CMake, Ninja, Conan, etc.)
|
|
- Configure the appropriate compiler for your platform:
|
|
- **macOS**: Apple Clang (default system compiler)
|
|
- **Linux**: GCC 15
|
|
|
|
The first time you run this command, it will take a few minutes to download and build the environment. Subsequent runs will be much faster.
|
|
|
|
> [!TIP]
|
|
> To avoid typing `--experimental-features 'nix-command flakes'` every time, you can permanently enable flakes by creating `~/.config/nix/nix.conf`:
|
|
>
|
|
> ```bash
|
|
> mkdir -p ~/.config/nix
|
|
> echo "experimental-features = nix-command flakes" >> ~/.config/nix/nix.conf
|
|
> ```
|
|
>
|
|
> After this, you can simply use `nix develop` instead.
|
|
|
|
> [!NOTE]
|
|
> The examples below assume you've enabled flakes in your config. If you haven't, add `--experimental-features 'nix-command flakes'` after each `nix` command.
|
|
|
|
### Choosing a different compiler
|
|
|
|
A compiler can be chosen by providing its name with the `.#` prefix, e.g. `nix develop .#gcc15`.
|
|
Use `nix flake show` to see all the available development shells.
|
|
|
|
Use `nix develop .#no_compiler` to use the compiler from your system.
|
|
|
|
### Example Usage
|
|
|
|
```bash
|
|
# Use GCC 14
|
|
nix develop .#gcc14
|
|
|
|
# Use Clang 19
|
|
nix develop .#clang19
|
|
|
|
# Use default for your platform
|
|
nix develop
|
|
```
|
|
|
|
### Using a different shell
|
|
|
|
`nix develop` opens bash by default. If you want to use another shell this could be done by adding `-c` flag. For example:
|
|
|
|
```bash
|
|
nix develop -c zsh
|
|
```
|
|
|
|
## Building xrpld with Nix
|
|
|
|
Once inside the Nix development shell, follow the standard [build instructions](../../BUILD.md#steps). The Nix shell provides all necessary tools (CMake, Ninja, Conan, etc.).
|
|
|
|
## Automatic Activation with direnv
|
|
|
|
[direnv](https://direnv.net/) or [nix-direnv](https://github.com/nix-community/nix-direnv) can automatically activate the Nix development shell when you enter the repository directory.
|
|
|
|
## Conan and Prebuilt Packages
|
|
|
|
Please note that there is no guarantee that binaries from conan cache will work when using nix. If you encounter any errors, please use `--build '*'` to force conan to compile everything from source:
|
|
|
|
```bash
|
|
conan install .. --output-folder . --build '*' --settings build_type=Release
|
|
```
|
|
|
|
## Updating `flake.lock` file
|
|
|
|
To update `flake.lock` to the latest revision use `nix flake update` command.
|