You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+39Lines changed: 39 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -158,6 +158,45 @@ like remote debugging, porting to different architectures, further improving
158
158
the debugger's features (like improving the visualization engine), and so on.
159
159
But for now, we're mostly focused on those first two phases.
160
160
161
+
---
162
+
163
+
# The RAD Linker
164
+
165
+
The RAD Linker is a new performance linker for generating x64 PE/COFF binaries. It is designed to be very fast when creating gigantic executables. It generates standard PDB files for debugging, but it can also optionally create RAD Debugger debug info too (useful for huge executables that otherwise create broken PDBs that overflow internal 32-bit tables).
166
+
167
+
The RAD Linker is primarily optimized to handle huge linking projects - in our test cases (where debug info is multiple gigabytes), we see 50% faster link times.
168
+
169
+
The command line syntax is fully compatible with MSVC and you can get a full list of implemented switches from `/help`.
170
+
171
+
Our current designed-for use case for the linker is to help with the compile-debug cycle of huge projects. We don't yet have support for dead-code-elimination or link-time-optimizations, but these features are on the road map.
172
+
173
+
By default, the RAD linker spawns as many threads as there are cores, so if you plan to run multiple linkers in parallel, you can limit the number of thread workers via `/rad_workers`.
174
+
175
+
We also have support for large memory pages, which, when enabled, reduce link time by
176
+
another 25%. To link with large pages, you need to explicitly request them via `/rad_large_pages`. Large pages are off by default, since Windows support for large pages is a bit buggy - we recommend they only be used in Docker or VM images where the environment is reset after each link. In a standard Windows environment, using large pages otherwise will fragment memory quickly forcing a reboot. We are working on a Linux port of the linker that will be able to build with large pages robustly.
177
+
178
+
## Short Term Roadmap
179
+
- Porting linker to Linux (for Windows executables, just running on Linux).
180
+
- Debug info features
181
+
- Get DWARF debug info converter up-and-running.
182
+
- Smooth out rough edges in RADDBGI builder.
183
+
- Improve build speed further (especially for tiny and mid sizes projects).
184
+
- Other features to come
185
+
- Dead-code-elimination via `/opt:ref`.
186
+
- Link Time Optimizations with the help of clang (we won't support LTCG from MSVC compiler since it is undocumented).
187
+
188
+
## To build the RAD Linker
189
+
- Setup development environment, [see](#Development-Setup-Instructions)
190
+
- Run `build linker release` or if you have clang installed `build linker release clang`. We favor latter option for better code generation.
191
+
192
+
If build was successful linker executable will be placed in `build` folder under `radlink.exe`.
0 commit comments