mirror of
https://github.com/rui314/mold.git
synced 2024-11-10 10:57:55 +03:00
b93ad52a73
Almost all functions and data types are template in mold, which are parameterized to target type (e.g. X86_64 or ARM32). I'm generally happy with that design, but there's one drawback; as we add more targets, compilation gets slower. Now we support more than 10 targets, so the compiler has to do 10x more work than it originall did. As a result, compiling output-chunks.cc (one of our largest file) took more than 30 seconds to compile on a Threadripper machine. I hasitated to add a support for a new target because of this problem. We needed to fix it. This commit tweaks the build system configs so that the build system generates bunch of intermediate .cc files. Each generated .cc file instantiates an original .cc file for one target. The total amount of required computation doesn't change by this hack, but now we can parallelize the compilation step. That works well on a modern multi-core machine. I generally don't like to tweak build system to workaround a tool's issue (that's why I'm creating mold in the first place), but it looks like there's no way to speed up compilation other than this. Or, maybe we can write a faster C++ compiler someday, but that's another topic.
6 lines
76 B
C++
6 lines
76 B
C++
#ifdef _WIN32
|
|
# include "lto-win32.cc"
|
|
#else
|
|
# include "lto-unix.cc"
|
|
#endif
|