diff --git a/ci/verify-build.py b/ci/verify-build.py index 2d57bd81bcea..7e52e749440b 100755 --- a/ci/verify-build.py +++ b/ci/verify-build.py @@ -147,7 +147,8 @@ def __post_init__(self): Target("armv7-wrs-vxworks-eabihf", dist=False), Target("armv7r-none-eabihf", dist=False), Target("armv7s-apple-ios", dist=False), - Target("hexagon-unknown-linux-musl", dist=False), + # FIXME(hexagon): hits "error: symbol 'fma' is already defined" error + # Target("hexagon-unknown-linux-musl", dist=False), Target("i386-apple-ios", dist=False), Target("i686-apple-darwin", dist=False), Target("i686-unknown-haiku", dist=False), diff --git a/src/new/glibc/mod.rs b/src/new/glibc/mod.rs index 9c4c11412dcc..534aba86a493 100644 --- a/src/new/glibc/mod.rs +++ b/src/new/glibc/mod.rs @@ -2,5 +2,24 @@ //! //! * Headers: (official) //! * Headers: (mirror) +//! +//! This module structure is modeled after glibc's source tree. Its build system selects headers +//! from different locations based on the platform, which we mimic here with reexports. + +/// Source directory: `posix/` +/// +/// +mod posix { + pub(crate) mod unistd; +} + +/// Source directory: `sysdeps/` +/// +/// +mod sysdeps { + pub(crate) mod unix; +} -pub(crate) mod unistd; +pub(crate) use posix::*; +#[cfg(target_os = "linux")] +pub(crate) use sysdeps::unix::linux::*; diff --git a/src/new/glibc/unistd.rs b/src/new/glibc/posix/unistd.rs similarity index 64% rename from src/new/glibc/unistd.rs rename to src/new/glibc/posix/unistd.rs index 8d55ee582331..907066c458df 100644 --- a/src/new/glibc/unistd.rs +++ b/src/new/glibc/posix/unistd.rs @@ -1,4 +1,6 @@ //! Header: `unistd.h` +//! +//! pub use crate::new::common::posix::unistd::{ STDERR_FILENO, diff --git a/src/new/glibc/sysdeps/unix/linux/mod.rs b/src/new/glibc/sysdeps/unix/linux/mod.rs new file mode 100644 index 000000000000..0ecee596c5b1 --- /dev/null +++ b/src/new/glibc/sysdeps/unix/linux/mod.rs @@ -0,0 +1,10 @@ +//! Source directory: `sysdeps/unix/sysv/linux` (the `sysv` is flattened). +//! +//! + +/// Directory: `net/` +/// +/// Source directory: `sysdeps/unix/sysv/linux/net` +pub(crate) mod net { + pub(crate) mod route; +} diff --git a/src/new/glibc/sysdeps/unix/linux/net/route.rs b/src/new/glibc/sysdeps/unix/linux/net/route.rs new file mode 100644 index 000000000000..2851451652df --- /dev/null +++ b/src/new/glibc/sysdeps/unix/linux/net/route.rs @@ -0,0 +1,30 @@ +//! Header: `net/route.h` +//! +//! Source header: `sysdeps/unix/sysv/linux/net/route.h` +//! + +use crate::prelude::*; + +s! { + pub struct rtentry { + pub rt_pad1: c_ulong, + pub rt_dst: crate::sockaddr, + pub rt_gateway: crate::sockaddr, + pub rt_genmask: crate::sockaddr, + pub rt_flags: c_ushort, + pub rt_pad2: c_short, + pub rt_pad3: c_ulong, + pub rt_tos: c_uchar, + pub rt_class: c_uchar, + // FIXME(1.0): private padding fields + #[cfg(target_pointer_width = "64")] + pub rt_pad4: [c_short; 3usize], + #[cfg(not(target_pointer_width = "64"))] + pub rt_pad4: c_short, + pub rt_metric: c_short, + pub rt_dev: *mut c_char, + pub rt_mtu: c_ulong, + pub rt_window: c_ulong, + pub rt_irtt: c_ushort, + } +} diff --git a/src/new/glibc/sysdeps/unix/mod.rs b/src/new/glibc/sysdeps/unix/mod.rs new file mode 100644 index 000000000000..55a895d4d0de --- /dev/null +++ b/src/new/glibc/sysdeps/unix/mod.rs @@ -0,0 +1,6 @@ +//! Source directory: `sysdeps/unix/` +//! +//! + +#[cfg(target_os = "linux")] +pub(crate) mod linux; diff --git a/src/new/mod.rs b/src/new/mod.rs index f83339ecf0fd..35a493df4b15 100644 --- a/src/new/mod.rs +++ b/src/new/mod.rs @@ -177,6 +177,8 @@ cfg_if! { pub use linux::can::raw::*; pub use linux::can::*; pub use linux::keyctl::*; + #[cfg(target_env = "gnu")] + pub use net::route::*; } else if #[cfg(target_vendor = "apple")] { pub use signal::*; } diff --git a/src/unix/linux_like/linux/gnu/mod.rs b/src/unix/linux_like/linux/gnu/mod.rs index 206d352a67b7..93f3a94d94cf 100644 --- a/src/unix/linux_like/linux/gnu/mod.rs +++ b/src/unix/linux_like/linux/gnu/mod.rs @@ -131,27 +131,6 @@ s! { pub nm_gid: u32, } - pub struct rtentry { - pub rt_pad1: c_ulong, - pub rt_dst: crate::sockaddr, - pub rt_gateway: crate::sockaddr, - pub rt_genmask: crate::sockaddr, - pub rt_flags: c_ushort, - pub rt_pad2: c_short, - pub rt_pad3: c_ulong, - pub rt_tos: c_uchar, - pub rt_class: c_uchar, - #[cfg(target_pointer_width = "64")] - pub rt_pad4: [c_short; 3usize], - #[cfg(not(target_pointer_width = "64"))] - pub rt_pad4: c_short, - pub rt_metric: c_short, - pub rt_dev: *mut c_char, - pub rt_mtu: c_ulong, - pub rt_window: c_ulong, - pub rt_irtt: c_ushort, - } - pub struct ntptimeval { pub time: crate::timeval, pub maxerror: c_long,