[PATCH 29/30] perf tools: Add support to configure builtin commands inclusion

Jiri Olsa
2015-01-02T15:38:17Z

NOTE: hack

Adding support to configure builtin commands inclusion
in the build, so we could later disable particular
builtin command.

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Cc: Alexis Berlemont <alexis.berlemont@gmail.com>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
---
tools/perf/Build | 53 ++++++++++++++++++++-----------------
tools/perf/Makefile.build | 3 +++
tools/perf/Makefile.perf | 7 +++--
tools/perf/builtin-cmds.h | 29 ++++++++++++++++++++
tools/perf/builtin-help.c | 1 +
tools/perf/config.default | 23 ++++++++++++++++
tools/perf/perf.c | 1 +
tools/perf/util/generate-cmdlist.sh | 10 +++++++
8 files changed, 101 insertions(+), 26 deletions(-)
create mode 100644 tools/perf/builtin-cmds.h
create mode 100644 tools/perf/config.default

diff --git a/tools/perf/Build b/tools/perf/Build
index c95d6378ad65..8e8f2c58f2b0 100644
--- a/tools/perf/Build
+++ b/tools/perf/Build
@@ -1,29 +1,34 @@
-perf-y += builtin-bench.o
-perf-y += builtin-annotate.o
-perf-y += builtin-diff.o
-perf-y += builtin-evlist.o
-perf-y += builtin-help.o
-perf-y += builtin-sched.o
-perf-y += builtin-buildid-list.o
-perf-y += builtin-buildid-cache.o
-perf-y += builtin-list.o
-perf-y += builtin-record.o
-perf-y += builtin-report.o
-perf-y += builtin-stat.o
-perf-y += builtin-timechart.o
-perf-y += builtin-top.o
-perf-y += builtin-script.o
-perf-y += builtin-kmem.o
-perf-y += builtin-lock.o
-perf-y += builtin-kvm.o
-perf-y += builtin-inject.o
-perf-y += builtin-mem.o
-
-perf-$(CONFIG_AUDIT) += builtin-trace.o
-perf-$(CONFIG_LIBELF) += builtin-probe.o
+perf-$(CONFIG_BUILTIN_BENCH) += builtin-bench.o
+perf-$(CONFIG_BUILTIN_ANNOTATE) += builtin-annotate.o
+perf-$(CONFIG_BUILTIN_DIFF) += builtin-diff.o
+perf-$(CONFIG_BUILTIN_EVLIST) += builtin-evlist.o
+perf-$(CONFIG_BUILTIN_HELP) += builtin-help.o
+perf-$(CONFIG_BUILTIN_SCHED) += builtin-sched.o
+perf-$(CONFIG_BUILTIN_BUILDID_LIST) += builtin-buildid-list.o
+perf-$(CONFIG_BUILTIN_BUILDID_CACHE) += builtin-buildid-cache.o
+perf-$(CONFIG_BUILTIN_LIST) += builtin-list.o
+perf-$(CONFIG_BUILTIN_RECORD) += builtin-record.o
+perf-$(CONFIG_BUILTIN_REPORT) += builtin-report.o
+perf-$(CONFIG_BUILTIN_STAT) += builtin-stat.o
+perf-$(CONFIG_BUILTIN_TIMECHART) += builtin-timechart.o
+perf-$(CONFIG_BUILTIN_TOP) += builtin-top.o
+perf-$(CONFIG_BUILTIN_SCRIPT) += builtin-script.o
+perf-$(CONFIG_BUILTIN_KMEM) += builtin-kmem.o
+perf-$(CONFIG_BUILTIN_LOCK) += builtin-lock.o
+perf-$(CONFIG_BUILTIN_KVM) += builtin-kvm.o
+perf-$(CONFIG_BUILTIN_INJECT) += builtin-inject.o
+perf-$(CONFIG_BUILTIN_MEM) += builtin-mem.o
+
+ifeq ($(CONFIG_AUDIT),y)
+perf-$(CONFIG_BUILTIN_TRACE) += builtin-trace.o
+endif
+
+ifeq ($(CONFIG_LIBELF),y)
+perf-$(CONFIG_BUILTIN_PROBE) += builtin-probe.o
+endif

