ring's Rust crate is named ring
. See https://crates.io/crates/ring to see
what the latest version is and to see how to add a dependency on it to your
project.
When hacking on ring itself, you can build it using cargo build
and
cargo test
as usual. ring includes some C, C++, and assembly language
components, and its build script (build.rs) builds all those things
automatically.
When you build ring from its package (e.g. the ones on crates.io), you only
need the Rust toolchain and a C/C++ compiler. For Windows targets, the packaged
crate contains precompiled object files for the assembly language modules so no
macro assembler is required. On other platforms, ring's build script assumes
the C/C++ compiler knows how to build .S
files (assembly language sources
with C preprocessor directives).
If you want to hack on ring then you need to build it directly from its Git repository. There are some additional requirements for doing this that do not apply when building from crates.io:
-
For any target for which ring has assembly language implementations of primitives (32- and 64- bit Intel, and 32- and 64-bit ARM), Perl must be installed and in
$PATH
. -
For Windows targets except ARM64,
target/tools/windows/nasm/nasm[.exe]
is used as the assembler. The version to use and how to download it is documented in .github/workflows/ci.yml. -
For Windows ARM64 target, Clang is used as the C compiler and the assembler. See below "Building for Windows ARM64" section.
When you build ring for a target that is different than the one you are using for the build process you need to install the rust tool chain and a C/C++ compiler that can produce binaries for the intended target.
Besides the required dependencies you need to set the environment variables
TARGET_CC
and TARGET_AR
to the full path of the cross-compiler and the
cross-archiver respectively.
ring targets the current stable release of Rust and Cargo. We also verify that the current beta and nightly releases work.
On Windows, ring supports the x86_64-pc-windows-msvc and i686-pc-windows-msvc targets best. These targets require the “Visual C++ Build Tools 2015” package or Visual Studio 2015 Update 3 or later to be installed. ring now also supports the aarch64-pc-windows-msvc target. For the detailed instructions please see the next section. Patches to get it working on other variants, including in particular Visual Studio 2017 (#338), Windows Universal Platform, Windows XP (the v140_xp toolchain; #339), and the -gnu targets (#330) are welcome.
For other platforms, GCC 4.6 or later and Clang 3.5 or later are currently supported best. The build script passes options to the C/C++ compiler that are GCC- and Clang- specific. Pull requests to support other compilers will be considered.
Note in particular that if you are cross-compiling an x86 build on a 64-bit version of Linux, then you need to have the proper gcc-multilibs and g++-multilibs packages or equivalent installed.
If you generate a standalone NDK toolchain in order to compile your project,
the wrapper automatically passes flags to the actual compiler to define the
__ANDROID_API__
macro. Otherwise, the macro __ANDROID_API__
must be
defined with a value of at least 21 on 64-bit targets or 18 on 32-bit targets;
e.g. export CFLAGS=-D__ANDROID_API__=21
.
Windows ARM64 target requires the “Visual C++ Build Tools 2019” package or Visual Studio 2019 or later to be installed. “Desktop development with C++” workflow should be installed, as well as “MSVC v142 - VS 2019 C++ ARM64 build tools” component.
To build ring for Windows ARM64, you will need to install Clang as it is used as the C compiler and the assembler for that platform. You can either use the version of Clang installed by Visual Studio, a standalone version from llvm.org, or a mingw64 version of Clang, for example, from llvm-mingw project.
If you're buiding ring on an ARM64 device like Surface Pro X, please note
that llvm.org and llvm-mingw have native ARM64 versions of Clang available.
Also, if you're building ring on an ARM64 device, you might want to use
aarch64-pc-windows-msvc
Rustup toolchain, which can be installed using
rustup toolchain add aarch64-pc-windows-msvc
.
When building on an ARM64 device, due to a bug in the Visual Studio installer,
if you're using rustc
version < 1.55 you would need to run cargo build
/
cargo test
commands from x86_arm64 Developer Command Prompt. You can use
C:\Program Files (x86)\Microsoft Visual Studio\2019\<edition>\VC\Auxiliary\Build\vcvarsx86_arm64.bat
batch script to configure the environment. If you use rustc
1.55 beta or newer,
you can run cargo
commands without configuring the dev environment beforehand.
The slow_tests
feature runs additional tests that are too slow to run during
a normal edit-compile-test cycle.
The test_logging
feature prints out the input test vectors when a test fails.