[v1,1/2] perf build: Require libtraceevent from the system

Message ID 20221117224952.358639-2-irogers@google.com
State New
Headers
Series perf always use system libtraceevent |

Commit Message

Ian Rogers Nov. 17, 2022, 10:49 p.m. UTC
  Unconditionally require libtraceevent to come from the system. Force
the determination of the libtracefs version if it is present.

Signed-off-by: Ian Rogers <irogers@google.com>
---
 tools/perf/Makefile.config | 51 +++++++++-----------
 tools/perf/Makefile.perf   | 95 ++------------------------------------
 2 files changed, 28 insertions(+), 118 deletions(-)
  

Comments

Peter Zijlstra Nov. 18, 2022, 9:30 a.m. UTC | #1
On Thu, Nov 17, 2022 at 02:49:51PM -0800, Ian Rogers wrote:
> Unconditionally require libtraceevent to come from the system. Force
> the determination of the libtracefs version if it is present.

-ENOMOTIVATION

also:

Makefile.config:1196: *** Error: libtraceevent is missing, please install libtraceevent-dev.  Stop.

Why do I need this?
  
Arnaldo Carvalho de Melo Nov. 18, 2022, 3:02 p.m. UTC | #2
Em Fri, Nov 18, 2022 at 10:30:45AM +0100, Peter Zijlstra escreveu:
> On Thu, Nov 17, 2022 at 02:49:51PM -0800, Ian Rogers wrote:
> > Unconditionally require libtraceevent to come from the system. Force
> > the determination of the libtracefs version if it is present.
> 
> -ENOMOTIVATION

Yeah, I was going to ask for that as well :-\

And the motivation was spelled out in the discussion that led to this
patch:

https://lore.kernel.org/lkml/CAP-5=fWxAjEia-Qbm0RVzKOxyiod8rUOBieqaGK=DtQboDe3Qw@mail.gmail.com
 
> also:
> 
> Makefile.config:1196: *** Error: libtraceevent is missing, please install libtraceevent-dev.  Stop.

yeah, this probably should work like with other libraries, don't stop
the build, just don't build features that depend on libtraceevent,
warning the user that features foo, bar and baz won't be available.

For people working with just hardware, software, cache events, no
problem.

- Arnaldo
  
Steven Rostedt Nov. 18, 2022, 3:33 p.m. UTC | #3
On Fri, 18 Nov 2022 12:02:38 -0300
Arnaldo Carvalho de Melo <acme@kernel.org> wrote:

> yeah, this probably should work like with other libraries, don't stop
> the build, just don't build features that depend on libtraceevent,
> warning the user that features foo, bar and baz won't be available.
> 
> For people working with just hardware, software, cache events, no
> problem.

How are software events parsed?

-- Steve
  
Arnaldo Carvalho de Melo Nov. 18, 2022, 4:34 p.m. UTC | #4
Em Fri, Nov 18, 2022 at 10:33:02AM -0500, Steven Rostedt escreveu:
> On Fri, 18 Nov 2022 12:02:38 -0300 Arnaldo Carvalho de Melo <acme@kernel.org> wrote:
 
> > yeah, this probably should work like with other libraries, don't stop
> > the build, just don't build features that depend on libtraceevent,
> > warning the user that features foo, bar and baz won't be available.

> > For people working with just hardware, software, cache events, no
> > problem.
 
> How are software events parsed?

Not parsed, fixed:

root@roc-rk3399-pc:~# perf list sw

List of pre-defined events (to be used in -e or -M):

  alignment-faults                                   [Software event]
  bpf-output                                         [Software event]
  cgroup-switches                                    [Software event]
  context-switches OR cs                             [Software event]
  cpu-clock                                          [Software event]
  cpu-migrations OR migrations                       [Software event]
  dummy                                              [Software event]
  emulation-faults                                   [Software event]
  major-faults                                       [Software event]
  minor-faults                                       [Software event]
  page-faults OR faults                              [Software event]
  task-clock                                         [Software event]

  duration_time                                      [Tool event]
  user_time                                          [Tool event]
  system_time                                        [Tool event]