perf-y += bench/
-perf-y += tests/
+perf-$(CONFIG_BUILTIN_TEST) += tests/

perf-y += perf.o

diff --git a/tools/perf/Makefile.build b/tools/perf/Makefile.build
index 54dc27e0acac..7c50b44e53f9 100644
--- a/tools/perf/Makefile.build
+++ b/tools/perf/Makefile.build
@@ -18,6 +18,9 @@ include Build.include
# do not force detected configuration
-include .config-detected

+# do not force user's configuration
+-include .config-user
+
# Init all relevant variables used in build files so
# 1) they have correct type
# 2) they do not inherit any value from the environment
diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf
index 45d30b8f947e..8203777120cd 100644
--- a/tools/perf/Makefile.perf
+++ b/tools/perf/Makefile.perf
@@ -250,7 +250,10 @@ export INSTALL SHELL_PATH

SHELL = $(SHELL_PATH)

-all: shell_compatibility_test $(ALL_PROGRAMS) $(LANG_BINDINGS) $(OTHER_PROGRAMS)
+config_def:
+ @cp config.default .config-user
+
+all: config_def shell_compatibility_test $(ALL_PROGRAMS) $(LANG_BINDINGS) $(OTHER_PROGRAMS)

please_set_SHELL_PATH_to_a_more_modern_shell:
@$$(:)
@@ -554,5 +557,5 @@ FORCE:

.PHONY: all install clean config-clean strip install-gtk
.PHONY: shell_compatibility_test please_set_SHELL_PATH_to_a_more_modern_shell
-.PHONY: $(GIT-HEAD-PHONY) TAGS tags cscope FORCE single_dep
+.PHONY: $(GIT-HEAD-PHONY) TAGS tags cscope FORCE single_dep config_def

diff --git a/tools/perf/builtin-cmds.h b/tools/perf/builtin-cmds.h
new file mode 100644
index 000000000000..5ceb4b58cfdd
--- /dev/null
+++ b/tools/perf/builtin-cmds.h
@@ -0,0 +1,29 @@
+#ifndef BUILTIN_CMDS_H
+#define BUILTIN_CMDS_H
+
+#define CONFIG_BUILTIN_REPORT
+#define CONFIG_BUILTIN_SCRIPT
+#define CONFIG_BUILTIN_BENCH
+#define CONFIG_BUILTIN_SCHED
+#define CONFIG_BUILTIN_TRACE
+#define CONFIG_BUILTIN_TOP
+#define CONFIG_BUILTIN_RECORD
+#define CONFIG_BUILTIN_BUILDID_LIST
+#define CONFIG_BUILTIN_INJECT
+#define CONFIG_BUILTIN_LOCK
+#define CONFIG_BUILTIN_KVM
+#define CONFIG_BUILTIN_BUILDID_CACHE
+#define CONFIG_BUILTIN_EVLIST
+#define CONFIG_BUILTIN_KMEM
+#define CONFIG_BUILTIN_STAT
+#define CONFIG_BUILTIN_DIFF
+#define CONFIG_BUILTIN_ANNOTATE
+#define CONFIG_BUILTIN_TIMECHART
+#define CONFIG_BUILTIN_LIST
+#define CONFIG_BUILTIN_HELP
+#define CONFIG_BUILTIN_PROBE
+#define CONFIG_BUILTIN_MEM
+#define CONFIG_BUILTIN_TEST
+
+#endif /* BUILTIN_CMDS_H */
+
diff --git a/tools/perf/builtin-help.c b/tools/perf/builtin-help.c
index 25d20628212e..2aa88a040bde 100644
--- a/tools/perf/builtin-help.c
+++ b/tools/perf/builtin-help.c
@@ -6,6 +6,7 @@
#include "perf.h"
#include "util/cache.h"
#include "builtin.h"
+#include "builtin-cmds.h"
#include "util/exec_cmd.h"
#include "common-cmds.h"
#include "util/parse-options.h"
diff --git a/tools/perf/config.default b/tools/perf/config.default
new file mode 100644
index 000000000000..2781af21b70b
--- /dev/null
+++ b/tools/perf/config.default
@@ -0,0 +1,23 @@
+CONFIG_BUILTIN_BENCH := y
+CONFIG_BUILTIN_ANNOTATE := y
+CONFIG_BUILTIN_DIFF := y
+CONFIG_BUILTIN_EVLIST := y
+CONFIG_BUILTIN_HELP := y
+CONFIG_BUILTIN_SCHED := y
+CONFIG_BUILTIN_BUILDID_LIST := y
+CONFIG_BUILTIN_BUILDID_CACHE := y
+CONFIG_BUILTIN_LIST := y
+CONFIG_BUILTIN_RECORD := y
+CONFIG_BUILTIN_REPORT := y
+CONFIG_BUILTIN_STAT := y
+CONFIG_BUILTIN_TIMECHART := y
+CONFIG_BUILTIN_TOP := y
+CONFIG_BUILTIN_SCRIPT := y
+CONFIG_BUILTIN_KMEM := y
+CONFIG_BUILTIN_LOCK := y
+CONFIG_BUILTIN_KVM := y
+CONFIG_BUILTIN_INJECT := y
+CONFIG_BUILTIN_MEM := y
+CONFIG_BUILTIN_TRACE := y
+CONFIG_BUILTIN_PROBE := y
+CONFIG_BUILTIN_TEST := y
diff --git a/tools/perf/perf.c b/tools/perf/perf.c
index 3700a7faca6c..7c5ceff22d47 100644
--- a/tools/perf/perf.c
+++ b/tools/perf/perf.c
@@ -7,6 +7,7 @@
* perf top, perf record, perf report, etc.) are started.
*/
#include "builtin.h"
+#include "builtin-cmds.h"

