makepkg-optimize

Related articles
Arch User Repository
Building in a clean chroot
makepkg-optimize
AUR
is a collection of supplemental
tidy
,
buildenv
, and
executable
scripts for
pacman
which provide macros for several kinds of optimization in the
build()
and
package()
stages.
Note
As with any package in the
Arch User Repository
,
makepkg-optimize
AUR
has no official support. You should read, and you may post
comments
on its AUR page.
Installation
Install
makepkg-optimize
AUR
and, to make available optimizations requiring them, install backends:
openmp
,
upx
,
optipng
,
svgo
, and
polly
.
Configuration
makepkg-optimize
AUR
generates a redundant configuration file,
/etc/makepkg-optimize.conf
, from your current
makepkg.conf(5)
configuration.
This file lists supplementary
COMPILE FLAGS
,
BUILD ENVIRONMENT
options,
GLOBAL PACKAGE OPTIONS
,
PACKAGE OUTPUT
options, and
COMPRESSION DEFAULTS
, all of which are disabled by default.
Build an optimized package
Warning
Some packages may fail to build with certain optimizations and over-optimization may cause problems for some programs--such as decreased performance and segmentation faults.
After
selecting your preferred optimizations
, pass the configuration file when
building
:
$ makepkg -c --config /etc/makepkg-optimize.conf
Tip
Use
-c
with
makepkg
to prevent packages reusing stale optimization flags. See
Makepkg#Usage
.
Note
Profile-guided optimization
requires that a package be built and installed
twice
. The first phase initiates profile generation in
$PROFDEST/
pkgbase
.gen
; the second moves them to
$PROFDEST/
pkgbase
.used
and applies them.
Build an optimized package in a clean chroot
Alternatively,
makepkg-optimize
can be used to build optimized packages within a
classic way
of
clean chroot
.
Chroot setup
After
setting up a chroot
, a few additional steps are needed.
First, install some of the backends for the optimization macros to the base chroot:
$ arch-nspawn "$CHROOT"/root pacman -S openmp upx optipng polly
Then
download
and
build
the
makepkg-optimize
AUR
and
svgo
packages.
To install them in the base chroot, copy their package files into it and install them, e.g.:
# cp svgo-1.2.2-2-any.pkg.tar.xz "$CHROOT"/root/root/
$ arch-nspawn "$CHROOT"/root pacman -U /root/svgo-1.2.2-2-any.pkg.tar.xz
Warning
This voids the warranty on your "clean" chroot!
Using the chroot
Build a package
First, edit
$CHROOT/root/etc/makepkg-optimize.conf
and
select your preferred optimizations
.
When
building
, pass the configuration file to
makepkg
:
$ makechrootpkg -c -r "$CHROOT" -- -c --config /etc/makepkg-optimize.conf
Building with PGO
The
pgo
option for
BUILDENV
enables either
generation
or
application
of profiles, depending on if this is the first or second build of the package with this flag enabled.
Clean chroot
building complicates this because the software is run outside of the chroot to generate profiles, but the profiles need to be applied from inside the chroot when recompiling later. The solution is to bridge the three filesystems with a bind mounted folder.
Create a PGO cache
Create and bind a folder to store
profiles
:
# mkdir -m 777 {"$CHROOT"/{root,"$USER"},}/mnt/pgo
# mount -o bind {,"$CHROOT"/root}/mnt/pgo
# mount -o bind "$CHROOT"/{root,"$USER"}/mnt/pgo
Tip
Use
fstab
to
bind
these folders at boot.
#PGODEST
/full/path/to/$CHROOT/$USER/mnt/pgo/ /mnt/pgo/ none bind,x-gvfs-hide 0 0
/mnt/pgo/ /full/path/to/$CHROOT/root/mnt/pgo/ none bind,x-gvfs-hide 0 0
Note
Type out the full path to the chroot pgo directories, without using any $VARIABLES
Edit
$CHROOT/root/etc/makepkg-optimize.conf
and set
PROFDEST=/mnt/pgo
.
Profile a program
Build, then
install
the package and test-run its executables.
Note
Profiles are generated on program
exit()
. Persistent daemons, such as
systemd
, may require a reboot to produce profiles.
After thoroughly utilizing the software, close it, then rebuild and reinstall its package.