Skip to contentSkip to conversation

tools build: Move features framework into tools/build

PATCH In review Jiri Olsa 3 participants 23 messages Mar 11, 2015 – Mar 18, 2015 perf events

lore
Share & tools
lore

Jiri Olsa

author reviewer
#0 lore raw

v2 cover tools build: Move features framework into tools/build

hi,
moving features detection framework from perf to 'tools/build' plus other minor fixes.

v2 changes:
- omitted patch 1 from original version (Ingo)
- added features build output dump (Arnaldo)
- better scripting in features test (Namhyung)
- fixed test-all for pthread-attr-setaffinity-np
- removed main_test_libbabeltrace from test-all
- patches reordered

It's also available in:
git://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf.git
perf/build

thanks,
jirka

Cc Arnaldo Carvalho de Melo <[email protected]>
Cc Corey Ashford <[email protected]>
Cc David Ahern <[email protected]>
Cc Ingo Molnar <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Paul Mackerras <[email protected]>
Cc Peter Zijlstra <[email protected]>

---
Jiri Olsa (15):
perf build: Disable default check for libbabeltrace
perf build: Add dump of features build
perf build: Fix pthread-attr-setaffinity-np include in test-all perf build: Get rid of LIB_INCLUDE variable
perf build: Rename CORE_FEATURE_TESTS to FEATURE_TESTS perf build: Get rid of VF_FEATURE_TESTS
perf build: Rename display_lib into feature_display
perf build: Rename display_vf to feature_verbose
perf build: Rename PERF-FEATURES into FEATURE-DUMP
perf build: Rename feature_print_var_code to print_var_code perf build: Separate feature make support into config/Makefile.feature perf build: Make features checks directory configurable tools build: Move feature checks code under tools/build tools build: Allow to override feature checks setup
tools build: Fix feature_check name clash

 tools/build/Documentation/Feature.txt              |  93 +++++++++
 tools/build/Makefile.feature                       | 169 ++++++++++++++++
 .../feature-checks => build/feature}/.gitignore    |   0
 .../feature-checks => build/feature}/Makefile      |   7 +-
 .../feature-checks => build/feature}/test-all.c    |  11 +-
 .../feature}/test-backtrace.c                      |   0
 .../feature-checks => build/feature}/test-bionic.c |   0
 .../feature}/test-compile.c                        |   0
 .../feature}/test-cplus-demangle.c                 |   0
 .../feature-checks => build/feature}/test-dwarf.c  |   0
 .../feature}/test-fortify-source.c                 |   0
 .../feature-checks => build/feature}/test-glibc.c  |   0
 .../feature}/test-gtk2-infobar.c                   |   0
 .../feature-checks => build/feature}/test-gtk2.c   |   0
 .../feature-checks => build/feature}/test-hello.c  |   0
 .../feature}/test-libaudit.c                       |   0
 .../feature}/test-libbabeltrace.c                  |   0
 .../feature-checks => build/feature}/test-libbfd.c |   0
 .../feature}/test-libdw-dwarf-unwind.c             |   0
 .../feature}/test-libelf-getphdrnum.c              |   0
 .../feature}/test-libelf-mmap.c                    |   0
 .../feature-checks => build/feature}/test-libelf.c |   0
 .../feature}/test-libnuma.c                        |   0
 .../feature}/test-libperl.c                        |   0
 .../feature}/test-libpython-version.c              |   0
 .../feature}/test-libpython.c                      |   0
 .../feature}/test-libslang.c                       |   0
 .../feature}/test-libunwind-debug-frame.c          |   0
 .../feature}/test-libunwind.c                      |   0
 .../feature}/test-pthread-attr-setaffinity-np.c    |   0
 .../feature}/test-stackprotector-all.c             |   0
 .../feature}/test-sync-compare-and-swap.c          |   0
 .../feature}/test-timerfd.c                        |   0
 .../feature-checks => build/feature}/test-zlib.c   |   0
 tools/build/tests/features/Makefile                |  23 +++
 tools/build/tests/features/Makefile.test1          |  16 ++
 tools/build/tests/run.sh                           |   4 +-
 tools/perf/Makefile.perf                           |   4 +-
 tools/perf/config/Makefile                         | 212 ++-------------------
 39 files changed, 334 insertions(+), 205 deletions(-)
 create mode 100644 tools/build/Documentation/Feature.txt
 create mode 100644 tools/build/Makefile.feature
 rename tools/{perf/config/feature-checks => build/feature}/.gitignore (100%)
 rename tools/{perf/config/feature-checks => build/feature}/Makefile (93%)
 rename tools/{perf/config/feature-checks => build/feature}/test-all.c (92%)
 rename tools/{perf/config/feature-checks => build/feature}/test-backtrace.c (100%)
 rename tools/{perf/config/feature-checks => build/feature}/test-bionic.c (100%)
 rename tools/{perf/config/feature-checks => build/feature}/test-compile.c (100%)
 rename tools/{perf/config/feature-checks => build/feature}/test-cplus-demangle.c (100%)
 rename tools/{perf/config/feature-checks => build/feature}/test-dwarf.c (100%)
 rename tools/{perf/config/feature-checks => build/feature}/test-fortify-source.c (100%)
 rename tools/{perf/config/feature-checks => build/feature}/test-glibc.c (100%)
 rename tools/{perf/config/feature-checks => build/feature}/test-gtk2-infobar.c (100%)
 rename tools/{perf/config/feature-checks => build/feature}/test-gtk2.c (100%)
 rename tools/{perf/config/feature-checks => build/feature}/test-hello.c (100%)
 rename tools/{perf/config/feature-checks => build/feature}/test-libaudit.c (100%)
 rename tools/{perf/config/feature-checks => build/feature}/test-libbabeltrace.c (100%)
 rename tools/{perf/config/feature-checks => build/feature}/test-libbfd.c (100%)
 rename tools/{perf/config/feature-checks => build/feature}/test-libdw-dwarf-unwind.c (100%)
 rename tools/{perf/config/feature-checks => build/feature}/test-libelf-getphdrnum.c (100%)
 rename tools/{perf/config/feature-checks => build/feature}/test-libelf-mmap.c (100%)
 rename tools/{perf/config/feature-checks => build/feature}/test-libelf.c (100%)
 rename tools/{perf/config/feature-checks => build/feature}/test-libnuma.c (100%)
 rename tools/{perf/config/feature-checks => build/feature}/test-libperl.c (100%)
 rename tools/{perf/config/feature-checks => build/feature}/test-libpython-version.c (100%)
 rename tools/{perf/config/feature-checks => build/feature}/test-libpython.c (100%)
 rename tools/{perf/config/feature-checks => build/feature}/test-libslang.c (100%)
 rename tools/{perf/config/feature-checks => build/feature}/test-libunwind-debug-frame.c (100%)
 rename tools/{perf/config/feature-checks => build/feature}/test-libunwind.c (100%)
 rename tools/{perf/config/feature-checks => build/feature}/test-pthread-attr-setaffinity-np.c (100%)
 rename tools/{perf/config/feature-checks => build/feature}/test-stackprotector-all.c (100%)
 rename tools/{perf/config/feature-checks => build/feature}/test-sync-compare-and-swap.c (100%)
 rename tools/{perf/config/feature-checks => build/feature}/test-timerfd.c (100%)
 rename tools/{perf/config/feature-checks => build/feature}/test-zlib.c (100%)
 create mode 100644 tools/build/tests/features/Makefile
 create mode 100644 tools/build/tests/features/Makefile.test1
author reviewer
#1 lore raw

PATCH v2 1/15 perf build: Disable default check for libbabeltrace

Remove libbabeltrace check from default features set, because the requested version is not released yet in most distributions. We'll enable later.

Calling libbabeltrace check manually via feature_check before $(feature-libbabeltrace) is used.

Cc Arnaldo Carvalho de Melo <[email protected]>
Cc Corey Ashford <[email protected]>
Cc David Ahern <[email protected]>
Cc Ingo Molnar <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Paul Mackerras <[email protected]>
Cc Peter Zijlstra <[email protected]>
---
 tools/perf/config/Makefile                  | 11 +++++------
 tools/perf/config/feature-checks/Makefile   |  2 +-
 tools/perf/config/feature-checks/test-all.c |  9 ++++++++-
 3 files changed, 14 insertions(+), 8 deletions(-)
tools/perf/config/Makefile +5 -6
index d44c64d64465..45f61253ccce 100644
@@ -227,7 +227,6 @@ CORE_FEATURE_TESTS =			\
 	stackprotector-all		\
 	timerfd				\
 	libdw-dwarf-unwind		\
-	libbabeltrace			\
 	zlib
 
 LIB_FEATURE_TESTS =			\
@@ -243,7 +242,6 @@ LIB_FEATURE_TESTS =			\
 	libslang			\
 	libunwind			\
 	libdw-dwarf-unwind		\
-	libbabeltrace			\
 	zlib
 
 VF_FEATURE_TESTS =			\
@@ -705,14 +703,15 @@ else
 endif
 
 ifndef NO_LIBBABELTRACE
-  ifeq ($(feature-libbabeltrace), 0)
-    msg := $(warning No libbabeltrace found, disables 'perf data' CTF format support, please install libbabeltrace-dev[el]/libbabeltrace-ctf-dev);
-    NO_LIBBABELTRACE := 1
-  else
+  $(call feature_check,libbabeltrace)
+  ifeq ($(feature-libbabeltrace), 1)
     CFLAGS += -DHAVE_LIBBABELTRACE_SUPPORT $(LIBBABELTRACE_CFLAGS)
     LDFLAGS += $(LIBBABELTRACE_LDFLAGS)
     EXTLIBS += -lbabeltrace-ctf
     $(call detected,CONFIG_LIBBABELTRACE)
+  else
+    msg := $(warning No libbabeltrace found, disables 'perf data' CTF format support, please install libbabeltrace-dev[el]/libbabeltrace-ctf-dev);
+    NO_LIBBABELTRACE := 1
   endif
 endif
 
