ctmd node binary from source. Use this page when you need a local developer build, an installed binary, or a self-contained distribution bundle.
For local chain startup after the binary is built, see Local Development.
What gets built
The top-level Makefile buildsctmd from evmd/cmd/evmd. Builds use CGO and first build the Rust SP1 verifier dynamic library from rust/sp1verifier.
The usual developer targets are:
make build creates a development binary under build/. make install installs the binary into BINDIR, which defaults to $(go env GOPATH)/bin or $HOME/go/bin if GOPATH is not available.
Prerequisites
- Go matching
go.modandevmd/go.mod, currently1.25.0 make- Rust and Cargo for
rust/sp1verifier - A working C toolchain for CGO builds
- macOS dynamic-library tooling:
otoolandinstall_name_tool - Linux dynamic-library tooling:
ldd;patchelfis recommended
gcc. To build without ledger support:
goleveldb unless ROCKSDB_REQUIRED=true is set.
macOS setup
Install the Xcode Command Line Tools:install_name_tool to fix local dynamic-library paths.
Linux setup
Install the core build tools and dynamic-library helpers:ROCKSDB_PREFIX, ROCKSDB_INCLUDE_DIR, or ROCKSDB_LIB_DIR so the Makefile can find it.
Build commands
Check the local environment:build/dist:
Outputs
make build writes:
make install writes:
make dist writes:
Verify the binary
For a development build:ctmd is not found after make install, confirm that BINDIR is on your PATH:
Troubleshooting
| Issue | Fix |
|---|---|
cargo not found | Install Rust and Cargo, then rerun make doctor. |
gcc not installed for ledger support | Install a C toolchain or build with LEDGER_ENABLED=false make build. |
| RocksDB is missing | Let the build fall back to goleveldb, set ROCKSDB_REQUIRED=true to fail fast, or set ROCKSDB_PREFIX=/path/to/rocksdb. |
patchelf is missing on Linux | Install patchelf; development builds can still run with LD_LIBRARY_PATH=build ./build/ctmd version. |
ctmd is not on PATH | Use the full binary path or install with BINDIR="$HOME/.local/bin" make install. |