4abf179b14
Add opt-for-size core lib feature flag Adds a feature flag to the core library that enables the possibility to have smaller implementations for certain algorithms. So far, the core lib has traded performance for binary size. This is likely what most people want since they have big simd-capable machines. However, people on small machines, like embedded devices, don't enjoy the potential speedup of the bigger algorithms, but do have to pay for them. These microcontrollers often only have 16-1024kB of flash memory. This PR is the result of some talks with project members like `@Amanieu` at RustNL. There are some open questions of how this is eventually stabilized, but it's a similar question as with the existing `panic_immediate_abort` feature. Speaking as someone from the embedded side, we'd rather have this unstable for a while as opposed to not having it at all. In the meantime we can try to use it and also add additional PRs to the core lib that uses the feature flag in areas where we find benefit. Open questions from my side: - Is this a good feature name? - `panic_immediate_abort` is fairly verbose, so I went with something equally verbose - It's easy to refactor later - I've added the feature to `std` and `alloc` as well as they might benefit too. Do we agree? - I expect these to get less usage out of the flag since most size-constraint projects don't use these libraries often.
100 lines
4.2 KiB
TOML
100 lines
4.2 KiB
TOML
cargo-features = ["public-dependency"]
|
|
|
|
[package]
|
|
name = "std"
|
|
version = "0.0.0"
|
|
license = "MIT OR Apache-2.0"
|
|
repository = "https://github.com/rust-lang/rust.git"
|
|
description = "The Rust Standard Library"
|
|
edition = "2021"
|
|
|
|
[lib]
|
|
crate-type = ["dylib", "rlib"]
|
|
|
|
[dependencies]
|
|
alloc = { path = "../alloc", public = true }
|
|
cfg-if = { version = "1.0", features = ['rustc-dep-of-std'] }
|
|
panic_unwind = { path = "../panic_unwind", optional = true }
|
|
panic_abort = { path = "../panic_abort" }
|
|
core = { path = "../core", public = true }
|
|
compiler_builtins = { version = "0.1.105" }
|
|
profiler_builtins = { path = "../profiler_builtins", optional = true }
|
|
unwind = { path = "../unwind" }
|
|
hashbrown = { version = "0.14", default-features = false, features = ['rustc-dep-of-std'] }
|
|
std_detect = { path = "../stdarch/crates/std_detect", default-features = false, features = ['rustc-dep-of-std'] }
|
|
|
|
# Dependencies of the `backtrace` crate
|
|
rustc-demangle = { version = "0.1.21", features = ['rustc-dep-of-std'] }
|
|
|
|
[target.'cfg(not(all(windows, target_env = "msvc", not(target_vendor = "uwp"))))'.dependencies]
|
|
miniz_oxide = { version = "0.7.0", optional = true, default-features = false }
|
|
addr2line = { version = "0.21.0", optional = true, default-features = false }
|
|
|
|
[target.'cfg(not(all(windows, target_env = "msvc")))'.dependencies]
|
|
libc = { version = "0.2.153", default-features = false, features = ['rustc-dep-of-std'], public = true }
|
|
|
|
[target.'cfg(all(not(target_os = "aix"), not(all(windows, target_env = "msvc", not(target_vendor = "uwp")))))'.dependencies]
|
|
object = { version = "0.32.0", default-features = false, optional = true, features = ['read_core', 'elf', 'macho', 'pe', 'unaligned', 'archive'] }
|
|
|
|
[target.'cfg(target_os = "aix")'.dependencies]
|
|
object = { version = "0.32.0", default-features = false, optional = true, features = ['read_core', 'xcoff', 'unaligned', 'archive'] }
|
|
|
|
[dev-dependencies]
|
|
rand = { version = "0.8.5", default-features = false, features = ["alloc"] }
|
|
rand_xorshift = "0.3.0"
|
|
|
|
[target.'cfg(any(all(target_family = "wasm", target_os = "unknown"), target_os = "xous", all(target_vendor = "fortanix", target_env = "sgx")))'.dependencies]
|
|
dlmalloc = { version = "0.2.4", features = ['rustc-dep-of-std'] }
|
|
|
|
[target.x86_64-fortanix-unknown-sgx.dependencies]
|
|
fortanix-sgx-abi = { version = "0.5.0", features = ['rustc-dep-of-std'], public = true }
|
|
|
|
[target.'cfg(target_os = "hermit")'.dependencies]
|
|
hermit-abi = { version = "0.3.9", features = ['rustc-dep-of-std'], public = true }
|
|
|
|
[target.'cfg(target_os = "wasi")'.dependencies]
|
|
wasi = { version = "0.11.0", features = ['rustc-dep-of-std'], default-features = false }
|
|
|
|
[target.'cfg(target_os = "uefi")'.dependencies]
|
|
r-efi = { version = "4.2.0", features = ['rustc-dep-of-std'] }
|
|
r-efi-alloc = { version = "1.0.0", features = ['rustc-dep-of-std'] }
|
|
|
|
[features]
|
|
backtrace = [
|
|
'addr2line/rustc-dep-of-std',
|
|
'object/rustc-dep-of-std',
|
|
'miniz_oxide/rustc-dep-of-std',
|
|
]
|
|
|
|
panic-unwind = ["panic_unwind"]
|
|
profiler = ["profiler_builtins"]
|
|
compiler-builtins-c = ["alloc/compiler-builtins-c"]
|
|
compiler-builtins-mem = ["alloc/compiler-builtins-mem"]
|
|
compiler-builtins-no-asm = ["alloc/compiler-builtins-no-asm"]
|
|
compiler-builtins-mangled-names = ["alloc/compiler-builtins-mangled-names"]
|
|
compiler-builtins-weak-intrinsics = ["alloc/compiler-builtins-weak-intrinsics"]
|
|
llvm-libunwind = ["unwind/llvm-libunwind"]
|
|
system-llvm-libunwind = ["unwind/system-llvm-libunwind"]
|
|
|
|
# Make panics and failed asserts immediately abort without formatting any message
|
|
panic_immediate_abort = ["core/panic_immediate_abort", "alloc/panic_immediate_abort"]
|
|
# Choose algorithms that are optimized for binary size instead of runtime performance
|
|
optimize_for_size = ["core/optimize_for_size", "alloc/optimize_for_size"]
|
|
|
|
# Enable std_detect default features for stdarch/crates/std_detect:
|
|
# https://github.com/rust-lang/stdarch/blob/master/crates/std_detect/Cargo.toml
|
|
std_detect_file_io = ["std_detect/std_detect_file_io"]
|
|
std_detect_dlsym_getauxval = ["std_detect/std_detect_dlsym_getauxval"]
|
|
std_detect_env_override = ["std_detect/std_detect_env_override"]
|
|
|
|
[package.metadata.fortanix-sgx]
|
|
# Maximum possible number of threads when testing
|
|
threads = 125
|
|
# Maximum heap size
|
|
heap_size = 0x8000000
|
|
|
|
[[bench]]
|
|
name = "stdbenches"
|
|
path = "benches/lib.rs"
|
|
test = true
|