tools/perf/config/feature-checks/Makefile +1 -1
index 8fe067864957..b6e2e312ba54 100644
@@ -44,7 +44,7 @@ BUILD = $(CC) $(CFLAGS) -Wall -Werror -o $(OUTPUT)$@ $(patsubst %.bin,%.c,$@) $(
 ###############################
 
 test-all.bin:
-	$(BUILD) -fstack-protector-all -O2 -D_FORTIFY_SOURCE=2 -ldw -lelf -lnuma -lelf -laudit -I/usr/include/slang -lslang $(shell $(PKG_CONFIG) --libs --cflags gtk+-2.0 2>/dev/null) $(FLAGS_PERL_EMBED) $(FLAGS_PYTHON_EMBED) -DPACKAGE='"perf"' -lbfd -ldl -lz -lbabeltrace
+	$(BUILD) -fstack-protector-all -O2 -D_FORTIFY_SOURCE=2 -ldw -lelf -lnuma -lelf -laudit -I/usr/include/slang -lslang $(shell $(PKG_CONFIG) --libs --cflags gtk+-2.0 2>/dev/null) $(FLAGS_PERL_EMBED) $(FLAGS_PYTHON_EMBED) -DPACKAGE='"perf"' -lbfd -ldl -lz
 
 test-hello.bin:
 	$(BUILD)
tools/perf/config/feature-checks/test-all.c +8 -1
index 1ffc3da5ca10..06f5c8a67cb2 100644
@@ -101,9 +101,17 @@
 # include "test-pthread_attr_setaffinity_np.c"
 #undef main
 
+# if 0
+/*
+ * Disable libbabeltrace check for test-all, because the requested
+ * library version is not released yet in most distributions. Will
+ * reenable later.
+ */
+
 #define main main_test_libbabeltrace
 # include "test-libbabeltrace.c"
 #undef main
+#endif
 
 int main(int argc, char *argv[])
 {
@@ -130,7 +138,6 @@ int main(int argc, char *argv[])
 	main_test_sync_compare_and_swap(argc, argv);
 	main_test_zlib();
 	main_test_pthread_attr_setaffinity_np();
-	main_test_libbabeltrace();
 
 	return 0;
 }
Signature · 1 line
1.9.3
#2 lore raw

Re: [PATCH 01/15] perf build: Disable default check for libbabeltrace

Em Wed, Mar 11, 2015 at 09:58:50AM +0100, Jiri Olsa escreveu:

Quoted 6 lines

Remove libbabeltrace check from default features set, because the requested version is not released yet in most distributions. We'll enable later.

Calling libbabeltrace check manually via feature_check before $(feature-libbabeltrace) is used.

So, before this patch:

[acme@ssdandy perf]$ make
BUILD: Doing 'make -j8' parallel build
config/Makefile:425: No libunwind found. Please install libunwind-dev[el] >= 1.1 and/or set LIBUNWIND_DIR config/Makefile:709: No libbabeltrace found, disables 'perf data' CTF format support, please install libbabeltrace-dev[el]/libbabeltrace-ctf-dev

Auto-detecting system features:

...                         dwarf: [ on  ]
...                         glibc: [ on  ]
...                          gtk2: [ on  ]
...                      libaudit: [ on  ]
...                        libbfd: [ on  ]
...                        libelf: [ on  ]
...                       libnuma: [ on  ]
...                       libperl: [ on  ]
...                     libpython: [ on  ]
...                      libslang: [ on  ]

... libunwind: [ OFF ]
... libdw-dwarf-unwind: [ on ]
... libbabeltrace: [ OFF ]
... zlib: [ on ]
... DWARF post unwind library: libdw

It tries to build babeltrace in, does not find the devel files, emits that "No libbabeltrace found" and then marks it as OFF, ok.

Now, I am ok with the intent of this patch, but... After applying it we get:

[acme@ssdandy linux]$ cd -
/home/acme/git/linux/tools/perf
[acme@ssdandy perf]$
[acme@ssdandy perf]$ make
BUILD: Doing 'make -j8' parallel build
config/Makefile:423: No libunwind found. Please install libunwind-dev[el] >= 1.1 and/or set LIBUNWIND_DIR config/Makefile:713: No libbabeltrace found, disables 'perf data' CTF format support, please install libbabeltrace-dev[el]/libbabeltrace-ctf-dev

Auto-detecting system features:

...                         dwarf: [ on  ]
...                         glibc: [ on  ]
...                          gtk2: [ on  ]
...                      libaudit: [ on  ]
...                        libbfd: [ on  ]
...                        libelf: [ on  ]
...                       libnuma: [ on  ]
...                       libperl: [ on  ]
...                     libpython: [ on  ]
...                      libslang: [ on  ]

... libunwind: [ OFF ]
... libdw-dwarf-unwind: [ on ]
... zlib: [ on ]
... DWARF post unwind library: libdw

GEN common-cmds.h

It continues trying to find babeltrace, does not find it, emits the warning and just doesn't show the OFF message :-\

Can you explain _why_ this is needed? I.e. is it to speed up feature checking? In what way, etc. For casual readers the intent of this patch may be difficult to grasp, no?

What am I missing?

- Arnaldo

Quoted 100 lines
Cc Arnaldo Carvalho de Melo <[email protected]>
Cc Corey Ashford <[email protected]>
Cc David Ahern <[email protected]>
Cc Ingo Molnar <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Paul Mackerras <[email protected]>
Cc Peter Zijlstra <[email protected]>
---
 tools/perf/config/Makefile                  | 11 +++++------
 tools/perf/config/feature-checks/Makefile   |  2 +-
 tools/perf/config/feature-checks/test-all.c |  9 ++++++++-
 3 files changed, 14 insertions(+), 8 deletions(-)
tools/perf/config/Makefile +5 -6
index d44c64d64465..45f61253ccce 100644
@@ -227,7 +227,6 @@ CORE_FEATURE_TESTS =			\
 	stackprotector-all		\
 	timerfd				\
 	libdw-dwarf-unwind		\
-	libbabeltrace			\
 	zlib
 
 LIB_FEATURE_TESTS =			\
@@ -243,7 +242,6 @@ LIB_FEATURE_TESTS =			\
 	libslang			\
 	libunwind			\
 	libdw-dwarf-unwind		\
-	libbabeltrace			\
 	zlib
 
 VF_FEATURE_TESTS =			\
@@ -705,14 +703,15 @@ else
 endif
 
 ifndef NO_LIBBABELTRACE
-  ifeq ($(feature-libbabeltrace), 0)
-    msg := $(warning No libbabeltrace found, disables 'perf data' CTF format support, please install libbabeltrace-dev[el]/libbabeltrace-ctf-dev);
-    NO_LIBBABELTRACE := 1
-  else
+  $(call feature_check,libbabeltrace)
+  ifeq ($(feature-libbabeltrace), 1)
     CFLAGS += -DHAVE_LIBBABELTRACE_SUPPORT $(LIBBABELTRACE_CFLAGS)
     LDFLAGS += $(LIBBABELTRACE_LDFLAGS)
     EXTLIBS += -lbabeltrace-ctf
     $(call detected,CONFIG_LIBBABELTRACE)
+  else
+    msg := $(warning No libbabeltrace found, disables 'perf data' CTF format support, please install libbabeltrace-dev[el]/libbabeltrace-ctf-dev);
+    NO_LIBBABELTRACE := 1
   endif
 endif
 
tools/perf/config/feature-checks/Makefile +1 -1
index 8fe067864957..b6e2e312ba54 100644
@@ -44,7 +44,7 @@ BUILD = $(CC) $(CFLAGS) -Wall -Werror -o $(OUTPUT)$@ $(patsubst %.bin,%.c,$@) $(
 ###############################
 
 test-all.bin:
-	$(BUILD) -fstack-protector-all -O2 -D_FORTIFY_SOURCE=2 -ldw -lelf -lnuma -lelf -laudit -I/usr/include/slang -lslang $(shell $(PKG_CONFIG) --libs --cflags gtk+-2.0 2>/dev/null) $(FLAGS_PERL_EMBED) $(FLAGS_PYTHON_EMBED) -DPACKAGE='"perf"' -lbfd -ldl -lz -lbabeltrace
+	$(BUILD) -fstack-protector-all -O2 -D_FORTIFY_SOURCE=2 -ldw -lelf -lnuma -lelf -laudit -I/usr/include/slang -lslang $(shell $(PKG_CONFIG) --libs --cflags gtk+-2.0 2>/dev/null) $(FLAGS_PERL_EMBED) $(FLAGS_PYTHON_EMBED) -DPACKAGE='"perf"' -lbfd -ldl -lz
 
 test-hello.bin:
 	$(BUILD)
tools/perf/config/feature-checks/test-all.c +8 -1
index 1ffc3da5ca10..06f5c8a67cb2 100644
@@ -101,9 +101,17 @@
 # include "test-pthread_attr_setaffinity_np.c"
 #undef main
 
+# if 0
+/*
+ * Disable libbabeltrace check for test-all, because the requested
+ * library version is not released yet in most distributions. Will
+ * reenable later.
+ */
+
 #define main main_test_libbabeltrace
 # include "test-libbabeltrace.c"
 #undef main
+#endif
 
 int main(int argc, char *argv[])
 {
@@ -130,7 +138,6 @@ int main(int argc, char *argv[])
 	main_test_sync_compare_and_swap(argc, argv);
 	main_test_zlib();
 	main_test_pthread_attr_setaffinity_np();
-	main_test_libbabeltrace();
 
 	return 0;
 }
Signature · 1 line
1.9.3
#3 lore raw

Re: [PATCH 01/15] perf build: Disable default check for libbabeltrace

On Fri, Mar 13, 2015 at 12:36:21PM -0300, Arnaldo Carvalho de Melo wrote:

SNIP

Quoted 19 lines

Auto-detecting system features:

...                         dwarf: [ on  ]
...                         glibc: [ on  ]
...                          gtk2: [ on  ]
...                      libaudit: [ on  ]
...                        libbfd: [ on  ]
...                        libelf: [ on  ]
...                       libnuma: [ on  ]
...                       libperl: [ on  ]
...                     libpython: [ on  ]
...                      libslang: [ on  ]

... libunwind: [ OFF ]
... libdw-dwarf-unwind: [ on ]
... zlib: [ on ]
... DWARF post unwind library: libdw

GEN common-cmds.h

Quoted 8 lines

It continues trying to find babeltrace, does not find it, emits the warning and just doesn't show the OFF message :-\

Can you explain _why_ this is needed? I.e. is it to speed up feature checking? In what way, etc. For casual readers the intent of this patch may be difficult to grasp, no?

What am I missing?

this patch removes babeltrace from:
- detected features display -> so user's not curious where to get the latest babeltrace version ;-)
- test-all optimization -> so we could use features build speed up, missing babeltrace was stoping this

but we still check for babeltrace (out of the default list code) in order to enable the ctf convert code if it's in the system

I admit the extra warning about missing babeltrace support might be confusing, I can remove it.. ;-)

I think we could add new class of features that are enabled just on demand and not checked by default at all, like:
'make BABELTRACE=1' or via .config,
but we need to add support for that first

jirka

#4 lore raw

Re: [PATCH 01/15] perf build: Disable default check for libbabeltrace

Em Fri, Mar 13, 2015 at 05:20:11PM +0100, Jiri Olsa escreveu:

Quoted 39 lines · Arnaldo Carvalho de Melo

SNIP

Quoted 19 lines

Auto-detecting system features:

...                         dwarf: [ on  ]
...                         glibc: [ on  ]
...                          gtk2: [ on  ]
...                      libaudit: [ on  ]
...                        libbfd: [ on  ]
...                        libelf: [ on  ]
...                       libnuma: [ on  ]
...                       libperl: [ on  ]
...                     libpython: [ on  ]
...                      libslang: [ on  ]

... libunwind: [ OFF ]
... libdw-dwarf-unwind: [ on ]
... zlib: [ on ]
... DWARF post unwind library: libdw

GEN common-cmds.h

Quoted 8 lines

It continues trying to find babeltrace, does not find it, emits the warning and just doesn't show the OFF message :-\

Can you explain _why_ this is needed? I.e. is it to speed up feature checking? In what way, etc. For casual readers the intent of this patch may be difficult to grasp, no?

What am I missing?

this patch removes babeltrace from:
- detected features display -> so user's not curious where to get the latest babeltrace version ;-)
- test-all optimization -> so we could use features build speed up, missing babeltrace was stoping this

but we still check for babeltrace (out of the default list code) in order to enable the ctf convert code if it's in the system

Quoted 7 lines

I admit the extra warning about missing babeltrace support might be confusing, I can remove it.. ;-)

I think we could add new class of features that are enabled just on demand and not checked by default at all, like:
'make BABELTRACE=1' or via .config,
but we need to add support for that first

Thanks for explaining, that covers one of my peeves, i.e. the cset comment wasn't clear, now it is a bit better, thanks!

The other is for someone not interested in how the feature detection works but then sees a warning about a feature not being available but that feature doesn't appear on the followup summary of features that are ON or OFF the build...

So I think that when we think that some feature is experimental, for any reason, for instance, because it is based on some feature that is not on a released version of the library one needs to link against, to only bother with trying to check if it is available and link against it if so if it is _explicitely_ asked for.

I.e. documentation should state that perf can have support for that feature, but only if the user does:

1. installs the precisely described version that has what is needed.

2. Explicitely asks, in the make command line, for that feature.

In the case at hand that would not even be a library release, but a specific git commit on babeltrace's repo.

That would be a speedup! ;-)

- Arnaldo

P.S. After all, we're not short on features, look at the ldd output... Ok, I need to keep on merging the .config stuff, but even then, I guess we need to have more of a dlopen approach to all those features, so that one can install a package without dragging hell and its kitchen sink.

#5 lore raw

Re: [PATCH 01/15] perf build: Disable default check for libbabeltrace

On Fri, Mar 13, 2015 at 05:19:35PM -0300, Arnaldo Carvalho de Melo wrote:

SNIP

Quoted 10 lines
Quoted 1 line

but we need to add support for that first

Thanks for explaining, that covers one of my peeves, i.e. the cset comment wasn't clear, now it is a bit better, thanks!

The other is for someone not interested in how the feature detection works but then sees a warning about a feature not being available but that feature doesn't appear on the followup summary of features that are ON or OFF the build...

Quoted 5 lines

So I think that when we think that some feature is experimental, for any reason, for instance, because it is based on some feature that is not on a released version of the library one needs to link against, to only bother with trying to check if it is available and link against it if so if it is _explicitely_ asked for.

yep, but that'd be new feature, currently we check for everything and are able only to disable features via NO_* make variables

Quoted 10 lines

I.e. documentation should state that perf can have support for that feature, but only if the user does:

1. installs the precisely described version that has what is needed.

2. Explicitely asks, in the make command line, for that feature.

In the case at hand that would not even be a library release, but a specific git commit on babeltrace's repo.

Quoted 8 lines

That would be a speedup! ;-)

- Arnaldo

P.S. After all, we're not short on features, look at the ldd output... Ok, I need to keep on merging the .config stuff, but even then, I guess we need to have more of a dlopen approach to all those features, so that one can install a package without dragging hell and its kitchen sink.

yea, moving slowly towards to that step by step ;-)

i rebased perf/build branch to your latest perf/core

jirka

author reviewer
#6 lore raw

PATCH v2 2/15 perf build: Add dump of features build

In reply to Jiri Olsa

Currently you need to hack the features code to get the features build output. Changing this by dumping the build output into file during the build.

For each feature 'test-X' new file 'test-X.make.output' is created and contains the build out. It's created in the same directory as the feature itself.

Cc Arnaldo Carvalho de Melo <[email protected]>
Cc Corey Ashford <[email protected]>
Cc David Ahern <[email protected]>
Cc Ingo Molnar <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Paul Mackerras <[email protected]>
Cc Peter Zijlstra <[email protected]>
---
 tools/perf/config/feature-checks/Makefile | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
tools/perf/config/feature-checks/Makefile +3 -2
index b6e2e312ba54..9a786e02fab6 100644
@@ -39,7 +39,8 @@ PKG_CONFIG := $(CROSS_COMPILE)pkg-config
 
 all: $(FILES)
 
-BUILD = $(CC) $(CFLAGS) -Wall -Werror -o $(OUTPUT)$@ $(patsubst %.bin,%.c,$@) $(LDFLAGS)
+__BUILD = $(CC) $(CFLAGS) -Wall -Werror -o $(OUTPUT)$@ $(patsubst %.bin,%.c,$@) $(LDFLAGS)
+  BUILD = $(__BUILD) > $(@:.bin=.make.output) 2>&1
 
 ###############################
 
@@ -156,4 +157,4 @@ test-zlib.bin:
 ###############################
 
 clean:
-	rm -f $(FILES) *.d
+	rm -f $(FILES) *.d $(FILES:.bin=.make.output)
Signature · 1 line
1.9.3
author reviewer
#7 lore raw

PATCH v2 3/15 perf build: Fix pthread-attr-setaffinity-np include in test-all

In reply to Jiri Olsa

The test-all fails to build due to type in pthread-attr-setaffinity-np include.

Cc Arnaldo Carvalho de Melo <[email protected]>
Cc Corey Ashford <[email protected]>
Cc David Ahern <[email protected]>
Cc Ingo Molnar <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Paul Mackerras <[email protected]>
Cc Peter Zijlstra <[email protected]>
---
 tools/perf/config/feature-checks/test-all.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
tools/perf/config/feature-checks/test-all.c +1 -1
index 06f5c8a67cb2..a61c20456705 100644
@@ -98,7 +98,7 @@
 #undef main
 
 #define main main_test_pthread_attr_setaffinity_np
-# include "test-pthread_attr_setaffinity_np.c"
+# include "test-pthread-attr-setaffinity-np.c"
 #undef main
 
 # if 0
Signature · 1 line
1.9.3
author reviewer
#8 lore raw

PATCH v2 4/15 perf build: Get rid of LIB_INCLUDE variable

In reply to Jiri Olsa

It has no use, so we can directly use the value for CFLAGS.

Cc Arnaldo Carvalho de Melo <[email protected]>
Cc Corey Ashford <[email protected]>
Cc David Ahern <[email protected]>
Cc Ingo Molnar <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Paul Mackerras <[email protected]>
Cc Peter Zijlstra <[email protected]>
---
 tools/perf/config/Makefile | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)
tools/perf/config/Makefile +1 -2
index 45f61253ccce..467106bc5fab 100644
@@ -15,7 +15,6 @@ $(shell echo -n > .config-detected)
 detected     = $(shell echo "$(1)=y"       >> .config-detected)
 detected_var = $(shell echo "$(1)=$($(1))" >> .config-detected)
 
-LIB_INCLUDE := $(srctree)/tools/lib/
 CFLAGS := $(EXTRA_CFLAGS) $(EXTRA_WARNINGS)
 
 include $(src-perf)/config/Makefile.arch
@@ -320,7 +319,7 @@ endif
 
 CFLAGS += -I$(src-perf)/util
 CFLAGS += -I$(src-perf)
-CFLAGS += -I$(LIB_INCLUDE)
+CFLAGS += -I$(srctree)/tools/lib/
 
 CFLAGS += -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE
 
Signature · 1 line
1.9.3
author reviewer
#9 lore raw