root@roc-rk3399-pc:~#


In addition to:

root@roc-rk3399-pc:~# perf list hw

List of pre-defined events (to be used in -e or -M):

  branch-instructions OR branches                    [Hardware event]
  branch-misses                                      [Hardware event]
  bus-cycles                                         [Hardware event]
  cache-misses                                       [Hardware event]
  cache-references                                   [Hardware event]
  cpu-cycles OR cycles                               [Hardware event]
  instructions                                       [Hardware event]

root@roc-rk3399-pc:~#

And:

root@roc-rk3399-pc:~# perf list cache

List of pre-defined events (to be used in -e or -M):

  L1-dcache-load-misses                              [Hardware cache event]
  L1-dcache-loads                                    [Hardware cache event]
  L1-dcache-prefetch-misses                          [Hardware cache event]
  L1-dcache-store-misses                             [Hardware cache event]
  L1-dcache-stores                                   [Hardware cache event]
  L1-icache-load-misses                              [Hardware cache event]
  L1-icache-loads                                    [Hardware cache event]
  branch-load-misses                                 [Hardware cache event]
  branch-loads                                       [Hardware cache event]
  dTLB-load-misses                                   [Hardware cache event]
  dTLB-store-misses                                  [Hardware cache event]
  iTLB-load-misses                                   [Hardware cache event]
  node-loads                                         [Hardware cache event]
  node-stores                                        [Hardware cache event]

root@roc-rk3399-pc:~#

Without something like libtraceevent 'perf probe', 'perf trace' wouldn't
work as of now, as it currently use libtraceevent to parse whats in
tracefs.

So for some people, just interested in profiling the above hw, sw and
cache events, libtraceevent isn't strictly required and may even be
desirable to reduce the number of library dependencies.

So its a valid feature to allow perf to be built without libtraceevent,
i.e. not something needed for the above scenarios.

With libbpf and BTF tracefs isn't also strictly needed, as we already
have to link with it and things like 'perf trace' want to use libbpf's
btf pretty printing stuff, we can use BTF to enumerate events, iterate
thru its fields, offsets, types, etc:

root@roc-rk3399-pc:~# pahole --sizes | grep trace_event_raw_sched
trace_event_raw_sched_kthread_stop	28	0
trace_event_raw_sched_kthread_stop_ret	12	0
trace_event_raw_sched_kthread_work_queue_work	32	0
trace_event_raw_sched_kthread_work_execute_start	24	0
trace_event_raw_sched_kthread_work_execute_end	24	0
trace_event_raw_sched_wakeup_template	36	0
trace_event_raw_sched_switch	64	0
trace_event_raw_sched_migrate_task	40	0
trace_event_raw_sched_process_template	32	0
trace_event_raw_sched_process_wait	32	0
trace_event_raw_sched_process_fork	48	0
trace_event_raw_sched_process_exec	20	0
trace_event_raw_sched_stat_runtime	48	1
trace_event_raw_sched_pi_setprio	36	0
trace_event_raw_sched_move_numa	36	0
trace_event_raw_sched_numa_pair_template	48	0
trace_event_raw_sched_wake_idle_without_ipi	12	0
root@roc-rk3399-pc:~#

root@roc-rk3399-pc:~# pahole trace_event_raw_sched_switch
struct trace_event_raw_sched_switch {
	struct trace_entry         ent;                  /*     0     8 */
	char                       prev_comm[16];        /*     8    16 */
	pid_t                      prev_pid;             /*    24     4 */
	int                        prev_prio;            /*    28     4 */
	long int                   prev_state;           /*    32     8 */
	char                       next_comm[16];        /*    40    16 */
	pid_t                      next_pid;             /*    56     4 */
	int                        next_prio;            /*    60     4 */
	/* --- cacheline 1 boundary (64 bytes) --- */
	char                       __data[];             /*    64     0 */

