Skip to content

perf tools: New build framework

Jiri Olsa lkml 4 versions – In review

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v4 Latest36 patches 2 repliesIn review
  2. v336 patches 17 repliesSuperseded
  3. v236 patches 16 repliesSuperseded
Earlier versions · 1
VersionPostedPatchesRepliesStatus
v130 patches13 repliesSuperseded

Changes in v4 from the cover letter

- updated to the current Arnaldo's perf/core branch
- added Tested-by tags [Will, Sukadev]
- fixed common-cmds.h dependency [David]
- updated changelog for base arch patch 20/36 [David] perf build: Add arch x86 objects building
- added Copyright header for build framework files

Patches in v4 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/36tools build: Add new build supporttools/build/Build.include tools/build/Documentation/Build.txt tools/build/Makefile.build +13 more+435 -00 replies
2/36tools build: Add detected config supporttools/build/Makefile.build tools/perf/config/Makefile+7 -00 replies
3/36tools build: Add subdir supporttools/build/Makefile.build+7 -00 replies
4/36perf tools: Remove api fs object from python buildtools/perf/util/python-ext-sources+0 -10 replies
5/36perf build: Disable make's built-in rulestools/perf/Makefile.perf+4 -00 replies
6/36perf build: Add bench objects buildingtools/perf/Build tools/perf/Makefile.perf tools/perf/bench/Build +1 more+31 -220 replies
7/36perf build: Add tests objects buildingtools/perf/Build tools/perf/Makefile.perf tools/perf/config/Makefile +1 more+53 -550 replies
8/36perf build: Add builtin objects buildingtools/perf/Build tools/perf/Makefile.perf tools/perf/config/Makefile+34 -360 replies
9/36perf build: Add libperf objects buildingtools/build/Makefile.build tools/perf/Build tools/perf/Makefile.perf +3 more+141 -1260 replies
10/36perf build: Add probe objects buildingtools/perf/Build tools/perf/Makefile.perf tools/perf/config/Makefile +1 more+10 -180 replies
11/36perf build: Add dwarf objects buildingtools/perf/Makefile.perf tools/perf/config/Makefile tools/perf/util/Build+4 -70 replies
12/36perf build: Add dwarf unwind objects buildingtools/perf/Makefile.perf tools/perf/config/Makefile tools/perf/util/Build+5 -90 replies
13/36perf build: Add ui objects buildingtools/perf/Build tools/perf/Makefile.perf tools/perf/config/Makefile +1 more+10 -100 replies
14/36perf build: Add slang objects buildingtools/perf/Makefile.perf tools/perf/config/Makefile tools/perf/ui/Build +2 more+21 -330 replies
15/36perf build: Add gtk objects buildingtools/perf/Build tools/perf/Makefile.perf tools/perf/config/Makefile +1 more+17 -120 replies
16/36perf build: Add scripts objects buildingtools/perf/Build tools/perf/Makefile.perf tools/perf/config/Makefile +5 more+21 -220 replies
17/36perf build: Add perf regs objects buildingtools/perf/Makefile.perf tools/perf/config/Makefile tools/perf/util/Build+6 -70 replies
18/36perf build: Add zlib objects buildingtools/perf/Makefile.perf tools/perf/config/Makefile tools/perf/util/Build+2 -40 replies
19/36perf build: Add perf.o object buildingtools/perf/Build tools/perf/Makefile.perf+8 -110 replies
20/36perf build: Add arch x86 objects buildingtools/perf/arch/Build tools/perf/arch/arm/Build tools/perf/arch/arm64/Build +8 more+13 -150 replies
21/36perf build: Add arch arm objects buildingtools/perf/arch/arm/Build tools/perf/arch/arm/Makefile tools/perf/arch/arm/tests/Build +1 more+8 -110 replies
22/36perf build: Add arch arm64 objects buildingtools/perf/arch/arm64/Build tools/perf/arch/arm64/Makefile tools/perf/arch/arm64/util/Build+3 -40 replies
23/36perf build: Add arch powerpc objects buildingtools/perf/arch/powerpc/Build tools/perf/arch/powerpc/Makefile tools/perf/arch/powerpc/util/Build+5 -30 replies
24/36perf build: Add arch s390 objects buildingtools/perf/arch/s390/Build tools/perf/arch/s390/Makefile tools/perf/arch/s390/util/Build+5 -30 replies
25/36perf build: Add arch sh objects buildingtools/perf/arch/sh/Build tools/perf/arch/sh/Makefile tools/perf/arch/sh/util/Build+2 -10 replies
26/36perf build: Add arch sparc objects buildingtools/perf/arch/sparc/Build tools/perf/arch/sparc/Makefile tools/perf/arch/sparc/util/Build+2 -10 replies
27/36perf build: Add single target build framework supporttools/build/Makefile.build tools/perf/Makefile.perf tools/perf/util/Build+55 -120 replies
28/36perf build: Remove directory dependency rulestools/perf/Makefile.perf+0 -150 replies
29/36perf build: Remove uneeded variablestools/perf/Makefile.perf+5 -1200 replies
30/36perf build: Remove PERF-CFLAGS filetools/perf/Makefile.perf+3 -140 replies
31/36perf build: Add build documentationtools/perf/Documentation/Build.txt+49 -00 replies
32/36tools lib api: Use tools build frameworktools/lib/api/Build tools/lib/api/Makefile tools/lib/api/fd/Build +2 more+32 -420 replies
33/36tools lib api: Rename libapikfs.a to libapi.atools/lib/api/Build tools/lib/api/Makefile tools/lib/api/fd/Build +2 more+12 -120 replies
34/36tools lib traceevent: Use tools build frameworktools/lib/traceevent/Build tools/lib/traceevent/Makefile tools/perf/Makefile.perf+59 -1290 replies
35/36tools lib lockdep: Use tools build frameworktools/lib/lockdep/Build tools/lib/lockdep/Makefile+24 -1090 replies
36/36perf build: Display make commands on V=1tools/build/Makefile.build tools/perf/Makefile.perf+30 -220 replies

