about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJakub Beránek <berykubik@gmail.com>2022-07-17 17:37:10 +0200
committerJakub Beránek <berykubik@gmail.com>2022-07-17 17:37:10 +0200
commit97f6f958796bccf765a2e3038a40ecf5a8bb355a (patch)
tree27a40a58068fdb8a373098cb28328d1bb5ece0f0
parent967a9c94b34bb8f394db03b1d205831eddf6f589 (diff)
downloadrust-97f6f958796bccf765a2e3038a40ecf5a8bb355a.tar.gz
rust-97f6f958796bccf765a2e3038a40ecf5a8bb355a.zip
Use LLD linker for compiling rustc on Linux x64 and use ICF for binary size optimization
-rw-r--r--src/bootstrap/compile.rs6
-rw-r--r--src/ci/docker/host-x86_64/dist-x86_64-linux/Dockerfile3
-rwxr-xr-xsrc/ci/pgo.sh4
3 files changed, 12 insertions, 1 deletions
diff --git a/src/bootstrap/compile.rs b/src/bootstrap/compile.rs
index 3d678b2290d..aa7cda46bda 100644
--- a/src/bootstrap/compile.rs
+++ b/src/bootstrap/compile.rs
@@ -651,6 +651,12 @@ impl Step for Rustc {
             panic!("Cannot use and generate PGO profiles at the same time");
         }
 
+        // With LLD, we can use ICF (identical code folding) to reduce the executable size
+        // of librustc_driver/rustc and to improve i-cache utilization.
+        if builder.config.use_lld {
+            cargo.rustflag("-Clink-args=-Wl,--icf=all");
+        }
+
         let is_collecting = if let Some(path) = &builder.config.rust_profile_generate {
             if compiler.stage == 1 {
                 cargo.rustflag(&format!("-Cprofile-generate={}", path));
diff --git a/src/ci/docker/host-x86_64/dist-x86_64-linux/Dockerfile b/src/ci/docker/host-x86_64/dist-x86_64-linux/Dockerfile
index ab6c888030e..f262bc3c7d8 100644
--- a/src/ci/docker/host-x86_64/dist-x86_64-linux/Dockerfile
+++ b/src/ci/docker/host-x86_64/dist-x86_64-linux/Dockerfile
@@ -122,7 +122,8 @@ ENV RUST_CONFIGURE_ARGS \
       --set target.x86_64-unknown-linux-gnu.ranlib=/rustroot/bin/llvm-ranlib \
       --set llvm.thin-lto=true \
       --set llvm.ninja=false \
-      --set rust.jemalloc
+      --set rust.jemalloc \
+      --set rust.use-lld=true
 ENV SCRIPT ../src/ci/pgo.sh python3 ../x.py dist \
     --host $HOSTS --target $HOSTS \
     --include-default-paths \
diff --git a/src/ci/pgo.sh b/src/ci/pgo.sh
index 28bed1fa035..4773dc09960 100755
--- a/src/ci/pgo.sh
+++ b/src/ci/pgo.sh
@@ -195,3 +195,7 @@ rm -r $BUILD_ARTIFACTS/llvm $BUILD_ARTIFACTS/lld
 $@ \
     --rust-profile-use=${RUSTC_PROFILE_MERGED_FILE} \
     --llvm-profile-use=${LLVM_PROFILE_MERGED_FILE}
+
+echo "Rustc binary size"
+ls -la ./build/$PGO_HOST/stage2/bin
+ls -la ./build/$PGO_HOST/stage2/lib