pkgs: stdenv: let inherit (pkgs) addAttrsToDerivation mimalloc overrideCC; inherit (pkgs.lib) getLib optionalAttrs optionals toList; inherit (pkgs.llvmPackages_latest) clangUseLLVM bintools; inherit (stdenv) targetPlatform; cflags = [ "-pipe" # Prefer pipes over temporary files between stages "-O2" # Safe compiler optimisations "-flto=thin" ]; ldflags = [ "-O2" # Enable tail merging of strings "--hash-style=gnu" # Produce only DT_GNU_HASH "--icf=safe" # Fold identical code where safe "--lto-O2" "-L${getLib mimalloc}/lib" "-lmimalloc" ]; rustflags = [ "-C opt-level=2" "-C linker-flavor=lld" "-C lto=thin" "-C linker-plugin-lto" ] ++ optionals (targetPlatform.isx86_64 && targetPlatform ? gcc.arch) [ "-C target-cpu=${targetPlatform.gcc.arch}" ] ++ map (flag: "-C link-arg=${flag}") ldflags; in addAttrsToDerivation (base: { env = (base.env or { }) // optionalAttrs (!base ? NIX_CFLAGS_COMPILE) { NIX_CFLAGS_COMPILE = toString (toList base.env.NIX_CFLAGS_COMPILE or [ ] ++ cflags); } // optionalAttrs (base ? env.NIX_LDFLAGS) { NIX_LDFLAGS = toString (toList base.env.NIX_LDFLAGS or [ ] ++ ldflags); }; NIX_RUSTFLAGS = toList base.NIX_RUSTFLAGS or [ ] ++ rustflags; } // optionalAttrs (base ? env.NIX_CFLAGS) { NIX_CFLAGS_COMPILE = toList base.NIX_CFLAGS_COMPILE or [ ] ++ cflags; } // optionalAttrs (!base ? env.NIX_LDFLAGS) { NIX_LDFLAGS = toList base.NIX_LDFLAGS or [ ] ++ ldflags; }) (overrideCC stdenv (clangUseLLVM.override { inherit bintools; }))