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