Files
tracy/profiler/appimage/build.sh
2026-07-24 23:14:09 +02:00

73 lines
3.0 KiB
Bash
Executable File

#!/bin/sh
set -eu
# Builds the profiler as an AppImage. The Wayland client libraries are built
# from a pinned release and bundled, so the core protocol version does not
# depend on what the build host provides. Everything else that is host-coupled
# (glibc, EGL, dbus, xkbcommon, OpenSSL) is left to the target system, which
# is expected to be reasonably current. The build host sets the glibc floor,
# so this should run on the oldest distro release that is still supported.
ROOT=$(cd "$(dirname "$0")/../.." && pwd)
BUILD="$ROOT/profiler/build-appimage"
PREFIX="$BUILD/wayland"
APPDIR="$BUILD/AppDir"
WAYLAND_VERSION=1.25.0
APPIMAGETOOL_URL="https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage"
mkdir -p "$BUILD"
if [ ! -e "$PREFIX/lib/pkgconfig/wayland-client.pc" ]; then
git clone --depth 1 --branch $WAYLAND_VERSION https://gitlab.freedesktop.org/wayland/wayland.git "$BUILD/wayland-src"
meson setup "$BUILD/wayland-build" "$BUILD/wayland-src" \
--prefix "$PREFIX" --libdir lib --buildtype release \
-Ddocumentation=false -Dtests=false -Ddtd_validation=false
meson install -C "$BUILD/wayland-build"
fi
export PKG_CONFIG_PATH="$PREFIX/lib/pkgconfig"
export PATH="$PREFIX/bin:$PATH"
cmake -B "$BUILD/profiler" -S "$ROOT/profiler" -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DNO_ISA_EXTENSIONS=ON \
-DCMAKE_BUILD_RPATH='$ORIGIN/../lib' \
-DDOWNLOAD_CAPSTONE=ON \
-DDOWNLOAD_FREETYPE=ON \
-DDOWNLOAD_LIBCURL=ON \
-DDOWNLOAD_PUGIXML=ON \
${GIT_REV:+-DGIT_REV=$GIT_REV}
cmake --build "$BUILD/profiler" --parallel "$(nproc)"
rm -rf "$APPDIR"
mkdir -p "$APPDIR/usr/bin" "$APPDIR/usr/lib" \
"$APPDIR/usr/share/applications" \
"$APPDIR/usr/share/mime/packages" \
"$APPDIR/usr/share/icons/hicolor/scalable/apps" \
"$APPDIR/usr/share/icons/hicolor/scalable/mimetypes"
cp "$BUILD/profiler/tracy-profiler" "$APPDIR/usr/bin/"
strip "$APPDIR/usr/bin/tracy-profiler"
patchelf --set-rpath '$ORIGIN/../lib' "$APPDIR/usr/bin/tracy-profiler"
cp "$PREFIX/lib/libwayland-client.so.0" \
"$PREFIX/lib/libwayland-cursor.so.0" \
"$PREFIX/lib/libwayland-egl.so.1" \
"$APPDIR/usr/lib/"
cp "$ROOT/extra/desktop/tracy.desktop" "$APPDIR/usr/share/applications/"
cp "$ROOT/extra/desktop/application-tracy.xml" "$APPDIR/usr/share/mime/packages/"
cp "$ROOT/icon/icon.svg" "$APPDIR/usr/share/icons/hicolor/scalable/apps/tracy.svg"
cp "$ROOT/icon/application-tracy.svg" "$APPDIR/usr/share/icons/hicolor/scalable/mimetypes/"
ln -s usr/share/applications/tracy.desktop "$APPDIR/tracy.desktop"
ln -s usr/share/icons/hicolor/scalable/apps/tracy.svg "$APPDIR/tracy.svg"
ln -s tracy.svg "$APPDIR/.DirIcon"
ln -s usr/bin/tracy-profiler "$APPDIR/AppRun"
ldd "$APPDIR/usr/bin/tracy-profiler"
if [ ! -x "$BUILD/appimagetool" ]; then
curl -Lf -o "$BUILD/appimagetool" "$APPIMAGETOOL_URL"
chmod +x "$BUILD/appimagetool"
fi
ARCH=x86_64 "$BUILD/appimagetool" --appimage-extract-and-run \
"$APPDIR" "$BUILD/tracy-profiler-x86_64.AppImage"