Repository navigation
Build bundled Linux dependencies with -O2 - #18
Merged
Merged
Conversation
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#64.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
On Linux,
dependency_build_envsetCFLAGSto just-fPIC, which replaces each project's default optimization level. As a result libyaml, libffi, libxcrypt, zlib, OpenSSL, ncurses, and libedit were all compiled at-O0in every series we ship.Upstream measured bcrypt about 5.7x slower and zlib deflate about 4.7x slower than the official
rubyDocker image. bcrypt is affected because the gem'scrypt_racalls resolve to the libxcrypt linked intoruby.This puts
-O2ahead of any inheritedCFLAGS/CXXFLAGS, so dependencies are optimized even whenCFLAGSis set, while an explicit-Olevel inCFLAGSstill wins.-fPICstays last so it always applies.Ported from jdx#64.
Notes
cflagsinrecipes/series.ymlonly feed Ruby's own configure, not the dependency builds, so this applies to old and new series alike.bin/build-fingerprintcoverslibexec/package.rb, so the next release run will rebuild every version and target instead of skipping. That is intended: the current artifacts carry the unoptimized libraries.