	/* size: 64, cachelines: 1, members: 9 */
};
root@roc-rk3399-pc:~#

- Arnaldo
  
Namhyung Kim Nov. 19, 2022, 12:37 a.m. UTC | #5
Hi,

On Fri, Nov 18, 2022 at 8:34 AM Arnaldo Carvalho de Melo
<acme@kernel.org> wrote:
>
> Em Fri, Nov 18, 2022 at 10:33:02AM -0500, Steven Rostedt escreveu:
> > On Fri, 18 Nov 2022 12:02:38 -0300 Arnaldo Carvalho de Melo <acme@kernel.org> wrote:
>
> > > yeah, this probably should work like with other libraries, don't stop
> > > the build, just don't build features that depend on libtraceevent,
> > > warning the user that features foo, bar and baz won't be available.
>
> > > For people working with just hardware, software, cache events, no
> > > problem.
>
> > How are software events parsed?
>
> Not parsed, fixed:

I believe Steve meant tracepoints :)

>
> root@roc-rk3399-pc:~# perf list sw
>
> List of pre-defined events (to be used in -e or -M):
>
>   alignment-faults                                   [Software event]
>   bpf-output                                         [Software event]
>   cgroup-switches                                    [Software event]
>   context-switches OR cs                             [Software event]
>   cpu-clock                                          [Software event]
>   cpu-migrations OR migrations                       [Software event]
>   dummy                                              [Software event]
>   emulation-faults                                   [Software event]
>   major-faults                                       [Software event]
>   minor-faults                                       [Software event]
>   page-faults OR faults                              [Software event]
>   task-clock                                         [Software event]
>
>   duration_time                                      [Tool event]
>   user_time                                          [Tool event]
>   system_time                                        [Tool event]
>
> root@roc-rk3399-pc:~#
>
>
> In addition to:
>
> root@roc-rk3399-pc:~# perf list hw
>
> List of pre-defined events (to be used in -e or -M):
>
>   branch-instructions OR branches                    [Hardware event]
>   branch-misses                                      [Hardware event]
>   bus-cycles                                         [Hardware event]
>   cache-misses                                       [Hardware event]
>   cache-references                                   [Hardware event]
>   cpu-cycles OR cycles                               [Hardware event]
>   instructions                                       [Hardware event]
>
> root@roc-rk3399-pc:~#
>
> And:
>
> root@roc-rk3399-pc:~# perf list cache
>
> List of pre-defined events (to be used in -e or -M):
>
>   L1-dcache-load-misses                              [Hardware cache event]
>   L1-dcache-loads                                    [Hardware cache event]
>   L1-dcache-prefetch-misses                          [Hardware cache event]
>   L1-dcache-store-misses                             [Hardware cache event]
>   L1-dcache-stores                                   [Hardware cache event]
>   L1-icache-load-misses                              [Hardware cache event]
>   L1-icache-loads                                    [Hardware cache event]
>   branch-load-misses                                 [Hardware cache event]
>   branch-loads                                       [Hardware cache event]
>   dTLB-load-misses                                   [Hardware cache event]
>   dTLB-store-misses                                  [Hardware cache event]
>   iTLB-load-misses                                   [Hardware cache event]
>   node-loads                                         [Hardware cache event]
>   node-stores                                        [Hardware cache event]
>
> root@roc-rk3399-pc:~#
>
> Without something like libtraceevent 'perf probe', 'perf trace' wouldn't
> work as of now, as it currently use libtraceevent to parse whats in
> tracefs.

Right, many other tools would be impacted like 'perf lock', 'perf sched', ...

>
> So for some people, just interested in profiling the above hw, sw and
> cache events, libtraceevent isn't strictly required and may even be
> desirable to reduce the number of library dependencies.
>
> So its a valid feature to allow perf to be built without libtraceevent,
> i.e. not something needed for the above scenarios.

Right, we could remove unsupported commands from the build or
refuse to run them with a warning.

Thanks,
Namhyung

