69 Commits

Author SHA1 Message Date
Trevor Gross
259e544192 Switch musl from a script download to a submodule
Rather than keeping a script that downloads the tarball, we can just add
musl as a submodule and let git handle the synchronizatoin. Do so here.
2025-01-28 00:39:45 -06:00
Trevor Gross
f0b932e723 Rework the available Cargo profiles
Currently the default release profile enables LTO and single CGU builds,
which is very slow to build. Most tests are better run with
optimizations enabled since it allows testing a much larger number of
inputs, so it is inconvenient that building can sometimes take
significantly longer than the tests.

Remedy this by doing the following:

* Move the existing `release` profile to `release-opt`.
* With the above, the default `release` profile is untouched (16 CGUs
  and thin local LTO).
* `release-checked` inherits `release`, so no LTO or single CGU.

This means that the simple `cargo test --release` becomes much faster
for local development. We are able to enable the other profiles as
needed in CI.

Tests should ideally still be run with `--profile release-checked` to
ensure there are no debug assetions or unexpected wrapping math hit.

`no-panic` still needs a single CGU, so must be run with `--profile
release-opt`. Since it is not possible to detect CGU or profilel
configuration from within build scripts, the `ENSURE_NO_PANIC`
environment variable must now always be set.
2025-01-25 07:38:15 +00:00
Trevor Gross
6ac9c14933 Add a retry to the musl download
This download has occasionally been failing in CI recently. Add a retry
so this is less likely to cause the workflow to fail.
2025-01-21 22:02:48 -05:00
Trevor Gross
b3d57f8c28 Remove trailing whitespace in scripts, run JuliaFormatter 2025-01-21 20:30:11 -05:00
Trevor Gross
d3328a0dab Add a way to ignore benchmark regression checks
Introduce a way to ignore the results of icount regression tests, by
specifying `allow-regressions` in the pull request body. This should
apply to both pull requests and the merges based on them, since `gh pr
view` automatically handles both.
2025-01-21 07:58:05 +00:00
Trevor Gross
ba0cfe58dd Run icount benchmarks once with softfloat and once with hardfloat
These benchmarks are fast to run, so the time cost here is pretty
minimal. Running softfloat benchmarks just ensures that we don't e.g.
test the performance of `_mm_sqrt_ss` rather than our implementation,
and running without softfloat gives us a way to see the effect of arch
intrinsics.
2025-01-21 07:58:05 +00:00
Trevor Gross
f9041943f1 Switch to the arm-linux runner and enable MPFR
The free arm64 Linux runners are now available [1]. Switch to using this
image in CI, and enable tests against MPFR since this is now a native
platform.

[1]: https://github.blog/changelog/2025-01-16-linux-arm64-hosted-runners-now-available-for-free-in-public-repositories-public-preview/
2025-01-20 16:28:39 -05:00
Trevor Gross
f39af6cb97 Remove the limit for querying a baseline
`--limit=1` seems to apply before `jq` filtering, meaning our
`WORKFLOW_NAME` ("CI") workflow may not appear in the input to the jq
query. Removing `--limit` provides a default amount of inputs that jq
can then filter from, so this works better.
2025-01-16 15:24:37 -06:00
Trevor Gross
cdb1e680e0 Run iai-callgrind benchmarks in CI
Add support in `ci-util.py` for finding the most recent baseline and
downloading it, which new tests can then be compared against.

Arbitrarily select nightly-2025-01-16 as the rustc version to pin to in
benchmarks.
2025-01-16 09:07:46 +00:00
Trevor Gross
b251f74843 Pass --max-fail to nextest so it doesn't fail fast 2025-01-15 00:57:23 +00:00
Trevor Gross
f63ef37218 Slightly restructure ci/calculate-exhaustive-matrix.py
Change this script into a generic CI utility that we will be able to
expand in the future.
2025-01-15 00:57:23 +00:00
Trevor Gross
26df5d6689 Use cargo-nextest for running tests in CI
The test suite for this repo has quite a lot of tests, and it is
difficult to tell which contribute the most to the long CI runtime.
libtest does have an unstable flag to report test times, but that is
inconvenient to use because it needs to be passed only to libtest
binaries.

Switch to cargo-nextest [1] which provides time reporting and, overall,
a better test UI. It may also improve test runtime, though this seems
unlikely since we have larger test binaries with many small tests
(nextest benefits the most when there are larger binaries that can be
run in parallel).

For anyone running locally without, `run.sh` should still fall back to
`cargo test` if `cargo-nextest` is not available.

This diff includes some cleanup and consistency changes to other
CI-related files.

