-
Notifications
You must be signed in to change notification settings - Fork 1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Build all platforms #1247
Build all platforms #1247
Conversation
(rust_highfive has picked a reviewer for you, use r? to override) |
☔ The latest upstream changes (presumably #1246) made this pull request unmergeable. Please resolve the merge conflicts. |
d3c6173
to
ea00fcc
Compare
This commit adds a `ci/build.sh` script that checks that libc builds correctly for some common configurations (`--no-default-features`, `default`, `extra_traits`) on most targets supported by Rust since Rust 1.13.0 (the oldest Rust version that libc supports). The build matrix is refactored into two stages. The first stage is called `tools-and-build-and-tier1` and it aims to discover issues quickly by running the documentation and linter builds, as well as checking that the library builds correctly on all targets in all supported channels and "problematic" Rust versions; Rust versions adding major new features like `repr(align)`, `union`, etc. This first stage also runs libc-test for the tier-1 targets on linux and osx. These builds finish quickly because no emulation is necessary. The second stage is called `tier2` and it runs libc-test for all other targets for which we are currently able to do so. Closes rust-lang#1229 .
This PR fixes the build on all platforms and all Rust version down to the minimum Rust version supported by libc: Rust 1.13.0. The `build.rs` is extended with logic to detect the newer Rust features used by `libc` since Rust 1.13.0: * Rust 1.19.0: `untagged_unions`. APIs using untagged unions are gated on `cfg(libc_unions)` and not available on older Rust versions. * Rust 1.25.0: `repr(align)`. Because `repr(align)` cannot be parsed by older Rust versions, all uses of `repr(align)` are split into `align.rs` and `no_align.rs` modules, which are gated on the `cfg(libc_align)` at the top level. These modules sometimes contain macros that are expanded at the top level to avoid privacy issues (`pub(crate)` is not available in older Rust versions). Closes rust-lang#1242 . * Rust : `const` `mem::size_of`. These uses are worked around with hardcoded constants on older Rust versions. Also, `repr(packed)` structs cannot automatically `derive()` some traits like `Debug`. These have been moved into `s_no_extra_traits!` and the lint of missing `Debug` implementations on public items is silenced for these. We can manually implement the `extra_traits` for these in a follow up PR. This is tracked in rust-lang#1243. Also, `extra_traits` does not enable `align` manually anymore. Since `f64::to_bits` is not available in older Rust versions, its usage has been replaced with a `transmute` to an `u64` which is what that method does under the hood. Closes rust-lang#1232 .
ea00fcc
to
ca12725
Compare
@bors: r+ |
📌 Commit 5c796c5 has been approved by |
Build all platforms cc @alexcrichton this needs a more thorough review. It turns out libc failed to build on a lot of older Rust versions for various reasons and platforms, so it took a while to fix the build on all of them.
💔 Test failed - checks-travis |
@bors: retry |
Build all platforms cc @alexcrichton this needs a more thorough review. It turns out libc failed to build on a lot of older Rust versions for various reasons and platforms, so it took a while to fix the build on all of them.
I'm merging this because the |
☀️ Test successful - checks-cirrus, checks-travis, status-appveyor |
cc @alexcrichton this needs a more thorough review. It turns out libc failed to build on a lot of older Rust versions for various reasons and platforms, so it took a while to fix the build on all of them.