Perfetto - Build instructions

Perfetto can be built both from the Android tree and standalone.
Standalone builds are meant only for local testing and are not shipped.
Due to the reduced dependencies they are faster to iterate on and the suggested way to work on Perfetto.

Prerequisites

All dependent libraries are self-hosted and pulled by the tools/install-build-deps script.
The only requirements on the host are python and git:

$ sudo apt-get update && sudo apt-get install git python

Standalone checkout

Get the code

$ git clone https://android.googlesource.com/platform/external/perfetto.git

Build

If you are a chromium developer and have depot_tools installed you can avoid the tools/ prefix below and just use gn/ninja from depot_tools.

$ tools/install-build-deps to install third-party build deps (NDK etc)

$ tools/gn args out/android to generate build files and enter in the editor:

target_os = "android"          # Leave empty for local testing
target_cpu = "arm" or "arm64"  # Only when building for Android

(See the Build Configurations section below for more)

$ tools/ninja -C out/android all

This will generate artifacts under out/android.

Inside the Android tree

Get the code

See https://source.android.com/setup/building. Perfetto lives in external/perfetto in the Android tree.

Build

$ mmma external/perfetto or $ m perfetto traced traced_probes # put other target names here

This will generate artifacts out/target/product/XXX/system/. Executables and shared libraries are stripped by default by the Android build system. The unstripped versions are kept into out/target/product/XXX/symbols.

GN -> Android.bp generator

The source of truth of our build file is in the BUILD.gn files, which are based on GN. The Android build file (Android.bp) is autogenerated from the GN files through tools/gen_android_bp, which needs to be invoked whenever a change touches GN files or introduces new ones. A presubmit check checks that the Android.bp is consistent with GN files when submitting a CL through git cl upload. The generator has a whitelist of root targets that will be translated into the Android.bp file. If you are adding a new target, add a new entry to the default_targets variable inside tools/gen_android_bp.

Build configurations

The following GN args are supported:

target_os = "android" | "linux" | "mac":
Defaults to the current host, set “android” to build for Android.

target_cpu = "arm" | "arm64" | "x86" | "x64":
Defaults to "arm" when target_os == "android", "x64" when targeting the host. 32-bit host builds are not supported.

is_debug = true | false:
Toggles Debug (default) / Release mode.

is_clang = true | false:
Use Clang (default) / GCC. It requires clang 3.5+ to be installed on the host. Clang is the default compiler on Mac (% having installed Xcode). On Linux: sudo apt-get update && sudo apt-get install clang

is_hermetic_clang = true | false:
Use bundled toolchain from buildtools/ rather than system-wide one.

cc = "gcc" / cxx = "g++":
Uses a different compiler binary (default: autodetected depending on is_clang).

is_asan = true:
Enables Address Sanitizer

is_lsan = true:
Enables Leak Sanitizer
(Linux/Mac only)

is_msan = true:
Enables Memory Sanitizer
(Linux only)

is_tsan = true:
Enables Thread Sanitizer
(Linux/Mac only)

is_ubsan = true:
Enables Undefined Behavior Sanitizer