From 40c9c14ea81856b66129ea08de90a01dccea42b7 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Thu, 15 Jan 2026 18:31:47 -0700 Subject: [PATCH] Revert "Convert strtold to Rust" This reverts commit 08485648f62b722a2b8a459afb48c3002fa4b106. --- build.rs | 36 +++++++++++++++++++++++++++++++++ src/c/stdlib.c | 5 +++++ src/header/stdlib/cbindgen.toml | 3 --- src/header/stdlib/mod.rs | 6 +----- src/lib.rs | 1 - src/platform/types.rs | 1 - 6 files changed, 42 insertions(+), 10 deletions(-) create mode 100644 build.rs create mode 100644 src/c/stdlib.c diff --git a/build.rs b/build.rs new file mode 100644 index 0000000000..efdfda1143 --- /dev/null +++ b/build.rs @@ -0,0 +1,36 @@ +extern crate cc; + +use std::{env, fs}; + +fn get_target() -> String { + env::var("TARGET").unwrap_or( + option_env!("TARGET").map_or("x86_64-unknown-redox".to_string(), |x| x.to_string()), + ) +} + +fn main() { + let _crate_dir = env::var("CARGO_MANIFEST_DIR").expect("CARGO_MANIFEST_DIR not set"); + let target = get_target(); + + println!("cargo:rerun-if-changed=src/c"); + + let mut cc_builder = &mut cc::Build::new(); + + cc_builder = cc_builder.flag("-nostdinc").flag("-nostdlib"); + + if target.starts_with("aarch64") { + cc_builder = cc_builder.flag("-mno-outline-atomics") + } + + cc_builder + .flag("-fno-stack-protector") + .flag("-Wno-expansion-to-defined") + .files( + fs::read_dir("src/c") + .expect("src/c directory missing") + .map(|res| res.expect("read_dir error").path()), + ) + .compile("relibc_c"); + + println!("cargo:rustc-link-lib=static=relibc_c"); +} diff --git a/src/c/stdlib.c b/src/c/stdlib.c new file mode 100644 index 0000000000..39e4fb0f44 --- /dev/null +++ b/src/c/stdlib.c @@ -0,0 +1,5 @@ +double strtod(const char *nptr, char **endptr); + +long double strtold(const char *nptr, char **endptr) { + return (long double)strtod(nptr, endptr); +} diff --git a/src/header/stdlib/cbindgen.toml b/src/header/stdlib/cbindgen.toml index 5f6c7a777c..d5bcb23679 100644 --- a/src/header/stdlib/cbindgen.toml +++ b/src/header/stdlib/cbindgen.toml @@ -5,8 +5,5 @@ style = "Type" no_includes = true cpp_compat = true -[export.rename] -"c_longdouble" = "long double" - [enum] prefix_with_name = true diff --git a/src/header/stdlib/mod.rs b/src/header/stdlib/mod.rs index 6d44636165..cef9cdcdd1 100644 --- a/src/header/stdlib/mod.rs +++ b/src/header/stdlib/mod.rs @@ -1479,11 +1479,7 @@ pub unsafe extern "C" fn strtol(s: *const c_char, endptr: *mut *mut c_char, base ) } -/// See . -#[unsafe(no_mangle)] -pub unsafe extern "C" fn strtold(s: *const c_char, endptr: *mut *mut c_char) -> c_longdouble { - strto_float_impl!(c_longdouble, s, endptr) -} +// TODO: strtold(), when long double is available /// See . #[unsafe(no_mangle)] diff --git a/src/lib.rs b/src/lib.rs index 851dbdf1f6..3ea46c6a6b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -16,7 +16,6 @@ #![feature(asm_const)] #![feature(c_variadic)] #![feature(core_intrinsics)] -#![feature(f128)] #![feature(macro_derive)] #![feature(maybe_uninit_slice)] #![feature(lang_items)] diff --git a/src/platform/types.rs b/src/platform/types.rs index e9b10f8f7b..253f59d94a 100644 --- a/src/platform/types.rs +++ b/src/platform/types.rs @@ -31,7 +31,6 @@ pub type c_int = i32; pub type c_uint = u32; pub type c_float = f32; pub type c_double = f64; -pub type c_longdouble = f128; pub type c_longlong = i64; pub type c_ulonglong = u64; pub type intmax_t = i64;