Shrinking While Linking
17 points
3 days ago
| 2 comments
| tweag.io
| HN
compiler-guy
2 hours ago
[-]
"If you compiled your code with support for link-time optimization (LTO), it contains another copy (in the form of LLVM bitcode — more on that later) of all our code and the code of all our dependencies."

The author then goes and removes the lto-related code via objcopy. Which is fine, and great, and useful if you care about size more than having link-time optimization enabled for your end users.

But if you are just going to turn around and remove it, you probably shouldn't include it in the first place, which makes the original analysis of 132MB vs 15MB a little misleading.

reply
kragen
2 hours ago
[-]
Misleading how? If your first thought on looking at a Rust-generated static library is that it's fucking huge, it's not misleading at all for someone to tell you that Rust-generated static libraries are mostly LLVM bitcode that you can remove with `objcopy --remove-section .llvmbc`.
reply
compiler-guy
1 hour ago
[-]
This somewhat custom use-case has an option turned on that jacks the size way up. Here is a hacky way to undo that option.

You could also just ... not turn it on in the first place. You are doing a nonstandard build already.

reply
kragen
1 hour ago
[-]
Your first paragraph appears to be a sarcastic paraphrase of the article; please correct me if I'm misunderstanding that. What's the somewhat custom use-case, and what's the option that jacks up the size? I don't see anything in the article that would obviously fit either description.
reply
yellow_lead
1 hour ago
[-]
The option is LTO
reply
kragen
3 hours ago
[-]
reply