tpuproxy/INSTALL.md

2.7 KiB

Building Radiance

Radiance depends on many external dependencies including optional C libraries. This makes the build procedure slightly more complicated than a pure Go project.

For installing C deps, the following options are available, each with their own tradeoffs:

  • Setup Script (recommended)
    • Stable, one-time ~3 minute installation
    • Supported on Debian, Ubuntu 20.04+, Fedora, RHEL 8+, Alpine 3, and macOS
  • Nixpkgs
    • Somewhat stable, one-time 60 second installation
    • Supported on any platform with a pre-existing installation of Nix (Linux, macOS)
  • Without Cgo
    • Plain old pure Go build
    • Missing a lot of functionality (no Solana Labs compatibility layer)
  • Manual Installation: If you know what you're doing, feel free to install C deps manually.
    • Good luck. Plan in 30 minutes of debugging time

Radiance requires further requires Go 1.20. Other Go versions are not supported.

Here's a trick to download another Go version in case you have the wrong one. (See Managing Go versions)

go install golang.org/dl/go1.20.5@latest
"$(go env GOPATH)/bin/go1.20.5" download
alias go="$(go env GOPATH)/bin/go1.20.5"

Once your Go toolchain and build dependencies are installed, you can build Radiance as usual:

go mod download
go run ./cmd/radiance

Building with deps.sh

deps.sh fetches deps using Git, compiles them, and installs them into the opt dir of your Radiance checkout.

To complete the one-time installation of deps, run

./deps.sh

You may get prompted to install basic system packages like pkg-config or cmake if they are missing.

To add the installed deps to your shell env (and Go build tools), each time you open a new shell, run:

source activate-opt

To clean up, simply run ./deps.sh nuke or rm -rf opt

How deps.sh works

Managing C deps is only as complicated as you want it to be.

deps.sh is a ~500 line long handwritten shell script. It just calls git clone, make, and make install or their respective equivalents for each dependency. And yet it is more reliable than any tool that tries to be smart.

It will not pollute your system -- The C deps are not installed globally.

Building with Nix

Radiance provides a Nix package.

nix-build
./result/bin/radiance --help

Note that the resulting binary is not freestanding. It is linked against libraries provided by Nix and will not run on non-Nix hosts.

Without Cgo

The full set of functionality requires C dependencies via Cgo. To create a pure-Go build use the lite tag.

go build -tags=lite ./cmd/radiance