Reviews trailers per patch

None of the 36 patches has a Reviewed-by or Acked-by.

PatchSukadev BhattiproluWill Deacon
SeriesT-b T-b
1/36T-b T-b
2/36T-b T-b
3/36T-b T-b
4/36T-b T-b
5/36T-b T-b
6/36T-b T-b
7/36T-b T-b
8/36T-b T-b
9/36T-b T-b
10/36T-b T-b
11/36T-b T-b
12/36T-b T-b
13/36T-b T-b
14/36T-b T-b
15/36T-b T-b
16/36T-b T-b
17/36T-b T-b
18/36T-b T-b
19/36T-b T-b
20/36T-b T-b
21/36T-b T-b
22/36T-b T-b
23/36T-b T-b
24/36T-b T-b
25/36T-b T-b
26/36T-b T-b
27/36T-b T-b
28/36T-b T-b
29/36T-b T-b
30/36T-b T-b
31/36T-b T-b
32/36T-b T-b
33/36T-b T-b
34/36T-b T-b
35/36
36/36T-b T-b

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.

Read the v4 thread

Cover letter [PATCHv4 00/36] perf tools: New build framework

hi,
I'm following up on latest post from Alexis:
http://marc.info/?l=linux-kernel&m=141427580405357&w=2

thanks for feedback and testing!

v4 changes:
- updated to the current Arnaldo's perf/core branch
- added Tested-by tags [Will, Sukadev]
- fixed common-cmds.h dependency [David]
- updated changelog for base arch patch 20/36 [David] perf build: Add arch x86 objects building
- added Copyright header for build framework files

v3 changes:
- disabling only builtin rules, keeping builtin variables in place because some projects we depends on using them (traceevent) [David]
- fixed empy source list issue that happened on arm [Will, Mark]
- updated to the current Arnaldo's perf/core branch
- added automated tests into: tools/build/tests/
- tested on arm64,ppc64,s390,x86_64,i386