[1]: https://nexte.st
2025-01-13 21:32:54 -05:00
Trevor Gross
bcd9d8a5c3 Reduce indentation in run.sh using early return 2025-01-13 23:01:48 +00:00
Trevor Gross
23c9f74b58 Disable util and libm-macros for optimized tests
These crates take time building in CI, especially with the release
profile having LTO enabled, but there isn't really any reason to test
them with different features or in release mode. Disable this to save
some CI runtime.
2025-01-13 05:54:43 -05:00
Trevor Gross
3de783c40f Enable build-mpfr and build-musl by default
Most users who are developing this crate are likely running on a Unix
system, since there isn't much to test against otherwise. For
convenience, enable the features required to run these tests by default.
2025-01-13 03:53:46 +00:00
Trevor Gross
504616d5a0 Rename the test-multiprecision feature to build-mpfr
Currently the features that control what we test against are
`build-musl` and `test-multiprecision`. I didn't name them very
consistently and there isn't really any reason for that.

Rename `test-multiprecision` to `build-mpfr` to better reflect what it
actually does and to be more consistent with `build-musl`.
2025-01-13 03:25:19 +00:00
Trevor Gross
5c94cce6b2 Add a release-checked profile with debug and overflow assertions
A failing debug assertion or overflow without correctly wrapping or
saturating is a bug, but the `debug` profile that has these enabled does
not run enough test cases to hit edge cases that may trigger these. Add
a new `release-checked` profile that enables debug assertions and
overflow checks. This seems to only extend per-function test time by a
few seconds (or around a minute on longer extensive tests), so enable
this as the default on CI.

In order to ensure `no_panic` still gets checked, add a build-only step
to CI.
2025-01-11 20:35:30 -05:00
Trevor Gross
5e13eeca01 Reorder tests in run.sh
I do not believe Cargo separately caches crates with different sets of
features enabled. So, ensuring that tests run with `unstable-intrinsics`
are always grouped should slightly reduce runtime.

As an added benefit, all the debug mode tests run first so initial
feedback is available faster.
2025-01-11 18:48:08 -05:00
Trevor Gross
a9407010b4 Enable MPFR tests on i586
MPFR does build and run correctly without SSE, but requires
`force-cross` be enabled.
2025-01-06 15:41:39 -05:00
Trevor Gross
f8a184e6af Run extensive tests in CI when relevant files change
Add a CI job with a dynamically calculated matrix that runs extensive
jobs on changed files. This makes use of the new
`function-definitions.json` file to determine which changed files
require full tests for a routine to run.
2025-01-06 08:56:22 +00:00
Trevor Gross
489524413b Forward the CI environment variable when running in Docker
We want to be able to adjust our configuration based on whether we are
running in CI, propagate this so our tests can use it.
2025-01-01 10:56:56 +00:00
Trevor Gross
2323d3a2e3 Always enable unstable-float in CI
Since these add new API but do not affect runtime, we can enable it for
all tests that run with nightly.
2024-12-29 07:47:21 +00:00
Trevor Gross
76f37552e7 Remove tests against system musl
We now have tests against our custom-built musl as well as tests against
MPFR. The tests against system musl covers less than those against
custom-built musl, and are less portable; there isn't much benefit to
keeping them around so just remove them.
2024-12-22 12:39:27 +00:00
Trevor Gross
659cdcad33 Enable clippy for libm in CI 2024-11-01 06:42:39 -05:00
Trevor Gross
be72d14ed5 Check benchmarks in CI 2024-10-31 22:40:30 -05:00
WANG Rui
baae082fc5 ci: add support for loongarch64-unknown-linux-gnu 2024-10-31 13:20:07 -05:00
Trevor Gross
6d1033e7fc Add an "arch" Cargo feature that is on by default
Introduce a Cargo feature to enable or disable architecture-specific
features (SIMD, assembly), which is on by default. This allows for more
fine grained control compared to relying on the `force-soft-floats`
feature.

Similar to "unstable-intrinsics", introduce a build.rs config option for
`unstable-intrinsics AND NOT force-soft-floats`, which makes this easier
to work with in code.

Effectively, this allows moving our non-additive Cargo feature
(force-soft-floats) to a positive one by default, allowing for an
override when needed.
2024-10-28 22:12:13 -05:00
Trevor Gross
54c8ae0980 Run tests against MPFR on CI where possible
This effectively gives us tests against infinite-precision results on
MacOS and x86+sse Linux.
2024-10-28 21:29:31 -05:00
Trevor Gross
3502d8eff6 Combine the WASM CI job with the others
There isn't any reason to be distinct here, and it would be better to
test with all feature configurations in run.sh anyway.
2024-10-28 20:53:35 -05:00
Trevor Gross
e6f7053c2e Replace feature = "unstable-intrinsics" with intrinsics_enabled
We currently have a non-additive feature, "force-soft-floats", and we
will need to gain another "no-f16-f128". This makes `cfg` usage in code
somewhat confusing and redundant.