PATCH v2 5/15 perf build: Rename CORE_FEATURE_TESTS to FEATURE_TESTS

In reply to Jiri Olsa

Preparing for feature checks separation, moving related stuff under 'FEATURE*' namespace.

Cc Arnaldo Carvalho de Melo <[email protected]>
Cc Corey Ashford <[email protected]>
Cc David Ahern <[email protected]>
Cc Ingo Molnar <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Paul Mackerras <[email protected]>
Cc Peter Zijlstra <[email protected]>
---
 tools/perf/config/Makefile | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)
tools/perf/config/Makefile +6 -6
index 467106bc5fab..507350566e7f 100644
@@ -203,7 +203,7 @@ endef
 #   the rule that uses them - an example for that is the 'bionic'
 #   feature check. ]
 #
-CORE_FEATURE_TESTS =			\
+FEATURE_TESTS =			\
 	backtrace			\
 	dwarf				\
 	fortify-source			\
@@ -262,7 +262,7 @@ VF_FEATURE_TESTS =			\
 	compile-32			\
 	compile-x32
 
-# Set FEATURE_CHECK_(C|LD)FLAGS-all for all CORE_FEATURE_TESTS features.
+# Set FEATURE_CHECK_(C|LD)FLAGS-all for all FEATURE_TESTS features.
 # If in the future we need per-feature checks/flags for features not
 # mentioned in this list we need to refactor this ;-).
 set_test_all_flags = $(eval $(set_test_all_flags_code))
@@ -271,7 +271,7 @@ define set_test_all_flags_code
   FEATURE_CHECK_LDFLAGS-all += $(FEATURE_CHECK_LDFLAGS-$(1))
 endef
 
-$(foreach feat,$(CORE_FEATURE_TESTS),$(call set_test_all_flags,$(feat)))
+$(foreach feat,$(FEATURE_TESTS),$(call set_test_all_flags,$(feat)))
 
 #
 # Special fast-path for the 'all features are available' case:
@@ -286,10 +286,10 @@ ifeq ($(feature-all), 1)
   #
   # test-all.c passed - just set all the core feature flags to 1:
   #
-  $(foreach feat,$(CORE_FEATURE_TESTS),$(call feature_set,$(feat)))
+  $(foreach feat,$(FEATURE_TESTS),$(call feature_set,$(feat)))
 else
-  $(shell $(MAKE) OUTPUT=$(OUTPUT_FEATURES) CFLAGS="$(EXTRA_CFLAGS)" LDFLAGS=$(LDFLAGS) -i -j -C config/feature-checks $(addsuffix .bin,$(CORE_FEATURE_TESTS)) >/dev/null 2>&1)
-  $(foreach feat,$(CORE_FEATURE_TESTS),$(call feature_check,$(feat)))
+  $(shell $(MAKE) OUTPUT=$(OUTPUT_FEATURES) CFLAGS="$(EXTRA_CFLAGS)" LDFLAGS=$(LDFLAGS) -i -j -C config/feature-checks $(addsuffix .bin,$(FEATURE_TESTS)) >/dev/null 2>&1)
+  $(foreach feat,$(FEATURE_TESTS),$(call feature_check,$(feat)))
 endif
 
 ifeq ($(feature-stackprotector-all), 1)
Signature · 1 line
1.9.3
author reviewer
#10 lore raw

PATCH v2 6/15 perf build: Get rid of VF_FEATURE_TESTS

In reply to Jiri Olsa

It only contains (FEATURE_TESTS - FEATURE_DISPLAY) tests to display the rest of the checks on 'make VF=1'. But we can actually compute this list, which is less confusing.

Also renaming LIB_FEATURE_TESTS into FEATURE_DISPLAY, so it reflects what this variable actually does - display its tests status to user.

Cc Arnaldo Carvalho de Melo <[email protected]>
Cc Corey Ashford <[email protected]>
Cc David Ahern <[email protected]>
Cc Ingo Molnar <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Paul Mackerras <[email protected]>
Cc Peter Zijlstra <[email protected]>
---
 tools/perf/config/Makefile | 32 +++++++-------------------------
 1 file changed, 7 insertions(+), 25 deletions(-)
tools/perf/config/Makefile +7 -25
index 507350566e7f..198609e1d696 100644
@@ -228,7 +228,7 @@ FEATURE_TESTS =			\
 	libdw-dwarf-unwind		\
 	zlib
 
-LIB_FEATURE_TESTS =			\
+FEATURE_DISPLAY =			\
 	dwarf				\
 	glibc				\
 	gtk2				\
@@ -243,25 +243,6 @@ LIB_FEATURE_TESTS =			\
 	libdw-dwarf-unwind		\
 	zlib
 
-VF_FEATURE_TESTS =			\
-	backtrace			\
-	fortify-source			\
-	sync-compare-and-swap		\
-	gtk2-infobar			\
-	libelf-getphdrnum		\
-	libelf-mmap			\
-	libpython-version		\
-	pthread-attr-setaffinity-np	\
-	stackprotector-all		\
-	timerfd				\
-	libunwind-debug-frame		\
-	bionic				\
-	liberty				\
-	liberty-z			\
-	cplus-demangle			\
-	compile-32			\
-	compile-x32
-
 # Set FEATURE_CHECK_(C|LD)FLAGS-all for all FEATURE_TESTS features.
 # If in the future we need per-feature checks/flags for features not
 # mentioned in this list we need to refactor this ;-).
@@ -805,7 +786,7 @@ define feature_print_text_code
     MSG = $(shell printf '...%30s: %s' $(1) $(2))
 endef
 
-PERF_FEATURES := $(foreach feat,$(LIB_FEATURE_TESTS),feature-$(feat)($(feature-$(feat))))
+PERF_FEATURES := $(foreach feat,$(FEATURE_DISPLAY),feature-$(feat)($(feature-$(feat))))
 PERF_FEATURES_FILE := $(shell touch $(OUTPUT)PERF-FEATURES; cat $(OUTPUT)PERF-FEATURES)
 
 ifeq ($(dwarf-post-unwind),1)
@@ -816,7 +797,7 @@ endif
 # output. It's set if:
 # - detected features differes from stored features from
 #   last build (in PERF-FEATURES file)
-# - one of the $(LIB_FEATURE_TESTS) is not detected
+# - one of the $(FEATURE_DISPLAY) is not detected
 # - VF is enabled
 
 ifneq ("$(PERF_FEATURES)","$(PERF_FEATURES_FILE)")
@@ -831,7 +812,7 @@ define feature_check_code
   endif
 endef
 
-$(foreach feat,$(LIB_FEATURE_TESTS),$(call feature_check,$(feat)))
+$(foreach feat,$(FEATURE_DISPLAY),$(call feature_check,$(feat)))
 
 ifeq ($(VF),1)
   display_lib := 1
@@ -841,7 +822,7 @@ endif
 ifeq ($(display_lib),1)
   $(info )
   $(info Auto-detecting system features:)
-  $(foreach feat,$(LIB_FEATURE_TESTS),$(call feature_print_status,$(feat),))
+  $(foreach feat,$(FEATURE_DISPLAY),$(call feature_print_status,$(feat),))
 
   ifeq ($(dwarf-post-unwind),1)
     $(call feature_print_text,"DWARF post unwind library", $(dwarf-post-unwind-text))
@@ -849,7 +830,8 @@ ifeq ($(display_lib),1)
 endif
 
 ifeq ($(display_vf),1)
-  $(foreach feat,$(VF_FEATURE_TESTS),$(call feature_print_status,$(feat),))
+  TMP := $(filter-out $(FEATURE_DISPLAY),$(FEATURE_TESTS))
+  $(foreach feat,$(TMP),$(call feature_print_status,$(feat),))
   $(info )
   $(call feature_print_var,prefix)
   $(call feature_print_var,bindir)
Signature · 1 line
1.9.3
author reviewer
#11 lore raw

PATCH v2 7/15 perf build: Rename display_lib into feature_display

In reply to Jiri Olsa

Preparing for feature checks separation, moving related stuff under 'feature*' namespace.

Cc Arnaldo Carvalho de Melo <[email protected]>
Cc Corey Ashford <[email protected]>
Cc David Ahern <[email protected]>
Cc Ingo Molnar <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Paul Mackerras <[email protected]>
Cc Peter Zijlstra <[email protected]>
---
 tools/perf/config/Makefile | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)
tools/perf/config/Makefile +6 -6
index 198609e1d696..f80fc7ec8036 100644
@@ -793,7 +793,7 @@ ifeq ($(dwarf-post-unwind),1)
   PERF_FEATURES += dwarf-post-unwind($(dwarf-post-unwind-text))
 endif
 
-# The $(display_lib) controls the default detection message
+# The $(feature_display) controls the default detection message
 # output. It's set if:
 # - detected features differes from stored features from
 #   last build (in PERF-FEATURES file)
@@ -802,24 +802,24 @@ endif
 
 ifneq ("$(PERF_FEATURES)","$(PERF_FEATURES_FILE)")
   $(shell echo "$(PERF_FEATURES)" > $(OUTPUT)PERF-FEATURES)
-  display_lib := 1
+  feature_display := 1
 endif
 
 feature_check = $(eval $(feature_check_code))
 define feature_check_code
   ifneq ($(feature-$(1)), 1)
-    display_lib := 1
+    feature_display := 1
   endif
 endef
 
 $(foreach feat,$(FEATURE_DISPLAY),$(call feature_check,$(feat)))
 
 ifeq ($(VF),1)
-  display_lib := 1
+  feature_display := 1
   display_vf := 1
 endif
 
-ifeq ($(display_lib),1)
+ifeq ($(feature_display),1)
   $(info )
   $(info Auto-detecting system features:)
   $(foreach feat,$(FEATURE_DISPLAY),$(call feature_print_status,$(feat),))
@@ -841,7 +841,7 @@ ifeq ($(display_vf),1)
   $(call feature_print_var,LIBDW_DIR)
 endif
 
-ifeq ($(display_lib),1)
+ifeq ($(feature_display),1)
   $(info )
 endif
 
Signature · 1 line
1.9.3
author reviewer
#12 lore raw

PATCH v2 8/15 perf build: Rename display_vf to feature_verbose

In reply to Jiri Olsa

Preparing for feature checks separation, moving related stuff under 'feature*' namespace.

Cc Arnaldo Carvalho de Melo <[email protected]>
Cc Corey Ashford <[email protected]>
Cc David Ahern <[email protected]>
Cc Ingo Molnar <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Paul Mackerras <[email protected]>
Cc Peter Zijlstra <[email protected]>
---
 tools/perf/config/Makefile | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
tools/perf/config/Makefile +2 -2
index f80fc7ec8036..370ad509422b 100644
@@ -816,7 +816,7 @@ $(foreach feat,$(FEATURE_DISPLAY),$(call feature_check,$(feat)))
 
 ifeq ($(VF),1)
   feature_display := 1
-  display_vf := 1
+  feature_verbose := 1
 endif
 
 ifeq ($(feature_display),1)
@@ -829,7 +829,7 @@ ifeq ($(feature_display),1)
   endif
 endif
 
-ifeq ($(display_vf),1)
+ifeq ($(feature_verbose),1)
   TMP := $(filter-out $(FEATURE_DISPLAY),$(FEATURE_TESTS))
   $(foreach feat,$(TMP),$(call feature_print_status,$(feat),))
   $(info )
Signature · 1 line
1.9.3
author reviewer
#13 lore raw

PATCH v2 9/15 perf build: Rename PERF-FEATURES into FEATURE-DUMP

In reply to Jiri Olsa

Preparing for feature checks separation, moving related stuff under 'FEATURE*' namespace.

Cc Arnaldo Carvalho de Melo <[email protected]>
Cc Corey Ashford <[email protected]>
Cc David Ahern <[email protected]>
Cc Ingo Molnar <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Paul Mackerras <[email protected]>
Cc Peter Zijlstra <[email protected]>
---
 tools/perf/Makefile.perf   |  2 +-
 tools/perf/config/Makefile | 12 ++++++------
 2 files changed, 7 insertions(+), 7 deletions(-)
tools/perf/Makefile.perf +1 -1
index ec4c063ed9f3..e323eab10694 100644
@@ -528,7 +528,7 @@ clean: $(LIBTRACEEVENT)-clean $(LIBAPI)-clean config-clean
 	$(Q)find . -name '*.o' -delete -o -name '\.*.cmd' -delete -o -name '\.*.d' -delete
 	$(Q)$(RM) .config-detected
 	$(call QUIET_CLEAN, core-progs) $(RM) $(ALL_PROGRAMS) perf perf-read-vdso32 perf-read-vdsox32
