# Installation RCL is written in Rust and builds with [Cargo][cargo]. RCL has few dependencies, so it’s quick and easy to build from source, but you can also use one of the options below that automate the process. [cargo]: https://doc.rust-lang.org/cargo/guide/ ## As a Nix flake The repository includes a Nix flake. You can run RCL with a [flake-enabled][flakes] version of [Nix][nix], such as Nix 2.18: nix run 'github:ruuda/rcl?ref=v0.8.0' -- --help [flakes]: https://nixos.org/manual/nix/stable/command-ref/new-cli/nix3-flake [nix]: https://nixos.org/download The Nix flake also includes the Python module: PYTHONPATH=$(nix build github:ruuda/rcl?ref=v0.8.0#pyrcl --print-out-paths)/lib python3 The Nix flake also includes a shell with all the tools needed for development, as well as the environment that is tested on CI. ## From source To build from source, clone the repository from one of the two mirrors: git clone https://github.com/ruuda/rcl.git git clone https://codeberg.org/ruuda/rcl.git Then build with [Cargo][cargo]. The repository includes a `rust-toolchain.toml` file that specifies a compatible Rust version. When Cargo is managed by [Rustup][rustup], Rustup will automatically fetch the right toolchain. cargo build --release Put the binary on your `PATH` to be able to use it system-wide, e.g.: cp target/release/rcl ~/.local/bin To build a static binary rather than a dynamically linked one: cargo build --release --target x86_64-unknown-linux-musl cp target/x86_64-unknown-linux-musl/release/rcl ~/.local/bin [cargo]: https://doc.rust-lang.org/cargo/guide/ [rustup]: https://rust-lang.github.io/rustup/index.html ## Python module from source To build the Python module, follow the steps as before, but build the `pyrcl` directory: cargo build --release --manifest-path pyrcl/Cargo.toml Then rename `libpyrcl.so` to `rcl.so` so that Python can discover it, and copy it to a location on the `PYTHONPATH`, e.g.: cp target/release/libpyrcl.so ./rcl.so Now you can use the module as any regular one: $ python3 >>> import rcl >>> rcl.loads("10 + 32") 42 It is also possible to build a wheel that can be installed into a virtualenv using [Maturin](https://www.maturin.rs/).