Skip to content

Commit d5988d0

Browse files
updated README
1 parent 932df7b commit d5988d0

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed

README.md

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,45 @@ like remote debugging, porting to different architectures, further improving
158158
the debugger's features (like improving the visualization engine), and so on.
159159
But for now, we're mostly focused on those first two phases.
160160

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`.
193+
194+
## Benchmarks
195+
196+
![AMD Ryzen Threadripper PRO 3995WX 64-Cores, 256 GiB RAM (Windows x64)](https://github.com/user-attachments/assets/39d95fdf-9f0b-45d3-9fb8-90d8ac624168)
197+
198+
---
199+
161200
## Top-Level Directory Descriptions
162201

163202
- `data`: Small binary files which are used when building, either to embed

0 commit comments

Comments
 (0)