-	$(call QUIET_CLEAN, core-gen)   $(RM)  *.spec *.pyc *.pyo */*.pyc */*.pyo $(OUTPUT)common-cmds.h TAGS tags cscope* $(OUTPUT)PERF-VERSION-FILE $(OUTPUT)PERF-FEATURES $(OUTPUT)util/*-bison* $(OUTPUT)util/*-flex*
+	$(call QUIET_CLEAN, core-gen)   $(RM)  *.spec *.pyc *.pyo */*.pyc */*.pyo $(OUTPUT)common-cmds.h TAGS tags cscope* $(OUTPUT)PERF-VERSION-FILE $(OUTPUT)FEATURE-DUMP $(OUTPUT)util/*-bison* $(OUTPUT)util/*-flex*
 	$(QUIET_SUBDIR0)Documentation $(QUIET_SUBDIR1) clean
 	$(python-clean)
 
tools/perf/config/Makefile +6 -6
index 370ad509422b..b98ab77ca179 100644
@@ -786,22 +786,22 @@ define feature_print_text_code
     MSG = $(shell printf '...%30s: %s' $(1) $(2))
 endef
 
-PERF_FEATURES := $(foreach feat,$(FEATURE_DISPLAY),feature-$(feat)($(feature-$(feat))))
-PERF_FEATURES_FILE := $(shell touch $(OUTPUT)PERF-FEATURES; cat $(OUTPUT)PERF-FEATURES)
+FEATURE_DUMP := $(foreach feat,$(FEATURE_DISPLAY),feature-$(feat)($(feature-$(feat))))
+FEATURE_DUMP_FILE := $(shell touch $(OUTPUT)FEATURE-DUMP; cat $(OUTPUT)FEATURE-DUMP)
 
 ifeq ($(dwarf-post-unwind),1)
-  PERF_FEATURES += dwarf-post-unwind($(dwarf-post-unwind-text))
+  FEATURE_DUMP += dwarf-post-unwind($(dwarf-post-unwind-text))
 endif
 
 # The $(feature_display) controls the default detection message
 # output. It's set if:
 # - detected features differes from stored features from
-#   last build (in PERF-FEATURES file)
+#   last build (in FEATURE-DUMP file)
 # - one of the $(FEATURE_DISPLAY) is not detected
 # - VF is enabled
 
-ifneq ("$(PERF_FEATURES)","$(PERF_FEATURES_FILE)")
-  $(shell echo "$(PERF_FEATURES)" > $(OUTPUT)PERF-FEATURES)
+ifneq ("$(FEATURE_DUMP)","$(FEATURE_DUMP_FILE)")
+  $(shell echo "$(FEATURE_DUMP)" > $(OUTPUT)FEATURE-DUMP)
   feature_display := 1
 endif
 
Signature · 1 line
1.9.3
author reviewer
#14 lore raw

PATCH v2 10/15 perf build: Rename feature_print_var_code to print_var_code

In reply to Jiri Olsa

As it has nothing to do with features and won't be moved into tools/build.

Cc Arnaldo Carvalho de Melo <[email protected]>
Cc Corey Ashford <[email protected]>
Cc David Ahern <[email protected]>
Cc Ingo Molnar <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Paul Mackerras <[email protected]>
Cc Peter Zijlstra <[email protected]>
---
 tools/perf/config/Makefile | 23 ++++++++++++-----------
 1 file changed, 12 insertions(+), 11 deletions(-)
tools/perf/config/Makefile +12 -11
index b98ab77ca179..489d33305b16 100644
@@ -776,8 +776,8 @@ define feature_print_status_code
   endif
 endef
 
-feature_print_var = $(eval $(feature_print_var_code)) $(info $(MSG))
-define feature_print_var_code
+print_var = $(eval $(print_var_code)) $(info $(MSG))
+define print_var_code
     MSG = $(shell printf '...%30s: %s' $(1) $($(1)))
 endef
 
@@ -827,21 +827,22 @@ ifeq ($(feature_display),1)
   ifeq ($(dwarf-post-unwind),1)
     $(call feature_print_text,"DWARF post unwind library", $(dwarf-post-unwind-text))
   endif
+
+  ifneq ($(feature_verbose),1)
+    $(info )
+  endif
 endif
 
 ifeq ($(feature_verbose),1)
   TMP := $(filter-out $(FEATURE_DISPLAY),$(FEATURE_TESTS))
   $(foreach feat,$(TMP),$(call feature_print_status,$(feat),))
   $(info )
-  $(call feature_print_var,prefix)
-  $(call feature_print_var,bindir)
-  $(call feature_print_var,libdir)
-  $(call feature_print_var,sysconfdir)
-  $(call feature_print_var,LIBUNWIND_DIR)
-  $(call feature_print_var,LIBDW_DIR)
-endif
-
-ifeq ($(feature_display),1)
+  $(call print_var,prefix)
+  $(call print_var,bindir)
+  $(call print_var,libdir)
+  $(call print_var,sysconfdir)
+  $(call print_var,LIBUNWIND_DIR)
+  $(call print_var,LIBDW_DIR)
   $(info )
 endif
 
Signature · 1 line
1.9.3
author reviewer
#15 lore raw

PATCH v2 11/15 perf build: Separate feature make support into config/Makefile.feature

In reply to Jiri Olsa

Move feature related code into separate makefile. The new Makefile.feature is included from config/Makefile. It will be moved later into tools/build.

Cc Arnaldo Carvalho de Melo <[email protected]>
Cc Corey Ashford <[email protected]>
Cc David Ahern <[email protected]>
Cc Ingo Molnar <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Paul Mackerras <[email protected]>
Cc Peter Zijlstra <[email protected]>
---
 tools/perf/config/Makefile         | 165 +-----------------------------------
 tools/perf/config/Makefile.feature | 167 +++++++++++++++++++++++++++++++++++++
 2 files changed, 168 insertions(+), 164 deletions(-)
 create mode 100644 tools/perf/config/Makefile.feature
tools/perf/config/Makefile +1 -164
index 489d33305b16..95331cc40f7d 100644
@@ -176,102 +176,7 @@ LDFLAGS += -Wl,-z,noexecstack
 
 EXTLIBS = -lpthread -lrt -lm -ldl
 
-ifneq ($(OUTPUT),)
-  OUTPUT_FEATURES = $(OUTPUT)config/feature-checks/
-  $(shell mkdir -p $(OUTPUT_FEATURES))
-endif
-
-feature_check = $(eval $(feature_check_code))
-define feature_check_code
-  feature-$(1) := $(shell $(MAKE) OUTPUT=$(OUTPUT_FEATURES) CFLAGS="$(EXTRA_CFLAGS) $(FEATURE_CHECK_CFLAGS-$(1))" LDFLAGS="$(LDFLAGS) $(FEATURE_CHECK_LDFLAGS-$(1))" -C config/feature-checks test-$1.bin >/dev/null 2>/dev/null && echo 1 || echo 0)
-endef
-
-feature_set = $(eval $(feature_set_code))
-define feature_set_code
-  feature-$(1) := 1
-endef
-
-#
-# Build the feature check binaries in parallel, ignore errors, ignore return value and suppress output:
-#
-
-#
-# Note that this is not a complete list of all feature tests, just
-# those that are typically built on a fully configured system.
-#
-# [ Feature tests not mentioned here have to be built explicitly in
-#   the rule that uses them - an example for that is the 'bionic'
-#   feature check. ]
-#
-FEATURE_TESTS =			\
-	backtrace			\
-	dwarf				\
-	fortify-source			\
-	sync-compare-and-swap		\
-	glibc				\
-	gtk2				\
-	gtk2-infobar			\
-	libaudit			\
-	libbfd				\
-	libelf				\
-	libelf-getphdrnum		\
-	libelf-mmap			\
-	libnuma				\
-	libperl				\
-	libpython			\
-	libpython-version		\
-	libslang			\
-	libunwind			\
-	pthread-attr-setaffinity-np	\
-	stackprotector-all		\
-	timerfd				\
-	libdw-dwarf-unwind		\
-	zlib
-
-FEATURE_DISPLAY =			\
-	dwarf				\
-	glibc				\
-	gtk2				\
-	libaudit			\
-	libbfd				\
-	libelf				\
-	libnuma				\
-	libperl				\
-	libpython			\
-	libslang			\
-	libunwind			\
-	libdw-dwarf-unwind		\
-	zlib
-
-# Set FEATURE_CHECK_(C|LD)FLAGS-all for all FEATURE_TESTS features.
-# If in the future we need per-feature checks/flags for features not
-# mentioned in this list we need to refactor this ;-).
-set_test_all_flags = $(eval $(set_test_all_flags_code))
-define set_test_all_flags_code
-  FEATURE_CHECK_CFLAGS-all  += $(FEATURE_CHECK_CFLAGS-$(1))
-  FEATURE_CHECK_LDFLAGS-all += $(FEATURE_CHECK_LDFLAGS-$(1))
-endef
-
-$(foreach feat,$(FEATURE_TESTS),$(call set_test_all_flags,$(feat)))
-
-#
-# Special fast-path for the 'all features are available' case:
-#
-$(call feature_check,all,$(MSG))
-
-#
-# Just in case the build freshly failed, make sure we print the
-# feature matrix:
-#
-ifeq ($(feature-all), 1)
-  #
-  # test-all.c passed - just set all the core feature flags to 1:
-  #
-  $(foreach feat,$(FEATURE_TESTS),$(call feature_set,$(feat)))
-else
-  $(shell $(MAKE) OUTPUT=$(OUTPUT_FEATURES) CFLAGS="$(EXTRA_CFLAGS)" LDFLAGS=$(LDFLAGS) -i -j -C config/feature-checks $(addsuffix .bin,$(FEATURE_TESTS)) >/dev/null 2>&1)
-  $(foreach feat,$(FEATURE_TESTS),$(call feature_check,$(feat)))
-endif
+include $(src-perf)/config/Makefile.feature
 
 ifeq ($(feature-stackprotector-all), 1)
   CFLAGS += -fstack-protector-all
@@ -763,80 +668,12 @@ plugindir=$(libdir)/traceevent/plugins
 plugindir_SQ= $(subst ','\'',$(plugindir))
 endif
 
-#
-# Print the result of the feature test:
-#
-feature_print_status = $(eval $(feature_print_status_code)) $(info $(MSG))
-
-define feature_print_status_code
-  ifeq ($(feature-$(1)), 1)
-    MSG = $(shell printf '...%30s: [ \033[32mon\033[m  ]' $(1))
-  else
-    MSG = $(shell printf '...%30s: [ \033[31mOFF\033[m ]' $(1))
-  endif
-endef
-
 print_var = $(eval $(print_var_code)) $(info $(MSG))
 define print_var_code
     MSG = $(shell printf '...%30s: %s' $(1) $($(1)))
 endef
 
-feature_print_text = $(eval $(feature_print_text_code)) $(info $(MSG))
-define feature_print_text_code
-    MSG = $(shell printf '...%30s: %s' $(1) $(2))
-endef
-
-FEATURE_DUMP := $(foreach feat,$(FEATURE_DISPLAY),feature-$(feat)($(feature-$(feat))))
-FEATURE_DUMP_FILE := $(shell touch $(OUTPUT)FEATURE-DUMP; cat $(OUTPUT)FEATURE-DUMP)
-
-ifeq ($(dwarf-post-unwind),1)
-  FEATURE_DUMP += dwarf-post-unwind($(dwarf-post-unwind-text))
-endif
-
-# The $(feature_display) controls the default detection message
-# output. It's set if:
-# - detected features differes from stored features from
-#   last build (in FEATURE-DUMP file)
-# - one of the $(FEATURE_DISPLAY) is not detected
-# - VF is enabled
-
-ifneq ("$(FEATURE_DUMP)","$(FEATURE_DUMP_FILE)")
-  $(shell echo "$(FEATURE_DUMP)" > $(OUTPUT)FEATURE-DUMP)
-  feature_display := 1
-endif
-
-feature_check = $(eval $(feature_check_code))
-define feature_check_code
-  ifneq ($(feature-$(1)), 1)
-    feature_display := 1
-  endif
-endef
-
-$(foreach feat,$(FEATURE_DISPLAY),$(call feature_check,$(feat)))
-
 ifeq ($(VF),1)
-  feature_display := 1
-  feature_verbose := 1
-endif
-
-ifeq ($(feature_display),1)
-  $(info )
-  $(info Auto-detecting system features:)
-  $(foreach feat,$(FEATURE_DISPLAY),$(call feature_print_status,$(feat),))
-
-  ifeq ($(dwarf-post-unwind),1)
-    $(call feature_print_text,"DWARF post unwind library", $(dwarf-post-unwind-text))
-  endif
-
-  ifneq ($(feature_verbose),1)
-    $(info )
-  endif
-endif
-
-ifeq ($(feature_verbose),1)
-  TMP := $(filter-out $(FEATURE_DISPLAY),$(FEATURE_TESTS))
-  $(foreach feat,$(TMP),$(call feature_print_status,$(feat),))
-  $(info )
   $(call print_var,prefix)
   $(call print_var,bindir)
   $(call print_var,libdir)
tools/perf/config/Makefile.feature new file +167 -0

167 lines not on this page · raw message

Signature · 1 line
1.9.3
author reviewer
#16 lore raw

PATCH v2 12/15 perf build: Make features checks directory configurable

In reply to Jiri Olsa

Putting feature checks directory into $feature_dir, so it's easy to configure when we move it to bools/build later.

Cc Arnaldo Carvalho de Melo <[email protected]>
Cc Corey Ashford <[email protected]>
Cc David Ahern <[email protected]>
Cc Ingo Molnar <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Paul Mackerras <[email protected]>
Cc Peter Zijlstra <[email protected]>
---
 tools/perf/config/Makefile.feature | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)
tools/perf/config/Makefile.feature +4 -2
index f3204484fde3..0a1246ea7cf5 100644
@@ -1,3 +1,5 @@
+feature_dir := $(srctree)/tools/perf/config/feature-checks
+
 ifneq ($(OUTPUT),)
   OUTPUT_FEATURES = $(OUTPUT)config/feature-checks/
   $(shell mkdir -p $(OUTPUT_FEATURES))
@@ -5,7 +7,7 @@ endif
 
 feature_check = $(eval $(feature_check_code))
 define feature_check_code
-  feature-$(1) := $(shell $(MAKE) OUTPUT=$(OUTPUT_FEATURES) CFLAGS="$(EXTRA_CFLAGS) $(FEATURE_CHECK_CFLAGS-$(1))" LDFLAGS="$(LDFLAGS) $(FEATURE_CHECK_LDFLAGS-$(1))" -C config/feature-checks test-$1.bin >/dev/null 2>/dev/null && echo 1 || echo 0)
+  feature-$(1) := $(shell $(MAKE) OUTPUT=$(OUTPUT_FEATURES) CFLAGS="$(EXTRA_CFLAGS) $(FEATURE_CHECK_CFLAGS-$(1))" LDFLAGS="$(LDFLAGS) $(FEATURE_CHECK_LDFLAGS-$(1))" -C $(feature_dir) test-$1.bin >/dev/null 2>/dev/null && echo 1 || echo 0)
 endef
 
 feature_set = $(eval $(feature_set_code))
@@ -91,7 +93,7 @@ ifeq ($(feature-all), 1)
   #
   $(foreach feat,$(FEATURE_TESTS),$(call feature_set,$(feat)))
 else
-  $(shell $(MAKE) OUTPUT=$(OUTPUT_FEATURES) CFLAGS="$(EXTRA_CFLAGS)" LDFLAGS=$(LDFLAGS) -i -j -C config/feature-checks $(addsuffix .bin,$(FEATURE_TESTS)) >/dev/null 2>&1)
+  $(shell $(MAKE) OUTPUT=$(OUTPUT_FEATURES) CFLAGS="$(EXTRA_CFLAGS)" LDFLAGS=$(LDFLAGS) -i -j -C $(feature_dir) $(addsuffix .bin,$(FEATURE_TESTS)) >/dev/null 2>&1)
   $(foreach feat,$(FEATURE_TESTS),$(call feature_check,$(feat)))
 endif
 
Signature · 1 line
1.9.3
author reviewer
#17 lore raw

PATCH v2 13/15 tools build: Move feature checks code under tools/build

In reply to Jiri Olsa

Moving feature checks code under tools/build directory.

Changing also $feature_dir to point to new feature directory location and perf Makefiles to include Makefile.feature from new location.

Cc Arnaldo Carvalho de Melo <[email protected]>
Cc Corey Ashford <[email protected]>
Cc David Ahern <[email protected]>
Cc Ingo Molnar <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Paul Mackerras <[email protected]>
Cc Peter Zijlstra <[email protected]>
---
 tools/build/Makefile.feature                       | 169 +++++++++++++++++++++
 tools/build/feature/.gitignore                     |   2 +
 tools/build/feature/Makefile                       | 160 +++++++++++++++++++
 tools/build/feature/test-all.c                     | 143 +++++++++++++++++
 tools/build/feature/test-backtrace.c               |  13 ++
 tools/build/feature/test-bionic.c                  |   6 +
 tools/build/feature/test-compile.c                 |   4 +
 tools/build/feature/test-cplus-demangle.c          |  14 ++
 tools/build/feature/test-dwarf.c                   |  10 ++
 tools/build/feature/test-fortify-source.c          |   6 +
 tools/build/feature/test-glibc.c                   |   8 +
 tools/build/feature/test-gtk2-infobar.c            |  11 ++
 tools/build/feature/test-gtk2.c                    |  10 ++
 tools/build/feature/test-hello.c                   |   6 +
 tools/build/feature/test-libaudit.c                |  10 ++
 tools/build/feature/test-libbabeltrace.c           |   9 ++
 tools/build/feature/test-libbfd.c                  |  15 ++
 tools/build/feature/test-libdw-dwarf-unwind.c      |  13 ++
 tools/build/feature/test-libelf-getphdrnum.c       |   8 +
 tools/build/feature/test-libelf-mmap.c             |   8 +
 tools/build/feature/test-libelf.c                  |   8 +
 tools/build/feature/test-libnuma.c                 |   9 ++
 tools/build/feature/test-libperl.c                 |   9 ++
 tools/build/feature/test-libpython-version.c       |  10 ++
 tools/build/feature/test-libpython.c               |   8 +
 tools/build/feature/test-libslang.c                |   6 +
 tools/build/feature/test-libunwind-debug-frame.c   |  16 ++
 tools/build/feature/test-libunwind.c               |  27 ++++
 .../feature/test-pthread-attr-setaffinity-np.c     |  17 +++
 tools/build/feature/test-stackprotector-all.c      |   6 +
 tools/build/feature/test-sync-compare-and-swap.c   |  14 ++
 tools/build/feature/test-timerfd.c                 |  18 +++
 tools/build/feature/test-zlib.c                    |   9 ++
 tools/perf/Makefile.perf                           |   2 +-
 tools/perf/config/Makefile                         |   2 +-
 tools/perf/config/Makefile.feature                 | 169 ---------------------
 tools/perf/config/feature-checks/.gitignore        |   2 -
 tools/perf/config/feature-checks/Makefile          | 160 -------------------
 tools/perf/config/feature-checks/test-all.c        | 143 -----------------
 tools/perf/config/feature-checks/test-backtrace.c  |  13 --
 tools/perf/config/feature-checks/test-bionic.c     |   6 -
 tools/perf/config/feature-checks/test-compile.c    |   4 -
 .../config/feature-checks/test-cplus-demangle.c    |  14 --
 tools/perf/config/feature-checks/test-dwarf.c      |  10 --
 .../config/feature-checks/test-fortify-source.c    |   6 -
 tools/perf/config/feature-checks/test-glibc.c      |   8 -
 .../perf/config/feature-checks/test-gtk2-infobar.c |  11 --
 tools/perf/config/feature-checks/test-gtk2.c       |  10 --
 tools/perf/config/feature-checks/test-hello.c      |   6 -
 tools/perf/config/feature-checks/test-libaudit.c   |  10 --
 .../config/feature-checks/test-libbabeltrace.c     |   9 --
 tools/perf/config/feature-checks/test-libbfd.c     |  15 --
 .../feature-checks/test-libdw-dwarf-unwind.c       |  13 --
 .../config/feature-checks/test-libelf-getphdrnum.c |   8 -
 .../perf/config/feature-checks/test-libelf-mmap.c  |   8 -
 tools/perf/config/feature-checks/test-libelf.c     |   8 -
 tools/perf/config/feature-checks/test-libnuma.c    |   9 --
 tools/perf/config/feature-checks/test-libperl.c    |   9 --
 .../config/feature-checks/test-libpython-version.c |  10 --
 tools/perf/config/feature-checks/test-libpython.c  |   8 -
 tools/perf/config/feature-checks/test-libslang.c   |   6 -
 .../feature-checks/test-libunwind-debug-frame.c    |  16 --
 tools/perf/config/feature-checks/test-libunwind.c  |  27 ----
 .../test-pthread-attr-setaffinity-np.c             |  17 ---
 .../feature-checks/test-stackprotector-all.c       |   6 -
 .../feature-checks/test-sync-compare-and-swap.c    |  14 --
 tools/perf/config/feature-checks/test-timerfd.c    |  18 ---
 tools/perf/config/feature-checks/test-zlib.c       |   9 --
 68 files changed, 784 insertions(+), 784 deletions(-)
 create mode 100644 tools/build/Makefile.feature
 create mode 100644 tools/build/feature/.gitignore
 create mode 100644 tools/build/feature/Makefile
 create mode 100644 tools/build/feature/test-all.c
 create mode 100644 tools/build/feature/test-backtrace.c
 create mode 100644 tools/build/feature/test-bionic.c
 create mode 100644 tools/build/feature/test-compile.c
 create mode 100644 tools/build/feature/test-cplus-demangle.c
 create mode 100644 tools/build/feature/test-dwarf.c
 create mode 100644 tools/build/feature/test-fortify-source.c
 create mode 100644 tools/build/feature/test-glibc.c
 create mode 100644 tools/build/feature/test-gtk2-infobar.c
 create mode 100644 tools/build/feature/test-gtk2.c
 create mode 100644 tools/build/feature/test-hello.c
 create mode 100644 tools/build/feature/test-libaudit.c
 create mode 100644 tools/build/feature/test-libbabeltrace.c
 create mode 100644 tools/build/feature/test-libbfd.c
 create mode 100644 tools/build/feature/test-libdw-dwarf-unwind.c
 create mode 100644 tools/build/feature/test-libelf-getphdrnum.c
 create mode 100644 tools/build/feature/test-libelf-mmap.c
 create mode 100644 tools/build/feature/test-libelf.c
 create mode 100644 tools/build/feature/test-libnuma.c
 create mode 100644 tools/build/feature/test-libperl.c
 create mode 100644 tools/build/feature/test-libpython-version.c
 create mode 100644 tools/build/feature/test-libpython.c
 create mode 100644 tools/build/feature/test-libslang.c
 create mode 100644 tools/build/feature/test-libunwind-debug-frame.c
 create mode 100644 tools/build/feature/test-libunwind.c
 create mode 100644 tools/build/feature/test-pthread-attr-setaffinity-np.c
 create mode 100644 tools/build/feature/test-stackprotector-all.c
 create mode 100644 tools/build/feature/test-sync-compare-and-swap.c
 create mode 100644 tools/build/feature/test-timerfd.c
 create mode 100644 tools/build/feature/test-zlib.c
 delete mode 100644 tools/perf/config/Makefile.feature
 delete mode 100644 tools/perf/config/feature-checks/.gitignore
 delete mode 100644 tools/perf/config/feature-checks/Makefile
 delete mode 100644 tools/perf/config/feature-checks/test-all.c
 delete mode 100644 tools/perf/config/feature-checks/test-backtrace.c
 delete mode 100644 tools/perf/config/feature-checks/test-bionic.c
 delete mode 100644 tools/perf/config/feature-checks/test-compile.c
 delete mode 100644 tools/perf/config/feature-checks/test-cplus-demangle.c
 delete mode 100644 tools/perf/config/feature-checks/test-dwarf.c
 delete mode 100644 tools/perf/config/feature-checks/test-fortify-source.c
 delete mode 100644 tools/perf/config/feature-checks/test-glibc.c
 delete mode 100644 tools/perf/config/feature-checks/test-gtk2-infobar.c
 delete mode 100644 tools/perf/config/feature-checks/test-gtk2.c
 delete mode 100644 tools/perf/config/feature-checks/test-hello.c
 delete mode 100644 tools/perf/config/feature-checks/test-libaudit.c
 delete mode 100644 tools/perf/config/feature-checks/test-libbabeltrace.c
 delete mode 100644 tools/perf/config/feature-checks/test-libbfd.c
 delete mode 100644 tools/perf/config/feature-checks/test-libdw-dwarf-unwind.c
 delete mode 100644 tools/perf/config/feature-checks/test-libelf-getphdrnum.c
 delete mode 100644 tools/perf/config/feature-checks/test-libelf-mmap.c
 delete mode 100644 tools/perf/config/feature-checks/test-libelf.c
 delete mode 100644 tools/perf/config/feature-checks/test-libnuma.c
 delete mode 100644 tools/perf/config/feature-checks/test-libperl.c
 delete mode 100644 tools/perf/config/feature-checks/test-libpython-version.c
 delete mode 100644 tools/perf/config/feature-checks/test-libpython.c
 delete mode 100644 tools/perf/config/feature-checks/test-libslang.c
 delete mode 100644 tools/perf/config/feature-checks/test-libunwind-debug-frame.c
 delete mode 100644 tools/perf/config/feature-checks/test-libunwind.c
 delete mode 100644 tools/perf/config/feature-checks/test-pthread-attr-setaffinity-np.c
 delete mode 100644 tools/perf/config/feature-checks/test-stackprotector-all.c
 delete mode 100644 tools/perf/config/feature-checks/test-sync-compare-and-swap.c
 delete mode 100644 tools/perf/config/feature-checks/test-timerfd.c
 delete mode 100644 tools/perf/config/feature-checks/test-zlib.c
tools/build/Makefile.feature new file +169 -0
new file mode 100644
index 000000000000..7e534e1318aa
@@ -0,0 +1,169 @@
+feature_dir := $(srctree)/tools/build/feature
+
+ifneq ($(OUTPUT),)
+  OUTPUT_FEATURES = $(OUTPUT)feature/
+  $(shell mkdir -p $(OUTPUT_FEATURES))
+endif
+
+feature_check = $(eval $(feature_check_code))
+define feature_check_code
+  feature-$(1) := $(shell $(MAKE) OUTPUT=$(OUTPUT_FEATURES) CFLAGS="$(EXTRA_CFLAGS) $(FEATURE_CHECK_CFLAGS-$(1))" LDFLAGS="$(LDFLAGS) $(FEATURE_CHECK_LDFLAGS-$(1))" -C $(feature_dir) test-$1.bin >/dev/null 2>/dev/null && echo 1 || echo 0)
+endef
+
+feature_set = $(eval $(feature_set_code))
+define feature_set_code
+  feature-$(1) := 1
+endef
+
+#
+# Build the feature check binaries in parallel, ignore errors, ignore return value and suppress output:
+#
+
+#
+# Note that this is not a complete list of all feature tests, just
+# those that are typically built on a fully configured system.
+#
+# [ Feature tests not mentioned here have to be built explicitly in
+#   the rule that uses them - an example for that is the 'bionic'
+#   feature check. ]
+#
+FEATURE_TESTS =			\
+	backtrace			\
+	dwarf				\
+	fortify-source			\
+	sync-compare-and-swap		\
+	glibc				\
+	gtk2				\
+	gtk2-infobar			\
+	libaudit			\
+	libbfd				\
+	libelf				\
+	libelf-getphdrnum		\
+	libelf-mmap			\
+	libnuma				\
+	libperl				\
+	libpython			\
+	libpython-version		\
+	libslang			\
+	libunwind			\
+	pthread-attr-setaffinity-np	\
+	stackprotector-all		\
+	timerfd				\
+	libdw-dwarf-unwind		\
+	zlib
+
+FEATURE_DISPLAY =			\
+	dwarf				\
+	glibc				\
+	gtk2				\
+	libaudit			\
+	libbfd				\
+	libelf				\
+	libnuma				\
+	libperl				\
+	libpython			\
+	libslang			\
+	libunwind			\
+	libdw-dwarf-unwind		\
+	zlib
+
+# Set FEATURE_CHECK_(C|LD)FLAGS-all for all FEATURE_TESTS features.
+# If in the future we need per-feature checks/flags for features not
+# mentioned in this list we need to refactor this ;-).
+set_test_all_flags = $(eval $(set_test_all_flags_code))
+define set_test_all_flags_code
+  FEATURE_CHECK_CFLAGS-all  += $(FEATURE_CHECK_CFLAGS-$(1))
+  FEATURE_CHECK_LDFLAGS-all += $(FEATURE_CHECK_LDFLAGS-$(1))
+endef
+
+$(foreach feat,$(FEATURE_TESTS),$(call set_test_all_flags,$(feat)))
+
+#
+# Special fast-path for the 'all features are available' case:
+#
+$(call feature_check,all,$(MSG))
+
+#
+# Just in case the build freshly failed, make sure we print the
+# feature matrix:
+#
+ifeq ($(feature-all), 1)
+  #
+  # test-all.c passed - just set all the core feature flags to 1:
+  #
+  $(foreach feat,$(FEATURE_TESTS),$(call feature_set,$(feat)))
+else
+  $(shell $(MAKE) OUTPUT=$(OUTPUT_FEATURES) CFLAGS="$(EXTRA_CFLAGS)" LDFLAGS=$(LDFLAGS) -i -j -C $(feature_dir) $(addsuffix .bin,$(FEATURE_TESTS)) >/dev/null 2>&1)
+  $(foreach feat,$(FEATURE_TESTS),$(call feature_check,$(feat)))
+endif
+
+#
+# Print the result of the feature test:
+#
+feature_print_status = $(eval $(feature_print_status_code)) $(info $(MSG))
+
+define feature_print_status_code
+  ifeq ($(feature-$(1)), 1)
+    MSG = $(shell printf '...%30s: [ \033[32mon\033[m  ]' $(1))
+  else
+    MSG = $(shell printf '...%30s: [ \033[31mOFF\033[m ]' $(1))
+  endif
+endef
+
+feature_print_text = $(eval $(feature_print_text_code)) $(info $(MSG))
+define feature_print_text_code
+    MSG = $(shell printf '...%30s: %s' $(1) $(2))
+endef
+
+FEATURE_DUMP := $(foreach feat,$(FEATURE_DISPLAY),feature-$(feat)($(feature-$(feat))))
+FEATURE_DUMP_FILE := $(shell touch $(OUTPUT)FEATURE-DUMP; cat $(OUTPUT)FEATURE-DUMP)
+
+ifeq ($(dwarf-post-unwind),1)
+  FEATURE_DUMP += dwarf-post-unwind($(dwarf-post-unwind-text))
+endif
+
+# The $(feature_display) controls the default detection message
+# output. It's set if:
+# - detected features differes from stored features from
+#   last build (in FEATURE-DUMP file)
+# - one of the $(FEATURE_DISPLAY) is not detected
+# - VF is enabled
+
+ifneq ("$(FEATURE_DUMP)","$(FEATURE_DUMP_FILE)")
+  $(shell echo "$(FEATURE_DUMP)" > $(OUTPUT)FEATURE-DUMP)
+  feature_display := 1
+endif
+
+feature_check = $(eval $(feature_check_code))
+define feature_check_code
+  ifneq ($(feature-$(1)), 1)
+    feature_display := 1
+  endif
+endef
+
+$(foreach feat,$(FEATURE_DISPLAY),$(call feature_check,$(feat)))
+
+ifeq ($(VF),1)
+  feature_display := 1
+  feature_verbose := 1
+endif
+
+ifeq ($(feature_display),1)
+  $(info )
+  $(info Auto-detecting system features:)
+  $(foreach feat,$(FEATURE_DISPLAY),$(call feature_print_status,$(feat),))
+
+  ifeq ($(dwarf-post-unwind),1)
+    $(call feature_print_text,"DWARF post unwind library", $(dwarf-post-unwind-text))
+  endif
+
+  ifneq ($(feature_verbose),1)
+    $(info )
+  endif
+endif
+
+ifeq ($(feature_verbose),1)
+  TMP := $(filter-out $(FEATURE_DISPLAY),$(FEATURE_TESTS))
+  $(foreach feat,$(TMP),$(call feature_print_status,$(feat),))
+  $(info )
+endif
tools/build/feature/.gitignore new file +2 -0
new file mode 100644
index 000000000000..80f3da0c3515
@@ -0,0 +1,2 @@
+*.d
+*.bin
tools/build/feature/Makefile new file +160 -0

160 lines not on this page · raw message

tools/build/feature/test-all.c new file +143 -0

143 lines not on this page · raw message

tools/build/feature/test-backtrace.c new file +13 -0
new file mode 100644
index 000000000000..7124aa1dc8fb
@@ -0,0 +1,13 @@
+#include <execinfo.h>
+#include <stdio.h>
+
+int main(void)
+{
+	void *backtrace_fns[10];
+	size_t entries;
+
+	entries = backtrace(backtrace_fns, 10);
+	backtrace_symbols_fd(backtrace_fns, entries, 1);
+
+	return 0;
+}
tools/build/feature/test-bionic.c new file +6 -0
new file mode 100644
index 000000000000..eac24e9513eb
@@ -0,0 +1,6 @@
+#include <android/api-level.h>
+
+int main(void)
+{
+	return __ANDROID_API__;
+}
tools/build/feature/test-compile.c new file +4 -0
new file mode 100644
index 000000000000..31dbf45bf99c
@@ -0,0 +1,4 @@
+int main(void)
+{
+	return 0;
+}
tools/build/feature/test-cplus-demangle.c new file +14 -0
new file mode 100644
index 000000000000..610c686e0009
@@ -0,0 +1,14 @@
+extern int printf(const char *format, ...);
+extern char *cplus_demangle(const char *, int);
+
+int main(void)
+{
+	char symbol[4096] = "FieldName__9ClassNameFd";
+	char *tmp;
+
+	tmp = cplus_demangle(symbol, 0);
+
+	printf("demangled symbol: {%s}\n", tmp);
+
+	return 0;
+}
tools/build/feature/test-dwarf.c new file +10 -0
new file mode 100644
index 000000000000..3fc1801ce4a9
@@ -0,0 +1,10 @@
+#include <dwarf.h>
+#include <elfutils/libdw.h>
+#include <elfutils/version.h>
+
+int main(void)
+{
+	Dwarf *dbg = dwarf_begin(0, DWARF_C_READ);
+
+	return (long)dbg;
+}
tools/build/feature/test-fortify-source.c new file +6 -0
new file mode 100644
index 000000000000..c9f398d87868
@@ -0,0 +1,6 @@
+#include <stdio.h>
+
+int main(void)
+{
+	return puts("hi");
+}
tools/build/feature/test-glibc.c new file +8 -0
new file mode 100644
index 000000000000..b0820345cd98
@@ -0,0 +1,8 @@
+#include <gnu/libc-version.h>
+
+int main(void)
+{
+	const char *version = gnu_get_libc_version();
+
+	return (long)version;
+}
tools/build/feature/test-gtk2-infobar.c new file +11 -0
new file mode 100644
index 000000000000..397b4646d066
@@ -0,0 +1,11 @@
+#pragma GCC diagnostic ignored "-Wstrict-prototypes"
+#include <gtk/gtk.h>
+#pragma GCC diagnostic error "-Wstrict-prototypes"
+
+int main(int argc, char *argv[])
+{
+	gtk_init(&argc, &argv);
+	gtk_info_bar_new();
+
+	return 0;
+}
tools/build/feature/test-gtk2.c new file +10 -0
new file mode 100644
index 000000000000..6bd80e509439
@@ -0,0 +1,10 @@
+#pragma GCC diagnostic ignored "-Wstrict-prototypes"
+#include <gtk/gtk.h>
+#pragma GCC diagnostic error "-Wstrict-prototypes"
+
+int main(int argc, char *argv[])
+{
+	gtk_init(&argc, &argv);
+
+        return 0;
+}
tools/build/feature/test-hello.c new file +6 -0
new file mode 100644
index 000000000000..c9f398d87868
@@ -0,0 +1,6 @@
+#include <stdio.h>
+
+int main(void)
+{
+	return puts("hi");
+}
tools/build/feature/test-libaudit.c new file +10 -0
new file mode 100644
index 000000000000..afc019f08641
@@ -0,0 +1,10 @@
+#include <libaudit.h>
+
+extern int printf(const char *format, ...);
+
+int main(void)
+{
+	printf("error message: %s\n", audit_errno_to_name(0));
+
+	return audit_open();
+}
tools/build/feature/test-libbabeltrace.c new file +9 -0
new file mode 100644
index 000000000000..9cf802a04885
@@ -0,0 +1,9 @@
+
+#include <babeltrace/ctf-writer/writer.h>
+#include <babeltrace/ctf-ir/stream-class.h>
+
+int main(void)
+{
+	bt_ctf_stream_class_get_packet_context_type((void *) 0);
+	return 0;
+}
tools/build/feature/test-libbfd.c new file +15 -0
new file mode 100644
index 000000000000..24059907e990
@@ -0,0 +1,15 @@
+#include <bfd.h>
+
+extern int printf(const char *format, ...);
+
+int main(void)
+{
+	char symbol[4096] = "FieldName__9ClassNameFd";
+	char *tmp;
+
+	tmp = bfd_demangle(0, symbol, 0);
+
+	printf("demangled symbol: {%s}\n", tmp);
+
+	return 0;
+}
tools/build/feature/test-libdw-dwarf-unwind.c new file +13 -0
new file mode 100644
index 000000000000..f676a3ff442a
@@ -0,0 +1,13 @@
+
+#include <elfutils/libdwfl.h>
+
+int main(void)
+{
+	/*
+	 * This function is guarded via: __nonnull_attribute__ (1, 2).
+	 * Passing '1' as arguments value. This code is never executed,
+	 * only compiled.
+	 */
+	dwfl_thread_getframes((void *) 1, (void *) 1, NULL);
+	return 0;
+}
tools/build/feature/test-libelf-getphdrnum.c new file +8 -0
new file mode 100644
index 000000000000..d710459306c3
@@ -0,0 +1,8 @@
+#include <libelf.h>
+
+int main(void)
+{
+	size_t dst;
+
+	return elf_getphdrnum(0, &dst);
+}
tools/build/feature/test-libelf-mmap.c new file +8 -0
new file mode 100644
index 000000000000..564427d7ef18
@@ -0,0 +1,8 @@
+#include <libelf.h>
+
+int main(void)
+{
+	Elf *elf = elf_begin(0, ELF_C_READ_MMAP, 0);
+
+	return (long)elf;
+}
tools/build/feature/test-libelf.c new file +8 -0
new file mode 100644
index 000000000000..08db322d8957
@@ -0,0 +1,8 @@
+#include <libelf.h>
+
+int main(void)
+{
+	Elf *elf = elf_begin(0, ELF_C_READ, 0);
+
+	return (long)elf;
+}
tools/build/feature/test-libnuma.c new file +9 -0
new file mode 100644
index 000000000000..4763d9cd587d
@@ -0,0 +1,9 @@
+#include <numa.h>
+#include <numaif.h>
+
+int main(void)
+{
+	numa_available();
+
+	return 0;
+}
tools/build/feature/test-libperl.c new file +9 -0
new file mode 100644
index 000000000000..8871f6a0fdb4
@@ -0,0 +1,9 @@
+#include <EXTERN.h>
+#include <perl.h>
+
+int main(void)
+{
+	perl_alloc();
+
+	return 0;
+}
tools/build/feature/test-libpython-version.c new file +10 -0
new file mode 100644
index 000000000000..facea122d812
@@ -0,0 +1,10 @@
+#include <Python.h>
+
+#if PY_VERSION_HEX >= 0x03000000
+	#error
+#endif
+
+int main(void)
+{
+	return 0;
+}
tools/build/feature/test-libpython.c new file +8 -0
new file mode 100644
index 000000000000..b24b28ad6324
@@ -0,0 +1,8 @@
+#include <Python.h>
+
+int main(void)
+{
+	Py_Initialize();
+
+	return 0;
+}
tools/build/feature/test-libslang.c new file +6 -0
new file mode 100644
index 000000000000..22ff22ed94d1
@@ -0,0 +1,6 @@
+#include <slang.h>
+
+int main(void)
+{
+	return SLsmg_init_smg();
+}
tools/build/feature/test-libunwind-debug-frame.c new file +16 -0
new file mode 100644
index 000000000000..0ef8087a104a
@@ -0,0 +1,16 @@
+#include <libunwind.h>
+#include <stdlib.h>
+
+extern int
+UNW_OBJ(dwarf_find_debug_frame) (int found, unw_dyn_info_t *di_debug,
+				 unw_word_t ip, unw_word_t segbase,
+				 const char *obj_name, unw_word_t start,
+				 unw_word_t end);
+
+#define dwarf_find_debug_frame UNW_OBJ(dwarf_find_debug_frame)
+
+int main(void)
+{
+	dwarf_find_debug_frame(0, NULL, 0, 0, NULL, 0, 0);
+	return 0;
+}
tools/build/feature/test-libunwind.c new file +27 -0
new file mode 100644
index 000000000000..43b9369bcab7
@@ -0,0 +1,27 @@
+#include <libunwind.h>
+#include <stdlib.h>
+
+extern int UNW_OBJ(dwarf_search_unwind_table) (unw_addr_space_t as,
+                                      unw_word_t ip,
+                                      unw_dyn_info_t *di,
+                                      unw_proc_info_t *pi,
+                                      int need_unwind_info, void *arg);
+
+
+#define dwarf_search_unwind_table UNW_OBJ(dwarf_search_unwind_table)
+
+static unw_accessors_t accessors;
+
+int main(void)
+{
+	unw_addr_space_t addr_space;
+
+	addr_space = unw_create_addr_space(&accessors, 0);
+	if (addr_space)
+		return 0;
+
+	unw_init_remote(NULL, addr_space, NULL);
+	dwarf_search_unwind_table(addr_space, 0, NULL, NULL, 0, NULL);
+
+	return 0;
+}
tools/build/feature/test-pthread-attr-setaffinity-np.c new file +17 -0
new file mode 100644
index 000000000000..fdada5e8d454
@@ -0,0 +1,17 @@
+#include <stdint.h>
+#include <pthread.h>
+#include <sched.h>
+
+int main(void)
+{
+	int ret = 0;
+	pthread_attr_t thread_attr;
+	cpu_set_t cs;
+
+	pthread_attr_init(&thread_attr);
+	CPU_ZERO(&cs);
+
+	ret = pthread_attr_setaffinity_np(&thread_attr, sizeof(cs), &cs);
+
+	return ret;
+}
tools/build/feature/test-stackprotector-all.c new file +6 -0
new file mode 100644
index 000000000000..c9f398d87868
@@ -0,0 +1,6 @@
+#include <stdio.h>
+
+int main(void)
+{
+	return puts("hi");
+}
tools/build/feature/test-sync-compare-and-swap.c new file +14 -0
new file mode 100644
index 000000000000..c34d4ca4af56
@@ -0,0 +1,14 @@
+#include <stdint.h>
+
+volatile uint64_t x;
+
+int main(int argc, char *argv[])
+{
+	uint64_t old, new = argc;
+
+	argv = argv;
+	do {
+		old = __sync_val_compare_and_swap(&x, 0, 0);
+	} while (!__sync_bool_compare_and_swap(&x, old, new));
+	return old == new;
+}
tools/build/feature/test-timerfd.c new file +18 -0
new file mode 100644
index 000000000000..8c5c083b4d3c
@@ -0,0 +1,18 @@
+/*
+ * test for timerfd functions used by perf-kvm-stat-live
+ */
+#include <sys/timerfd.h>
+
+int main(void)
+{
+	struct itimerspec new_value;
+
+	int fd = timerfd_create(CLOCK_MONOTONIC, TFD_NONBLOCK);
+	if (fd < 0)
+		return 1;
+
+	if (timerfd_settime(fd, 0, &new_value, NULL) != 0)
+		return 1;
+
+	return 0;
+}
tools/build/feature/test-zlib.c new file +9 -0
new file mode 100644
index 000000000000..e111fff6240e
@@ -0,0 +1,9 @@
+#include <zlib.h>
+
+int main(void)
+{
+	z_stream zs;
+
+	inflateInit(&zs);
+	return 0;
+}
tools/perf/Makefile.perf +1 -1
index e323eab10694..d5b9e0dae334 100644
@@ -521,7 +521,7 @@ $(INSTALL_DOC_TARGETS):
 #
 config-clean:
 	$(call QUIET_CLEAN, config)
