mirror of
https://github.com/ZeroTier/ZeroTierOne
synced 2025-08-23 06:35:49 -07:00
Fix ring
This commit is contained in:
parent
389729afbd
commit
d64afb7a1f
5 changed files with 33 additions and 12 deletions
2
zeroidc/Cargo.lock
generated
2
zeroidc/Cargo.lock
generated
|
@ -846,8 +846,6 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "ring"
|
||||
version = "0.16.20"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
|
||||
dependencies = [
|
||||
"cc",
|
||||
"libc",
|
||||
|
|
|
@ -21,3 +21,6 @@ thiserror = "1"
|
|||
|
||||
[build-dependencies]
|
||||
cbindgen = "0.20"
|
||||
|
||||
[patch.crates-io]
|
||||
ring = { path = "vendor/ring" }
|
2
zeroidc/vendor/ring/Cargo.toml
vendored
2
zeroidc/vendor/ring/Cargo.toml
vendored
|
@ -64,7 +64,7 @@ wasm32_c = []
|
|||
version = "0.3.37"
|
||||
features = ["Crypto", "Window"]
|
||||
default-features = false
|
||||
[target."cfg(any(target_arch = \"x86\",target_arch = \"x86_64\", all(any(target_arch = \"aarch64\", target_arch = \"arm\"), any(target_os = \"android\", target_os = \"fuchsia\", target_os = \"linux\"))))".dependencies.spin]
|
||||
[target."cfg(any(target_arch = \"x86\",target_arch = \"x86_64\", all(any(target_arch = \"aarch64\", target_arch = \"arm\"), any(target_os = \"android\", target_os = \"fuchsia\", target_os = \"linux\", target_os = \"windows\"))))".dependencies.spin]
|
||||
version = "0.5.2"
|
||||
default-features = false
|
||||
[target."cfg(any(target_os = \"android\", target_os = \"linux\"))".dependencies.libc]
|
||||
|
|
13
zeroidc/vendor/ring/build.rs
vendored
13
zeroidc/vendor/ring/build.rs
vendored
|
@ -221,6 +221,7 @@ const ASM_TARGETS: &[(&str, Option<&str>, Option<&str>)] = &[
|
|||
("aarch64", Some("ios"), Some("ios64")),
|
||||
("aarch64", Some("macos"), Some("ios64")),
|
||||
("aarch64", None, Some("linux64")),
|
||||
("aarch64", Some(WINDOWS), Some("win64")),
|
||||
("x86", Some(WINDOWS), Some("win32n")),
|
||||
("x86", Some("ios"), Some("macosx")),
|
||||
("x86", None, Some("elf")),
|
||||
|
@ -384,7 +385,7 @@ fn build_c_code(target: &Target, pregenerated: PathBuf, out_dir: &Path) {
|
|||
// For Windows we also pregenerate the object files for non-Git builds so
|
||||
// the user doesn't need to install the assembler. On other platforms we
|
||||
// assume the C compiler also assembles.
|
||||
if use_pregenerated && target.os == WINDOWS {
|
||||
if use_pregenerated && (target.os == WINDOWS && target.arch != "aarch64") {
|
||||
// The pregenerated object files always use ".obj" as the extension,
|
||||
// even when the C/C++ compiler outputs files with the ".o" extension.
|
||||
asm_srcs = asm_srcs
|
||||
|
@ -503,7 +504,7 @@ fn compile(
|
|||
let mut out_path = out_dir.join(p.file_name().unwrap());
|
||||
assert!(out_path.set_extension(target.obj_ext));
|
||||
if need_run(&p, &out_path, includes_modified) {
|
||||
let cmd = if target.os != WINDOWS || ext != "asm" {
|
||||
let cmd = if !(target.os == WINDOWS && target.arch != "aarch64") || ext != "asm" {
|
||||
cc(p, ext, target, warnings_are_errors, &out_path)
|
||||
} else {
|
||||
nasm(p, &target.arch, &out_path)
|
||||
|
@ -675,7 +676,7 @@ fn perlasm_src_dsts(
|
|||
let mut src_dsts = srcs
|
||||
.iter()
|
||||
.filter(|p| is_perlasm(p))
|
||||
.map(|src| (src.clone(), asm_path(out_dir, src, os, perlasm_format)))
|
||||
.map(|src| (src.clone(), asm_path(out_dir, src, arch, os, perlasm_format)))
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
// Some PerlAsm source files need to be run multiple times with different
|
||||
|
@ -688,7 +689,7 @@ fn perlasm_src_dsts(
|
|||
let synthesized_path = PathBuf::from(synthesized);
|
||||
src_dsts.push((
|
||||
concrete_path,
|
||||
asm_path(out_dir, &synthesized_path, os, perlasm_format),
|
||||
asm_path(out_dir, &synthesized_path, arch, os, perlasm_format),
|
||||
))
|
||||
}
|
||||
};
|
||||
|
@ -710,11 +711,11 @@ fn is_perlasm(path: &PathBuf) -> bool {
|
|||
path.extension().unwrap().to_str().unwrap() == "pl"
|
||||
}
|
||||
|
||||
fn asm_path(out_dir: &Path, src: &Path, os: Option<&str>, perlasm_format: &str) -> PathBuf {
|
||||
fn asm_path(out_dir: &Path, src: &Path, arch: &str, os: Option<&str>, perlasm_format: &str) -> PathBuf {
|
||||
let src_stem = src.file_stem().expect("source file without basename");
|
||||
|
||||
let dst_stem = src_stem.to_str().unwrap();
|
||||
let dst_extension = if os == Some("windows") { "asm" } else { "S" };
|
||||
let dst_extension = if os == Some("windows") && arch != "aarch64" { "asm" } else { "S" };
|
||||
let dst_filename = format!("{}-{}.{}", dst_stem, perlasm_format, dst_extension);
|
||||
out_dir.join(dst_filename)
|
||||
}
|
||||
|
|
25
zeroidc/vendor/ring/src/cpu.rs
vendored
25
zeroidc/vendor/ring/src/cpu.rs
vendored
|
@ -31,7 +31,7 @@ pub(crate) fn features() -> Features {
|
|||
target_arch = "x86_64",
|
||||
all(
|
||||
any(target_arch = "aarch64", target_arch = "arm"),
|
||||
any(target_os = "android", target_os = "fuchsia", target_os = "linux")
|
||||
any(target_os = "android", target_os = "fuchsia", target_os = "linux", target_os = "windows")
|
||||
)
|
||||
))]
|
||||
{
|
||||
|
@ -49,7 +49,7 @@ pub(crate) fn features() -> Features {
|
|||
|
||||
#[cfg(all(
|
||||
any(target_arch = "aarch64", target_arch = "arm"),
|
||||
any(target_os = "android", target_os = "fuchsia", target_os = "linux")
|
||||
any(target_os = "android", target_os = "fuchsia", target_os = "linux", target_os = "windows")
|
||||
))]
|
||||
{
|
||||
arm::setup();
|
||||
|
@ -162,6 +162,25 @@ pub(crate) mod arm {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(all(target_os = "windows", target_arch = "aarch64"))]
|
||||
pub fn setup() {
|
||||
// We do not need to check for the presence of NEON, as Armv8-A always has it
|
||||
let mut features = NEON.mask;
|
||||
|
||||
let result = unsafe {
|
||||
winapi::um::processthreadsapi::IsProcessorFeaturePresent(
|
||||
winapi::um::winnt::PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE,
|
||||
)
|
||||
};
|
||||
|
||||
if result != 0 {
|
||||
// These are all covered by one call in Windows
|
||||
features |= AES.mask;
|
||||
features |= PMULL.mask;
|
||||
features |= SHA256.mask;
|
||||
}
|
||||
}
|
||||
|
||||
macro_rules! features {
|
||||
{
|
||||
$(
|
||||
|
@ -237,7 +256,7 @@ pub(crate) mod arm {
|
|||
}
|
||||
|
||||
#[cfg(all(
|
||||
any(target_os = "android", target_os = "fuchsia", target_os = "linux"),
|
||||
any(target_os = "android", target_os = "fuchsia", target_os = "linux", target_os = "windows"),
|
||||
any(target_arch = "arm", target_arch = "aarch64")
|
||||
))]
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue