From 97c84d7e283fddd500ea8933691a6bb452339901 Mon Sep 17 00:00:00 2001 From: pinkforest <36498018+pinkforest@users.noreply.github.com> Date: Fri, 9 Dec 2022 21:53:02 +1100 Subject: [PATCH] Set well known defaults for wasm and arm As discussed in #456 this sets well known defaults for cfg(target_family = "wasm") and cfg(target_arch = "arm") for 64 bit arithmetric via cfg(curve25519_dalek_bits = "64") --- CHANGELOG.md | 1 + Cargo.toml | 3 +++ build.rs | 37 ++++++++++++++++++++++++++----------- 3 files changed, 30 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 841d3809f..cb1572d85 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ major series. #### Other changes +* Set well known defaults for wasm and arm * Update Maintenance Policies for SemVer * Migrate documentation to docs.rs hosted * Fix backend documentation generation diff --git a/Cargo.toml b/Cargo.toml index 17ba12ea8..8b7db7831 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -38,6 +38,9 @@ hex = "0.4.2" rand = "0.8" rand_core = { version = "0.6", default-features = false, features = ["getrandom"] } +[build-dependencies] +platforms = "3.0.2" + [[bench]] name = "dalek_benchmarks" harness = false diff --git a/build.rs b/build.rs index cb896efd6..4399cbf73 100644 --- a/build.rs +++ b/build.rs @@ -1,15 +1,30 @@ //! This selects the curve25519_dalek_bits either by default from target_pointer_width or explicitly set +use platforms::target::{Arch, PointerWidth}; + +#[allow(non_camel_case_types)] +enum DalekBits { + Dalek32, + Dalek64, +} + fn main() { - #[cfg(any( - all(not(target_pointer_width = "64"), not(curve25519_dalek_bits = "64")), - curve25519_dalek_bits = "32" - ))] - println!("cargo:rustc-cfg=curve25519_dalek_bits=\"32\""); - - #[cfg(any( - all(target_pointer_width = "64", not(curve25519_dalek_bits = "32")), - curve25519_dalek_bits = "64" - ))] - println!("cargo:rustc-cfg=curve25519_dalek_bits=\"64\""); + let target_triplet = std::env::var("TARGET").unwrap(); + let platform = platforms::Platform::find(&target_triplet).unwrap(); + + let curve25519_dalek_bits = match platform.target_arch { + Arch::Arm => DalekBits::Dalek64, + //TODO: Needs tests + benchmarks to back it up across + //Arch::Wasm32 => DalekBits::Dalek64, + _ => match platform.target_pointer_width { + PointerWidth::U64 => DalekBits::Dalek64, + PointerWidth::U32 => DalekBits::Dalek32, + _ => DalekBits::Dalek32, + }, + }; + + match curve25519_dalek_bits { + DalekBits::Dalek64 => println!("cargo:rustc-cfg=curve25519_dalek_bits=\"64\""), + DalekBits::Dalek32 => println!("cargo:rustc-cfg=curve25519_dalek_bits=\"32\""), + } }