Skip to content

Commit

Permalink
app-arch/xz-utils: add USE=pgo
Browse files Browse the repository at this point in the history
Binary gets a bit smaller: 91K->83K. For decompression times, it's really
within noise, <5%. I didn't poke at compress times.

The times at https://forum.openmandriva.org/t/pgo-xz/2543 are a bit better
than what I saw (I tried with linux-6.5.tar.xz, chromium-118.0.5993.70.tar.xz).

opensuse is also doing pgo w/ xz.

Signed-off-by: Sam James <[email protected]>
  • Loading branch information
thesamesam committed Oct 12, 2023
1 parent 413840f commit c2846b5
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 7 deletions.
1 change: 1 addition & 0 deletions app-arch/xz-utils/metadata.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
<flag name="extra-filters">Build additional filters that are not
used in any of the default xz presets. This includes delta
and BCJ coders, additional match finders and SHA256 checks.</flag>
<flag name="pgo">Optimize the build using Profile Guided Optimization (PGO)</flag>
</use>
<upstream>
<remote-id type="cpe">cpe:/a:tukaani:xz</remote-id>
Expand Down
23 changes: 21 additions & 2 deletions app-arch/xz-utils/xz-utils-5.4.4.ebuild
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

EAPI=8

inherit libtool multilib multilib-minimal preserve-libs usr-ldscript
inherit flag-o-matic libtool multilib multilib-minimal preserve-libs usr-ldscript

if [[ ${PV} == 9999 ]] ; then
# Per tukaani.org, git.tukaani.org is a mirror of github and
Expand Down Expand Up @@ -47,7 +47,7 @@ HOMEPAGE="https://tukaani.org/xz/"
# See top-level COPYING file as it outlines the various pieces and their licenses.
LICENSE="public-domain LGPL-2.1+ GPL-2+"
SLOT="0"
IUSE="doc +extra-filters nls static-libs"
IUSE="doc +extra-filters pgo nls static-libs"

if [[ ${PV} != 9999 ]] ; then
BDEPEND+=" verify-sig? ( sec-keys/openpgp-keys-jiatan )"
Expand Down Expand Up @@ -103,6 +103,25 @@ multilib_src_configure() {
ECONF_SOURCE="${S}" econf "${myconf[@]}"
}

multilib_src_compile() {
# -fprofile-partial-training because upstream note the test suite isn't super comprehensive
# See https://documentation.suse.com/sbp/all/html/SBP-GCC-10/index.html#sec-gcc10-pgo
local pgo_generate_flags=$(usev pgo "-fprofile-update=atomic -fprofile-dir=${T}/${ABI}-pgo -fprofile-generate=${T}/${ABI}-pgo $(test-flags-CC -fprofile-partial-training)")

emake CFLAGS="${CFLAGS} ${pgo_generate_flags}"

if use pgo ; then
emake CFLAGS="${CFLAGS} ${pgo_generate_flags}" -k check

if tc-is-clang; then
llvm-profdata merge "${T}"/${ABI}-pgo --output="${T}"/${ABI}-pgo/default.profdata || die
fi

emake clean
emake CFLAGS="${CFLAGS} -fprofile-use=${T}/${ABI}-pgo -fprofile-dir=${T}/${ABI}-pgo"
fi
}

multilib_src_install() {
default

Expand Down
25 changes: 20 additions & 5 deletions app-arch/xz-utils/xz-utils-9999.ebuild
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ HOMEPAGE="https://tukaani.org/xz/"
# See top-level COPYING file as it outlines the various pieces and their licenses.
LICENSE="public-domain LGPL-2.1+ GPL-2+"
SLOT="0"
IUSE="doc +extra-filters nls static-libs"
IUSE="doc +extra-filters pgo nls static-libs"

if [[ ${PV} != 9999 ]] ; then
BDEPEND+=" verify-sig? ( sec-keys/openpgp-keys-jiatan )"
Expand Down Expand Up @@ -100,13 +100,28 @@ multilib_src_configure() {
myconf+=( --disable-path-for-script )
fi

# ifunc is incompatible w/ asan
# https://github.com/tukaani-project/xz/issues/62#issuecomment-1719489932
is-flagq -fsanitize=address && myconf+=( --disable-ifunc )

ECONF_SOURCE="${S}" econf "${myconf[@]}"
}

multilib_src_compile() {
# -fprofile-partial-training because upstream note the test suite isn't super comprehensive
# See https://documentation.suse.com/sbp/all/html/SBP-GCC-10/index.html#sec-gcc10-pgo
local pgo_generate_flags=$(usev pgo "-fprofile-update=atomic -fprofile-dir=${T}/${ABI}-pgo -fprofile-generate=${T}/${ABI}-pgo $(test-flags-CC -fprofile-partial-training)")

emake CFLAGS="${CFLAGS} ${pgo_generate_flags}"

if use pgo ; then
emake CFLAGS="${CFLAGS} ${pgo_generate_flags}" -k check

if tc-is-clang; then
llvm-profdata merge "${T}"/${ABI}-pgo --output="${T}"/${ABI}-pgo/default.profdata || die
fi

emake clean
emake CFLAGS="${CFLAGS} -fprofile-use=${T}/${ABI}-pgo -fprofile-dir=${T}/${ABI}-pgo"
fi
}

multilib_src_install() {
default

Expand Down

0 comments on commit c2846b5

Please sign in to comment.