RISC-V support
Status: fails to build.
Log
- [july, 2024] lazyprogrammerio reported that lighthouse fails to build because of the
cpufeatures
crate. - [july, 2024] haurog and michaelsproul fixed the
cpufeatures
dependency inethereum_hashing
. - [april, 2025] haurog reports that lighthouse updated the problematic dependencies and is now almost ready to build in risc-v.
Cross-compile
Install docker: Debian | Docker Docs
Add the user to the docker group: Post-installation steps | Docker Docs
Install cross:
$ cargo install cross
$ cross build --bin lighthouse --target riscv64gc-unknown-linux-gnu
...
error: failed to run custom build command for `xdelta3 v0.1.5 (http://github.com/sigp/xdelta3-rs?rev=4db64086bb02e9febb584ba93b9d16bb2ae3825a#4db64086)`
Caused by:
process didn't exit successfully: `/target/debug/build/xdelta3-089e54b56a437ecd/build-script-build` (exit status: 101)
--- stdout
OUT_DIR = Some(/target/riscv64gc-unknown-linux-gnu/debug/build/xdelta3-544b6295ff28cbaf/out)
OPT_LEVEL = Some(0)
TARGET = Some(riscv64gc-unknown-linux-gnu)
HOST = Some(x86_64-unknown-linux-gnu)
cargo:rerun-if-env-changed=CC_riscv64gc-unknown-linux-gnu
CC_riscv64gc-unknown-linux-gnu = None
cargo:rerun-if-env-changed=CC_riscv64gc_unknown_linux_gnu
CC_riscv64gc_unknown_linux_gnu = Some(riscv64-linux-gnu-gcc)
cargo:rerun-if-env-changed=CC_KNOWN_WRAPPER_CUSTOM
CC_KNOWN_WRAPPER_CUSTOM = None
RUSTC_WRAPPER = None
cargo:rerun-if-env-changed=CC_ENABLE_DEBUG_OUTPUT
cargo:rerun-if-env-changed=CRATE_CC_NO_DEFAULTS
CRATE_CC_NO_DEFAULTS = None
DEBUG = Some(true)
CARGO_CFG_TARGET_FEATURE = Some(a,c,m)
cargo:rerun-if-env-changed=CFLAGS
CFLAGS = None
cargo:rerun-if-env-changed=TARGET_CFLAGS
TARGET_CFLAGS = None
cargo:rerun-if-env-changed=CFLAGS_riscv64gc_unknown_linux_gnu
CFLAGS_riscv64gc_unknown_linux_gnu = None
cargo:rerun-if-env-changed=CFLAGS_riscv64gc-unknown-linux-gnu
CFLAGS_riscv64gc-unknown-linux-gnu = None
CARGO_ENCODED_RUSTFLAGS = Some()
cargo:rerun-if-env-changed=AR_riscv64gc-unknown-linux-gnu
AR_riscv64gc-unknown-linux-gnu = None
cargo:rerun-if-env-changed=AR_riscv64gc_unknown_linux_gnu
AR_riscv64gc_unknown_linux_gnu = None
cargo:rerun-if-env-changed=TARGET_AR
TARGET_AR = None
cargo:rerun-if-env-changed=AR
AR = None
cargo:rerun-if-env-changed=CROSS_COMPILE
CROSS_COMPILE = None
RUSTC_LINKER = Some(riscv64-linux-gnu-gcc)
cargo:rerun-if-env-changed=ARFLAGS
ARFLAGS = None
cargo:rerun-if-env-changed=TARGET_ARFLAGS
TARGET_ARFLAGS = None
cargo:rerun-if-env-changed=ARFLAGS_riscv64gc_unknown_linux_gnu
ARFLAGS_riscv64gc_unknown_linux_gnu = None
cargo:rerun-if-env-changed=ARFLAGS_riscv64gc-unknown-linux-gnu
ARFLAGS_riscv64gc-unknown-linux-gnu = None
cargo:rustc-link-lib=static=xdelta3
cargo:rustc-link-search=native=/target/riscv64gc-unknown-linux-gnu/debug/build/xdelta3-544b6295ff28cbaf/out
cargo:rerun-if-env-changed=TARGET
cargo:rerun-if-env-changed=BINDGEN_EXTRA_CLANG_ARGS_riscv64gc-unknown-linux-gnu
cargo:rerun-if-env-changed=BINDGEN_EXTRA_CLANG_ARGS_riscv64gc_unknown_linux_gnu
--- stderr
thread 'main' panicked at /cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bindgen-0.69.5/ir/context.rs:556:15:
libclang error; possible causes include:
- Invalid flag syntax
- Unrecognized flags
- Invalid flag arguments
- File I/O errors
- Host vs. target architecture mismatch
If you encounter an error missing from this list, please file an issue or a PR!
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
warning: build failed, waiting for other jobs to finish...
...
DEBUG: CMAKECONFIGDIR = /target/riscv64gc-unknown-linux-gnu/release/build/openssl-sys-919d683837af7360/out/openssl-build/install/lib/cmake/OpenSSL => CMAKECONFIGDIR = /target/riscv64gc-unknown-linux-gnu/release/build/openssl-sys-919d683837af7360/out/openssl-build/install/lib/cmake/OpenSSL, CMAKECONFIGDIR_REL_LIBDIR = cmake/OpenSSL
"my" variable $KEYP masks earlier declaration in same scope at crypto/aes/asm/aes-riscv64-zkn.pl line 279.
"my" variable $T0 masks earlier declaration in same scope at crypto/aes/asm/aes-riscv64-zkn.pl line 282.
"my" variable $T1 masks earlier declaration in same scope at crypto/aes/asm/aes-riscv64-zkn.pl line 282.
crypto/riscv64cpuid.s: Assembler messages:
crypto/riscv64cpuid.s:67: Error: Instruction csrr requires absolute expression
make[1]: *** [crypto/libcrypto-lib-riscv64cpuid.o] Error 1
make[1]: *** Waiting for unfinished jobs....
make: *** [build_libs] Error 2
Error building OpenSSL:
'make' reported failure with exit status: 2
Command failed: cd "/target/riscv64gc-unknown-linux-gnu/release/build/openssl-sys-919d683837af7360/out/openssl-build/build/src" && MAKEFLAGS="-j --jobserver-fds=8,9 --jobserver-auth=8,9" "make" "build_libs"
make: *** [Makefile:72: build-riscv64] Error 101