Open Kobzol opened 4 months ago
Interesting, but deleting a directory can also be time consuming and contributed to build time, which I think most people may notice and avoid. If the directory is too large, you can always run cargo clean
.
Interesting, but deleting a directory can also be time consuming and contributed to build time, which I think most people may notice and avoid.
I doubt that deleting a directory will cause any large bottlenecks during compilation. I did a small benchmark where I simply run cargo build --release
with/without deleting the directory, using hyperfine:
Original code:
Benchmark 1: cargo build --release
Time (mean ± σ): 20.091 s ± 0.953 s [User: 141.451 s, System: 13.891 s]
Range (min … max): 19.373 s … 21.818 s 10 runs
Modified code (that removes the build
directory):
Benchmark 1: cargo build --release
Time (mean ± σ): 19.493 s ± 0.115 s [User: 138.811 s, System: 13.807 s]
Range (min … max): 19.317 s … 19.680 s 10 runs
The results are pretty much the same. Granted, I have an SSD disk, but even then, deleting a directory really shouldn't be a big issue in the grand scheme of Rust compilation. You can find my patched version here.
Also, the build script currently does make install
, but it never uses the installed libraries in <OUT_DIR>/lib
. So IMO it should either delete the build directory and use the installed libraries, or just don't do make install
, when the results are unused.
If the directory is too large, you can always run cargo clean.
I can, but the problem is that it removes everything. I have a bunch of projects using jemalloc, and I work on them regularly. The problem is that once I do the initial build, the build
directory isn't useful anymore, but it sits on disk and consumes ~200 MiB x debug/release/other profile x the amount of projects using jemalloc :) That seems wasteful.
@BusyJay So, what do you think? :) I can send a PR if you'd like.
When
jemalloc-sys
builds the jemalloc native dependency, it first creates abuild
directory on disk, then runsmake
andmake install
, which installs a copy of the built libs into alib
directory, amongst other things. However, after the build finishes, thebuild
directory is still kept on disk. It takes ~220 MiB on my x64 Linux, which is quite a lot! Especially considering that it can exist in multiple copies (debug/release, multiple repos usingjemalloc
etc.).I think that the
build.rs
script should delete thebuild
directory from disk once the compilation (make install
) successfully finishes, since it shouldn't be needed anymore, and I don't think that Cargo will ever reuse it (if something relevant changes, Cargo will compile jemalloc from scratch in a different directory, AFAIK).What do you think?