#include "util/exec_cmd.h"
#include "util/cache.h"
diff --git a/tools/perf/util/generate-cmdlist.sh b/tools/perf/util/generate-cmdlist.sh
index 36a885d2cd22..05ee30f724e0 100755
--- a/tools/perf/util/generate-cmdlist.sh
+++ b/tools/perf/util/generate-cmdlist.sh
@@ -1,5 +1,11 @@
#!/bin/sh

+function cfg()
+{
+ cfg=`echo $1 | tr '[:lower:]' '[:upper:]' | sed 's/-/_/g'`
+ echo "$cfg"
+}
+
echo "/* Automatically generated by $0 */
struct cmdname_help
{
@@ -13,6 +19,7 @@ sed -n -e 's/^perf-\([^ ]*\)[ ].* common.*/\1/p' command-list.txt |
sort |
while read cmd
do
+ echo "#ifdef CONFIG_BUILTIN_$(cfg $cmd)"
sed -n '
/^NAME/,/perf-'"$cmd"'/H
${
@@ -20,6 +27,7 @@ do
s/.*perf-'"$cmd"' - \(.*\)/ {"'"$cmd"'", "\1"},/
p
}' "Documentation/perf-$cmd.txt"
+ echo "#endif"
done

echo "#ifdef HAVE_LIBELF_SUPPORT"
@@ -27,6 +35,7 @@ sed -n -e 's/^perf-\([^ ]*\)[ ].* full.*/\1/p' command-list.txt |
sort |
while read cmd
do
+ echo "#ifdef CONFIG_BUILTIN_$(cfg $cmd)"
sed -n '
/^NAME/,/perf-'"$cmd"'/H
${
@@ -34,6 +43,7 @@ do
s/.*perf-'"$cmd"' - \(.*\)/ {"'"$cmd"'", "\1"},/
p
}' "Documentation/perf-$cmd.txt"
+ echo "#endif"
done
echo "#endif /* HAVE_LIBELF_SUPPORT */"
echo "};"
--
1.9.3