mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-15 10:52:30 +00:00
1107988a82
LTO in Rust produces multiple definition of `rust_eh_personality' (and few others), and to overcome this --allow-multiple-definition has been added. Query for benchmark: SELECT ignore(BLAKE3(materialize('Lorem ipsum dolor sit amet, consectetur adipiscing elit'))) FROM numbers(1000000000) FORMAT `Null` upstream : Elapsed: 2.494 sec. Processed 31.13 million rows, 249.08 MB (12.48 million rows/s., 99.86 MB/s.) upstream + rust lto: Elapsed: 13.56 sec. Processed 191.9 million rows, 1.5400 GB (14.15 million rows/s., 113.22 MB/s.) llvm BLAKE3 : Elapsed: 3.053 sec. Processed 43.24 million rows, 345.88 MB (14.16 million rows/s., 113.28 MB/s.) Note, I thought about simply replacing it with BLAKE3 from LLVM, but: - this will not solve LTO issues for Rust (and in future more libraries could be added) - it makes integrating_rust_libraries.md useless (and there is even blog post) So instead I've decided to add this quirk (--allow-multiple-definition) to fix builds. Signed-off-by: Azat Khuzhin <a.khuzhin@semrush.com>
21 lines
417 B
TOML
21 lines
417 B
TOML
[package]
|
|
name = "_ch_rust_blake3"
|
|
version = "0.1.0"
|
|
|
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
|
|
|
[dependencies]
|
|
blake3 = "1.2.0"
|
|
libc = "0.2.132"
|
|
|
|
[lib]
|
|
crate-type = ["staticlib"]
|
|
|
|
[profile.release]
|
|
debug = true
|
|
|
|
[profile.release-thinlto]
|
|
inherits = "release"
|
|
# BLAKE3 module requires "full" LTO (not "thin") to get additional 10% performance benefit
|
|
lto = true
|