From 12958bbfaf75b473da005bbb5b27520c4a88de56 Mon Sep 17 00:00:00 2001 From: Georg Buschbeck Date: Sat, 14 Dec 2024 17:22:55 +0100 Subject: [PATCH] support for 32bit environenments like xtensa, mips .. Signed-off-by: Georg Buschbeck --- Cargo.toml | 3 +++ src/atomic64.rs | 5 +++++ src/histogram.rs | 7 ++++++- src/timer.rs | 6 +++++- 4 files changed, 19 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index a62b6296..3b9bed95 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -32,6 +32,9 @@ memchr = "^2.3" reqwest = { version = "^0.12", features = ["blocking"], optional = true } thiserror = "^1.0" +[target.'cfg(any(target_arch = "powerpc", target_arch = "mips", target_arch = "xtensa"))'.dependencies] +portable-atomic = "1.10.0" + [target.'cfg(target_os = "linux")'.dependencies] procfs = { version = "^0.16", optional = true, default-features = false } diff --git a/src/atomic64.rs b/src/atomic64.rs index 0c653c51..85a33aea 100644 --- a/src/atomic64.rs +++ b/src/atomic64.rs @@ -4,8 +4,13 @@ use std::cmp::*; use std::f64; use std::ops::*; +#[cfg(not(any(target_arch = "mips", target_arch = "powerpc", target_arch = "xtensa")))] use std::sync::atomic::{AtomicI64 as StdAtomicI64, AtomicU64 as StdAtomicU64, Ordering}; +#[cfg(any(target_arch = "mips", target_arch = "powerpc", target_arch = "xtensa"))] +use portable_atomic::{AtomicI64 as StdAtomicI64, AtomicU64 as StdAtomicU64, Ordering}; + + /// An interface for numbers. Used to generically model float metrics and integer metrics, i.e. /// [`Counter`](crate::Counter) and [`IntCounter`](crate::Counter). pub trait Number: diff --git a/src/histogram.rs b/src/histogram.rs index 78480541..dd8adfa7 100644 --- a/src/histogram.rs +++ b/src/histogram.rs @@ -5,10 +5,15 @@ use std::cell::RefCell; use std::collections::HashMap; use std::convert::From; use std::sync::{ - atomic::{AtomicU64 as StdAtomicU64, Ordering}, Arc, Mutex, }; + +#[cfg(not(any(target_arch = "mips", target_arch = "powerpc", target_arch = "xtensa")))] +use std::sync::atomic::{AtomicU64 as StdAtomicU64, Ordering}; + use std::time::{Duration, Instant as StdInstant}; +#[cfg(any(target_arch = "mips", target_arch = "powerpc", target_arch = "xtensa"))] +use portable_atomic::{AtomicU64 as StdAtomicU64, Ordering}; use crate::atomic64::{Atomic, AtomicF64, AtomicU64}; use crate::desc::{Desc, Describer}; diff --git a/src/timer.rs b/src/timer.rs index 7530c72d..b60531ef 100644 --- a/src/timer.rs +++ b/src/timer.rs @@ -1,4 +1,8 @@ -use std::sync::atomic::{AtomicBool, AtomicU64, Ordering}; +#[cfg(not(any(target_arch = "mips", target_arch = "powerpc", target_arch = "xtensa")))] +use std::sync::atomic::{AtomicBool,AtomicU64, Ordering}; +#[cfg(any(target_arch = "mips", target_arch = "powerpc", target_arch = "xtensa"))] +use portable_atomic::{AtomicBool,AtomicU64, Ordering}; + use std::thread; use std::time::{Duration, Instant};