Use `build.rs` to figure out if "unstable-intrinsics" is enabled while
"force-soft-floats" is not enabled and if so, emit a cfg
`intrinsics_enabled`. This is cleaner to use and should make adding more
features easier to reason about.

Also use this as an opportunity to eliminate the build.rs from the
compiler-builtins test crate, replaced with the `[lints]` table in
Cargo.toml.
2024-10-28 18:37:09 -05:00
Trevor Gross
66f8906862 Move the existing "unstable" feature to "unstable-intrinsics"
Currently there is a single feature called "unstable" that is used to
control whether intrinsics may be called. In anticipation of adding
other unstable features that we will want to control separately, create
a new feature called "unstable-intrinsics" that is enabled by
"unstable". Then move everything gated by "unstable" to
"unstable-intrinsics".
2024-10-28 18:37:09 -05:00
Trevor Gross
ebb2dc11d8 Reduce the number of iterations on emulated aarch64 Linux
CI for aarch64 Linux is significantly slower than the others. Adjust how
iteration selection is done to better handle this case, which also
simplifies things.

Also set the `EMULATED` environment variable in Docker to be more
accurate, and reindents run-docker.sh.
2024-10-28 14:04:19 -05:00
Trevor Gross
f5d30ecc3b Enable more targets on CI
This brings the targets tested here in line with those tested in
`compiler-builtins`.
2024-10-28 12:59:38 -05:00
Trevor Gross
31d0132ac1 Add dockerfiles for i586, riscv, and thumb
These targets are tested in `compiler-builtins`, but not yet `libm`. Add
dockerfiles to prepare for this.
2024-10-28 12:59:38 -05:00
Trevor Gross
5fc3068762 Add a script for downloading musl 2024-10-28 12:59:38 -05:00
Trevor Gross
a68516ed6a Rename the musl-bitwise-tests feature to test-musl-serialized
We will have more test features in the near future, and it would be nice
for them all to have a common `test-` prefix. Reverse the existing
feature so this is the case.
2024-10-25 20:57:19 -04:00
Trevor Gross
d82eb88722 Fix shellcheck warnings in scripts 2024-10-06 13:44:25 -05:00
Trevor Gross
d0f1dd6010 Set target-specific AR and CC arguments
The Rust `cc` crate reads these, so make sure they are set for when we
start making use of `cc`.
2024-10-06 00:18:00 -05:00
Trevor Gross
0be441d5ad Update Ubuntu images to 24.04
We don't have any specific reason to stay on 18.04, so upgrade to the
latest LTS version.
2024-10-06 00:10:12 -05:00
Trevor Gross
c236051681 Rename the musl-reference-tests feature to musl-bitwise-tests
The plan is to add more test related features that could be considered
"reference tests". Rename the feature here to avoid future confusion.
2024-10-05 21:42:28 -05:00
Trevor Gross
f59dd82cca Move musl-reference-tests to a new libm-test crate
There isn't any reason for this feature to be exposed or part of the
build script. Move it to a separate crate.

We will also want more tests that require some support functions; this
will create a place for them.
2024-10-05 15:54:39 -05:00
Trevor Gross
c7eadedd5f Deny warnings in CI
The main crate already has `#![deny(warnings)]`. Set RUSTFLAGS in CI to
enforce this for other crates in the workspace.
2024-05-06 04:51:41 -05:00
Amanieu d'Antras
4f5d1524fd Fix no-panic 2022-01-03 21:32:08 +01:00
Amanieu d'Antras
e36ee3b4b7 Disable powerpc64 tests which were broken by the LLVM 13 upgrade 2022-01-03 19:00:31 +01:00
Alex Crichton
fda4a8992f Migrate from azure pipelines to Github actions (#226)
Should make user management easier and also helps follow the repository
when it's renamed.
2019-09-10 10:07:17 -05:00
Lokathor
de3480c3c2 Update run.sh 2019-09-05 08:36:08 -06:00
Lokathor
2e3ba17f9d there are no longer any default features 2019-09-05 08:32:05 -06:00
gnzlbg
53c6687ef5 Move benchmarks into its own crate 2019-07-02 08:22:03 +02:00
Alex Crichton
f9b3247165 Update Rust install task 2019-06-13 09:21:50 -07:00
Alex Crichton
13a350ca5d Attempt to fix CI 2019-06-05 12:17:01 -07:00