-	$(Q)$(MAKE) -C config/feature-checks clean >/dev/null
+	$(Q)$(MAKE) -C $(srctree)/tools/build/feature/ clean >/dev/null
 
 clean: $(LIBTRACEEVENT)-clean $(LIBAPI)-clean config-clean
 	$(call QUIET_CLEAN, core-objs)  $(RM) $(LIB_FILE) $(OUTPUT)perf-archive $(OUTPUT)perf-with-kcore $(LANG_BINDINGS)
tools/perf/config/Makefile +1 -1
index 95331cc40f7d..480631eccf50 100644
@@ -176,7 +176,7 @@ LDFLAGS += -Wl,-z,noexecstack
 
 EXTLIBS = -lpthread -lrt -lm -ldl
 
-include $(src-perf)/config/Makefile.feature
+include $(srctree)/tools/build/Makefile.feature
 
 ifeq ($(feature-stackprotector-all), 1)
   CFLAGS += -fstack-protector-all
tools/perf/config/Makefile.feature deleted +0 -169

169 lines not on this page · raw message

tools/perf/config/feature-checks/.gitignore deleted +0 -2
deleted file mode 100644
index 80f3da0c3515..000000000000
@@ -1,2 +0,0 @@
-*.d
-*.bin
tools/perf/config/feature-checks/Makefile deleted +0 -160

