perf tools: Plug jvmti compilation into perf build
Jiri Olsa
reviewercover perf tools: Plug jvmti compilation into perf build
hi,
adding jvmti compilation under perf build, so it's easy to put it under rpm.
I plan on updating fedora/rhel perf rpm, to have the jvmti placed in like:
$ rpm -qpl build/x86_64/perf-4.8.5-300.fc24.x86_64.rpm | grep jvmti /usr/lib64/libperf-jvmti.so
Stephane,
I'm keeping the jvmti/Makefile as I dont fully follow the need for .lo objects. Please let me know if you'd be ok with this new way of building jvmti lib.
Also available in:
git://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf.git
perf/fixes
thanks,
jirla
---
Jiri Olsa (3):
tools build: Add CFLAGS_REMOVE_* support tools build: Add jvmti feature detection support perf tools: Plug jvmti compilation into perf build
tools/build/Build.include | 4 +++- tools/build/Documentation/Build.txt | 6 ++++-- tools/build/feature/Makefile | 6 +++++- tools/build/feature/test-jvmti.c | 13 +++++++++++++ tools/perf/Makefile.config | 26 ++++++++++++++++++++++++++ tools/perf/Makefile.perf | 24 +++++++++++++++++++++++- tools/perf/jvmti/Build | 8 ++++++++ tools/perf/tests/make | 2 +- 8 files changed, 83 insertions(+), 6 deletions(-) create mode 100644 tools/build/feature/test-jvmti.c create mode 100644 tools/perf/jvmti/Build
Jiri Olsa
reviewerPATCH 1/3 tools build: Add CFLAGS_REMOVE_* support
Adding support to remove options from final CFLAGS for both object file and build target. It's now possible to remove CFLAGS options like:
CFLAGS_REMOVE_krava.o += -Wstrict-prototypes
--- tools/build/Build.include | 4 +++- tools/build/Documentation/Build.txt | 6 ++++-- 2 files changed, 7 insertions(+), 3 deletions(-)
tools/build/Build.include +3 -1
@@ -89,7 +89,9 @@ if_changed = $(if $(strip $(any-prereq) $(arg-check)), \ # - per target C flags # - per object C flags # - BUILD_STR macro to allow '-D"$(variable)"' constructs -c_flags = -Wp,-MD,$(depfile),-MT,$@ $(CFLAGS) -D"BUILD_STR(s)=\#s" $(CFLAGS_$(basetarget).o) $(CFLAGS_$(obj)) +c_flags_1 = -Wp,-MD,$(depfile),-MT,$@ $(CFLAGS) -D"BUILD_STR(s)=\#s" $(CFLAGS_$(basetarget).o) $(CFLAGS_$(obj)) +c_flags_2 = $(filter-out $(CFLAGS_REMOVE_$(basetarget).o), $(c_flags_1)) +c_flags = $(filter-out $(CFLAGS_REMOVE_$(obj)), $(c_flags_2)) cxx_flags = -Wp,-MD,$(depfile),-MT,$@ $(CXXFLAGS) -D"BUILD_STR(s)=\#s" $(CXXFLAGS_$(basetarget).o) $(CXXFLAGS_$(obj)) ###
tools/build/Documentation/Build.txt +4 -2
@@ -135,8 +135,10 @@ CFLAGS It's possible to alter the standard object C flags in the following way: - CFLAGS_perf.o += '...' - alters CFLAGS for perf.o object - CFLAGS_gtk += '...' - alters CFLAGS for gtk build object + CFLAGS_perf.o += '...' - adds CFLAGS for perf.o object + CFLAGS_gtk += '...' - adds CFLAGS for gtk build object + CFLAGS_REMOVE_perf.o += '...' - removes CFLAGS for perf.o object + CFLAGS_REMOVE_gtk += '...' - removes CFLAGS for gtk build object This C flags changes has the scope of the Build makefile they are defined in.
Signature · 1 line
2.7.4
Arnaldo Carvalho de Melo
maintainerRe: [PATCH 1/3] tools build: Add CFLAGS_REMOVE_* support
Em Wed, Nov 02, 2016 at 02:35:47PM +0100, Jiri Olsa escreveu:
Quoted 5 lines
Adding support to remove options from final CFLAGS for both object file and build target. It's now possible to remove CFLAGS options like:
CFLAGS_REMOVE_krava.o += -Wstrict-prototypes
That is cool, and I just looked and this comes from the kernel sources, is there some place where the subset of such features that is supported in tools/build is being documented?
Applying it, thanks.
- Arnaldo
Quoted 41 lines
Signed-off-by Jiri Olsa <[email protected]>--- tools/build/Build.include | 4 +++- tools/build/Documentation/Build.txt | 6 ++++-- 2 files changed, 7 insertions(+), 3 deletions(-)tools/build/Build.include +3
-1@@ -89,7 +89,9 @@ if_changed = $(if $(strip $(any-prereq) $(arg-check)), \ # - per target C flags # - per object C flags # - BUILD_STR macro to allow '-D"$(variable)"' constructs -c_flags = -Wp,-MD,$(depfile),-MT,$@ $(CFLAGS) -D"BUILD_STR(s)=\#s" $(CFLAGS_$(basetarget).o) $(CFLAGS_$(obj)) +c_flags_1 = -Wp,-MD,$(depfile),-MT,$@ $(CFLAGS) -D"BUILD_STR(s)=\#s" $(CFLAGS_$(basetarget).o) $(CFLAGS_$(obj)) +c_flags_2 = $(filter-out $(CFLAGS_REMOVE_$(basetarget).o), $(c_flags_1)) +c_flags = $(filter-out $(CFLAGS_REMOVE_$(obj)), $(c_flags_2)) cxx_flags = -Wp,-MD,$(depfile),-MT,$@ $(CXXFLAGS) -D"BUILD_STR(s)=\#s" $(CXXFLAGS_$(basetarget).o) $(CXXFLAGS_$(obj)) ###tools/build/Documentation/Build.txt +4
-2@@ -135,8 +135,10 @@ CFLAGS It's possible to alter the standard object C flags in the following way: - CFLAGS_perf.o += '...' - alters CFLAGS for perf.o object - CFLAGS_gtk += '...' - alters CFLAGS for gtk build object + CFLAGS_perf.o += '...' - adds CFLAGS for perf.o object + CFLAGS_gtk += '...' - adds CFLAGS for gtk build object + CFLAGS_REMOVE_perf.o += '...' - removes CFLAGS for perf.o object + CFLAGS_REMOVE_gtk += '...' - removes CFLAGS for gtk build object This C flags changes has the scope of the Build makefile they are defined in.Signature · 1 line
2.7.4
Arnaldo Carvalho de Melo
maintainerRe: [PATCH 1/3] tools build: Add CFLAGS_REMOVE_* support
Em Mon, Nov 14, 2016 at 11:36:14AM -0300, Arnaldo Carvalho de Melo escreveu:
Quoted 5 lines
Em Wed, Nov 02, 2016 at 02:35:47PM +0100, Jiri Olsa escreveu:
Quoted 4 lines
Adding support to remove options from final CFLAGS for both object file and build target. It's now possible to remove CFLAGS options like:
Quoted 7 lines
Quoted 1 line
CFLAGS_REMOVE_krava.o += -Wstrict-prototypes
That is cool, and I just looked and this comes from the kernel sources, is there some place where the subset of such features that is supported in
tools/buildis being documented?Applying it, thanks.
Duh, yeah:
tools/build/Documentation/Build.txt
Nevermind, I'll add a note to the cset log.
- Arnaldo
Quoted 43 lines
- Arnaldo
Quoted 41 lines
Signed-off-by Jiri Olsa <[email protected]>--- tools/build/Build.include | 4 +++- tools/build/Documentation/Build.txt | 6 ++++-- 2 files changed, 7 insertions(+), 3 deletions(-)tools/build/Build.include +3
-1@@ -89,7 +89,9 @@ if_changed = $(if $(strip $(any-prereq) $(arg-check)), \ # - per target C flags # - per object C flags # - BUILD_STR macro to allow '-D"$(variable)"' constructs -c_flags = -Wp,-MD,$(depfile),-MT,$@ $(CFLAGS) -D"BUILD_STR(s)=\#s" $(CFLAGS_$(basetarget).o) $(CFLAGS_$(obj)) +c_flags_1 = -Wp,-MD,$(depfile),-MT,$@ $(CFLAGS) -D"BUILD_STR(s)=\#s" $(CFLAGS_$(basetarget).o) $(CFLAGS_$(obj)) +c_flags_2 = $(filter-out $(CFLAGS_REMOVE_$(basetarget).o), $(c_flags_1)) +c_flags = $(filter-out $(CFLAGS_REMOVE_$(obj)), $(c_flags_2)) cxx_flags = -Wp,-MD,$(depfile),-MT,$@ $(CXXFLAGS) -D"BUILD_STR(s)=\#s" $(CXXFLAGS_$(basetarget).o) $(CXXFLAGS_$(obj)) ###tools/build/Documentation/Build.txt +4
-2@@ -135,8 +135,10 @@ CFLAGS It's possible to alter the standard object C flags in the following way: - CFLAGS_perf.o += '...' - alters CFLAGS for perf.o object - CFLAGS_gtk += '...' - alters CFLAGS for gtk build object + CFLAGS_perf.o += '...' - adds CFLAGS for perf.o object + CFLAGS_gtk += '...' - adds CFLAGS for gtk build object + CFLAGS_REMOVE_perf.o += '...' - removes CFLAGS for perf.o object + CFLAGS_REMOVE_gtk += '...' - removes CFLAGS for gtk build object This C flags changes has the scope of the Build makefile they are defined in.Signature · 1 line
2.7.4
tip-bot for Jiri Olsa
merge bot[tip:perf/core] tools build: Add CFLAGS_REMOVE_* support
In reply to Jiri Olsatools build: Add CFLAGS_REMOVE_* support
Commit-ID: 2ec8107d8e0d1d285b2bbf1999e7f4e46b6b535b Gitweb: http://git.kernel.org/tip/2ec8107d8e0d1d285b2bbf1999e7f4e46b6b535b Author: Jiri Olsa <[email protected]> AuthorDate: Wed, 2 Nov 2016 14:35:47 +0100 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Mon, 14 Nov 2016 11:37:25 -0300
tools build: Add CFLAGS_REMOVE_* support
Adding support to remove options from final CFLAGS for both object file and build target. It's now possible to remove CFLAGS options like:
CFLAGS_REMOVE_krava.o += -Wstrict-prototypes
Committer notes:
This comes from the kernel's kbuild infrastructure, the subset that is supported in tools/ is being documented at tools/build/Documentation/Build.txt.
--- tools/build/Build.include | 4 +++- tools/build/Documentation/Build.txt | 6 ++++-- 2 files changed, 7 insertions(+), 3 deletions(-)
tools/build/Build.include +3 -1
@@ -89,7 +89,9 @@ if_changed = $(if $(strip $(any-prereq) $(arg-check)), \ # - per target C flags # - per object C flags # - BUILD_STR macro to allow '-D"$(variable)"' constructs -c_flags = -Wp,-MD,$(depfile),-MT,$@ $(CFLAGS) -D"BUILD_STR(s)=\#s" $(CFLAGS_$(basetarget).o) $(CFLAGS_$(obj)) +c_flags_1 = -Wp,-MD,$(depfile),-MT,$@ $(CFLAGS) -D"BUILD_STR(s)=\#s" $(CFLAGS_$(basetarget).o) $(CFLAGS_$(obj)) +c_flags_2 = $(filter-out $(CFLAGS_REMOVE_$(basetarget).o), $(c_flags_1)) +c_flags = $(filter-out $(CFLAGS_REMOVE_$(obj)), $(c_flags_2)) cxx_flags = -Wp,-MD,$(depfile),-MT,$@ $(CXXFLAGS) -D"BUILD_STR(s)=\#s" $(CXXFLAGS_$(basetarget).o) $(CXXFLAGS_$(obj)) ###
tools/build/Documentation/Build.txt +4 -2
@@ -135,8 +135,10 @@ CFLAGS It's possible to alter the standard object C flags in the following way: - CFLAGS_perf.o += '...' - alters CFLAGS for perf.o object - CFLAGS_gtk += '...' - alters CFLAGS for gtk build object + CFLAGS_perf.o += '...' - adds CFLAGS for perf.o object + CFLAGS_gtk += '...' - adds CFLAGS for gtk build object + CFLAGS_REMOVE_perf.o += '...' - removes CFLAGS for perf.o object + CFLAGS_REMOVE_gtk += '...' - removes CFLAGS for gtk build object This C flags changes has the scope of the Build makefile they are defined in.
Jiri Olsa
reviewerPATCH 2/3 tools build: Add jvmti feature detection support
In reply to Jiri OlsaAdding support to detect jvmti support. It is not plugged into the FEATURE_TESTS machinery, because it's quite rare and will be used separately from perf via feature_check call.
--- tools/build/feature/Makefile | 6 +++++- tools/build/feature/test-jvmti.c | 13 +++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 tools/build/feature/test-jvmti.c
tools/build/feature/Makefile +5 -1
@@ -47,7 +47,8 @@ FILES= \ test-bpf.bin \ test-get_cpuid.bin \ test-sdt.bin \ - test-cxx.bin + test-cxx.bin \ + test-jvmti.bin FILES := $(addprefix $(OUTPUT),$(FILES))
@@ -225,6 +226,9 @@ $(OUTPUT)test-sdt.bin: $(OUTPUT)test-cxx.bin: $(BUILDXX) -std=gnu++11 +$(OUTPUT)test-jvmti.bin: + $(BUILD) + -include $(OUTPUT)*.d ###############################
tools/build/feature/test-jvmti.c new file +13 -0
@@ -0,0 +1,13 @@ +#include <jvmti.h> +#include <jvmticmlr.h> + +int main (void ) +{ + JavaVM jvm __attribute__((unused)); + jvmtiEventCallbacks cb __attribute__((unused)); + jvmtiCapabilities caps __attribute__((unused)); + jvmtiJlocationFormat format __attribute__((unused)); + jvmtiEnv jvmti __attribute__((unused)); + +return 0 ; +}
Signature · 1 line
2.7.4
tip-bot for Jiri Olsa
merge bot[tip:perf/core] tools build: Add jvmti feature detection support
tools build: Add jvmti feature detection support
Commit-ID: 285932a25879602407f207e862bc5b8416711f42 Gitweb: http://git.kernel.org/tip/285932a25879602407f207e862bc5b8416711f42 Author: Jiri Olsa <[email protected]> AuthorDate: Wed, 2 Nov 2016 14:35:48 +0100 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Mon, 14 Nov 2016 12:40:32 -0300
tools build: Add jvmti feature detection support
Adding support to detect jvmti support. It is not plugged into the FEATURE_TESTS machinery, because it's quite rare and will be used separately from perf via feature_check call.
--- tools/build/feature/Makefile | 6 +++++- tools/build/feature/test-jvmti.c | 13 +++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-)
tools/build/feature/Makefile +5 -1
@@ -47,7 +47,8 @@ FILES= \ test-bpf.bin \ test-get_cpuid.bin \ test-sdt.bin \ - test-cxx.bin + test-cxx.bin \ + test-jvmti.bin FILES := $(addprefix $(OUTPUT),$(FILES))
@@ -225,6 +226,9 @@ $(OUTPUT)test-sdt.bin: $(OUTPUT)test-cxx.bin: $(BUILDXX) -std=gnu++11 +$(OUTPUT)test-jvmti.bin: + $(BUILD) + -include $(OUTPUT)*.d ###############################
tools/build/feature/test-jvmti.c new file +13 -0
@@ -0,0 +1,13 @@ +#include <jvmti.h> +#include <jvmticmlr.h> + +int main (void ) +{ + JavaVM jvm __attribute__((unused)); + jvmtiEventCallbacks cb __attribute__((unused)); + jvmtiCapabilities caps __attribute__((unused)); + jvmtiJlocationFormat format __attribute__((unused)); + jvmtiEnv jvmti __attribute__((unused)); + +return 0 ; +}
Jiri Olsa
reviewerPATCH 3/3 perf tools: Plug jvmti compilation into perf build
In reply to Jiri OlsaCompile jvmti agent as part of the perf build. The agent library is called libperf-jvmti.so and is installed in default place together with other files:
$ make libperf-jvmti.so
BUILD: Doing 'make -j4' parallel build
...
CC jvmti/libjvmti.o
CC jvmti/jvmti_agent.o
LD jvmti/jvmti-in.o
LINK libperf-jvmti.so$ make DESTDIR=/tmp/krava/ install-bin ... $ find /tmp/krava/ | grep libperf /tmp/krava/lib64/libperf-jvmti.so /tmp/krava/lib64/libperf-gtk.so
--- tools/perf/Makefile.config | 26 ++++++++++++++++++++++++++ tools/perf/Makefile.perf | 24 +++++++++++++++++++++++- tools/perf/jvmti/Build | 8 ++++++++ tools/perf/tests/make | 2 +- 4 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 tools/perf/jvmti/Build
tools/perf/Makefile.config +26 -0
@@ -758,6 +758,31 @@ ifndef NO_AUXTRACE endif endif +ifndef NO_JVMTI + ifneq (,$(wildcard /usr/sbin/update-java-alternatives)) + JDIR=$(shell /usr/sbin/update-java-alternatives -l | head -1 | awk '{print $$3}') + else + ifneq (,$(wildcard /usr/sbin/alternatives)) + JDIR=$(shell alternatives --display java | tail -1 | cut -d' ' -f 5 | sed 's%/jre/bin/java.%%g') + endif + endif + ifndef JDIR + $(warning No alternatives command found, you need to set JDIR= to point to the root of your Java directory) + NO_JVMTI := 1 + endif +endif + +ifndef NO_JVMTI + FEATURE_CHECK_CFLAGS-jvmti := -I$(JDIR)/include -I$(JDIR)/include/linux + $(call feature_check,jvmti) + ifeq ($(feature-jvmti), 1) + $(call detected_var,JDIR) + else + $(warning No openjdk development package found, please install JDK package) + NO_JVMTI := 1 + endif +endif + # Among the variables below, these: # perfexecdir # template_dir
@@ -850,6 +875,7 @@ ifeq ($(VF),1) $(call print_var,sysconfdir) $(call print_var,LIBUNWIND_DIR) $(call print_var,LIBDW_DIR) + $(call print_var,JDIR) ifeq ($(dwarf-post-unwind),1) $(call feature_print_text,"DWARF post unwind library", $(dwarf-post-unwind-text))
tools/perf/Makefile.perf +23 -1
@@ -86,6 +86,8 @@ include ../scripts/utilities.mak # # Define FEATURES_DUMP to provide features detection dump file # and bypass the feature detection +# +# Define NO_JVMTI if you do not want jvmti agent built # As per kernel Makefile, avoid funny character set dependencies unexport LC_ALL
@@ -283,6 +285,12 @@ ifndef NO_PERF_READ_VDSOX32 PROGRAMS += $(OUTPUT)perf-read-vdsox32 endif +LIBJVMTI = libperf-jvmti.so + +ifndef NO_JVMTI +PROGRAMS += $(OUTPUT)$(LIBJVMTI) +endif + # what 'all' will build and 'install' will install, in perfexecdir ALL_PROGRAMS = $(PROGRAMS) $(SCRIPTS)
@@ -551,6 +559,16 @@ $(OUTPUT)perf-read-vdsox32: perf-read-vdso.c util/find-vdso-map.c $(QUIET_CC)$(CC) -mx32 $(filter -static,$(LDFLAGS)) -Wall -Werror -o $@ perf-read-vdso.c endif +ifndef NO_JVMTI +LIBJVMTI_IN := $(OUTPUT)jvmti/jvmti-in.o + +$(LIBJVMTI_IN): FORCE + $(Q)$(MAKE) -f $(srctree)/tools/build/Makefile.build dir=jvmti obj=jvmti + +$(OUTPUT)$(LIBJVMTI): $(LIBJVMTI_IN) + $(QUIET_LINK)$(CC) -shared -Wl,-soname -Wl,$(LIBJVMTI) -o $@ $< -lelf -lrt +endif + $(patsubst perf-%,%.o,$(PROGRAMS)): $(wildcard */*.h) LIBPERF_IN := $(OUTPUT)libperf-in.o
@@ -688,6 +706,10 @@ ifndef NO_PERF_READ_VDSOX32 $(call QUIET_INSTALL, perf-read-vdsox32) \ $(INSTALL) $(OUTPUT)perf-read-vdsox32 '$(DESTDIR_SQ)$(bindir_SQ)'; endif +ifndef NO_JVMTI + $(call QUIET_INSTALL, $(LIBJVMTI)) \ + $(INSTALL) $(OUTPUT)$(LIBJVMTI) '$(DESTDIR_SQ)$(libdir_SQ)'; +endif $(call QUIET_INSTALL, libexec) \ $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)' $(call QUIET_INSTALL, perf-archive) \
@@ -754,7 +776,7 @@ clean:: $(LIBTRACEEVENT)-clean $(LIBAPI)-clean $(LIBBPF)-clean $(LIBSUBCMD)-clea $(call QUIET_CLEAN, core-objs) $(RM) $(LIB_FILE) $(OUTPUT)perf-archive $(OUTPUT)perf-with-kcore $(LANG_BINDINGS) $(Q)find $(if $(OUTPUT),$(OUTPUT),.) -name '*.o' -delete -o -name '\.*.cmd' -delete -o -name '\.*.d' -delete $(Q)$(RM) $(OUTPUT).config-detected - $(call QUIET_CLEAN, core-progs) $(RM) $(ALL_PROGRAMS) perf perf-read-vdso32 perf-read-vdsox32 $(OUTPUT)pmu-events/jevents + $(call QUIET_CLEAN, core-progs) $(RM) $(ALL_PROGRAMS) perf perf-read-vdso32 perf-read-vdsox32 $(OUTPUT)pmu-events/jevents $(OUTPUT)$(LIBJVMTI).so $(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* \ $(OUTPUT)util/intel-pt-decoder/inat-tables.c $(OUTPUT)fixdep \ $(OUTPUT)tests/llvm-src-{base,kbuild,prologue,relocation}.c \
tools/perf/jvmti/Build new file +8 -0
@@ -0,0 +1,8 @@ +jvmti-y += libjvmti.o +jvmti-y += jvmti_agent.o + +CFLAGS_jvmti = -fPIC -DPIC -I$(JDIR)/include -I$(JDIR)/include/linux +CFLAGS_REMOVE_jvmti = -Wmissing-declarations +CFLAGS_REMOVE_jvmti += -Wstrict-prototypes +CFLAGS_REMOVE_jvmti += -Wextra +CFLAGS_REMOVE_jvmti += -Wwrite-strings
tools/perf/tests/make +1 -1
@@ -106,7 +106,7 @@ make_minimal := NO_LIBPERL=1 NO_LIBPYTHON=1 NO_NEWT=1 NO_GTK2=1 make_minimal += NO_DEMANGLE=1 NO_LIBELF=1 NO_LIBUNWIND=1 NO_BACKTRACE=1 make_minimal += NO_LIBNUMA=1 NO_LIBAUDIT=1 NO_LIBBIONIC=1 make_minimal += NO_LIBDW_DWARF_UNWIND=1 NO_AUXTRACE=1 NO_LIBBPF=1 -make_minimal += NO_LIBCRYPTO=1 NO_SDT=1 +make_minimal += NO_LIBCRYPTO=1 NO_SDT=1 NO_JVMTI=1 # $(run) contains all available tests run := make_pure
Signature · 1 line
2.7.4
tip-bot for Jiri Olsa
merge bot[tip:perf/core] perf jvmti: Plug compilation into perf build
perf jvmti: Plug compilation into perf build
Commit-ID: d4dfdf00d43e017dc57372566ceba0e5e1595eba Gitweb: http://git.kernel.org/tip/d4dfdf00d43e017dc57372566ceba0e5e1595eba Author: Jiri Olsa <[email protected]> AuthorDate: Wed, 2 Nov 2016 14:35:49 +0100 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Mon, 14 Nov 2016 12:42:47 -0300
perf jvmti: Plug compilation into perf build
Compile jvmti agent as part of the perf build. The agent library is called libperf-jvmti.so and is installed in default place together with other files:
$ make libperf-jvmti.so
BUILD: Doing 'make -j4' parallel build
...
CC jvmti/libjvmti.o
CC jvmti/jvmti_agent.o
LD jvmti/jvmti-in.o
LINK libperf-jvmti.so$ make DESTDIR=/tmp/krava/ install-bin ... $ find /tmp/krava/ | grep libperf /tmp/krava/lib64/libperf-jvmti.so /tmp/krava/lib64/libperf-gtk.so
--- tools/perf/Makefile.config | 26 ++++++++++++++++++++++++++ tools/perf/Makefile.perf | 24 +++++++++++++++++++++++- tools/perf/jvmti/Build | 8 ++++++++ tools/perf/tests/make | 2 +- 4 files changed, 58 insertions(+), 2 deletions(-)
tools/perf/Makefile.config +26 -0
@@ -758,6 +758,31 @@ ifndef NO_AUXTRACE endif endif +ifndef NO_JVMTI + ifneq (,$(wildcard /usr/sbin/update-java-alternatives)) + JDIR=$(shell /usr/sbin/update-java-alternatives -l | head -1 | awk '{print $$3}') + else + ifneq (,$(wildcard /usr/sbin/alternatives)) + JDIR=$(shell alternatives --display java | tail -1 | cut -d' ' -f 5 | sed 's%/jre/bin/java.%%g') + endif + endif + ifndef JDIR + $(warning No alternatives command found, you need to set JDIR= to point to the root of your Java directory) + NO_JVMTI := 1 + endif +endif + +ifndef NO_JVMTI + FEATURE_CHECK_CFLAGS-jvmti := -I$(JDIR)/include -I$(JDIR)/include/linux + $(call feature_check,jvmti) + ifeq ($(feature-jvmti), 1) + $(call detected_var,JDIR) + else + $(warning No openjdk development package found, please install JDK package) + NO_JVMTI := 1 + endif +endif + # Among the variables below, these: # perfexecdir # template_dir
@@ -850,6 +875,7 @@ ifeq ($(VF),1) $(call print_var,sysconfdir) $(call print_var,LIBUNWIND_DIR) $(call print_var,LIBDW_DIR) + $(call print_var,JDIR) ifeq ($(dwarf-post-unwind),1) $(call feature_print_text,"DWARF post unwind library", $(dwarf-post-unwind-text))
tools/perf/Makefile.perf +23 -1
@@ -86,6 +86,8 @@ include ../scripts/utilities.mak # # Define FEATURES_DUMP to provide features detection dump file # and bypass the feature detection +# +# Define NO_JVMTI if you do not want jvmti agent built # As per kernel Makefile, avoid funny character set dependencies unexport LC_ALL
@@ -283,6 +285,12 @@ ifndef NO_PERF_READ_VDSOX32 PROGRAMS += $(OUTPUT)perf-read-vdsox32 endif +LIBJVMTI = libperf-jvmti.so + +ifndef NO_JVMTI +PROGRAMS += $(OUTPUT)$(LIBJVMTI) +endif + # what 'all' will build and 'install' will install, in perfexecdir ALL_PROGRAMS = $(PROGRAMS) $(SCRIPTS)
@@ -551,6 +559,16 @@ $(OUTPUT)perf-read-vdsox32: perf-read-vdso.c util/find-vdso-map.c $(QUIET_CC)$(CC) -mx32 $(filter -static,$(LDFLAGS)) -Wall -Werror -o $@ perf-read-vdso.c endif +ifndef NO_JVMTI +LIBJVMTI_IN := $(OUTPUT)jvmti/jvmti-in.o + +$(LIBJVMTI_IN): FORCE + $(Q)$(MAKE) -f $(srctree)/tools/build/Makefile.build dir=jvmti obj=jvmti + +$(OUTPUT)$(LIBJVMTI): $(LIBJVMTI_IN) + $(QUIET_LINK)$(CC) -shared -Wl,-soname -Wl,$(LIBJVMTI) -o $@ $< -lelf -lrt +endif + $(patsubst perf-%,%.o,$(PROGRAMS)): $(wildcard */*.h) LIBPERF_IN := $(OUTPUT)libperf-in.o
@@ -688,6 +706,10 @@ ifndef NO_PERF_READ_VDSOX32 $(call QUIET_INSTALL, perf-read-vdsox32) \ $(INSTALL) $(OUTPUT)perf-read-vdsox32 '$(DESTDIR_SQ)$(bindir_SQ)'; endif +ifndef NO_JVMTI + $(call QUIET_INSTALL, $(LIBJVMTI)) \ + $(INSTALL) $(OUTPUT)$(LIBJVMTI) '$(DESTDIR_SQ)$(libdir_SQ)'; +endif $(call QUIET_INSTALL, libexec) \ $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)' $(call QUIET_INSTALL, perf-archive) \
@@ -754,7 +776,7 @@ clean:: $(LIBTRACEEVENT)-clean $(LIBAPI)-clean $(LIBBPF)-clean $(LIBSUBCMD)-clea $(call QUIET_CLEAN, core-objs) $(RM) $(LIB_FILE) $(OUTPUT)perf-archive $(OUTPUT)perf-with-kcore $(LANG_BINDINGS) $(Q)find $(if $(OUTPUT),$(OUTPUT),.) -name '*.o' -delete -o -name '\.*.cmd' -delete -o -name '\.*.d' -delete $(Q)$(RM) $(OUTPUT).config-detected - $(call QUIET_CLEAN, core-progs) $(RM) $(ALL_PROGRAMS) perf perf-read-vdso32 perf-read-vdsox32 $(OUTPUT)pmu-events/jevents + $(call QUIET_CLEAN, core-progs) $(RM) $(ALL_PROGRAMS) perf perf-read-vdso32 perf-read-vdsox32 $(OUTPUT)pmu-events/jevents $(OUTPUT)$(LIBJVMTI).so $(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* \ $(OUTPUT)util/intel-pt-decoder/inat-tables.c $(OUTPUT)fixdep \ $(OUTPUT)tests/llvm-src-{base,kbuild,prologue,relocation}.c \
tools/perf/jvmti/Build new file +8 -0
@@ -0,0 +1,8 @@ +jvmti-y += libjvmti.o +jvmti-y += jvmti_agent.o + +CFLAGS_jvmti = -fPIC -DPIC -I$(JDIR)/include -I$(JDIR)/include/linux +CFLAGS_REMOVE_jvmti = -Wmissing-declarations +CFLAGS_REMOVE_jvmti += -Wstrict-prototypes +CFLAGS_REMOVE_jvmti += -Wextra +CFLAGS_REMOVE_jvmti += -Wwrite-strings
tools/perf/tests/make +1 -1
@@ -106,7 +106,7 @@ make_minimal := NO_LIBPERL=1 NO_LIBPYTHON=1 NO_NEWT=1 NO_GTK2=1 make_minimal += NO_DEMANGLE=1 NO_LIBELF=1 NO_LIBUNWIND=1 NO_BACKTRACE=1 make_minimal += NO_LIBNUMA=1 NO_LIBAUDIT=1 NO_LIBBIONIC=1 make_minimal += NO_LIBDW_DWARF_UNWIND=1 NO_AUXTRACE=1 NO_LIBBPF=1 -make_minimal += NO_LIBCRYPTO=1 NO_SDT=1 +make_minimal += NO_LIBCRYPTO=1 NO_SDT=1 NO_JVMTI=1 # $(run) contains all available tests run := make_pure
Quoted 7 lines · Jiri Olsa
hi,
adding jvmti compilation under perf build, so it's easy to put it under rpm.I plan on updating fedora/rhel perf rpm, to have the jvmti placed in like:
Quoted 7 lines
$ rpm -qpl build/x86_64/perf-4.8.5-300.fc24.x86_64.rpm | grep jvmti /usr/lib64/libperf-jvmti.soStephane,
I'm keeping the jvmti/Makefile as I dont fully follow the need for .lo objects. Please let me know if you'd be ok with this new way of building jvmti lib.
ping
thanks,
jirka
Quoted 26 lines
Also available in:
git://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf.git
perf/fixesthanks,
jirla---
Jiri Olsa (3):
tools build: Add CFLAGS_REMOVE_* support tools build: Add jvmti feature detection support perf tools: Plug jvmti compilation into perf buildtools/build/Build.include | 4 +++- tools/build/Documentation/Build.txt | 6 ++++-- tools/build/feature/Makefile | 6 +++++- tools/build/feature/test-jvmti.c | 13 +++++++++++++ tools/perf/Makefile.config | 26 ++++++++++++++++++++++++++ tools/perf/Makefile.perf | 24 +++++++++++++++++++++++- tools/perf/jvmti/Build | 8 ++++++++ tools/perf/tests/make | 2 +- 8 files changed, 83 insertions(+), 6 deletions(-) create mode 100644 tools/build/feature/test-jvmti.c create mode 100644 tools/perf/jvmti/Build
Quoted 12 lines · Jiri Olsa
Quoted 10 lines · Jiri Olsa
hi,
adding jvmti compilation under perf build, so it's easy to put it under rpm.I plan on updating fedora/rhel perf rpm, to have the jvmti placed in like:
$ rpm -qpl build/x86_64/perf-4.8.5-300.fc24.x86_64.rpm | grep jvmti /usr/lib64/libperf-jvmti.so
Quoted 6 lines
Quoted 4 lines
Stephane,
I'm keeping the jvmti/Makefile as I dont fully follow the need for .lo objects. Please let me know if you'd be ok with this new way of building jvmti lib.ping
Sorry for the delay. Will look at this today and get back to you.
Quoted 32 lines
thanks,
jirkaQuoted 26 lines
Also available in:
git://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf.git
perf/fixesthanks,
jirla---
Jiri Olsa (3):
tools build: Add CFLAGS_REMOVE_* support tools build: Add jvmti feature detection support perf tools: Plug jvmti compilation into perf buildtools/build/Build.include | 4 +++- tools/build/Documentation/Build.txt | 6 ++++-- tools/build/feature/Makefile | 6 +++++- tools/build/feature/test-jvmti.c | 13 +++++++++++++ tools/perf/Makefile.config | 26 ++++++++++++++++++++++++++ tools/perf/Makefile.perf | 24 +++++++++++++++++++++++- tools/perf/jvmti/Build | 8 ++++++++ tools/perf/tests/make | 2 +- 8 files changed, 83 insertions(+), 6 deletions(-) create mode 100644 tools/build/feature/test-jvmti.c create mode 100644 tools/perf/jvmti/Build
Jiri,
Quoted 7 lines · Jiri Olsa
hi,
adding jvmti compilation under perf build, so it's easy to put it under rpm.I plan on updating fedora/rhel perf rpm, to have the jvmti placed in like:
Quoted 8 lines
$ rpm -qpl build/x86_64/perf-4.8.5-300.fc24.x86_64.rpm | grep jvmti /usr/lib64/libperf-jvmti.soStephane,
I'm keeping the jvmti/Makefile as I dont fully follow the need for .lo objects. Please let me know if you'd be ok with this new way of building jvmti lib.
Tested the patch on x86_64. With and without NO_JVMTI. Tried the libperf-jvmti.so on existing test case, got correct results.
I believe you can now remove the jvmti/Makefile, it is not needed anymore. We must always (and only) build the .so as this library is meant to be used as a Java agent.
Quoted 25 lines
Also available in:
git://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf.git
perf/fixesthanks,
jirla---
Jiri Olsa (3):
tools build: Add CFLAGS_REMOVE_* support tools build: Add jvmti feature detection support perf tools: Plug jvmti compilation into perf buildtools/build/Build.include | 4 +++- tools/build/Documentation/Build.txt | 6 ++++-- tools/build/feature/Makefile | 6 +++++- tools/build/feature/test-jvmti.c | 13 +++++++++++++ tools/perf/Makefile.config | 26 ++++++++++++++++++++++++++ tools/perf/Makefile.perf | 24 +++++++++++++++++++++++- tools/perf/jvmti/Build | 8 ++++++++ tools/perf/tests/make | 2 +- 8 files changed, 83 insertions(+), 6 deletions(-) create mode 100644 tools/build/feature/test-jvmti.c create mode 100644 tools/perf/jvmti/Build
PATCH 1/1 perf tools: Remove jvmti/Makefile file
Quoted 18 lines · Stephane Eranian
Jiri,
Quoted 7 lines · Jiri Olsa
hi,
adding jvmti compilation under perf build, so it's easy to put it under rpm.I plan on updating fedora/rhel perf rpm, to have the jvmti placed in like:
Quoted 8 lines
$ rpm -qpl build/x86_64/perf-4.8.5-300.fc24.x86_64.rpm | grep jvmti /usr/lib64/libperf-jvmti.soStephane,
I'm keeping the jvmti/Makefile as I dont fully follow the need for .lo objects. Please let me know if you'd be ok with this new way of building jvmti lib.
Quoted 8 lines
Tested the patch on
x86_64. With and withoutNO_JVMTI. Tried the libperf-jvmti.so on existing test case, got correct results.I believe you can now remove the jvmti/Makefile, it is not needed anymore. We must always (and only) build the .so as this library is meant to be used as a Java agent.
Tested-by Stephane Eranian <[email protected]>
great, attaching the removal patch
Arnaldo,
I rebased my perf/fixes branch, it also contains attached patch
thanks,
jirka
---
Now when jvmti compilation is plugged into Makefile.perf, there's no need for this makefile.
--- tools/perf/jvmti/Makefile | 89 ----------------------------------------------- 1 file changed, 89 deletions(-) delete mode 100644 tools/perf/jvmti/Makefile
tools/perf/jvmti/Makefile deleted +0 -89
@@ -1,89 +0,0 @@ -ARCH=$(shell uname -m) - -ifeq ($(ARCH), x86_64) -JARCH=amd64 -endif -ifeq ($(ARCH), armv7l) -JARCH=armhf -endif -ifeq ($(ARCH), armv6l) -JARCH=armhf -endif -ifeq ($(ARCH), aarch64) -JARCH=aarch64 -endif -ifeq ($(ARCH), ppc64) -JARCH=powerpc -endif -ifeq ($(ARCH), ppc64le) -JARCH=powerpc -endif - -DESTDIR=/usr/local - -VERSION=1 -REVISION=0 -AGE=0 - -LN=ln -sf -RM=rm - -SLIBJVMTI=libjvmti.so.$(VERSION).$(REVISION).$(AGE) -VLIBJVMTI=libjvmti.so.$(VERSION) -SLDFLAGS=-shared -Wl,-soname -Wl,$(VLIBJVMTI) -SOLIBEXT=so - -# The following works at least on fedora 23, you may need the next -# line for other distros. -ifneq (,$(wildcard /usr/sbin/update-java-alternatives)) -JDIR=$(shell /usr/sbin/update-java-alternatives -l | head -1 | awk '{print $$3}') -else - ifneq (,$(wildcard /usr/sbin/alternatives)) - JDIR=$(shell alternatives --display java | tail -1 | cut -d' ' -f 5 | sed 's%/jre/bin/java.%%g') - endif -endif -ifndef JDIR -$(error Could not find alternatives command, you need to set JDIR= to point to the root of your Java directory) -else - ifeq (,$(wildcard $(JDIR)/include/jvmti.h)) - $(error the openjdk development package appears to me missing, install and try again) - endif -endif -$(info Using Java from $(JDIR)) -# -lrt required in 32-bit mode for clock_gettime() -LIBS=-lelf -lrt -INCDIR=-I $(JDIR)/include -I $(JDIR)/include/linux - -TARGETS=$(SLIBJVMTI) - -SRCS=libjvmti.c jvmti_agent.c -OBJS=$(SRCS:.c=.o) -SOBJS=$(OBJS:.o=.lo) -OPT=-O2 -g -Werror -Wall - -CFLAGS=$(INCDIR) $(OPT) - -all: $(TARGETS) - -.c.o: - $(CC) $(CFLAGS) -c $*.c -.c.lo: - $(CC) -fPIC -DPIC $(CFLAGS) -c $*.c -o $*.lo - -$(OBJS) $(SOBJS): Makefile jvmti_agent.h ../util/jitdump.h - -$(SLIBJVMTI): $(SOBJS) - $(CC) $(CFLAGS) $(SLDFLAGS) -o $@ $(SOBJS) $(LIBS) - $(LN) $@ libjvmti.$(SOLIBEXT) - -clean: - $(RM) -f *.o *.so.* *.so *.lo - -install: - -mkdir -p $(DESTDIR)/lib - install -m 755 $(SLIBJVMTI) $(DESTDIR)/lib/ - (cd $(DESTDIR)/lib; $(LN) $(SLIBJVMTI) $(VLIBJVMTI)) - (cd $(DESTDIR)/lib; $(LN) $(SLIBJVMTI) libjvmti.$(SOLIBEXT)) - ldconfig - -.SUFFIXES: .c .S .o .lo
Signature · 1 line
2.7.4
tip-bot for Jiri Olsa
merge bot[tip:perf/core] perf kvmti: Remove unused Makefile file
perf kvmti: Remove unused Makefile file
Commit-ID: 8c9c3d2f950cca57f5fa9330c4d15d8f0dfda092 Gitweb: http://git.kernel.org/tip/8c9c3d2f950cca57f5fa9330c4d15d8f0dfda092 Author: Jiri Olsa <[email protected]> AuthorDate: Sat, 12 Nov 2016 13:10:16 +0100 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Mon, 14 Nov 2016 12:42:56 -0300
perf kvmti: Remove unused Makefile file
Now when jvmti compilation is plugged into Makefile.perf, there's no need for this makefile.
--- tools/perf/jvmti/Makefile | 89 ----------------------------------------------- 1 file changed, 89 deletions(-)
tools/perf/jvmti/Makefile deleted +0 -89
@@ -1,89 +0,0 @@ -ARCH=$(shell uname -m) - -ifeq ($(ARCH), x86_64) -JARCH=amd64 -endif -ifeq ($(ARCH), armv7l) -JARCH=armhf -endif -ifeq ($(ARCH), armv6l) -JARCH=armhf -endif -ifeq ($(ARCH), aarch64) -JARCH=aarch64 -endif -ifeq ($(ARCH), ppc64) -JARCH=powerpc -endif -ifeq ($(ARCH), ppc64le) -JARCH=powerpc -endif - -DESTDIR=/usr/local - -VERSION=1 -REVISION=0 -AGE=0 - -LN=ln -sf -RM=rm - -SLIBJVMTI=libjvmti.so.$(VERSION).$(REVISION).$(AGE) -VLIBJVMTI=libjvmti.so.$(VERSION) -SLDFLAGS=-shared -Wl,-soname -Wl,$(VLIBJVMTI) -SOLIBEXT=so - -# The following works at least on fedora 23, you may need the next -# line for other distros. -ifneq (,$(wildcard /usr/sbin/update-java-alternatives)) -JDIR=$(shell /usr/sbin/update-java-alternatives -l | head -1 | awk '{print $$3}') -else - ifneq (,$(wildcard /usr/sbin/alternatives)) - JDIR=$(shell alternatives --display java | tail -1 | cut -d' ' -f 5 | sed 's%/jre/bin/java.%%g') - endif -endif -ifndef JDIR -$(error Could not find alternatives command, you need to set JDIR= to point to the root of your Java directory) -else - ifeq (,$(wildcard $(JDIR)/include/jvmti.h)) - $(error the openjdk development package appears to me missing, install and try again) - endif -endif -$(info Using Java from $(JDIR)) -# -lrt required in 32-bit mode for clock_gettime() -LIBS=-lelf -lrt -INCDIR=-I $(JDIR)/include -I $(JDIR)/include/linux - -TARGETS=$(SLIBJVMTI) - -SRCS=libjvmti.c jvmti_agent.c -OBJS=$(SRCS:.c=.o) -SOBJS=$(OBJS:.o=.lo) -OPT=-O2 -g -Werror -Wall - -CFLAGS=$(INCDIR) $(OPT) - -all: $(TARGETS) - -.c.o: - $(CC) $(CFLAGS) -c $*.c -.c.lo: - $(CC) -fPIC -DPIC $(CFLAGS) -c $*.c -o $*.lo - -$(OBJS) $(SOBJS): Makefile jvmti_agent.h ../util/jitdump.h - -$(SLIBJVMTI): $(SOBJS) - $(CC) $(CFLAGS) $(SLDFLAGS) -o $@ $(SOBJS) $(LIBS) - $(LN) $@ libjvmti.$(SOLIBEXT) - -clean: - $(RM) -f *.o *.so.* *.so *.lo - -install: - -mkdir -p $(DESTDIR)/lib - install -m 755 $(SLIBJVMTI) $(DESTDIR)/lib/ - (cd $(DESTDIR)/lib; $(LN) $(SLIBJVMTI) $(VLIBJVMTI)) - (cd $(DESTDIR)/lib; $(LN) $(SLIBJVMTI) libjvmti.$(SOLIBEXT)) - ldconfig - -.SUFFIXES: .c .S .o .lo