>
> With libbpf and BTF tracefs isn't also strictly needed, as we already
> have to link with it and things like 'perf trace' want to use libbpf's
> btf pretty printing stuff, we can use BTF to enumerate events, iterate
> thru its fields, offsets, types, etc:
>
> root@roc-rk3399-pc:~# pahole --sizes | grep trace_event_raw_sched
> trace_event_raw_sched_kthread_stop      28      0
> trace_event_raw_sched_kthread_stop_ret  12      0
> trace_event_raw_sched_kthread_work_queue_work   32      0
> trace_event_raw_sched_kthread_work_execute_start        24      0
> trace_event_raw_sched_kthread_work_execute_end  24      0
> trace_event_raw_sched_wakeup_template   36      0
> trace_event_raw_sched_switch    64      0
> trace_event_raw_sched_migrate_task      40      0
> trace_event_raw_sched_process_template  32      0
> trace_event_raw_sched_process_wait      32      0
> trace_event_raw_sched_process_fork      48      0
> trace_event_raw_sched_process_exec      20      0
> trace_event_raw_sched_stat_runtime      48      1
> trace_event_raw_sched_pi_setprio        36      0
> trace_event_raw_sched_move_numa 36      0
> trace_event_raw_sched_numa_pair_template        48      0
> trace_event_raw_sched_wake_idle_without_ipi     12      0
> root@roc-rk3399-pc:~#
>
> root@roc-rk3399-pc:~# pahole trace_event_raw_sched_switch
> struct trace_event_raw_sched_switch {
>         struct trace_entry         ent;                  /*     0     8 */
>         char                       prev_comm[16];        /*     8    16 */
>         pid_t                      prev_pid;             /*    24     4 */
>         int                        prev_prio;            /*    28     4 */
>         long int                   prev_state;           /*    32     8 */
>         char                       next_comm[16];        /*    40    16 */
>         pid_t                      next_pid;             /*    56     4 */
>         int                        next_prio;            /*    60     4 */
>         /* --- cacheline 1 boundary (64 bytes) --- */
>         char                       __data[];             /*    64     0 */
>
>         /* size: 64, cachelines: 1, members: 9 */
> };
> root@roc-rk3399-pc:~#
>
> - Arnaldo
  

Patch

diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config
index 9cc3c48f3288..38dd686277c1 100644
--- a/tools/perf/Makefile.config
+++ b/tools/perf/Makefile.config
@@ -1182,34 +1182,29 @@  ifdef LIBPFM4
   endif
 endif
 