160 lines not on this page · raw message

tools/perf/config/feature-checks/test-all.c deleted +0 -143

143 lines not on this page · raw message

tools/perf/config/feature-checks/test-backtrace.c deleted +0 -13
deleted file mode 100644
index 7124aa1dc8fb..000000000000
@@ -1,13 +0,0 @@
-#include <execinfo.h>
-#include <stdio.h>
-
-int main(void)
-{
-	void *backtrace_fns[10];
-	size_t entries;
-
-	entries = backtrace(backtrace_fns, 10);
-	backtrace_symbols_fd(backtrace_fns, entries, 1);
-
-	return 0;
-}
tools/perf/config/feature-checks/test-bionic.c deleted +0 -6
deleted file mode 100644
index eac24e9513eb..000000000000
@@ -1,6 +0,0 @@
-#include <android/api-level.h>
-
-int main(void)
-{
-	return __ANDROID_API__;
-}
tools/perf/config/feature-checks/test-compile.c deleted +0 -4
deleted file mode 100644
index 31dbf45bf99c..000000000000
@@ -1,4 +0,0 @@
-int main(void)
-{
-	return 0;
-}
tools/perf/config/feature-checks/test-cplus-demangle.c deleted +0 -14
deleted file mode 100644
index 610c686e0009..000000000000
@@ -1,14 +0,0 @@
-extern int printf(const char *format, ...);
-extern char *cplus_demangle(const char *, int);
-
-int main(void)
-{
-	char symbol[4096] = "FieldName__9ClassNameFd";
-	char *tmp;
-
-	tmp = cplus_demangle(symbol, 0);
-
-	printf("demangled symbol: {%s}\n", tmp);
-
-	return 0;
-}
tools/perf/config/feature-checks/test-dwarf.c deleted +0 -10
deleted file mode 100644
index 3fc1801ce4a9..000000000000
@@ -1,10 +0,0 @@
-#include <dwarf.h>
-#include <elfutils/libdw.h>
-#include <elfutils/version.h>
-
-int main(void)
-{
-	Dwarf *dbg = dwarf_begin(0, DWARF_C_READ);
-
-	return (long)dbg;
-}
tools/perf/config/feature-checks/test-fortify-source.c deleted +0 -6
deleted file mode 100644
index c9f398d87868..000000000000
@@ -1,6 +0,0 @@
-#include <stdio.h>
-
-int main(void)
-{
-	return puts("hi");
-}
tools/perf/config/feature-checks/test-glibc.c deleted +0 -8
deleted file mode 100644
index b0820345cd98..000000000000
@@ -1,8 +0,0 @@
-#include <gnu/libc-version.h>
-
-int main(void)
-{
-	const char *version = gnu_get_libc_version();
-
-	return (long)version;
-}
tools/perf/config/feature-checks/test-gtk2-infobar.c deleted +0 -11
deleted file mode 100644
index 397b4646d066..000000000000
@@ -1,11 +0,0 @@
-#pragma GCC diagnostic ignored "-Wstrict-prototypes"
-#include <gtk/gtk.h>
-#pragma GCC diagnostic error "-Wstrict-prototypes"
-
-int main(int argc, char *argv[])
-{
-	gtk_init(&argc, &argv);
-	gtk_info_bar_new();
-
-	return 0;
-}
tools/perf/config/feature-checks/test-gtk2.c deleted +0 -10
deleted file mode 100644
index 6bd80e509439..000000000000
@@ -1,10 +0,0 @@
-#pragma GCC diagnostic ignored "-Wstrict-prototypes"
-#include <gtk/gtk.h>
-#pragma GCC diagnostic error "-Wstrict-prototypes"
-
-int main(int argc, char *argv[])
-{
-	gtk_init(&argc, &argv);
-
-        return 0;
-}
tools/perf/config/feature-checks/test-hello.c deleted +0 -6
deleted file mode 100644
index c9f398d87868..000000000000
@@ -1,6 +0,0 @@
-#include <stdio.h>
-
-int main(void)
-{
-	return puts("hi");
-}
tools/perf/config/feature-checks/test-libaudit.c deleted +0 -10
deleted file mode 100644
index afc019f08641..000000000000
@@ -1,10 +0,0 @@
-#include <libaudit.h>
-
-extern int printf(const char *format, ...);
-
-int main(void)
-{
-	printf("error message: %s\n", audit_errno_to_name(0));
-
-	return audit_open();
-}
tools/perf/config/feature-checks/test-libbabeltrace.c deleted +0 -9
deleted file mode 100644
index 9cf802a04885..000000000000
@@ -1,9 +0,0 @@
-
-#include <babeltrace/ctf-writer/writer.h>
-#include <babeltrace/ctf-ir/stream-class.h>
-
-int main(void)
-{
-	bt_ctf_stream_class_get_packet_context_type((void *) 0);
-	return 0;
-}
tools/perf/config/feature-checks/test-libbfd.c deleted +0 -15
deleted file mode 100644
index 24059907e990..000000000000
@@ -1,15 +0,0 @@
-#include <bfd.h>
-
-extern int printf(const char *format, ...);
-
-int main(void)
-{
-	char symbol[4096] = "FieldName__9ClassNameFd";
-	char *tmp;
-
-	tmp = bfd_demangle(0, symbol, 0);
-
-	printf("demangled symbol: {%s}\n", tmp);
-
-	return 0;
-}
tools/perf/config/feature-checks/test-libdw-dwarf-unwind.c deleted +0 -13
deleted file mode 100644
index f676a3ff442a..000000000000
@@ -1,13 +0,0 @@
-
-#include <elfutils/libdwfl.h>
-
-int main(void)
-{
-	/*
-	 * This function is guarded via: __nonnull_attribute__ (1, 2).
-	 * Passing '1' as arguments value. This code is never executed,
-	 * only compiled.
-	 */
-	dwfl_thread_getframes((void *) 1, (void *) 1, NULL);
-	return 0;
-}
tools/perf/config/feature-checks/test-libelf-getphdrnum.c deleted +0 -8
deleted file mode 100644
index d710459306c3..000000000000
@@ -1,8 +0,0 @@
-#include <libelf.h>
-
-int main(void)
-{
-	size_t dst;
-
-	return elf_getphdrnum(0, &dst);
-}
tools/perf/config/feature-checks/test-libelf-mmap.c deleted +0 -8
deleted file mode 100644
index 564427d7ef18..000000000000
@@ -1,8 +0,0 @@
-#include <libelf.h>
-
-int main(void)
-{
-	Elf *elf = elf_begin(0, ELF_C_READ_MMAP, 0);
-
-	return (long)elf;
-}
tools/perf/config/feature-checks/test-libelf.c deleted +0 -8
deleted file mode 100644
index 08db322d8957..000000000000
@@ -1,8 +0,0 @@
-#include <libelf.h>
-
-int main(void)
-{
-	Elf *elf = elf_begin(0, ELF_C_READ, 0);
-
-	return (long)elf;
-}
tools/perf/config/feature-checks/test-libnuma.c deleted +0 -9
deleted file mode 100644
index 4763d9cd587d..000000000000
@@ -1,9 +0,0 @@
-#include <numa.h>
-#include <numaif.h>
-
-int main(void)
-{
-	numa_available();
-
-	return 0;
-}
tools/perf/config/feature-checks/test-libperl.c deleted +0 -9
deleted file mode 100644
index 8871f6a0fdb4..000000000000
@@ -1,9 +0,0 @@
-#include <EXTERN.h>
-#include <perl.h>
-
-int main(void)
-{
-	perl_alloc();
-
-	return 0;
-}
tools/perf/config/feature-checks/test-libpython-version.c deleted +0 -10
deleted file mode 100644
index facea122d812..000000000000
@@ -1,10 +0,0 @@
-#include <Python.h>
-
-#if PY_VERSION_HEX >= 0x03000000
-	#error
-#endif
-
-int main(void)
-{
-	return 0;
-}
tools/perf/config/feature-checks/test-libpython.c deleted +0 -8
deleted file mode 100644
index b24b28ad6324..000000000000
@@ -1,8 +0,0 @@
-#include <Python.h>
-
-int main(void)
-{
-	Py_Initialize();
-
-	return 0;
-}
tools/perf/config/feature-checks/test-libslang.c deleted +0 -6
deleted file mode 100644
index 22ff22ed94d1..000000000000
@@ -1,6 +0,0 @@
-#include <slang.h>
-
-int main(void)
-{
-	return SLsmg_init_smg();
-}
tools/perf/config/feature-checks/test-libunwind-debug-frame.c deleted +0 -16
deleted file mode 100644
index 0ef8087a104a..000000000000
@@ -1,16 +0,0 @@
-#include <libunwind.h>
-#include <stdlib.h>
-
-extern int
-UNW_OBJ(dwarf_find_debug_frame) (int found, unw_dyn_info_t *di_debug,
-				 unw_word_t ip, unw_word_t segbase,
-				 const char *obj_name, unw_word_t start,
-				 unw_word_t end);
-
-#define dwarf_find_debug_frame UNW_OBJ(dwarf_find_debug_frame)
-
-int main(void)
-{
-	dwarf_find_debug_frame(0, NULL, 0, 0, NULL, 0, 0);
-	return 0;
-}
tools/perf/config/feature-checks/test-libunwind.c deleted +0 -27
deleted file mode 100644
index 43b9369bcab7..000000000000
@@ -1,27 +0,0 @@
-#include <libunwind.h>
-#include <stdlib.h>
-
-extern int UNW_OBJ(dwarf_search_unwind_table) (unw_addr_space_t as,
-                                      unw_word_t ip,
-                                      unw_dyn_info_t *di,
-                                      unw_proc_info_t *pi,
-                                      int need_unwind_info, void *arg);
-
-
-#define dwarf_search_unwind_table UNW_OBJ(dwarf_search_unwind_table)
-
-static unw_accessors_t accessors;
-
-int main(void)
-{
-	unw_addr_space_t addr_space;
-
-	addr_space = unw_create_addr_space(&accessors, 0);
-	if (addr_space)
-		return 0;
-
-	unw_init_remote(NULL, addr_space, NULL);
-	dwarf_search_unwind_table(addr_space, 0, NULL, NULL, 0, NULL);
-
-	return 0;
-}
tools/perf/config/feature-checks/test-pthread-attr-setaffinity-np.c deleted +0 -17
deleted file mode 100644
index fdada5e8d454..000000000000
@@ -1,17 +0,0 @@
-#include <stdint.h>
-#include <pthread.h>
-#include <sched.h>
-
-int main(void)
-{
-	int ret = 0;
-	pthread_attr_t thread_attr;
-	cpu_set_t cs;
-
-	pthread_attr_init(&thread_attr);
-	CPU_ZERO(&cs);
-
-	ret = pthread_attr_setaffinity_np(&thread_attr, sizeof(cs), &cs);
-
-	return ret;
-}
tools/perf/config/feature-checks/test-stackprotector-all.c deleted +0 -6
deleted file mode 100644
index c9f398d87868..000000000000
@@ -1,6 +0,0 @@
-#include <stdio.h>
-
-int main(void)
-{
-	return puts("hi");
-}
tools/perf/config/feature-checks/test-sync-compare-and-swap.c deleted +0 -14
deleted file mode 100644
index c34d4ca4af56..000000000000
@@ -1,14 +0,0 @@
-#include <stdint.h>
-
-volatile uint64_t x;
-
-int main(int argc, char *argv[])
-{
-	uint64_t old, new = argc;
-
-	argv = argv;
-	do {
-		old = __sync_val_compare_and_swap(&x, 0, 0);
-	} while (!__sync_bool_compare_and_swap(&x, old, new));
-	return old == new;
-}
tools/perf/config/feature-checks/test-timerfd.c deleted +0 -18
deleted file mode 100644
index 8c5c083b4d3c..000000000000
@@ -1,18 +0,0 @@
-/*
- * test for timerfd functions used by perf-kvm-stat-live
- */
-#include <sys/timerfd.h>
-
-int main(void)
-{
-	struct itimerspec new_value;
-
-	int fd = timerfd_create(CLOCK_MONOTONIC, TFD_NONBLOCK);
-	if (fd < 0)
-		return 1;
-
-	if (timerfd_settime(fd, 0, &new_value, NULL) != 0)
-		return 1;
-
-	return 0;
-}
tools/perf/config/feature-checks/test-zlib.c deleted +0 -9
deleted file mode 100644
index e111fff6240e..000000000000
@@ -1,9 +0,0 @@
-#include <zlib.h>
-
-int main(void)
-{
-	z_stream zs;
-
-	inflateInit(&zs);
-	return 0;
-}
Signature · 1 line
1.9.3
author reviewer
#18 lore raw

