Rust bindings to the RandomX proof-of-work (Pow) system
This repo makes use of git submodules.
The first time you compile, or perhaps after a big update after a git pull
, you need to update the submodules:
git submodule init
git submodule update
If you see an error like
fatal: Needed a single revision
Unable to find current revision in submodule path 'RandomX'
you might want to see if there is a RandomX
folder in the source tree. (On case insensitive systems, like OsX and Windows, it might
even be randomx
). Deleting this folder and repeating the commands above should resolve the issue.
Install XCode and then the XCode Command Line Tools with the following command
xcode-select --install
For macOS Mojave additional headers need to be installed, run
open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg
and follow the prompts
Install Brew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Run the following to install needed bottles
brew install git
brew install cmake
Run the following to install dependencies
apt-get install git cmake libc++-dev libc++abi-dev
Install Git
Install CMake
Install Build Tools for Visual Studio 2019
To build using the Android NDK the ANDROID_SDK_ROOT
environment variable needs to be set. Other variables are optional as they have defaults. Example build command for ARM64:
ANDROID_SDK_ROOT=/home/user/Android/Sdk \
ANDROID_PLATFORM=android-25 \
ANDROID_CMAKE=/home/user/Android/Sdk/cmake/3.22.1/bin/cmake \
ANDROID_CMAKE_TOOLCHAIN=/home/user/Android/Sdk/ndk/22.1.7171670/build/cmake/android.toolchain.cmake \
cargo build --target=aarch64-linux-android
If you're experiencing linker issues, or messages like
cstdint:153:8: error: no member named 'int8_t' in the global namespace
then you might have multiple conflicting versions of clang installed.
Try:
- Does
which cc
report more than one binary? If so, uninstalling one of the clang compilers might help. - Upgrading cmake.
brew uninstall cmake && brew install cmake
cargo clean
On Apple ARM64 hardware and newer XCode releases, RandomX might fail the randomx-tests
.
[83] Hash test 1e (interpreter) ... PASSED
[84] Hash test 2a (compiler) ... Assertion failed: (equalsHex(hash, "639183aae1bf4c9a35884cb46b09cad9175f04efd7684e7262a0ac1c2f0b4e3f")), function operator(), file tests.cpp, line 966.
zsh: abort ./randomx-tests
or
[88] Hash test 2e (compiler) ... PASSED
[89] Cache initialization: SSSE3 ... SKIPPED
[90] Cache initialization: AVX2 ... SKIPPED
[91] Hash batch test ... Assertion failed: (equalsHex(hash3, "c36d4ed4191e617309867ed66a443be4075014e2b061bcdaf9ce7b721d2b77a8")), function operator(), file tests.cpp, line 1074.
zsh: abort ./randomx-tests
Building using an older SDK might help. Find location of current SDKs with xcrun --show-sdk-path
, then for example:
export RANDOMX_RS_CMAKE_OSX_SYSROOT="/Library/Developer/CommandLineTools/SDKs/MacOSX12.3.sdk"
cargo build
Quick test with built binaries
find target -name randomx-tests -exec {} \;