v2 changes:
- build Makefiles librarized and moved to 'tools/build' [Ingo]
- several minor fixies [Namhyung]
- tested on other archs now - x86_64, i386, powerpc
- moved tools/lib/* under new build framework to show that it's possible ;-)
included traceevent/lockdep maintainers to get the feedback
- omitted last 2 patches

The patchset is also available in:
git://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf.git
perf/build

All tests/make tests passed.

Since it's actually small portion of kbuild that perf needs, I realized it's actually better to steal it than 'reconfigure' kbuild to be usable for perf.

Also this patchset is kind of incremental version of the latest:
perf tools: Add kbuild support into Makefile.kbuild
so it should be easier to review.

NOTE I couldn't find any copyright/credit messages in the kbuild system, but would be happy to include it if someone suggests one.

The idea and more details are explained in the 'Documentation/Build' file. The basic idea is the same as in kbuild system, with some minor changes to allow for multiple binaries build definitions.

User provides 'Build' files with objects definitions like:
perf-y += perf.o
perf-y += builtin-bench.o
...

libperf-y += util/
...

and the build framework outputs files:
perf-in.o
libperf-in.o

which are then linked into appropriate binaries/libraries. (perf libperf.a libperf-gtk.so)

Also now we have the full dependency check ((gcc -Wp,-MD,... stuff) and build command line is stored/checked automatically by the build system.

thanks,
jirka

Cc Adrian Hunter <[email protected]>
Cc Alexis Berlemont <[email protected]>
Cc Andi Kleen <[email protected]>
Cc Anton Blanchard <[email protected]>
Cc Arnaldo Carvalho de Melo <[email protected]>
Cc Borislav Petkov <[email protected]>
Cc Borislav Petkov <[email protected]>
Cc Corey Ashford <[email protected]>
Cc David Ahern <[email protected]>
Cc Florian Fainelli <[email protected]>
Cc Frederic Weisbecker <[email protected]>
Cc Ingo Molnar <[email protected]>
Cc Jan Heylen <[email protected]>
Cc Mark Salter <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Paul Mackerras <[email protected]>
Cc Peter Zijlstra <[email protected]>
Cc S. Lockwood-Childs <[email protected]>
Cc Sam Ravnborg <[email protected]>
Cc Sasha Levin <[email protected]>
Cc Stephane Eranian <[email protected]>
Cc Steven Rostedt <[email protected]>
Cc Sukadev Bhattiprolu <[email protected]>
Cc Will Deacon <[email protected]>

---
Jiri Olsa (36):
tools build: Add new build support
tools build: Add detected config support tools build: Add subdir support
perf tools: Remove api fs object from python build perf build: Disable make's built-in rules perf build: Add bench objects building
perf build: Add tests objects building
perf build: Add builtin objects building perf build: Add libperf objects building perf build: Add probe objects building
perf build: Add dwarf objects building
perf build: Add dwarf unwind objects building perf build: Add ui objects building
perf build: Add slang objects building
perf build: Add gtk objects building
perf build: Add scripts objects building perf build: Add perf regs objects building perf build: Add zlib objects building
perf build: Add perf.o object building
perf build: Add arch x86 objects building perf build: Add arch arm objects building perf build: Add arch arm64 objects building perf build: Add arch powerpc objects building perf build: Add arch s390 objects building perf build: Add arch sh objects building perf build: Add arch sparc objects building perf build: Add single target build framework support perf build: Remove directory dependency rules perf build: Remove uneeded variables
perf build: Remove PERF-CFLAGS file
perf build: Add build documentation
tools lib api: Use tools build framework tools lib api: Rename libapikfs.a to libapi.a tools lib traceevent: Use tools build framework tools lib lockdep: Use tools build framework perf build: Display make commands on V=1

 tools/build/Build.include                       |  81 ++++
 tools/build/Documentation/Build.txt             | 132 ++++++
 tools/build/Makefile.build                      | 130 +++++
 tools/build/tests/ex/Build                      |   8 +
 tools/build/tests/ex/Makefile                   |  23 +
 tools/build/tests/ex/a.c                        |   5 +
 tools/build/tests/ex/arch/Build                 |   2 +
 tools/build/tests/ex/arch/e.c                   |   5 +
 tools/build/tests/ex/arch/f.c                   |   5 +
 tools/build/tests/ex/b.c                        |   5 +
 tools/build/tests/ex/c.c                        |   5 +
 tools/build/tests/ex/d.c                        |   5 +
 tools/build/tests/ex/empty/Build                |   0
 tools/build/tests/ex/ex.c                       |  19 +
 tools/build/tests/run.sh                        |  42 ++
 tools/lib/api/Build                             |   2 +
 tools/lib/api/Makefile                          |  57 +--
 tools/lib/api/fd/Build                          |   1 +
 tools/lib/api/fs/Build                          |   2 +
 tools/lib/lockdep/Build                         |   1 +
 tools/lib/lockdep/Makefile                      | 132 +-----
 tools/lib/traceevent/Build                      |  17 +
 tools/lib/traceevent/Makefile                   | 161 ++-----
 tools/perf/Build                                |  43 ++
 tools/perf/Documentation/Build.txt              |  49 ++
 tools/perf/MANIFEST                             |   1 +
 tools/perf/Makefile.perf                        | 605 +++---------------------
 tools/perf/arch/Build                           |   2 +
 tools/perf/arch/arm/Build                       |   2 +
 tools/perf/arch/arm/Makefile                    |  11 -
 tools/perf/arch/arm/tests/Build                 |   2 +
 tools/perf/arch/arm/util/Build                  |   4 +
 tools/perf/arch/arm64/Build                     |   1 +
 tools/perf/arch/arm64/Makefile                  |   4 -
 tools/perf/arch/arm64/util/Build                |   2 +
 tools/perf/arch/powerpc/Build                   |   1 +
 tools/perf/arch/powerpc/Makefile                |   3 -
 tools/perf/arch/powerpc/util/Build              |   4 +
 tools/perf/arch/s390/Build                      |   1 +
 tools/perf/arch/s390/Makefile                   |   3 -
 tools/perf/arch/s390/util/Build                 |   4 +
 tools/perf/arch/sh/Build                        |   1 +
 tools/perf/arch/sh/Makefile                     |   1 -
 tools/perf/arch/sh/util/Build                   |   1 +
 tools/perf/arch/sparc/Build                     |   1 +
 tools/perf/arch/sparc/Makefile                  |   1 -
 tools/perf/arch/sparc/util/Build                |   1 +
 tools/perf/arch/x86/Build                       |   2 +
 tools/perf/arch/x86/Makefile                    |  15 -
 tools/perf/arch/x86/tests/Build                 |   2 +
 tools/perf/arch/x86/util/Build                  |   8 +
 tools/perf/bench/Build                          |  11 +
 tools/perf/config/Makefile                      |  41 ++
 tools/perf/scripts/Build                        |   2 +
 tools/perf/scripts/perl/Perf-Trace-Util/Build   |   3 +
 tools/perf/scripts/python/Perf-Trace-Util/Build |   3 +
 tools/perf/tests/Build                          |  42 ++
 tools/perf/ui/Build                             |  14 +
 tools/perf/ui/browsers/Build                    |  10 +
 tools/perf/ui/gtk/Build                         |   9 +
 tools/perf/ui/tui/Build                         |   4 +
 tools/perf/util/Build                           | 142 ++++++
 tools/perf/util/python-ext-sources              |   1 -
 tools/perf/util/scripting-engines/Build         |   6 +
 64 files changed, 1070 insertions(+), 833 deletions(-)
 create mode 100644 tools/build/Build.include
 create mode 100644 tools/build/Documentation/Build.txt
 create mode 100644 tools/build/Makefile.build
 create mode 100644 tools/build/tests/ex/Build
 create mode 100644 tools/build/tests/ex/Makefile
 create mode 100644 tools/build/tests/ex/a.c
 create mode 100644 tools/build/tests/ex/arch/Build
 create mode 100644 tools/build/tests/ex/arch/e.c
 create mode 100644 tools/build/tests/ex/arch/f.c
 create mode 100644 tools/build/tests/ex/b.c
 create mode 100644 tools/build/tests/ex/c.c
 create mode 100644 tools/build/tests/ex/d.c
 create mode 100644 tools/build/tests/ex/empty/Build
 create mode 100644 tools/build/tests/ex/ex.c
 create mode 100755 tools/build/tests/run.sh
 create mode 100644 tools/lib/api/Build
 create mode 100644 tools/lib/api/fd/Build
 create mode 100644 tools/lib/api/fs/Build
 create mode 100644 tools/lib/lockdep/Build
 create mode 100644 tools/lib/traceevent/Build
 create mode 100644 tools/perf/Build
 create mode 100644 tools/perf/Documentation/Build.txt
 create mode 100644 tools/perf/arch/Build
 create mode 100644 tools/perf/arch/arm/Build
 create mode 100644 tools/perf/arch/arm/tests/Build
 create mode 100644 tools/perf/arch/arm/util/Build
 create mode 100644 tools/perf/arch/arm64/Build
 create mode 100644 tools/perf/arch/arm64/util/Build
 create mode 100644 tools/perf/arch/powerpc/Build
 create mode 100644 tools/perf/arch/powerpc/util/Build
 create mode 100644 tools/perf/arch/s390/Build
 create mode 100644 tools/perf/arch/s390/util/Build
 create mode 100644 tools/perf/arch/sh/Build
 create mode 100644 tools/perf/arch/sh/util/Build
 create mode 100644 tools/perf/arch/sparc/Build
 create mode 100644 tools/perf/arch/sparc/util/Build
 create mode 100644 tools/perf/arch/x86/Build
 create mode 100644 tools/perf/arch/x86/tests/Build
 create mode 100644 tools/perf/arch/x86/util/Build
 create mode 100644 tools/perf/bench/Build
 create mode 100644 tools/perf/scripts/Build
 create mode 100644 tools/perf/scripts/perl/Perf-Trace-Util/Build
 create mode 100644 tools/perf/scripts/python/Perf-Trace-Util/Build
 create mode 100644 tools/perf/tests/Build
 create mode 100644 tools/perf/ui/Build
 create mode 100644 tools/perf/ui/browsers/Build
 create mode 100644 tools/perf/ui/gtk/Build
 create mode 100644 tools/perf/ui/tui/Build
 create mode 100644 tools/perf/util/Build
 create mode 100644 tools/perf/util/scripting-engines/Build