PATCH v2 14/15 tools build: Allow to override feature checks setup

In reply to Jiri Olsa

Allowing to override configuration variables for feature checks. Also adding automated test and documentation.

Cc Arnaldo Carvalho de Melo <[email protected]>
Cc Corey Ashford <[email protected]>
Cc David Ahern <[email protected]>
Cc Ingo Molnar <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Paul Mackerras <[email protected]>
Cc Peter Zijlstra <[email protected]>
---
 tools/build/Documentation/Feature.txt     | 93 +++++++++++++++++++++++++++++++
 tools/build/Makefile.feature              |  4 +-
 tools/build/tests/features/Makefile       | 23 ++++++++
 tools/build/tests/features/Makefile.test1 | 16 ++++++
 tools/build/tests/run.sh                  |  4 +-
 5 files changed, 137 insertions(+), 3 deletions(-)
 create mode 100644 tools/build/Documentation/Feature.txt
 create mode 100644 tools/build/tests/features/Makefile
 create mode 100644 tools/build/tests/features/Makefile.test1
tools/build/Documentation/Feature.txt new file +93 -0
new file mode 100644
index 000000000000..0c75419ba803
@@ -0,0 +1,93 @@
+Feature Framework
+=================
+The 'feature' framework provides information for makefiles about
+installed libraries and interfaces in the system.
+
+The 'feature' is represented by its name and simple source located
+in 'tools/build/feature/test-$(name).c' file. The framework builds
+each such source for configured feature and sets $(feature-$(name))
+variable to 0 or 1 if it fails or succeeds to build respectively.
+
+The current usage example of the feature framework is:
+
+--- Makefile.test
+  FEATURE_TESTS   := glibc backtrace
+  FEATURE_DISPLAY := glibc
+
+  srctree := ../../../..
+  include $(srctree)/tools/build/Makefile.feature
+
+  ifndef feature-glibc
+    $(error FAILED feature-glibc variable not defined)
+  endif
+
+  ifndef feature-backtrace
+    $(error FAILED feature-backtrace variable not defined)
+  endif
+---
+
+User defines list of features to check in FEATURE_TESTS variable:
+
+  FEATURE_TESTS   := glibc backtrace
+
+and list of features she wishes to display in FEATURE_DISPLAY variable:
+
+  FEATURE_DISPLAY := glibc
+
+then user includes Makefile.feature makefile:
+
+  include $(srctree)/tools/build/Makefile.feature
+
+following output is displayed on processing of the makefile:
+
+  $ make -f Makefile.test
+
+  Auto-detecting system features:
+  ...                         glibc: [ on  ]
+
+Plus following variables are defined indicating the
+requested feature status:
+
+  $(feature-glibc)
+  $(feature-backtrace)
+
+Following features are currently available for FEATURE_TESTS:
+
+      backtrace
+      dwarf
+      fortify-source
+      sync-compare-and-swap
+      glibc
+      gtk2
+      gtk2-infobar
+      libaudit
+      libbfd
+      libelf
+      libelf-getphdrnum
+      libelf-mmap
+      libnuma
+      libperl
+      libpython
+      libpython-version
+      libslang
+      libunwind
+      pthread-attr-setaffinity-np
+      stackprotector-all
+      timerfd
+      libdw-dwarf-unwind
+      libbabeltrace
+      zlib
+
+It's also possible to pass options for checks compilation and linking
+by using following variables:
+
+  FEATURE_CHECK_CFLAGS-$(name)
+  FEATURE_CHECK_LDFLAGS-$(name)
+
+where $(anem) represents feature name from above list.
+
+For example following settings will provide options for 'libunwind'
+feature compilation and linking:
+
+    FEATURE_CHECK_CFLAGS-libunwind  = $(LIBUNWIND_CFLAGS)
+    FEATURE_CHECK_LDFLAGS-libunwind = $(LIBUNWIND_LDFLAGS)
tools/build/Makefile.feature +2 -2
index 7e534e1318aa..4abaf5f09617 100644
@@ -27,7 +27,7 @@ endef
 #   the rule that uses them - an example for that is the 'bionic'
 #   feature check. ]
 #