-ifdef LIBTRACEEVENT_DYNAMIC
-  $(call feature_check,libtraceevent)
-  ifeq ($(feature-libtraceevent), 1)
-    EXTLIBS += -ltraceevent
-    LIBTRACEEVENT_VERSION := $(shell $(PKG_CONFIG) --modversion libtraceevent)
-    LIBTRACEEVENT_VERSION_1 := $(word 1, $(subst ., ,$(LIBTRACEEVENT_VERSION)))
-    LIBTRACEEVENT_VERSION_2 := $(word 2, $(subst ., ,$(LIBTRACEEVENT_VERSION)))
-    LIBTRACEEVENT_VERSION_3 := $(word 3, $(subst ., ,$(LIBTRACEEVENT_VERSION)))
-    LIBTRACEEVENT_VERSION_CPP := $(shell expr $(LIBTRACEEVENT_VERSION_1) \* 255 \* 255 + $(LIBTRACEEVENT_VERSION_2) \* 255 + $(LIBTRACEEVENT_VERSION_3))
-    CFLAGS += -DLIBTRACEEVENT_VERSION=$(LIBTRACEEVENT_VERSION_CPP)
-  else
-    dummy := $(error Error: No libtraceevent devel library found, please install libtraceevent-devel);
-  endif
-endif
-
-ifdef LIBTRACEFS_DYNAMIC
-  $(call feature_check,libtracefs)
-  ifeq ($(feature-libtracefs), 1)
-    EXTLIBS += -ltracefs
-    LIBTRACEFS_VERSION := $(shell $(PKG_CONFIG) --modversion libtracefs)
-    LIBTRACEFS_VERSION_1 := $(word 1, $(subst ., ,$(LIBTRACEFS_VERSION)))
-    LIBTRACEFS_VERSION_2 := $(word 2, $(subst ., ,$(LIBTRACEFS_VERSION)))
-    LIBTRACEFS_VERSION_3 := $(word 3, $(subst ., ,$(LIBTRACEFS_VERSION)))
-    LIBTRACEFS_VERSION_CPP := $(shell expr $(LIBTRACEFS_VERSION_1) \* 255 \* 255 + $(LIBTRACEFS_VERSION_2) \* 255 + $(LIBTRACEFS_VERSION_3))
-    CFLAGS += -DLIBTRACEFS_VERSION=$(LIBTRACEFS_VERSION_CPP)
-  else
-    dummy := $(error Error: No libtracefs devel library found, please install libtracefs-dev);
-  endif
+# libtraceevent is a required dependency picked up from the system.
+$(call feature_check,libtraceevent)
+ifeq ($(feature-libtraceevent), 1)
+  EXTLIBS += -ltraceevent
+  LIBTRACEEVENT_VERSION := $(shell $(PKG_CONFIG) --modversion libtraceevent)
+  LIBTRACEEVENT_VERSION_1 := $(word 1, $(subst ., ,$(LIBTRACEEVENT_VERSION)))
+  LIBTRACEEVENT_VERSION_2 := $(word 2, $(subst ., ,$(LIBTRACEEVENT_VERSION)))
+  LIBTRACEEVENT_VERSION_3 := $(word 3, $(subst ., ,$(LIBTRACEEVENT_VERSION)))
+  LIBTRACEEVENT_VERSION_CPP := $(shell expr $(LIBTRACEEVENT_VERSION_1) \* 255 \* 255 + $(LIBTRACEEVENT_VERSION_2) \* 255 + $(LIBTRACEEVENT_VERSION_3))
+  CFLAGS += -DLIBTRACEEVENT_VERSION=$(LIBTRACEEVENT_VERSION_CPP)
+else
+  dummy := $(error Error: libtraceevent is missing, please install libtraceevent-dev)
+endif
+
+$(call feature_check,libtracefs)
+ifeq ($(feature-libtracefs), 1)
+  EXTLIBS += -ltracefs
+  LIBTRACEFS_VERSION := $(shell $(PKG_CONFIG) --modversion libtracefs)
+  LIBTRACEFS_VERSION_1 := $(word 1, $(subst ., ,$(LIBTRACEFS_VERSION)))
+  LIBTRACEFS_VERSION_2 := $(word 2, $(subst ., ,$(LIBTRACEFS_VERSION)))
+  LIBTRACEFS_VERSION_3 := $(word 3, $(subst ., ,$(LIBTRACEFS_VERSION)))
+  LIBTRACEFS_VERSION_CPP := $(shell expr $(LIBTRACEFS_VERSION_1) \* 255 \* 255 + $(LIBTRACEFS_VERSION_2) \* 255 + $(LIBTRACEFS_VERSION_3))
+  CFLAGS += -DLIBTRACEFS_VERSION=$(LIBTRACEFS_VERSION_CPP)
 endif
 
 # Among the variables below, these:
diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf
index 59c4e8f9b014..2e5617b64046 100644
--- a/tools/perf/Makefile.perf
+++ b/tools/perf/Makefile.perf
@@ -128,10 +128,6 @@  include ../scripts/utilities.mak
 #
 # Define BUILD_BPF_SKEL to enable BPF skeletons
 #
-# Define LIBTRACEEVENT_DYNAMIC to enable libtraceevent dynamic linking
-#
-# Define LIBTRACEFS_DYNAMIC to enable libtracefs dynamic linking
-#
 
 # As per kernel Makefile, avoid funny character set dependencies
 unexport LC_ALL
