Skip to content
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

Merged
merged 4 commits into from
Feb 8, 2019
Merged

Build all platforms #1247

merged 4 commits into from
Feb 8, 2019

Conversation

gnzlbg
Copy link
Contributor

@gnzlbg gnzlbg commented Feb 7, 2019

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.

@rust-highfive
Copy link

r? @alexcrichton

(rust_highfive has picked a reviewer for you, use r? to override)

@bors
Copy link
Contributor

bors commented Feb 7, 2019

☔ The latest upstream changes (presumably #1246) made this pull request unmergeable. Please resolve the merge conflicts.

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 .
@gnzlbg
Copy link
Contributor Author

gnzlbg commented Feb 7, 2019

cc @Susurrus I had to disable some extra_traits in targets in which they were failing to compile (due to too large arrays, repr(packed), etc.). These should be easy to find and fix, i've opened #1243 to track some of these.

README.md Outdated Show resolved Hide resolved
@gnzlbg
Copy link
Contributor Author

gnzlbg commented Feb 8, 2019

@bors: r+

@bors
Copy link
Contributor

bors commented Feb 8, 2019

📌 Commit 5c796c5 has been approved by gnzlbg

bors added a commit that referenced this pull request Feb 8, 2019
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.
@bors
Copy link
Contributor

bors commented Feb 8, 2019

⌛ Testing commit 5c796c5 with merge 0b834ed...

@bors
Copy link
Contributor

bors commented Feb 8, 2019

💔 Test failed - checks-travis

@gnzlbg
Copy link
Contributor Author

gnzlbg commented Feb 8, 2019

@bors: retry

@bors
Copy link
Contributor

bors commented Feb 8, 2019

⌛ Testing commit 5c796c5 with merge ff97bdb...

bors added a commit that referenced this pull request Feb 8, 2019
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.
@gnzlbg
Copy link
Contributor Author

gnzlbg commented Feb 8, 2019

I'm merging this because the extra_traits PR broke the library in a couple of platforms and this PR fixes those and ensures that they don't break again. We can iterate on this on master before the next release.

@bors
Copy link
Contributor

bors commented Feb 8, 2019

☀️ Test successful - checks-cirrus, checks-travis, status-appveyor
Approved by: gnzlbg
Pushing ff97bdb to master...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants