Propeller is a profile-guided, relinking optimizer for warehouse-scale applications. It is built on top of LLVM and provides a framework for computing whole-program optimizations for applications built with LLVM.
For artifact evaluation, see ArtifactEvaluation/README.md
Operating System | Version |
---|---|
Ubuntu | 22.04 or newer |
While the Propeller build system automatically pulls in most of its dependencies, you will need to install a few packages manually:
# Common dependencies
sudo apt install -y wget lsb-release software-properties-common gnupg
# Propeller builds with Clang 16.0.0 or newer.
wget https://apt.llvm.org/llvm.sh
chmod +x llvm.sh
sudo ./llvm.sh 16
export CC=clang-16
export CXX=clang++-16
# For the CMake build
sudo apt-get update && sudo apt-get install -y \
libelf-dev \
libssl-dev \
libzstd-dev
The Propeller repository provides both CMake and Bazel build configurations. The CMake build requires CMake 3.24 or newer, and the Bazel build requires Bazel 5.0 or newer.
cmake -G Ninja -B build
ninja -C build generate_propeller_profiles
# Build and run tests (optional)
ninja -C build
ninja -C build test
bazel build //propeller:generate_propeller_profiles
# Build and run tests (optional)
bazel test //propeller/...:all
./generate_propeller_profiles \
--binary=/path/to/profiled/binary \
--profile=/path/to/input/profile.txt \
--cc_profile=/path/to/out/cc_profile.txt \
--ld_profile=/path/to/out/ld_profile.txt