@@ -242,10 +238,6 @@  sub-make: fixdep
 else # force_fixdep
 
 LIBAPI_DIR      = $(srctree)/tools/lib/api/
-ifndef LIBTRACEEVENT_DYNAMIC
-LIBTRACEEVENT_DIR = $(srctree)/tools/lib/traceevent/
-LIBTRACEEVENT_PLUGINS_DIR = $(LIBTRACEEVENT_DIR)/plugins
-endif
 LIBBPF_DIR      = $(srctree)/tools/lib/bpf/
 LIBSUBCMD_DIR   = $(srctree)/tools/lib/subcmd/
 LIBSYMBOL_DIR   = $(srctree)/tools/lib/symbol/
@@ -295,31 +287,6 @@  SCRIPT_SH += perf-iostat.sh
 grep-libs = $(filter -l%,$(1))
 strip-libs = $(filter-out -l%,$(1))
 
-ifndef LIBTRACEEVENT_DYNAMIC
-ifneq ($(OUTPUT),)
-  LIBTRACEEVENT_OUTPUT = $(abspath $(OUTPUT))/libtraceevent
-else
-  LIBTRACEEVENT_OUTPUT = $(CURDIR)/libtraceevent
-endif
-LIBTRACEEVENT_PLUGINS_OUTPUT = $(LIBTRACEEVENT_OUTPUT)_plugins
-LIBTRACEEVENT_DESTDIR = $(LIBTRACEEVENT_OUTPUT)
-LIBTRACEEVENT_PLUGINS_DESTDIR = $(LIBTRACEEVENT_PLUGINS_OUTPUT)
-LIBTRACEEVENT_INCLUDE = $(LIBTRACEEVENT_DESTDIR)/include
-LIBTRACEEVENT = $(LIBTRACEEVENT_OUTPUT)/libtraceevent.a
-export LIBTRACEEVENT
-LIBTRACEEVENT_DYNAMIC_LIST = $(LIBTRACEEVENT_PLUGINS_OUTPUT)/libtraceevent-dynamic-list
-CFLAGS += -I$(LIBTRACEEVENT_OUTPUT)/include
-#
-# The static build has no dynsym table, so this does not work for
-# static build. Looks like linker starts to scream about that now
-# (in Fedora 26) so we need to switch it off for static build.
-DYNAMIC_LIST_LDFLAGS               = -Xlinker --dynamic-list=$(LIBTRACEEVENT_DYNAMIC_LIST)
-LIBTRACEEVENT_DYNAMIC_LIST_LDFLAGS = $(if $(findstring -static,$(LDFLAGS)),,$(DYNAMIC_LIST_LDFLAGS))
-else
-LIBTRACEEVENT_DYNAMIC_LIST =
-LIBTRACEEVENT_DYNAMIC_LIST_LDFLAGS =
-endif
-
 ifneq ($(OUTPUT),)
   LIBAPI_OUTPUT = $(abspath $(OUTPUT))/libapi
 else
