Add CFLAGS and LDFLAGS for each feature to be checked during the build. This allows to pass particular flags and parameters to the feature checks compilation.
Use the per-feature check flags for the unwinding feature in order to correctly compile the test-all, libunwind and libunwind-debug-frame feature checks.
This change set simplifies the flags passing mechanism between the Makefiles in config/Makefile and config/feature-checks; this could be farther optimized by moving the compilation flags to the per-feature check flags for all features to be checked.
Tested on x86_64, ARMv7 and ARMv8 with and without LIBUNWIND_DIR set in 'make -C tools/perf'
Jean Pihet (2): perf: add per-feature check flags perf: unwinding: use the per-feature check flags
tools/perf/config/Makefile | 52 ++++++++++++++++++------------- tools/perf/config/feature-checks/Makefile | 8 ++--- 2 files changed, 34 insertions(+), 26 deletions(-)
Add CFLAGS and LDFLAGS for each feature to be checked. This allows to pass flags and parameters to the feature checks compilation. Also simplifies the feature check makefile, to come in a subsequent patch.
Signed-off-by: Jean Pihet jean.pihet@linaro.org --- tools/perf/config/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/perf/config/Makefile b/tools/perf/config/Makefile index bae1072..2afb132 100644 --- a/tools/perf/config/Makefile +++ b/tools/perf/config/Makefile @@ -102,7 +102,7 @@ endif
feature_check = $(eval $(feature_check_code)) define feature_check_code - feature-$(1) := $(shell $(MAKE) OUTPUT=$(OUTPUT_FEATURES) CFLAGS="$(EXTRA_CFLAGS)" LDFLAGS="$(LDFLAGS)" LIBUNWIND_LIBS="$(LIBUNWIND_LIBS)" -C config/feature-checks test-$1 >/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))" LIBUNWIND_LIBS="$(LIBUNWIND_LIBS)" -C config/feature-checks test-$1 >/dev/null 2>/dev/null && echo 1 || echo 0) endef
feature_set = $(eval $(feature_set_code))
Use the per-feature check flags for the unwinding feature in order to correctly compile the test-all, libunwind and libunwind-debug-frame feature checks.
Tested on x86_64, ARMv7 and ARMv8 with and without LIBUNWIND_DIR set in 'make -C tools/perf'
Signed-off-by: Jean Pihet jean.pihet@linaro.org Cc: Jiri Olsa jolsa@redhat.com --- tools/perf/config/Makefile | 52 ++++++++++++++++++------------- tools/perf/config/feature-checks/Makefile | 8 ++--- 2 files changed, 34 insertions(+), 26 deletions(-)
diff --git a/tools/perf/config/Makefile b/tools/perf/config/Makefile index 2afb132..5a1f4df 100644 --- a/tools/perf/config/Makefile +++ b/tools/perf/config/Makefile @@ -36,6 +36,30 @@ ifeq ($(ARCH),arm) LIBUNWIND_LIBS = -lunwind -lunwind-arm endif
+ifeq ($(LIBUNWIND_LIBS),) + NO_LIBUNWIND := 1 +else + # + # For linking with debug library, run like: + # + # make DEBUG=1 LIBUNWIND_DIR=/opt/libunwind/ + # + ifdef LIBUNWIND_DIR + LIBUNWIND_CFLAGS = -I$(LIBUNWIND_DIR)/include + LIBUNWIND_LDFLAGS = -L$(LIBUNWIND_DIR)/lib + endif + LIBUNWIND_LDFLAGS += $(LIBUNWIND_LIBS) + + # Set per-feature check compilation flags + FEATURE_CHECK_CFLAGS-libunwind = $(LIBUNWIND_CFLAGS) + FEATURE_CHECK_LDFLAGS-libunwind = $(LIBUNWIND_LDFLAGS) + FEATURE_CHECK_CFLAGS-libunwind-debug-frame = $(LIBUNWIND_CFLAGS) + FEATURE_CHECK_LDFLAGS-libunwind-debug-frame = $(LIBUNWIND_LDFLAGS) + # and the flags for the test-all case + FEATURE_CHECK_CFLAGS-all += $(LIBUNWIND_CFLAGS) + FEATURE_CHECK_LDFLAGS-all += $(LIBUNWIND_LDFLAGS) +endif + ifeq ($(NO_PERF_REGS),0) CFLAGS += -DHAVE_PERF_REGS_SUPPORT endif @@ -102,7 +126,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))" LIBUNWIND_LIBS="$(LIBUNWIND_LIBS)" -C config/feature-checks test-$1 >/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 config/feature-checks test-$1 >/dev/null 2>/dev/null && echo 1 || echo 0) endef
feature_set = $(eval $(feature_set_code)) @@ -305,21 +329,7 @@ ifndef NO_LIBELF endif # NO_DWARF endif # NO_LIBELF
-ifeq ($(LIBUNWIND_LIBS),) - NO_LIBUNWIND := 1 -endif - ifndef NO_LIBUNWIND - # - # For linking with debug library, run like: - # - # make DEBUG=1 LIBUNWIND_DIR=/opt/libunwind/ - # - ifdef LIBUNWIND_DIR - LIBUNWIND_CFLAGS := -I$(LIBUNWIND_DIR)/include - LIBUNWIND_LDFLAGS := -L$(LIBUNWIND_DIR)/lib - endif - ifneq ($(feature-libunwind), 1) msg := $(warning No libunwind found, disabling post unwind support. Please install libunwind-dev[el] >= 1.1); NO_LIBUNWIND := 1 @@ -334,14 +344,12 @@ ifndef NO_LIBUNWIND # non-ARM has no dwarf_find_debug_frame() function: CFLAGS += -DNO_LIBUNWIND_DEBUG_FRAME endif - endif -endif
-ifndef NO_LIBUNWIND - CFLAGS += -DHAVE_LIBUNWIND_SUPPORT - EXTLIBS += $(LIBUNWIND_LIBS) - CFLAGS += $(LIBUNWIND_CFLAGS) - LDFLAGS += $(LIBUNWIND_LDFLAGS) + CFLAGS += -DHAVE_LIBUNWIND_SUPPORT + EXTLIBS += $(LIBUNWIND_LIBS) + CFLAGS += $(LIBUNWIND_CFLAGS) + LDFLAGS += $(LIBUNWIND_LDFLAGS) + endif # ifneq ($(feature-libunwind), 1) endif
ifndef NO_LIBAUDIT diff --git a/tools/perf/config/feature-checks/Makefile b/tools/perf/config/feature-checks/Makefile index b8bb749..bc86462 100644 --- a/tools/perf/config/feature-checks/Makefile +++ b/tools/perf/config/feature-checks/Makefile @@ -32,12 +32,12 @@ CC := $(CC) -MD
all: $(FILES)
-BUILD = $(CC) $(CFLAGS) $(LDFLAGS) -o $(OUTPUT)$@ $@.c +BUILD = $(CC) $(CFLAGS) -o $(OUTPUT)$@ $@.c $(LDFLAGS)
###############################
test-all: - $(BUILD) -Werror -fstack-protector-all -O2 -Werror -D_FORTIFY_SOURCE=2 -ldw -lelf -lnuma $(LIBUNWIND_LIBS) -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 + $(BUILD) -Werror -fstack-protector-all -O2 -Werror -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
test-hello: $(BUILD) @@ -70,10 +70,10 @@ test-libnuma: $(BUILD) -lnuma
test-libunwind: - $(BUILD) $(LIBUNWIND_LIBS) -lelf + $(BUILD) -lelf
test-libunwind-debug-frame: - $(BUILD) $(LIBUNWIND_LIBS) -lelf + $(BUILD) -lelf
test-libaudit: $(BUILD) -laudit
* Jean Pihet jean.pihet@linaro.org wrote:
Add CFLAGS and LDFLAGS for each feature to be checked during the build. This allows to pass particular flags and parameters to the feature checks compilation.
Use the per-feature check flags for the unwinding feature in order to correctly compile the test-all, libunwind and libunwind-debug-frame feature checks.
This change set simplifies the flags passing mechanism between the Makefiles in config/Makefile and config/feature-checks; this could be farther optimized by moving the compilation flags to the per-feature check flags for all features to be checked.
Tested on x86_64, ARMv7 and ARMv8 with and without LIBUNWIND_DIR set in 'make -C tools/perf'
Jean Pihet (2): perf: add per-feature check flags perf: unwinding: use the per-feature check flags
tools/perf/config/Makefile | 52 ++++++++++++++++++------------- tools/perf/config/feature-checks/Makefile | 8 ++--- 2 files changed, 34 insertions(+), 26 deletions(-)
Acked-by: Ingo Molnar mingo@kernel.org
Thanks,
Ingo
On Tue, Dec 10, 2013 at 01:24:02PM +0100, Jean Pihet wrote:
Add CFLAGS and LDFLAGS for each feature to be checked during the build. This allows to pass particular flags and parameters to the feature checks compilation.
Use the per-feature check flags for the unwinding feature in order to correctly compile the test-all, libunwind and libunwind-debug-frame feature checks.
This change set simplifies the flags passing mechanism between the Makefiles in config/Makefile and config/feature-checks; this could be farther optimized by moving the compilation flags to the per-feature check flags for all features to be checked.
Tested on x86_64, ARMv7 and ARMv8 with and without LIBUNWIND_DIR set in 'make -C tools/perf'
Acked-by: Jiri Olsa jolsa@redhat.com
thanks, jirka
On Tue, Dec 10, 2013 at 01:24:02PM +0100, Jean Pihet wrote:
Add CFLAGS and LDFLAGS for each feature to be checked during the build. This allows to pass particular flags and parameters to the feature checks compilation.
Use the per-feature check flags for the unwinding feature in order to correctly compile the test-all, libunwind and libunwind-debug-frame feature checks.
This change set simplifies the flags passing mechanism between the Makefiles in config/Makefile and config/feature-checks; this could be farther optimized by moving the compilation flags to the per-feature check flags for all features to be checked.
Tested on x86_64, ARMv7 and ARMv8 with and without LIBUNWIND_DIR set in 'make -C tools/perf'
Jean Pihet (2): perf: add per-feature check flags perf: unwinding: use the per-feature check flags
tools/perf/config/Makefile | 52 ++++++++++++++++++------------- tools/perf/config/feature-checks/Makefile | 8 ++--- 2 files changed, 34 insertions(+), 26 deletions(-)
while at it, how about following update
thanks, jirka
--- Instead of explicitly adding same value into FEATURE_CHECK_(C|LD)FLAGS-all variables we can do that automatically.
Signed-off-by: Jiri Olsa jolsa@redhat.com --- tools/perf/config/Makefile | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/tools/perf/config/Makefile b/tools/perf/config/Makefile index f75d814..05fd0e2 100644 --- a/tools/perf/config/Makefile +++ b/tools/perf/config/Makefile @@ -55,9 +55,6 @@ else FEATURE_CHECK_LDFLAGS-libunwind = $(LIBUNWIND_LDFLAGS) FEATURE_CHECK_CFLAGS-libunwind-debug-frame = $(LIBUNWIND_CFLAGS) FEATURE_CHECK_LDFLAGS-libunwind-debug-frame = $(LIBUNWIND_LDFLAGS) - # and the flags for the test-all case - FEATURE_CHECK_CFLAGS-all += $(LIBUNWIND_CFLAGS) - FEATURE_CHECK_LDFLAGS-all += $(LIBUNWIND_LDFLAGS) endif
ifeq ($(NO_PERF_REGS),0) @@ -168,6 +165,17 @@ CORE_FEATURE_TESTS = \ stackprotector-all \ timerfd
+# Set FEATURE_CHECK_(C|LD)FLAGS-all for all CORE_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,$(CORE_FEATURE_TESTS),$(call set_test_all_flags,$(feat))) + # # So here we detect whether test-all was rebuilt, to be able # to skip the print-out of the long features list if the file
Jiri,
On 10 December 2013 14:55, Jiri Olsa jolsa@redhat.com wrote:
On Tue, Dec 10, 2013 at 01:24:02PM +0100, Jean Pihet wrote:
Add CFLAGS and LDFLAGS for each feature to be checked during the build. This allows to pass particular flags and parameters to the feature checks compilation.
Use the per-feature check flags for the unwinding feature in order to correctly compile the test-all, libunwind and libunwind-debug-frame feature checks.
This change set simplifies the flags passing mechanism between the Makefiles in config/Makefile and config/feature-checks; this could be farther optimized by moving the compilation flags to the per-feature check flags for all features to be checked.
Tested on x86_64, ARMv7 and ARMv8 with and without LIBUNWIND_DIR set in 'make -C tools/perf'
Jean Pihet (2): perf: add per-feature check flags perf: unwinding: use the per-feature check flags
tools/perf/config/Makefile | 52 ++++++++++++++++++------------- tools/perf/config/feature-checks/Makefile | 8 ++--- 2 files changed, 34 insertions(+), 26 deletions(-)
while at it, how about following update
Indeed the flags passing mechanism needs to be automated. The code below looks great.
I propose to submit patches for a consolidation of the features check Makefiles, i.e. for all features including test-all. This is next on my ToDo list, is that OK to you?
thanks, jirka
Jean
Instead of explicitly adding same value into FEATURE_CHECK_(C|LD)FLAGS-all variables we can do that automatically.
Signed-off-by: Jiri Olsa jolsa@redhat.com
tools/perf/config/Makefile | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/tools/perf/config/Makefile b/tools/perf/config/Makefile index f75d814..05fd0e2 100644 --- a/tools/perf/config/Makefile +++ b/tools/perf/config/Makefile @@ -55,9 +55,6 @@ else FEATURE_CHECK_LDFLAGS-libunwind = $(LIBUNWIND_LDFLAGS) FEATURE_CHECK_CFLAGS-libunwind-debug-frame = $(LIBUNWIND_CFLAGS) FEATURE_CHECK_LDFLAGS-libunwind-debug-frame = $(LIBUNWIND_LDFLAGS)
- # and the flags for the test-all case
- FEATURE_CHECK_CFLAGS-all += $(LIBUNWIND_CFLAGS)
- FEATURE_CHECK_LDFLAGS-all += $(LIBUNWIND_LDFLAGS)
endif
ifeq ($(NO_PERF_REGS),0) @@ -168,6 +165,17 @@ CORE_FEATURE_TESTS = \ stackprotector-all \ timerfd
+# Set FEATURE_CHECK_(C|LD)FLAGS-all for all CORE_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,$(CORE_FEATURE_TESTS),$(call set_test_all_flags,$(feat)))
# # So here we detect whether test-all was rebuilt, to be able
# to skip the print-out of the long features list if the file
1.8.3.1
linaro-kernel@lists.linaro.org