forked from kiss-community/repo
128 lines
5.9 KiB
Plaintext
128 lines
5.9 KiB
Plaintext
mold
|
|
________________________________________________________________________________
|
|
|
|
mold is a multi-threaded, high-performance linker that is several times faster
|
|
than the industry-standard ones, namely, GNU ld, GNU gold or LLVM lld. It is
|
|
developed as a drop-in replacement for these linkers and command-line compatible
|
|
with them with a few exceptions. [0]
|
|
|
|
Upstream: $/rui314/mold
|
|
|
|
|
|
[000] Index
|
|
________________________________________________________________________________
|
|
|
|
* Installation ........................................................... [001]
|
|
* Setup .................................................................. [002]
|
|
* METHOD 1 (Compiler-agnostic) ......................................... [003]
|
|
* METHOD 2 (Clang >= 12.0) ............................................. [004]
|
|
* METHOD 3 (GCC) ....................................................... [005]
|
|
* Usage .................................................................. [006]
|
|
* Troubleshooting ........................................................ [007]
|
|
* Package Fails To Link With Mold ...................................... [008]
|
|
* References ............................................................. [009]
|
|
|
|
|
|
[001] Installation
|
|
________________________________________________________________________________
|
|
|
|
+------------------------------------------------------------------------------+
|
|
| |
|
|
| $ kiss b mold |
|
|
| |
|
|
+------------------------------------------------------------------------------+
|
|
|
|
|
|
[002] Setup
|
|
________________________________________________________________________________
|
|
|
|
To use mold as the system linker one of the following methods must be used.
|
|
The first solution is recommended as it removes all possibility of the prior
|
|
linker being executed by mistake.
|
|
|
|
|
|
--[003] METHOD 1 (Compiler-agnostic) -------------------------------------------
|
|
|
|
Use the alternatives system to set mold as the system linker.
|
|
|
|
+----------------------------------------------------------------------------+
|
|
| |
|
|
| $ kiss a mold /usr/bin/ld |
|
|
| |
|
|
+----------------------------------------------------------------------------+
|
|
|
|
|
|
--[004] METHOD 2 (Clang >= 12.0) -----------------------------------------------
|
|
|
|
Add --ld-path to CFLAGS/CXXFLAGS.
|
|
|
|
+----------------------------------------------------------------------------+
|
|
| |
|
|
| $ export CFLAGS="$CFLAGS --ld-path=/usr/bin/mold" |
|
|
| $ export CXXFLAGS="$CXXFLAGS --ld-path=/usr/bin/mold" |
|
|
| |
|
|
+----------------------------------------------------------------------------+
|
|
|
|
In addition to --ld-path, the following may also be needed. Please NOTE the
|
|
implications of this warning suppression and why METHOD 1 may be the best
|
|
solution to this problem.
|
|
|
|
+----------------------------------------------------------------------------+
|
|
| |
|
|
| $ export CFLAGS="$CFLAGS -Wno-unused-command-line-argument" |
|
|
| $ export CXXFLAGS="$CXXFLAGS -Wno-unused-command-line-argument" |
|
|
| |
|
|
+----------------------------------------------------------------------------+
|
|
|
|
|
|
--[005] METHOD 3 (GCC) ---------------------------------------------------------
|
|
|
|
Add -B to CFLAGS/CXXFLAGS (GCC)
|
|
|
|
+----------------------------------------------------------------------------+
|
|
| |
|
|
| $ export CFLAGS="$CFLAGS -B/usr/lib/mold" |
|
|
| $ export CXXFLAGS="$CXXFLAGS -B/usr/lib/mold" |
|
|
| |
|
|
+----------------------------------------------------------------------------+
|
|
|
|
|
|
[006] Usage
|
|
________________________________________________________________________________
|
|
|
|
Mold does not yet support all use cases. It can not be used to link the Linux
|
|
kernel (due to lack of linker script support) and It has no support for LTO
|
|
(Link Time Optimization).
|
|
|
|
With mold as the default linker, running the package manager as normal should
|
|
result in its usage. To verify that mold is being used, disable binary stripping
|
|
(KISS_STRIP=0) and run the following command on a newly built executable.
|
|
|
|
+------------------------------------------------------------------------------+
|
|
| |
|
|
| $ readelf -p .comment /path/to/exe |
|
|
| |
|
|
+------------------------------------------------------------------------------+
|
|
|
|
If 'mold' appears in the output, everything is setup correctly.
|
|
|
|
|
|
[007] Troubleshooting
|
|
________________________________________________________________________________
|
|
|
|
|
|
--[008] Package Fails To Link With Mold ----------------------------------------
|
|
|
|
If a package in the official repositories fails to link with mold, open an
|
|
issue. If a package in a third-party repository fails to link with mold, open
|
|
an issue in their tracker. If a package you maintain fails to link (and the
|
|
issue is in the linker), open an issue upstream.
|
|
|
|
|
|
[009] References
|
|
________________________________________________________________________________
|
|
|
|
[0] $/rui314/mold
|
|
|
|
|