
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.
libm
A port of MUSL's libm to Rust.
Goals
The short term goal of this library is to enable math support (e.g. sin
, atan2
) for the
wasm32-unknown-unknown
target (cf. rust-lang/compiler-builtins). The longer
term goal is to enable math support in the core
crate.
Already usable
This crate is on crates.io and can be used today in stable #![no_std]
programs.
The API documentation can be found here.
Benchmark
The benchmarks are located in crates/libm-bench
and require a nightly Rust toolchain.
To run all benchmarks:
cargo +nightly bench --all
Contributing
Please check CONTRIBUTING.md
Minimum Rust version policy
This crate supports rustc 1.63 and newer.
License
Usage is licensed under the MIT license (LICENSE-MIT or https://opensource.org/licenses/MIT).
Contribution
Contributions are licensed under both the MIT license and the Apache License, Version 2.0 (LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0). Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as mentioned, without any additional terms or conditions.
See LICENSE.txt
for full details.