跳转至内容

makepkg-optimize

来自 ArchWiki

makepkg-optimizeAUR 是一个为 pacman 提供多种优化宏的补充脚本集合,包括 tidybuildenvexecutable,用于 `build()` 和 `package()` 阶段。

注意Arch User Repository 中的任何包一样,makepkg-optimizeAUR 没有官方支持。您应该阅读并可以在其 AUR 页面上发布 评论

安装

安装 makepkg-optimizeAUR,并为了使需要它们的功能可用,安装后端:openmpupxoptipngsvgopolly

配置

makepkg-optimizeAUR 会根据您当前的 makepkg.conf(5) 配置生成一个冗余的配置文件 ` /etc/makepkg-optimize.conf`。

此文件列出了补充的 编译标志构建环境选项、全局包选项包输出选项和 压缩默认值,所有这些默认情况下都处于禁用状态。

构建优化包

警告 某些包可能无法使用特定优化成功构建,过度优化可能导致程序出现问题,例如性能下降和段错误。

选择首选优化项后,在 构建时传入配置文件。

$ makepkg -c --config /etc/makepkg-optimize.conf
提示 在 `makepkg` 中使用 `-c` 以防止包重用过时的优化标志。请参阅 Makepkg#Usage
注意 Profile-guided optimization (PGO) 要求一个包被构建并安装 *两次*。第一阶段在 ` $PROFDEST/pkgbase.gen` 中启动配置文件生成;第二阶段将它们移至 ` $PROFDEST/pkgbase.used` 并应用它们。

在干净 chroot 中构建优化包

或者,`makepkg-optimize` 也可以在 chroot 中用于构建优化包。

Chroot 设置

设置 chroot 后,还需要一些额外的步骤。

安装 makepkg-optimize 和后端

首先,在基础 chroot 中安装一些优化宏的后端。

$ arch-nspawn "$CHROOT"/root pacman -S openmp upx optipng polly

然后 下载构建 makepkg-optimizeAURsvgo

为了将它们安装到基础 chroot 中,将它们的包文件复制到其中并进行安装,例如:

# 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
警告 这将使您的“干净”chroot 的保修失效!

使用 chroot

构建包

首先,编辑 `$CHROOT/root/etc/makepkg-optimize.conf` 并 选择您首选的优化项

构建时,将配置文件传递给 `makepkg`。

$ makechrootpkg -c -r "$CHROOT" -- -c --config /etc/makepkg-optimize.conf
使用 PGO 构建

`BUILDENV` 的 `pgo` 选项根据是否是第一次或第二次启用此标志构建包,来启用配置文件的 *生成* 或 *应用*。干净 chroot 构建会使此过程复杂化,因为软件将在 chroot 外部运行以生成配置文件,但这些配置文件需要在重新编译时从 chroot 内部应用。解决方案是通过绑定挂载文件夹来桥接这三个文件系统。

创建 PGO 缓存

创建并绑定一个文件夹来存储 配置文件

# mkdir -m 777 {"$CHROOT"/{root,"$USER"},}/mnt/pgo
# mount -o bind {,"$CHROOT"/root}/mnt/pgo
# mount -o bind "$CHROOT"/{root,"$USER"}/mnt/pgo
提示 使用 fstab 在启动时 绑定这些文件夹。
#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 

注意 请输入 chroot pgo 目录的完整路径,不要使用任何 $VARIABLES。

编辑 `$CHROOT/root/etc/makepkg-optimize.conf` 并设置 `PROFDEST=/mnt/pgo`。

分析程序

构建,然后 安装该包并测试运行其可执行文件。

注意 配置文件在程序 `exit()` 时生成。持久性守护进程,如 systemd,可能需要重启才能生成配置文件。

在充分使用软件后,关闭它,然后重新构建并重新安装其包。