1 1 2 1) perf build 2 1) perf build 3 ============= 3 ============= 4 The perf build process consists of several sep 4 The perf build process consists of several separated building blocks, 5 which are linked together to form the perf bin 5 which are linked together to form the perf binary: 6 - libperf library (static) 6 - libperf library (static) 7 - perf builtin commands 7 - perf builtin commands 8 - traceevent library (static) 8 - traceevent library (static) 9 - GTK ui library 9 - GTK ui library 10 10 11 Several makefiles govern the perf build: 11 Several makefiles govern the perf build: 12 12 13 - Makefile 13 - Makefile 14 top level Makefile working as a wrapper th 14 top level Makefile working as a wrapper that calls the main 15 Makefile.perf with a -j option to do paral 15 Makefile.perf with a -j option to do parallel builds. 16 16 17 - Makefile.perf 17 - Makefile.perf 18 main makefile that triggers build of all p 18 main makefile that triggers build of all perf objects including 19 installation and documentation processing. 19 installation and documentation processing. 20 20 21 - tools/build/Makefile.build 21 - tools/build/Makefile.build 22 main makefile of the build framework 22 main makefile of the build framework 23 23 24 - tools/build/Build.include 24 - tools/build/Build.include 25 build framework generic definitions 25 build framework generic definitions 26 26 27 - Build makefiles 27 - Build makefiles 28 makefiles that defines build objects 28 makefiles that defines build objects 29 29 30 Please refer to tools/build/Documentation/Buil 30 Please refer to tools/build/Documentation/Build.txt for more 31 information about build framework. 31 information about build framework. 32 32 33 33 34 2) perf build 34 2) perf build 35 ============= 35 ============= 36 The Makefile.perf triggers the build framework 36 The Makefile.perf triggers the build framework for build objects: 37 perf, libperf, gtk 37 perf, libperf, gtk 38 38 39 resulting in following objects: 39 resulting in following objects: 40 $ ls *-in.o 40 $ ls *-in.o 41 gtk-in.o libperf-in.o perf-in.o 41 gtk-in.o libperf-in.o perf-in.o 42 42 43 Those objects are then used in final linking: 43 Those objects are then used in final linking: 44 libperf-gtk.so <- gtk-in.o libperf-in.o 44 libperf-gtk.so <- gtk-in.o libperf-in.o 45 perf <- perf-in.o libperf-in.o 45 perf <- perf-in.o libperf-in.o 46 46 47 47 48 NOTE this description is omitting other librar 48 NOTE this description is omitting other libraries involved, only 49 focusing on build framework outcomes 49 focusing on build framework outcomes 50 50 51 3) Build with ASan or UBSan 51 3) Build with ASan or UBSan 52 ========================== 52 ========================== 53 $ cd tools/perf 53 $ cd tools/perf 54 $ make DESTDIR=/usr 54 $ make DESTDIR=/usr 55 $ make DESTDIR=/usr install 55 $ make DESTDIR=/usr install 56 56 57 AddressSanitizer (or ASan) is a GCC feature th 57 AddressSanitizer (or ASan) is a GCC feature that detects memory corruption bugs 58 such as buffer overflows and memory leaks. 58 such as buffer overflows and memory leaks. 59 59 60 $ cd tools/perf 60 $ cd tools/perf 61 $ make DEBUG=1 EXTRA_CFLAGS='-fno-omit-frame 61 $ make DEBUG=1 EXTRA_CFLAGS='-fno-omit-frame-pointer -fsanitize=address' 62 $ ASAN_OPTIONS=log_path=asan.log ./perf reco 62 $ ASAN_OPTIONS=log_path=asan.log ./perf record -a 63 63 64 ASan outputs all detected issues into a log fi 64 ASan outputs all detected issues into a log file named 'asan.log.<pid>'. 65 65 66 UndefinedBehaviorSanitizer (or UBSan) is a fas 66 UndefinedBehaviorSanitizer (or UBSan) is a fast undefined behavior detector 67 supported by GCC. UBSan detects undefined beha 67 supported by GCC. UBSan detects undefined behaviors of programs at runtime. 68 68 69 $ cd tools/perf 69 $ cd tools/perf 70 $ make DEBUG=1 EXTRA_CFLAGS='-fno-omit-frame 70 $ make DEBUG=1 EXTRA_CFLAGS='-fno-omit-frame-pointer -fsanitize=undefined' 71 $ UBSAN_OPTIONS=print_stacktrace=1 ./perf re 71 $ UBSAN_OPTIONS=print_stacktrace=1 ./perf record -a 72 72 73 If UBSan detects any problem at runtime, it ou 73 If UBSan detects any problem at runtime, it outputs a “runtime error:” message. 74 << 75 4) Cross compilation << 76 ==================== << 77 As Multiarch is commonly supported in Linux di << 78 libraries for multiple architectures on the sa << 79 Linux perf. For example, Aarch64 libraries and << 80 an x86_64 machine, allowing us to compile perf << 81 << 82 Below is the command for building the perf wit << 83 << 84 $ cd /path/to/Linux << 85 $ make ARCH=arm64 CROSS_COMPILE=aarch64-linu << 86 << 87 For static linking, the option `LDFLAGS="-stat << 88 << 89 $ make ARCH=arm64 CROSS_COMPILE=aarch64-linu << 90 LDFLAGS="-static" -C tools/perf << 91 << 92 In the embedded system world, a use case is to << 93 configuration paths for cross building: << 94 << 95 $ PKG_CONFIG_SYSROOT_DIR="/path/to/cross/bui << 96 PKG_CONFIG_LIBDIR="/usr/lib/:/usr/local/li << 97 make ARCH=arm64 CROSS_COMPILE=aarch64-linu << 98 << 99 In this case, the variable PKG_CONFIG_SYSROOT_ << 100 variable PKG_CONFIG_LIBDIR or PKG_CONFIG_PATH << 101 the library paths for cross compilation. <<
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.