From 01ca66c4dd30208a566cc14286f63ee3286ec701 Mon Sep 17 00:00:00 2001 From: Chris Oliver Date: Wed, 14 Oct 2026 12:20:24 -0500 Subject: [PATCH] Build bundled Linux dependencies with -O2 On Linux, dependency_build_env set CFLAGS to just -fPIC, which replaces each project's default optimization level, so libyaml, libffi, libxcrypt, zlib, OpenSSL, ncurses, and libedit were all compiled at -O0. Upstream measured bcrypt about 5.7x slower and zlib deflate about 4.7x slower than the official ruby Docker image; bcrypt is affected because the gem's crypt_ra calls resolve to the libxcrypt linked into ruby. Put -O2 ahead of any inherited CFLAGS so dependencies are optimized even when CFLAGS is set, while an explicit -O level in CFLAGS still wins. -fPIC stays last so it always applies. Ported from jdx/ruby#64. --- libexec/package.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libexec/package.rb b/libexec/package.rb index 4b0da55..11117de 100755 --- a/libexec/package.rb +++ b/libexec/package.rb @@ -1306,8 +1306,8 @@ def dependency_build_env(extra = {}) if linux? compile_flags = ["-fPIC"] compile_flags << "-mno-outline-atomics" if linux_arm64? - flags["CFLAGS"] = [ENV["CFLAGS"], *compile_flags].compact.join(" ") - flags["CXXFLAGS"] = [ENV["CXXFLAGS"], *compile_flags].compact.join(" ") + flags["CFLAGS"] = ["-O2", ENV["CFLAGS"], *compile_flags].compact.join(" ") + flags["CXXFLAGS"] = ["-O2", ENV["CXXFLAGS"], *compile_flags].compact.join(" ") end build_env(flags.merge(extra)) end