Commit 0a75ba3e authored by Leo Yan's avatar Leo Yan Committed by Arnaldo Carvalho de Melo
Browse files

perf docs: Document building with Clang



Add example commands for building perf with Clang.

Since recent Android NDK releases use Clang as the default compiler, a
separate Android specific document is no longer needed; point to the
general build documentation instead.

Signed-off-by: default avatarLeo Yan <leo.yan@arm.com>
Reviewed-by: default avatarIan Rogers <irogers@google.com>
Link: https://lore.kernel.org/r/20251006-perf_build_android_ndk-v3-9-4305590795b2@arm.com


Cc: Palmer Dabbelt <palmer@dabbelt.com>
Cc: Albert Ou <aou@eecs.berkeley.edu>
Cc: Alexandre Ghiti <alex@ghiti.fr>
Cc: Nick Desaulniers <nick.desaulniers+lkml@gmail.com>
Cc: Justin Stitt <justinstitt@google.com>
Cc: Bill Wendling <morbo@google.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Nathan Chancellor <nathan@kernel.org>
Cc: James Clark <james.clark@linaro.org>
Cc: linux-riscv@lists.infradead.org
Cc: llvm@lists.linux.dev
Cc: Paul Walmsley <paul.walmsley@sifive.com>
Cc: linux-kernel@vger.kernel.org
Cc: linux-perf-users@vger.kernel.org
Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 4772e66c
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -99,3 +99,18 @@ configuration paths for cross building:
In this case, the variable PKG_CONFIG_SYSROOT_DIR can be used alongside the
variable PKG_CONFIG_LIBDIR or PKG_CONFIG_PATH to prepend the sysroot path to
the library paths for cross compilation.

5) Build with Clang
===================
By default, the makefile uses GCC as compiler. With specifying environment
variables HOSTCC, CC and CXX, it allows to build perf with Clang.

Using Clang for a native build:

  $ HOSTCC=clang CC=clang CXX=clang++ make -C tools/perf

Specifying ARCH and CROSS_COMPILE for cross compilation:

  $ HOSTCC=clang CC=clang CXX=clang++ \
    ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- \
    make -C tools/perf
+6 −74
Original line number Diff line number Diff line
How to compile perf for Android
=========================================
===============================

I. Set the Android NDK environment
------------------------------------------------
There are two ways to build perf and run it on Android:

(a). Use the Android NDK
------------------------------------------------
1. You need to download and install the Android Native Development Kit (NDK).
Set the NDK variable to point to the path where you installed the NDK:
  export NDK=/path/to/android-ndk
- Method 1: Build perf with static linking. See Build.txt, section
  "4) Cross compilation" for how to build a static perf binary.

2. Set cross-compiling environment variables for NDK toolchain and sysroot.
For arm:
  export NDK_TOOLCHAIN=${NDK}/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-
  export NDK_SYSROOT=${NDK}/platforms/android-24/arch-arm
For x86:
  export NDK_TOOLCHAIN=${NDK}/toolchains/x86-4.9/prebuilt/linux-x86_64/bin/i686-linux-android-
  export NDK_SYSROOT=${NDK}/platforms/android-24/arch-x86

This method is only tested for Android NDK versions Revision 11b and later.
perf uses some bionic enhancements that are not included in prior NDK versions.
You can use method (b) described below instead.

(b). Use the Android source tree
-----------------------------------------------
1. Download the master branch of the Android source tree.
Set the environment for the target you want using:
  source build/envsetup.sh
  lunch

2. Build your own NDK sysroot to contain latest bionic changes and set the
NDK sysroot environment variable.
  cd ${ANDROID_BUILD_TOP}/ndk
For arm:
  ./build/tools/build-ndk-sysroot.sh --abi=arm
  export NDK_SYSROOT=${ANDROID_BUILD_TOP}/ndk/build/platforms/android-3/arch-arm
For x86:
  ./build/tools/build-ndk-sysroot.sh --abi=x86
  export NDK_SYSROOT=${ANDROID_BUILD_TOP}/ndk/build/platforms/android-3/arch-x86

3. Set the NDK toolchain environment variable.
For arm:
  export NDK_TOOLCHAIN=${ANDROID_TOOLCHAIN}/arm-linux-androideabi-
For x86:
  export NDK_TOOLCHAIN=${ANDROID_TOOLCHAIN}/i686-linux-android-

II. Compile perf for Android
------------------------------------------------
You need to run make with the NDK toolchain and sysroot defined above:
For arm:
  make WERROR=0 ARCH=arm CROSS_COMPILE=${NDK_TOOLCHAIN} EXTRA_CFLAGS="-pie --sysroot=${NDK_SYSROOT}"
For x86:
  make WERROR=0 ARCH=x86 CROSS_COMPILE=${NDK_TOOLCHAIN} EXTRA_CFLAGS="-pie --sysroot=${NDK_SYSROOT}"

III. Install perf
-----------------------------------------------
You need to connect to your Android device/emulator using adb.
Install perf using:
  adb push perf /data/perf

If you also want to use perf-archive you need busybox tools for Android.
For installing perf-archive, you first need to replace #!/bin/bash with #!/system/bin/sh:
  sed 's/#!\/bin\/bash/#!\/system\/bin\/sh/g' perf-archive >> /tmp/perf-archive
  chmod +x /tmp/perf-archive
  adb push /tmp/perf-archive /data/perf-archive

IV. Environment settings for running perf
------------------------------------------------
Some perf features need environment variables to run properly.
You need to set these before running perf on the target:
  adb shell
  # PERF_PAGER=cat

IV. Run perf
------------------------------------------------
Run perf on your device/emulator to which you previously connected using adb:
  # ./data/perf
- Method 2: Download the Android NDK and use the bundled Clang to
  build perf. See Build.txt, section "5) Build with clang" for details.