@@ -381,11 +348,7 @@  export PYTHON_EXTBUILD_LIB PYTHON_EXTBUILD_TMP
 python-clean := $(call QUIET_CLEAN, python) $(RM) -r $(PYTHON_EXTBUILD) $(OUTPUT)python/perf*.so
 
 PYTHON_EXT_SRCS := $(shell grep -v ^\# util/python-ext-sources)
-ifndef LIBTRACEEVENT_DYNAMIC
-PYTHON_EXT_DEPS := util/python-ext-sources util/setup.py $(LIBTRACEEVENT) $(LIBAPI)
-else
 PYTHON_EXT_DEPS := util/python-ext-sources util/setup.py $(LIBAPI)
-endif
 
 SCRIPTS = $(patsubst %.sh,%,$(SCRIPT_SH))
 
@@ -430,9 +393,6 @@  ifndef NO_LIBBPF
     PERFLIBS += $(LIBBPF)
   endif
 endif
-ifndef LIBTRACEEVENT_DYNAMIC
-  PERFLIBS += $(LIBTRACEEVENT)
-endif
 
 # We choose to avoid "if .. else if .. else .. endif endif"
 # because maintaining the nesting to match is a pain.  If
@@ -682,9 +642,9 @@  all: shell_compatibility_test $(ALL_PROGRAMS) $(LANG_BINDINGS) $(OTHER_PROGRAMS)
 # Create python binding output directory if not already present
 _dummy := $(shell [ -d '$(OUTPUT)python' ] || mkdir -p '$(OUTPUT)python')
 
-$(OUTPUT)python/perf.so: $(PYTHON_EXT_SRCS) $(PYTHON_EXT_DEPS) $(LIBTRACEEVENT_DYNAMIC_LIST) $(LIBPERF)
+$(OUTPUT)python/perf.so: $(PYTHON_EXT_SRCS) $(PYTHON_EXT_DEPS) $(LIBPERF)
 	$(QUIET_GEN)LDSHARED="$(CC) -pthread -shared" \
-        CFLAGS='$(CFLAGS)' LDFLAGS='$(LDFLAGS) $(LIBTRACEEVENT_DYNAMIC_LIST_LDFLAGS)' \
+        CFLAGS='$(CFLAGS)' LDFLAGS='$(LDFLAGS)' \
 	  $(PYTHON_WORD) util/setup.py \
 	  --quiet build_ext; \
 	cp $(PYTHON_EXTBUILD_LIB)perf*.so $(OUTPUT)python/
@@ -710,8 +670,8 @@  $(PERF_IN): prepare FORCE
 $(PMU_EVENTS_IN): FORCE prepare
 	$(Q)$(MAKE) -f $(srctree)/tools/build/Makefile.build dir=pmu-events obj=pmu-events
 
-$(OUTPUT)perf: $(PERFLIBS) $(PERF_IN) $(PMU_EVENTS_IN) $(LIBTRACEEVENT_DYNAMIC_LIST)
-	$(QUIET_LINK)$(CC) $(CFLAGS) $(LDFLAGS) $(LIBTRACEEVENT_DYNAMIC_LIST_LDFLAGS) \
+$(OUTPUT)perf: $(PERFLIBS) $(PERF_IN) $(PMU_EVENTS_IN)
+	$(QUIET_LINK)$(CC) $(CFLAGS) $(LDFLAGS) \
 		$(PERF_IN) $(PMU_EVENTS_IN) $(LIBS) -o $@
 
 $(GTK_IN): FORCE
@@ -797,10 +757,6 @@  prepare: $(OUTPUT)PERF-VERSION-FILE $(OUTPUT)common-cmds.h archheaders $(drm_ioc
 	$(LIBSYMBOL) \
 	bpf-skel
 
-ifndef LIBTRACEEVENT_DYNAMIC
-prepare: $(LIBTRACEEVENT)
-endif
-
 $(OUTPUT)%.o: %.c prepare FORCE
 	$(Q)$(MAKE) -f $(srctree)/tools/build/Makefile.build dir=$(build-dir) $@
 
@@ -856,38 +812,6 @@  endif
 
 $(patsubst perf-%,%.o,$(PROGRAMS)): $(wildcard */*.h)
 
-ifndef LIBTRACEEVENT_DYNAMIC
-LIBTRACEEVENT_FLAGS += plugin_dir=$(plugindir_SQ) 'EXTRA_CFLAGS=$(EXTRA_CFLAGS)' 'LDFLAGS=$(filter-out -static,$(LDFLAGS))'
-
-$(LIBTRACEEVENT): FORCE | $(LIBTRACEEVENT_OUTPUT)
-	$(Q)$(MAKE) -C $(LIBTRACEEVENT_DIR) O=$(LIBTRACEEVENT_OUTPUT) \
-		DESTDIR=$(LIBTRACEEVENT_DESTDIR) prefix= \
-		$@ install_headers
-
-$(LIBTRACEEVENT)-clean:
-	$(call QUIET_CLEAN, libtraceevent)
-	$(Q)$(RM) -r -- $(LIBTRACEEVENT_OUTPUT)
-
-libtraceevent_plugins: FORCE | $(LIBTRACEEVENT_PLUGINS_OUTPUT)
-	$(Q)$(MAKE) -C $(LIBTRACEEVENT_PLUGINS_DIR) O=$(LIBTRACEEVENT_PLUGINS_OUTPUT) \
-		DESTDIR=$(LIBTRACEEVENT_PLUGINS_DESTDIR) prefix= \
-		plugins
-
-libtraceevent_plugins-clean:
-	$(call QUIET_CLEAN, libtraceevent_plugins)
-	$(Q)$(RM) -r -- $(LIBTRACEEVENT_PLUGINS_OUTPUT)
-
-$(LIBTRACEEVENT_DYNAMIC_LIST): libtraceevent_plugins
-	$(Q)$(MAKE) -C $(LIBTRACEEVENT_PLUGINS_DIR) O=$(LIBTRACEEVENT_PLUGINS_OUTPUT) \
-		DESTDIR=$(LIBTRACEEVENT_PLUGINS_DESTDIR) prefix= \
-		$(LIBTRACEEVENT_FLAGS) $@
-
-install-traceevent-plugins: libtraceevent_plugins
-	$(Q)$(MAKE) -C $(LIBTRACEEVENT_PLUGINS_DIR) O=$(LIBTRACEEVENT_PLUGINS_OUTPUT) \
-		DESTDIR=$(LIBTRACEEVENT_PLUGINS_DESTDIR) prefix= \
-		$(LIBTRACEEVENT_FLAGS) install
-endif
-
 $(LIBAPI): FORCE | $(LIBAPI_OUTPUT)
 	$(Q)$(MAKE) -C $(LIBAPI_DIR) O=$(LIBAPI_OUTPUT) \
 		DESTDIR=$(LIBAPI_DESTDIR) prefix= \
@@ -1120,11 +1044,6 @@  SKELETONS += $(SKEL_OUT)/kwork_trace.skel.h
 $(SKEL_TMP_OUT) $(LIBAPI_OUTPUT) $(LIBBPF_OUTPUT) $(LIBPERF_OUTPUT) $(LIBSUBCMD_OUTPUT) $(LIBSYMBOL_OUTPUT):
 	$(Q)$(MKDIR) -p $@
 
-ifndef LIBTRACEEVENT_DYNAMIC
-$(LIBTRACEEVENT_OUTPUT) $(LIBTRACEEVENT_PLUGINS_OUTPUT):
-	$(Q)$(MKDIR) -p $@
-endif
-
 ifdef BUILD_BPF_SKEL
 BPFTOOL := $(SKEL_TMP_OUT)/bootstrap/bpftool
 BPF_INCLUDE := -I$(SKEL_TMP_OUT)/.. -I$(LIBBPF_INCLUDE)
@@ -1207,10 +1126,6 @@  clean:: $(LIBAPI)-clean $(LIBBPF)-clean $(LIBSUBCMD)-clean $(LIBSYMBOL)-clean $(
 	$(call QUIET_CLEAN, Documentation) \
 	$(MAKE) -C $(DOC_DIR) O=$(OUTPUT) clean >/dev/null
 
-ifndef LIBTRACEEVENT_DYNAMIC
-clean:: $(LIBTRACEEVENT)-clean libtraceevent_plugins-clean
-endif
-
 #
 # To provide FEATURE-DUMP into $(FEATURE_DUMP_COPY)
 # file if defined, with no further action.
@@ -1228,6 +1143,6 @@  FORCE:
 .PHONY: all install clean config-clean strip install-gtk
 .PHONY: shell_compatibility_test please_set_SHELL_PATH_to_a_more_modern_shell
 .PHONY: .FORCE-PERF-VERSION-FILE TAGS tags cscope FORCE prepare
-.PHONY: libtraceevent_plugins archheaders
+.PHONY: archheaders
 
 endif # force_fixdep