foot/PKGBUILD
Daniel Eklöf 628382bc90
PKGBUILD: do PGO with either gcc or clang, but nothing else
Before this, we assumed gcc was being used. The build would fail if
clang (or something else) was used.

Now, we check whether we’re compiling with gcc or clang, and disable
PGO if it’s neither of them.

Furthermore, we’re now adding the necessary flags needed to do PGO
with clang.

Note that ‘llvm-profdata’, from the ‘llvm’ package is needed for
PGO:ing with clang. PGO is disabled if it isn’t available. It would be
nice to have ‘llvm’ as an optional make dependency, but PKGBUILDs
doesn’t appear to support such a thing.

Finally, the -Wno-missing-profile flag, and its friends, have been
removed; instead we execute “footclient --version” (and “foot
--version”, in partial PGO builds) to ensure all generated binaries
have been executed before we do the final build (with
-Db_pgo=use). This fixes build failures with clang >= 11.x.
2021-03-26 22:16:54 +01:00

107 lines
2.7 KiB
Bash

pkgname=('foot-git' 'foot-terminfo-git')
pkgver=1.7.0
pkgrel=1
arch=('x86_64' 'aarch64')
url=https://codeberg.org/dnkl/foot
license=(mit)
depends=('libxkbcommon' 'wayland' 'pixman' 'fontconfig' 'fcft>=2.3.0')
makedepends=('meson' 'ninja' 'scdoc' 'python' 'ncurses' 'wayland-protocols' 'tllist>=1.0.4')
source=()
pkgver() {
cd ../.git &> /dev/null && git describe --tags --long | sed 's/^v//;s/\([^-]*-g\)/r\1/;s/-/./g' ||
head -3 ../meson.build | grep version | cut -d "'" -f 2
}
build() {
local compiler=other
local do_pgo=no
# makepkg uses -O2 by default, but we *really* want -O3
CFLAGS+=" -O3"
# Figure out which compiler we're using, and whether or not to do PGO
case $(${CC-cc} --version) in
*GCC*)
compiler=gcc
do_pgo=yes
;;
*clang*)
compiler=clang
# We need llvm to be able to manage the profiling data
if command -v llvm-profdata > /dev/null; then
do_pgo=yes
# Meson adds -fprofile-correction, which Clang doesn't
# understand
CFLAGS+=" -Wno-ignored-optimization-argument"
fi
;;
esac
meson --prefix=/usr --buildtype=release --wrap-mode=nofallback -Db_lto=true ..
if [[ ${do_pgo} == yes ]]; then
find -name "*.gcda" -delete
meson configure -Db_pgo=generate
ninja
local script_options="--scroll --scroll-region --colors-regular --colors-bright --colors-256 --colors-rgb --attr-bold --attr-italic --attr-underline --sixel"
tmp_file=$(mktemp)
if [[ -v WAYLAND_DISPLAY ]]; then
./footclient --version
./foot \
--config /dev/null \
--term=xterm \
sh -c "../scripts/generate-alt-random-writes.py ${script_options} ${tmp_file} && cat ${tmp_file}"
else
./footclient --version
./foot --version
../scripts/generate-alt-random-writes.py \
--rows=67 \
--cols=135 \
${script_options} \
${tmp_file}
./pgo ${tmp_file} ${tmp_file} ${tmp_file}
fi
rm "${tmp_file}"
if [[ ${compiler} == clang ]]; then
llvm-profdata merge default_*profraw --output=default.profdata
fi
meson configure -Db_pgo=use
fi
ninja
}
check() {
ninja test
}
package_foot-git() {
pkgdesc="A wayland native terminal emulator"
changelog=CHANGELOG.md
depends+=('foot-terminfo')
conflicts=('foot')
provides=('foot')
DESTDIR="${pkgdir}/" ninja install
rm -rf "${pkgdir}/usr/share/terminfo"
}
package_foot-terminfo-git() {
pkgdesc="Terminfo files for the foot terminal emulator"
depends=('ncurses')
conflicts=('foot-terminfo')
provides=('foot-terminfo')
install -dm 755 "${pkgdir}/usr/share/terminfo/f/"
cp f/* "${pkgdir}/usr/share/terminfo/f/"
}