-FEATURE_TESTS =			\
+FEATURE_TESTS ?=			\
 	backtrace			\
 	dwarf				\
 	fortify-source			\
@@ -52,7 +52,7 @@ FEATURE_TESTS =			\
 	libdw-dwarf-unwind		\
 	zlib
 
-FEATURE_DISPLAY =			\
+FEATURE_DISPLAY ?=			\
 	dwarf				\
 	glibc				\
 	gtk2				\
tools/build/tests/features/Makefile new file +23 -0
new file mode 100644
index 000000000000..cb94dda32534
@@ -0,0 +1,23 @@
+all: test1
+
+test1:
+	rm -f FEATURE-DUMP
+	make -f Makefile.test1 > out
+	# we should get one line with 'glibc' feature status
+	features=`grep -cF ... out`; \
+	if [ "$$features" != "1" ]; then echo FAILED; exit 1; fi
+	# we should NOT get any feature status line on second run
+	make -f Makefile.test1 > out
+	features=`grep -cF ... out`; \
+	if [ "$$features" == "1" ]; then echo FAILED; exit 1; fi
+	# we should get both 'glibc' and 'backtrace' status lines now
+	make -f Makefile.test1 VF=1 > out
+	features=`grep -cF ... out`; \
+	if [ "$$features" != "2" ]; then echo FAILED; exit 1; fi
+	# and fresh start without FEATURE-DUMP, expecting 'glibc' status line
+	rm -f FEATURE-DUMP
+	make -f Makefile.test1 > out
+	features=`grep -cF ... out`; \
+	if [ "$$features" != "1" ]; then echo FAILED; exit 1; fi
+	# cleanup
+	rm -f FEATURE-DUMP out
tools/build/tests/features/Makefile.test1 new file +16 -0
new file mode 100644
index 000000000000..101b78f777c1
@@ -0,0 +1,16 @@
+
+FEATURE_TESTS   := glibc backtrace
+FEATURE_DISPLAY := glibc
+
+srctree := ../../../..
+include $(srctree)/tools/build/Makefile.feature
+
+ifndef feature-glibc
+  $(error FAILED feature-glibc variable not defined)
+endif
+
+ifndef feature-backtrace
+  $(error FAILED feature-backtrace variable not defined)
+endif
+
+all:
tools/build/tests/run.sh +3 -1
index 5494f8ea7567..bd6dc8ee1830 100755
@@ -39,4 +39,6 @@ echo -n Testing..
 test_ex
 test_ex_suffix
 
-echo OK
+cd features && make -s -f Makefile
+
+if [ $? -eq 0 ]; then echo OK; fi
Signature · 1 line
1.9.3
author reviewer
#19 lore raw

PATCH v2 15/15 tools build: Fix feature_check name clash

In reply to Jiri Olsa

We have 2 feature_check functions, which conflict with each other. Fixing it by renaming the latter to feature_display_check.

Cc Arnaldo Carvalho de Melo <[email protected]>
Cc Corey Ashford <[email protected]>
Cc David Ahern <[email protected]>
Cc Ingo Molnar <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Paul Mackerras <[email protected]>
Cc Peter Zijlstra <[email protected]>
---
 tools/build/Makefile.feature | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
tools/build/Makefile.feature +3 -3
index 4abaf5f09617..12e58703a364 100644
@@ -134,14 +134,14 @@ ifneq ("$(FEATURE_DUMP)","$(FEATURE_DUMP_FILE)")
   feature_display := 1
 endif
 
-feature_check = $(eval $(feature_check_code))
-define feature_check_code
+feature_display_check = $(eval $(feature_check_code))
+define feature_display_check_code
   ifneq ($(feature-$(1)), 1)
     feature_display := 1
   endif
 endef
 
-$(foreach feat,$(FEATURE_DISPLAY),$(call feature_check,$(feat)))
+$(foreach feat,$(FEATURE_DISPLAY),$(call feature_display_check,$(feat)))
 
 ifeq ($(VF),1)
   feature_display := 1
Signature · 1 line
1.9.3
#20 lore raw
In reply to Jiri Olsa

Em Wed, Mar 11, 2015 at 09:58:49AM +0100, Jiri Olsa escreveu:

Quoted 12 lines

hi,
moving features detection framework from perf to 'tools/build' plus other minor fixes.

v2 changes:
- omitted patch 1 from original version (Ingo)
- added features build output dump (Arnaldo)
- better scripting in features test (Namhyung)
- fixed test-all for pthread-attr-setaffinity-np
- removed main_test_libbabeltrace from test-all
- patches reordered

Quoted 3 lines

It's also available in:
git://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf.git
perf/build

Ok, so using the csets from the above branch, if I do:

[acme@ssdandy linux]$ rm -rf /tmp/build/perf ; mkdir -p /tmp/build/perf ; time make O=/tmp/build/perf -C tools/perf LIBBABELTRACE_DIR=/opt/libbabeltrace/ install-bin
make: Entering directory `/home/acme/git/linux/tools/perf'
BUILD: Doing 'make -j8' parallel build
config/Makefile:423: No libunwind found. Please install libunwind-dev[el] >= 1.1 and/or set LIBUNWIND_DIR

Auto-detecting system features:

...                         dwarf: [ on  ]
...                         glibc: [ on  ]
...                          gtk2: [ on  ]
...                      libaudit: [ on  ]
...                        libbfd: [ on  ]
...                        libelf: [ on  ]
...                       libnuma: [ on  ]
...                       libperl: [ on  ]
...                     libpython: [ on  ]
...                      libslang: [ on  ]

... libunwind: [ OFF ]
... libdw-dwarf-unwind: [ on ]
... zlib: [ on ]
... DWARF post unwind library: libdw

And then, despite not telling anything about babeltrace being linked, i.e. the no line above with a [ on ], we get:

[acme@ssdandy linux]$ ldd ~/bin/perf | grep babel

	libbabeltrace-ctf.so.1 => /opt/libbabeltrace/lib/libbabeltrace-ctf.so.1 (0x00007f5f7b758000)
	libbabeltrace.so.1 => /opt/libbabeltrace/lib/libbabeltrace.so.1 (0x00007f5f7acfb000)

[acme@ssdandy linux]$

I.e. if a libbabeltrace-devel was installed and had what is needed to build it in, when there would be no need for the LIBBABELTRACE_DIR above and babeltrace wouldn't be either implicitely or explicitely specified as something we want to build against we would not show it as a feature being built in (no
libbabeltrace: [ On ]) but would do it anyway, is that really the intention?

I tested in fedora, where no system auto-detection fails, i.e. test-all passes, and the result is the same.

Ingo, can you clarify here?

- Arnaldo

#21 lore raw
Quoted 35 lines · Arnaldo Carvalho de Melo

Em Wed, Mar 11, 2015 at 09:58:49AM +0100, Jiri Olsa escreveu:

Quoted 12 lines

hi,
moving features detection framework from perf to 'tools/build' plus other minor fixes.

v2 changes:
- omitted patch 1 from original version (Ingo)
- added features build output dump (Arnaldo)
- better scripting in features test (Namhyung)
- fixed test-all for pthread-attr-setaffinity-np
- removed main_test_libbabeltrace from test-all
- patches reordered

Quoted 3 lines

It's also available in:
git://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf.git
perf/build

Ok, so using the csets from the above branch, if I do:

[acme@ssdandy linux]$ rm -rf /tmp/build/perf ; mkdir -p /tmp/build/perf ; time make O=/tmp/build/perf -C tools/perf LIBBABELTRACE_DIR=/opt/libbabeltrace/ install-bin
make: Entering directory `/home/acme/git/linux/tools/perf'
BUILD: Doing 'make -j8' parallel build
config/Makefile:423: No libunwind found. Please install libunwind-dev[el] >= 1.1 and/or set LIBUNWIND_DIR

Auto-detecting system features:

...                         dwarf: [ on  ]
...                         glibc: [ on  ]
...                          gtk2: [ on  ]
...                      libaudit: [ on  ]
...                        libbfd: [ on  ]
...                        libelf: [ on  ]
...                       libnuma: [ on  ]
...                       libperl: [ on  ]
...                     libpython: [ on  ]
...                      libslang: [ on  ]
Quoted 7 lines

... libunwind: [ OFF ]
... libdw-dwarf-unwind: [ on ]
... zlib: [ on ]
... DWARF post unwind library: libdw

And then, despite not telling anything about babeltrace being linked, i.e. the no line above with a [ on ], we get:

libbabeltrace was taken out of the default display of features as requested, because the requested interface wasn't released yet

you enabled it manually via LIBBABELTRACE_DIR='...', so it got linked.. but it wont appear in the default display list anyway.. we dont have this kind of functionality yet

jirka

Quoted 18 lines

[acme@ssdandy linux]$ ldd ~/bin/perf | grep babel

	libbabeltrace-ctf.so.1 => /opt/libbabeltrace/lib/libbabeltrace-ctf.so.1 (0x00007f5f7b758000)
	libbabeltrace.so.1 => /opt/libbabeltrace/lib/libbabeltrace.so.1 (0x00007f5f7acfb000)

[acme@ssdandy linux]$

I.e. if a libbabeltrace-devel was installed and had what is needed to build it in, when there would be no need for the LIBBABELTRACE_DIR above and babeltrace wouldn't be either implicitely or explicitely specified as something we want to build against we would not show it as a feature being built in (no
libbabeltrace: [ On ]) but would do it anyway, is that really the intention?

I tested in fedora, where no system auto-detection fails, i.e. test-all passes, and the result is the same.

Ingo, can you clarify here?

- Arnaldo

#22 lore raw

Em Wed, Mar 18, 2015 at 07:59:16PM +0100, Jiri Olsa escreveu:

Quoted 31 lines · Arnaldo Carvalho de Melo
Quoted 22 lines

Em Wed, Mar 11, 2015 at 09:58:49AM +0100, Jiri Olsa escreveu:

Quoted 2 lines

git://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf.git
perf/build

Ok, so using the csets from the above branch, if I do:

[acme@ssdandy linux]$ rm -rf /tmp/build/perf ; mkdir -p /tmp/build/perf ; time make O=/tmp/build/perf -C tools/perf LIBBABELTRACE_DIR=/opt/libbabeltrace/ install-bin
make: Entering directory `/home/acme/git/linux/tools/perf'
BUILD: Doing 'make -j8' parallel build
config/Makefile:423: No libunwind found. Please install libunwind-dev[el] >= 1.1 and/or set LIBUNWIND_DIR

Auto-detecting system features:

...                         dwarf: [ on  ]
...                         glibc: [ on  ]
...                          gtk2: [ on  ]
...                      libaudit: [ on  ]
...                        libbfd: [ on  ]
...                        libelf: [ on  ]
...                       libnuma: [ on  ]
...                       libperl: [ on  ]
...                     libpython: [ on  ]
...                      libslang: [ on  ]
Quoted 7 lines

... libunwind: [ OFF ]
... libdw-dwarf-unwind: [ on ]
... zlib: [ on ]
... DWARF post unwind library: libdw

And then, despite not telling anything about babeltrace being linked, i.e. the no line above with a [ on ], we get:

Quoted 6 lines

libbabeltrace was taken out of the default display of features as requested, because the requested interface wasn't released yet

you enabled it manually via LIBBABELTRACE_DIR='...', so it got linked.. but it wont appear in the default

I thought that what was requested was that it wouldn't be built, even if the required libs were installed, i.e. by default it wouldn't be tried.

If I remove that LIBBABELTRACE_DIR all it will do is to try to build it anyway and fail, which will make it emit the "support for CTF will not be enabled since libbabeltrace-devel wasn't found, etc" like message, which is confusing as well, because nobody will find, from a distro, a libbabeltrace-devel that meeds this requirement, which I think is the point Ingo tried to make, right?

My expectation, from what I've read in the discussion with Ingo, was that NO_LIBBABELTRACE (sp?) would be turned on by default until we were reasonably sure that the availability of the required functionality was more or less widespread, i.e. that testing for it would have a high degree of chances of succeeding, thus not slowing down the build process most of the time for most of the users.

People wanting to build it would have to explicitely pass NO_LIBBABELTRACE=0 or equivalent in the make command line.

Anyway, I applied the patch, as it is holding the other changes, we can always fix this later.

- Arnaldo