makepkg-optimize
makepkg-optimizeAUR is a collection of supplemental build_env
and tidy
scripts for pacman-buildenv_ext-gitAUR. They provide macros to makepkg for several kinds of optimization in build() and package() stages, both in response to the simplification of makepkg and as a proposal for a future version of pacman.
[core]
. When using an alternate version, please mention so in support requests.Installation
Install pacman-buildenv_ext-gitAUR and makepkg-optimizeAUR from the AUR.
To make optimizations available, install their backends: graphite, openmp, upx, optipng, and nodejs-svgoAUR
Configuration
makepkg-optimizeAUR generates an additional configuration file, /etc/makepkg-optimize.conf
, from your current makepkg configuration with supplementary options for BUILD ENVIRONMENT
, GLOBAL PACKAGE OPTIONS
, PACKAGE OUTPUT
, and COMPRESSION DEFAULTS
that are disabled by default.
Build an optimized package
First, edit the configuration file and select your preferred optimizations.
When building, pass the configuration file:
$ makepkg --config /etc/makepkg-optimize.conf
$PROFDEST/$pkgbase.gen
; the second applies them and moves them to $PROFDEST/$pkgbase.used
.Build an optimized package in a clean chroot
Alternatively, pacman-buildenv_ext-gitAUR or makepkg-optimizeAUR can be used to build optimized packages within a chroot.
Chroot Setup
After setting up a chroot, a few additional steps are needed.
Install makepkg-optimize and backends
First, install some of the backends for the optimization macros to the base chroot:
$ arch-nspawn "$CHROOT"/root pacman -S graphite openmp upx optipng
Then download and build pacman-buildenv_ext-gitAUR, makepkg-optimizeAUR, and nodejs-svgoAUR.
To install them in the base chroot, copy their package files into it and install them, e.g.:
# cp nodejs-svgo-1.1.1-1-any.pkg.tar.xz "$CHROOT"/root/root/ $ arch-nspawn "$CHROOT"/root pacman -U /root/nodejs-svgo-1.1.1-1-any.pkg.tar.xz
Create a Profile-guided Optimization cache
First, create a folder in the same place, inside and outside of the chroot, to store profiles:
# mkdir -m 777 {"$CHROOT"/root,}/mnt/pgo
Then edit $CHROOT/root/etc/makepkg-optimize.conf
and, under PACKAGE OUTPUT
, set PROFDEST=/mnt/pgo
.
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" -- --config /etc/makepkg-optimize.conf
Building with Profile-guided optimization
After the first building phase, bind the PGO folder:
# mount -o bind {,"$CHROOT"/"$USER"}/mnt/pgo
Once the package is installed, test-run its executables.
For the second building phase, do not pass -c
to makechrootpkg
, but clean $srcdir
and overwrite the previous package by passing -Cf
to makepkg
:
$ makechrootpkg -r "$CHROOT" -- -Cf --config /etc/makepkg-optimize.conf