1
0
Fork 0
dosbox-staging/.github/scripts/build-autofdo.sh
krcroft 78ae277d28 Expand use and support for LTO and FDO builds
Adds LTO to the CI build for Linux, which bring it as close as possible
to the planned formal release, which will additionally use FDO.

Adds some helper scripts to work with FDO files.

Improves the build notes for how to create and use FDO files.
2020-04-01 08:03:39 +02:00

64 lines
1.6 KiB
Bash
Executable file

#!/bin/bash
# Copyright (c) 2020 Kevin R Croft <krcroft@gmail.com>
# SPDX-License-Identifier: GPL-2.0-or-later
# Builds and installs the AutoFDO package from
# https://github.com/google/autofdo
#
# AutoFDO is used to convert sample profiling data (collected using perf
# or ocperf.py from a Linux kernel built with with last branch
# record (LBR) tracing support running on an Intel CPU with LBR
# support) to GCC-specific AutoFDO records or LLVM's raw profile
# records.
#
# Pre-requisites: autoconf automake git libelf-dev libssl-dev pkg-config
# If building for LLVM, clang and llvm-dev are needed.
#
# Usage: build-autofdo.sh [LLVM version]
# Examples: ./build-autofdo.sh
# ./build-autofdo.sh 10
#
# Where the optional [LLVM version] allows building with LLVM support
# for the provided LLVM version.
set -euo pipefail
rootdir="$(pwd)"
prefix="$rootdir/afdo"
# Clone the repo
if [[ ! -d autofdo ]]; then
git clone --depth 1 --recursive https://github.com/google/autofdo.git
fi
# Enter and sync the repo (if it already exists)
pushd autofdo
git pull
# Initialize auto-tools
aclocal -I .
autoheader
autoconf
automake --add-missing -c
# Configure with the specified LLVM version if provided
if [[ -n "${1:-}" ]]; then
ver="$1"
withllvm="--with-llvm=$(command -v llvm-config-"$ver")"
fi
# Configure
flags="-Os -DNDEBUG -pipe"
./configure CFLAGS="$flags" CXXFLAGS="$flags" --prefix="$prefix" "${withllvm:-}"
# Build and install
# Note: make cannot be run in parallel because the sub-projects'
# need to be configured serially with respect to eachother
make
make install
popd
# Strip the binaries
cd "$prefix/bin"
strip ./*