diff --git a/.cargo/config.toml b/.cargo/config.toml index af86330d..0fad2f4b 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -1,3 +1,9 @@ +[target.'cfg(not(target_os = "windows"))'] +rustflags = ["-C", "linker=clang", "-C", "link-arg=-fuse-ld=lld"] + +[target.'cfg(target_os = "windows")'] +rustflags = ["-C", "linker=lld-link", "-C", "link-arg=-fuse-ld=lld-link"] + [target.'cfg(target_arch = "x86_64")'] rustflags = ["-C", "target-cpu=x86-64-v3"] diff --git a/Cargo.toml b/Cargo.toml index 1d9eb2aa..863b59f6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -44,3 +44,4 @@ cc = { version = "1.2", features = ["parallel"] } [profile.release] panic = "abort" +lto = true diff --git a/build.rs b/build.rs index 26ffa77e..739867bd 100644 --- a/build.rs +++ b/build.rs @@ -61,6 +61,7 @@ fn main() { let os = std::env::var("CARGO_CFG_TARGET_OS").unwrap(); let arch = std::env::var("CARGO_CFG_TARGET_ARCH").unwrap(); + let profile = std::env::var("PROFILE").unwrap(); if arch == "x86_64" { rdp_build.flag("-march=x86-64-v3"); } else if arch == "aarch64" { @@ -78,6 +79,9 @@ fn main() { .unwrap(); } + if profile == "release" { + rdp_build.flag("-flto"); + } rdp_build.compile("parallel-rdp"); let out_path = std::path::PathBuf::from(std::env::var("OUT_DIR").unwrap()); @@ -153,6 +157,9 @@ fn main() { simd_build.file("src/compat/aarch64.c"); simd_build.file(std::env::temp_dir().join("bindgen").join("extern.c")); simd_build.include("."); + if profile == "release" { + simd_build.flag("-flto"); + } simd_build.compile("simd"); }