radiance/INSTALL.md

74 lines
2.7 KiB
Markdown

# 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](#building-with-depssh) **(recommended)**
- Stable, one-time ~3 minute installation
- Supported on Debian, Ubuntu 20.04+, Fedora, RHEL 8+, Alpine 3, and macOS
- [Nixpkgs](#building-with-nix)
- Somewhat stable, one-time 60 second installation
- Supported on any platform with a pre-existing installation of Nix (Linux, macOS)
- [Without Cgo](#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](https://golang.org/doc/manage-install))
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](https://nixos.org/) 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