Linux ์์คํ ์์ GNU ๋ง์ปค๋ฅผ ๋ ๋น ๋ฅด๊ณ ํฌ๋ช ํ๊ฒ ๋์ฒดํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ Mold ๋ง์ปค ๋ฆด๋ฆฌ์ค๊ฐ ์ถ์๋์์ต๋๋ค. ์ด ํ๋ก์ ํธ๋ LLVM lld ๋ง์ปค ์์ฑ์๊ฐ ๊ฐ๋ฐํ์ต๋๋ค. Mold์ ์ฃผ์ ํน์ง์ ๊ฐ์ฒด ํ์ผ์ ์ฐ๊ฒฐํ๋ ๋งค์ฐ ๋น ๋ฅธ ์๋๋ก, GNU gold ๋ฐ LLVM lld ๋ง์ปค๋ณด๋ค ๋์ ๋๊ฒ ์์ ์์ต๋๋ค(Mold์ ์ฐ๊ฒฐ์ cp ์ ํธ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ์ฌ ํ์ผ์ ๋ณต์ฌํ๋ ์๋์ ์ ๋ฐ์ ๋ถ๊ณผํ ์๋๋ก ์ํ๋ฉ๋๋ค). ์ฝ๋๋ C++(C++20)๋ก ์์ฑ๋์์ผ๋ฉฐ AGPLv3 ๋ผ์ด์ ์ค์ ๋ฐ๋ผ ๋ฐฐํฌ๋ฉ๋๋ค.
์ ๋ฒ์ ์์:
- ์ฐ๊ฒฐ ๋จ๊ณ(LTO, Link Time Optimization)์์ ์ต์ ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค. LTO ์ต์ ํ๋ ๋น๋ ํ๋ก์ธ์ค์ ๊ด๋ จ๋ ๋ชจ๋ ํ์ผ์ ์ํ๋ฅผ ๊ณ ๋ คํ๋ค๋ ์ ์์ ๋ค๋ฆ ๋๋ค. ๋ฐ๋ฉด ๊ธฐ์กด ์ต์ ํ ๋ชจ๋๋ ๊ฐ ํ์ผ์ ๊ฐ๋ณ์ ์ผ๋ก ์ต์ ํํ๊ณ ๋ค๋ฅธ ํ์ผ์ ์ ์๋ ํจ์ ํธ์ถ ์กฐ๊ฑด์ ๊ณ ๋ คํ์ง ์์ต๋๋ค. ์ด์ ์๋ GCC ๋๋ LLVM ์ค๊ฐ ์ฝ๋(IR) ํ์ผ์ด ๋ฐ๊ฒฌ๋๋ฉด ํด๋น ld.bfd ๋๋ ld.lld ๋ง์ปค๊ฐ ํธ์ถ๋์์ง๋ง ์ด์ Mold๋ IR ํ์ผ์ ๋ ๋ฆฝ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ณ GNU ld ๋ฐ GNU์์๋ ์ฌ์ฉ๋๋ ๋ง์ปค ํ๋ฌ๊ทธ์ธ API๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๊ธ ๋ง์ปค. ํ์ฑํ๋๋ฉด ๋๋ถ๋ถ์ ์๊ฐ์ด ์ฐ๊ฒฐ๋ณด๋ค๋ ์ฝ๋ ์ต์ ํ๋ฅผ ์ํํ๋ ๋ฐ ์๋น๋๊ธฐ ๋๋ฌธ์ LTO๋ ๋ค๋ฅธ ๋ง์ปค๋ณด๋ค ์ฝ๊ฐ๋ง ๋น ๋ฆ ๋๋ค.
- ํธ์คํธ ๋ฐ ๋์ ํ๋ซํผ์ RISC-V(RV64) ์ํคํ ์ฒ์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- ์ฐ๊ฒฐ ํ ๋จ๊ณ์์ ํ์ ์ต์ ํ ์ ์ฉ์ ์ํด ์ ๋ ฅ ํ์ผ์์ ์ถ๋ ฅ ํ์ผ๋ก ์ฌ๋ฐฐ์น ์น์ ์ ๋ณต์ฌํ ์ ์๋๋ก "--emit-relocs" ์ต์ ์ ์ถ๊ฐํ์ต๋๋ค.
- ๊ฐ์ ์ฃผ์ ๊ณต๊ฐ์์ ์ฃผ์๋ฅผ ์์ ํ๊ธฐ ์ ์ ์น์ ์ ์์๋ฅผ ๋ฌด์์๋ก ์ง์ ํ๋ "--shuffle-sections" ์ต์ ์ ์ถ๊ฐํ์ต๋๋ค.
- ์ ๋ ฅ ํ์ผ ๊ฐ์ ์ข ์์ฑ์ ๋ํ ์ ๋ณด๋ฅผ CSV ํ์์ผ๋ก ์ถ๋ ฅํ๊ธฐ ์ํด "--print-dependent" ๋ฐ "--print-dependents=full" ์ต์ ์ ์ถ๊ฐํ์ต๋๋ค. ์๋ฅผ ๋ค์ด ํน์ ๊ฐ์ฒด ํ์ผ์ ๋งํฌํ ๋ ์ฐ๊ฒฐ ์ด์ ๋ฅผ ๋ถ์ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋๋ ํ์ผ ๊ฐ์ ์ข ์์ฑ ์ถ์ ์์ ์ ์ํํ ๋.
- "--warn-once" ๋ฐ "--warn-textrel" ์ต์ ์ด ์ถ๊ฐ๋์์ต๋๋ค.
- libxxhash์ ๋ํ ์ข ์์ฑ์ ์ ๊ฑฐํ์ต๋๋ค.
์ถ์ฒ : opennet.ru