2023-08-10 07:46:20 -07:00
|
|
|
include $(srctree)/tools/scripts/Makefile.include
|
2023-07-27 23:49:15 -07:00
|
|
|
include $(srctree)/tools/scripts/utilities.mak
|
|
|
|
|
2024-06-25 14:41:15 -07:00
|
|
|
perf-util-y += arm64-frame-pointer-unwind-support.o
|
|
|
|
perf-util-y += addr_location.o
|
|
|
|
perf-util-y += annotate.o
|
|
|
|
perf-util-y += block-info.o
|
|
|
|
perf-util-y += block-range.o
|
|
|
|
perf-util-y += build-id.o
|
|
|
|
perf-util-y += cacheline.o
|
|
|
|
perf-util-y += config.o
|
|
|
|
perf-util-y += copyfile.o
|
|
|
|
perf-util-y += ctype.o
|
|
|
|
perf-util-y += db-export.o
|
|
|
|
perf-util-y += disasm.o
|
2024-07-31 07:58:56 -07:00
|
|
|
perf-util-y += disasm_bpf.o
|
2024-06-25 14:41:15 -07:00
|
|
|
perf-util-y += env.o
|
|
|
|
perf-util-y += event.o
|
|
|
|
perf-util-y += evlist.o
|
|
|
|
perf-util-y += sideband_evlist.o
|
|
|
|
perf-util-y += evsel.o
|
|
|
|
perf-util-y += evsel_fprintf.o
|
|
|
|
perf-util-y += perf_event_attr_fprintf.o
|
|
|
|
perf-util-y += evswitch.o
|
|
|
|
perf-util-y += find_bit.o
|
|
|
|
perf-util-y += get_current_dir_name.o
|
|
|
|
perf-util-y += levenshtein.o
|
|
|
|
perf-util-y += mmap.o
|
|
|
|
perf-util-y += memswap.o
|
|
|
|
perf-util-y += parse-events.o
|
|
|
|
perf-util-y += print-events.o
|
|
|
|
perf-util-y += tracepoint.o
|
|
|
|
perf-util-y += perf_regs.o
|
|
|
|
perf-util-y += perf-regs-arch/
|
|
|
|
perf-util-y += path.o
|
|
|
|
perf-util-y += print_binary.o
|
|
|
|
perf-util-y += print_insn.o
|
|
|
|
perf-util-y += rlimit.o
|
|
|
|
perf-util-y += argv_split.o
|
|
|
|
perf-util-y += rbtree.o
|
|
|
|
perf-util-y += libstring.o
|
|
|
|
perf-util-y += bitmap.o
|
|
|
|
perf-util-y += hweight.o
|
|
|
|
perf-util-y += smt.o
|
|
|
|
perf-util-y += strbuf.o
|
|
|
|
perf-util-y += string.o
|
|
|
|
perf-util-y += strlist.o
|
|
|
|
perf-util-y += strfilter.o
|
|
|
|
perf-util-y += top.o
|
|
|
|
perf-util-y += usage.o
|
|
|
|
perf-util-y += dso.o
|
|
|
|
perf-util-y += dsos.o
|
|
|
|
perf-util-y += symbol.o
|
|
|
|
perf-util-y += symbol_fprintf.o
|
|
|
|
perf-util-y += map_symbol.o
|
|
|
|
perf-util-y += color.o
|
|
|
|
perf-util-y += color_config.o
|
|
|
|
perf-util-y += metricgroup.o
|
|
|
|
perf-util-y += header.o
|
|
|
|
perf-util-y += callchain.o
|
|
|
|
perf-util-y += values.o
|
|
|
|
perf-util-y += debug.o
|
|
|
|
perf-util-y += fncache.o
|
|
|
|
perf-util-y += machine.o
|
|
|
|
perf-util-y += map.o
|
|
|
|
perf-util-y += maps.o
|
|
|
|
perf-util-y += pstack.o
|
|
|
|
perf-util-y += session.o
|
2024-08-12 13:46:56 -07:00
|
|
|
perf-util-y += tool.o
|
2024-06-25 14:41:15 -07:00
|
|
|
perf-util-y += sample-raw.o
|
|
|
|
perf-util-y += s390-sample-raw.o
|
|
|
|
perf-util-y += amd-sample-raw.o
|
|
|
|
perf-util-$(CONFIG_TRACE) += syscalltbl.o
|
|
|
|
perf-util-y += ordered-events.o
|
|
|
|
perf-util-y += namespaces.o
|
|
|
|
perf-util-y += comm.o
|
|
|
|
perf-util-y += thread.o
|
|
|
|
perf-util-y += threads.o
|
|
|
|
perf-util-y += thread_map.o
|
|
|
|
perf-util-y += parse-events-flex.o
|
|
|
|
perf-util-y += parse-events-bison.o
|
|
|
|
perf-util-y += pmu.o
|
|
|
|
perf-util-y += pmus.o
|
|
|
|
perf-util-y += pmu-flex.o
|
|
|
|
perf-util-y += pmu-bison.o
|
|
|
|
perf-util-y += svghelper.o
|
|
|
|
perf-util-$(CONFIG_LIBTRACEEVENT) += trace-event-info.o
|
|
|
|
perf-util-y += trace-event-scripting.o
|
|
|
|
perf-util-$(CONFIG_LIBTRACEEVENT) += trace-event.o
|
|
|
|
perf-util-$(CONFIG_LIBTRACEEVENT) += trace-event-parse.o
|
|
|
|
perf-util-$(CONFIG_LIBTRACEEVENT) += trace-event-read.o
|
|
|
|
perf-util-y += sort.o
|
|
|
|
perf-util-y += hist.o
|
|
|
|
perf-util-y += util.o
|
|
|
|
perf-util-y += cpumap.o
|
|
|
|
perf-util-y += affinity.o
|
|
|
|
perf-util-y += cputopo.o
|
|
|
|
perf-util-y += cgroup.o
|
|
|
|
perf-util-y += target.o
|
|
|
|
perf-util-y += rblist.o
|
|
|
|
perf-util-y += intlist.o
|
|
|
|
perf-util-y += vdso.o
|
|
|
|
perf-util-y += counts.o
|
|
|
|
perf-util-y += stat.o
|
|
|
|
perf-util-y += stat-shadow.o
|
|
|
|
perf-util-y += stat-display.o
|
|
|
|
perf-util-y += perf_api_probe.o
|
|
|
|
perf-util-y += record.o
|
|
|
|
perf-util-y += srcline.o
|
|
|
|
perf-util-y += srccode.o
|
|
|
|
perf-util-y += synthetic-events.o
|
|
|
|
perf-util-y += data.o
|
|
|
|
perf-util-y += tsc.o
|
|
|
|
perf-util-y += cloexec.o
|
|
|
|
perf-util-y += call-path.o
|
|
|
|
perf-util-y += rwsem.o
|
|
|
|
perf-util-y += thread-stack.o
|
|
|
|
perf-util-y += spark.o
|
|
|
|
perf-util-y += topdown.o
|
|
|
|
perf-util-y += iostat.o
|
|
|
|
perf-util-y += stream.o
|
|
|
|
perf-util-$(CONFIG_AUXTRACE) += auxtrace.o
|
|
|
|
perf-util-$(CONFIG_AUXTRACE) += intel-pt-decoder/
|
|
|
|
perf-util-$(CONFIG_AUXTRACE) += intel-pt.o
|
|
|
|
perf-util-$(CONFIG_AUXTRACE) += intel-bts.o
|
|
|
|
perf-util-$(CONFIG_AUXTRACE) += arm-spe.o
|
|
|
|
perf-util-$(CONFIG_AUXTRACE) += arm-spe-decoder/
|
|
|
|
perf-util-$(CONFIG_AUXTRACE) += hisi-ptt.o
|
|
|
|
perf-util-$(CONFIG_AUXTRACE) += hisi-ptt-decoder/
|
|
|
|
perf-util-$(CONFIG_AUXTRACE) += s390-cpumsf.o
|
2018-01-17 10:52:11 -07:00
|
|
|
|
|
|
|
ifdef CONFIG_LIBOPENCSD
|
2024-06-25 14:41:15 -07:00
|
|
|
perf-util-$(CONFIG_AUXTRACE) += cs-etm.o
|
|
|
|
perf-util-$(CONFIG_AUXTRACE) += cs-etm-decoder/
|
2018-01-17 10:52:11 -07:00
|
|
|
endif
|
2024-06-25 14:41:15 -07:00
|
|
|
perf-util-$(CONFIG_AUXTRACE) += cs-etm-base.o
|
|
|
|
|
|
|
|
perf-util-y += parse-branch-options.o
|
|
|
|
perf-util-y += dump-insn.o
|
|
|
|
perf-util-y += parse-regs-options.o
|
|
|
|
perf-util-y += parse-sublevel-options.o
|
|
|
|
perf-util-y += term.o
|
|
|
|
perf-util-y += help-unknown-cmd.o
|
|
|
|
perf-util-y += dlfilter.o
|
|
|
|
perf-util-y += mem-events.o
|
|
|
|
perf-util-y += mem-info.o
|
|
|
|
perf-util-y += vsprintf.o
|
|
|
|
perf-util-y += units.o
|
|
|
|
perf-util-y += time-utils.o
|
|
|
|
perf-util-y += expr-flex.o
|
|
|
|
perf-util-y += expr-bison.o
|
|
|
|
perf-util-y += expr.o
|
|
|
|
perf-util-y += branch.o
|
|
|
|
perf-util-y += mem2node.o
|
|
|
|
perf-util-y += clockid.o
|
|
|
|
perf-util-y += list_sort.o
|
|
|
|
perf-util-y += mutex.o
|
|
|
|
perf-util-y += sharded_mutex.o
|
2024-07-19 23:20:56 -07:00
|
|
|
perf-util-$(CONFIG_X86_64) += intel-tpebs.o
|
2024-06-25 14:41:15 -07:00
|
|
|
|
|
|
|
perf-util-$(CONFIG_LIBBPF) += bpf_map.o
|
|
|
|
perf-util-$(CONFIG_PERF_BPF_SKEL) += bpf_counter.o
|
|
|
|
perf-util-$(CONFIG_PERF_BPF_SKEL) += bpf_counter_cgroup.o
|
|
|
|
perf-util-$(CONFIG_PERF_BPF_SKEL) += bpf_ftrace.o
|
|
|
|
perf-util-$(CONFIG_PERF_BPF_SKEL) += bpf_off_cpu.o
|
|
|
|
perf-util-$(CONFIG_PERF_BPF_SKEL) += bpf-filter.o
|
|
|
|
perf-util-$(CONFIG_PERF_BPF_SKEL) += bpf-filter-flex.o
|
|
|
|
perf-util-$(CONFIG_PERF_BPF_SKEL) += bpf-filter-bison.o
|
2023-02-02 19:13:23 -07:00
|
|
|
|
|
|
|
ifeq ($(CONFIG_LIBTRACEEVENT),y)
|
2024-06-25 14:41:15 -07:00
|
|
|
perf-util-$(CONFIG_PERF_BPF_SKEL) += bpf_lock_contention.o
|
2023-02-02 19:13:23 -07:00
|
|
|
endif
|
perf build: Use libtraceevent from the system
Remove the LIBTRACEEVENT_DYNAMIC and LIBTRACEFS_DYNAMIC make command
line variables.
If libtraceevent isn't installed or NO_LIBTRACEEVENT=1 is passed to the
build, don't compile in libtraceevent and libtracefs support.
This also disables CONFIG_TRACE that controls "perf trace".
CONFIG_LIBTRACEEVENT is used to control enablement in Build/Makefiles,
HAVE_LIBTRACEEVENT is used in C code.
Without HAVE_LIBTRACEEVENT tracepoints are disabled and as such the
commands kmem, kwork, lock, sched and timechart are removed. The
majority of commands continue to work including "perf test".
Committer notes:
Fixed up a tools/perf/util/Build reject and added:
#include <traceevent/event-parse.h>
to tools/perf/util/scripting-engines/trace-event-perl.c.
Committer testing:
$ rpm -qi libtraceevent-devel
Name : libtraceevent-devel
Version : 1.5.3
Release : 2.fc36
Architecture: x86_64
Install Date: Mon 25 Jul 2022 03:20:19 PM -03
Group : Unspecified
Size : 27728
License : LGPLv2+ and GPLv2+
Signature : RSA/SHA256, Fri 15 Apr 2022 02:11:58 PM -03, Key ID 999f7cbf38ab71f4
Source RPM : libtraceevent-1.5.3-2.fc36.src.rpm
Build Date : Fri 15 Apr 2022 10:57:01 AM -03
Build Host : buildvm-x86-05.iad2.fedoraproject.org
Packager : Fedora Project
Vendor : Fedora Project
URL : https://git.kernel.org/pub/scm/libs/libtrace/libtraceevent.git/
Bug URL : https://bugz.fedoraproject.org/libtraceevent
Summary : Development headers of libtraceevent
Description :
Development headers of libtraceevent-libs
$
Default build:
$ ldd ~/bin/perf | grep tracee
libtraceevent.so.1 => /lib64/libtraceevent.so.1 (0x00007f1dcaf8f000)
$
# perf trace -e sched:* --max-events 10
0.000 migration/0/17 sched:sched_migrate_task(comm: "", pid: 1603763 (perf), prio: 120, dest_cpu: 1)
0.005 migration/0/17 sched:sched_wake_idle_without_ipi(cpu: 1)
0.011 migration/0/17 sched:sched_switch(prev_comm: "", prev_pid: 17 (migration/0), prev_state: 1, next_comm: "", next_prio: 120)
1.173 :0/0 sched:sched_wakeup(comm: "", pid: 3138 (gnome-terminal-), prio: 120)
1.180 :0/0 sched:sched_switch(prev_comm: "", prev_prio: 120, next_comm: "", next_pid: 3138 (gnome-terminal-), next_prio: 120)
0.156 migration/1/21 sched:sched_migrate_task(comm: "", pid: 1603763 (perf), prio: 120, orig_cpu: 1, dest_cpu: 2)
0.160 migration/1/21 sched:sched_wake_idle_without_ipi(cpu: 2)
0.166 migration/1/21 sched:sched_switch(prev_comm: "", prev_pid: 21 (migration/1), prev_state: 1, next_comm: "", next_prio: 120)
1.183 :0/0 sched:sched_wakeup(comm: "", pid: 1602985 (kworker/u16:0-f), prio: 120, target_cpu: 1)
1.186 :0/0 sched:sched_switch(prev_comm: "", prev_prio: 120, next_comm: "", next_pid: 1602985 (kworker/u16:0-f), next_prio: 120)
#
Had to tweak tools/perf/util/setup.py to make sure the python binding
shared object links with libtraceevent if -DHAVE_LIBTRACEEVENT is
present in CFLAGS.
Building with NO_LIBTRACEEVENT=1 uncovered some more build failures:
- Make building of data-convert-bt.c to CONFIG_LIBTRACEEVENT=y
- perf-$(CONFIG_LIBTRACEEVENT) += scripts/
- bpf_kwork.o needs also to be dependent on CONFIG_LIBTRACEEVENT=y
- The python binding needed some fixups and util/trace-event.c can't be
built and linked with the python binding shared object, so remove it
in tools/perf/util/setup.py and exclude it from the list of
dependencies in the python/perf.so Makefile.perf target.
Building without libtraceevent-devel installed uncovered more build
failures:
- The python binding tools/perf/util/python.c was assuming that
traceevent/parse-events.h was always available, which was the case
when we defaulted to using the in-kernel tools/lib/traceevent/ files,
now we need to enclose it under ifdef HAVE_LIBTRACEEVENT, just like
the other parts of it that deal with tracepoints.
- We have to ifdef the rules in the Build files with
CONFIG_LIBTRACEEVENT=y to build builtin-trace.c and
tools/perf/trace/beauty/ as we only ifdef setting CONFIG_TRACE=y when
setting NO_LIBTRACEEVENT=1 in the make command line, not when we don't
detect libtraceevent-devel installed in the system. Simplification here
to avoid these two ways of disabling builtin-trace.c and not having
CONFIG_TRACE=y when libtraceevent-devel isn't installed is the clean
way.
From Athira:
<quote>
tools/perf/arch/powerpc/util/Build
-perf-y += kvm-stat.o
+perf-$(CONFIG_LIBTRACEEVENT) += kvm-stat.o
</quote>
Then, ditto for arm64 and s390, detected by container cross build tests.
- s/390 uses test__checkevent_tracepoint() that is now only available if
HAVE_LIBTRACEEVENT is defined, enclose the callsite with ifder HAVE_LIBTRACEEVENT.
Also from Athira:
<quote>
With this change, I could successfully compile in these environment:
- Without libtraceevent-devel installed
- With libtraceevent-devel installed
- With “make NO_LIBTRACEEVENT=1”
</quote>
Then, finally rename CONFIG_TRACEEVENT to CONFIG_LIBTRACEEVENT for
consistency with other libraries detected in tools/perf/.
Signed-off-by: Ian Rogers <irogers@google.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Tested-by: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Nick Desaulniers <ndesaulniers@google.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Cc: bpf@vger.kernel.org
Link: http://lore.kernel.org/lkml/20221205225940.3079667-3-irogers@google.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2022-12-05 15:59:39 -07:00
|
|
|
|
|
|
|
ifeq ($(CONFIG_LIBTRACEEVENT),y)
|
2024-06-25 14:41:15 -07:00
|
|
|
perf-util-$(CONFIG_PERF_BPF_SKEL) += bpf_kwork.o
|
|
|
|
perf-util-$(CONFIG_PERF_BPF_SKEL) += bpf_kwork_top.o
|
perf build: Use libtraceevent from the system
Remove the LIBTRACEEVENT_DYNAMIC and LIBTRACEFS_DYNAMIC make command
line variables.
If libtraceevent isn't installed or NO_LIBTRACEEVENT=1 is passed to the
build, don't compile in libtraceevent and libtracefs support.
This also disables CONFIG_TRACE that controls "perf trace".
CONFIG_LIBTRACEEVENT is used to control enablement in Build/Makefiles,
HAVE_LIBTRACEEVENT is used in C code.
Without HAVE_LIBTRACEEVENT tracepoints are disabled and as such the
commands kmem, kwork, lock, sched and timechart are removed. The
majority of commands continue to work including "perf test".
Committer notes:
Fixed up a tools/perf/util/Build reject and added:
#include <traceevent/event-parse.h>
to tools/perf/util/scripting-engines/trace-event-perl.c.
Committer testing:
$ rpm -qi libtraceevent-devel
Name : libtraceevent-devel
Version : 1.5.3
Release : 2.fc36
Architecture: x86_64
Install Date: Mon 25 Jul 2022 03:20:19 PM -03
Group : Unspecified
Size : 27728
License : LGPLv2+ and GPLv2+
Signature : RSA/SHA256, Fri 15 Apr 2022 02:11:58 PM -03, Key ID 999f7cbf38ab71f4
Source RPM : libtraceevent-1.5.3-2.fc36.src.rpm
Build Date : Fri 15 Apr 2022 10:57:01 AM -03
Build Host : buildvm-x86-05.iad2.fedoraproject.org
Packager : Fedora Project
Vendor : Fedora Project
URL : https://git.kernel.org/pub/scm/libs/libtrace/libtraceevent.git/
Bug URL : https://bugz.fedoraproject.org/libtraceevent
Summary : Development headers of libtraceevent
Description :
Development headers of libtraceevent-libs
$
Default build:
$ ldd ~/bin/perf | grep tracee
libtraceevent.so.1 => /lib64/libtraceevent.so.1 (0x00007f1dcaf8f000)
$
# perf trace -e sched:* --max-events 10
0.000 migration/0/17 sched:sched_migrate_task(comm: "", pid: 1603763 (perf), prio: 120, dest_cpu: 1)
0.005 migration/0/17 sched:sched_wake_idle_without_ipi(cpu: 1)
0.011 migration/0/17 sched:sched_switch(prev_comm: "", prev_pid: 17 (migration/0), prev_state: 1, next_comm: "", next_prio: 120)
1.173 :0/0 sched:sched_wakeup(comm: "", pid: 3138 (gnome-terminal-), prio: 120)
1.180 :0/0 sched:sched_switch(prev_comm: "", prev_prio: 120, next_comm: "", next_pid: 3138 (gnome-terminal-), next_prio: 120)
0.156 migration/1/21 sched:sched_migrate_task(comm: "", pid: 1603763 (perf), prio: 120, orig_cpu: 1, dest_cpu: 2)
0.160 migration/1/21 sched:sched_wake_idle_without_ipi(cpu: 2)
0.166 migration/1/21 sched:sched_switch(prev_comm: "", prev_pid: 21 (migration/1), prev_state: 1, next_comm: "", next_prio: 120)
1.183 :0/0 sched:sched_wakeup(comm: "", pid: 1602985 (kworker/u16:0-f), prio: 120, target_cpu: 1)
1.186 :0/0 sched:sched_switch(prev_comm: "", prev_prio: 120, next_comm: "", next_pid: 1602985 (kworker/u16:0-f), next_prio: 120)
#
Had to tweak tools/perf/util/setup.py to make sure the python binding
shared object links with libtraceevent if -DHAVE_LIBTRACEEVENT is
present in CFLAGS.
Building with NO_LIBTRACEEVENT=1 uncovered some more build failures:
- Make building of data-convert-bt.c to CONFIG_LIBTRACEEVENT=y
- perf-$(CONFIG_LIBTRACEEVENT) += scripts/
- bpf_kwork.o needs also to be dependent on CONFIG_LIBTRACEEVENT=y
- The python binding needed some fixups and util/trace-event.c can't be
built and linked with the python binding shared object, so remove it
in tools/perf/util/setup.py and exclude it from the list of
dependencies in the python/perf.so Makefile.perf target.
Building without libtraceevent-devel installed uncovered more build
failures:
- The python binding tools/perf/util/python.c was assuming that
traceevent/parse-events.h was always available, which was the case
when we defaulted to using the in-kernel tools/lib/traceevent/ files,
now we need to enclose it under ifdef HAVE_LIBTRACEEVENT, just like
the other parts of it that deal with tracepoints.
- We have to ifdef the rules in the Build files with
CONFIG_LIBTRACEEVENT=y to build builtin-trace.c and
tools/perf/trace/beauty/ as we only ifdef setting CONFIG_TRACE=y when
setting NO_LIBTRACEEVENT=1 in the make command line, not when we don't
detect libtraceevent-devel installed in the system. Simplification here
to avoid these two ways of disabling builtin-trace.c and not having
CONFIG_TRACE=y when libtraceevent-devel isn't installed is the clean
way.
From Athira:
<quote>
tools/perf/arch/powerpc/util/Build
-perf-y += kvm-stat.o
+perf-$(CONFIG_LIBTRACEEVENT) += kvm-stat.o
</quote>
Then, ditto for arm64 and s390, detected by container cross build tests.
- s/390 uses test__checkevent_tracepoint() that is now only available if
HAVE_LIBTRACEEVENT is defined, enclose the callsite with ifder HAVE_LIBTRACEEVENT.
Also from Athira:
<quote>
With this change, I could successfully compile in these environment:
- Without libtraceevent-devel installed
- With libtraceevent-devel installed
- With “make NO_LIBTRACEEVENT=1”
</quote>
Then, finally rename CONFIG_TRACEEVENT to CONFIG_LIBTRACEEVENT for
consistency with other libraries detected in tools/perf/.
Signed-off-by: Ian Rogers <irogers@google.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Tested-by: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Nick Desaulniers <ndesaulniers@google.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Cc: bpf@vger.kernel.org
Link: http://lore.kernel.org/lkml/20221205225940.3079667-3-irogers@google.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2022-12-05 15:59:39 -07:00
|
|
|
endif
|
|
|
|
|
2024-06-25 14:41:15 -07:00
|
|
|
perf-util-$(CONFIG_LIBELF) += symbol-elf.o
|
|
|
|
perf-util-$(CONFIG_LIBELF) += probe-file.o
|
|
|
|
perf-util-$(CONFIG_LIBELF) += probe-event.o
|
2014-12-29 15:52:25 -07:00
|
|
|
|
2021-05-08 13:50:20 -07:00
|
|
|
ifdef CONFIG_LIBBPF_DYNAMIC
|
|
|
|
hashmap := 1
|
|
|
|
endif
|
2020-05-15 15:17:29 -07:00
|
|
|
ifndef CONFIG_LIBBPF
|
2021-05-08 13:50:20 -07:00
|
|
|
hashmap := 1
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifdef hashmap
|
2024-06-25 14:41:15 -07:00
|
|
|
perf-util-y += hashmap.o
|
2020-05-15 15:17:29 -07:00
|
|
|
endif
|
|
|
|
|
2014-12-29 15:52:25 -07:00
|
|
|
ifndef CONFIG_LIBELF
|
2024-06-25 14:41:15 -07:00
|
|
|
perf-util-y += symbol-minimal.o
|
2014-12-29 15:52:25 -07:00
|
|
|
endif
|
|
|
|
|
2017-07-18 13:15:29 -07:00
|
|
|
ifndef CONFIG_SETNS
|
2024-06-25 14:41:15 -07:00
|
|
|
perf-util-y += setns.o
|
2017-07-18 13:15:29 -07:00
|
|
|
endif
|
|
|
|
|
2024-06-25 14:41:15 -07:00
|
|
|
perf-util-$(CONFIG_DWARF) += probe-finder.o
|
|
|
|
perf-util-$(CONFIG_DWARF) += dwarf-aux.o
|
|
|
|
perf-util-$(CONFIG_DWARF) += dwarf-regs.o
|
|
|
|
perf-util-$(CONFIG_DWARF) += debuginfo.o
|
|
|
|
perf-util-$(CONFIG_DWARF) += annotate-data.o
|
2014-12-29 16:06:25 -07:00
|
|
|
|
2024-06-25 14:41:15 -07:00
|
|
|
perf-util-$(CONFIG_LIBDW_DWARF_UNWIND) += unwind-libdw.o
|
|
|
|
perf-util-$(CONFIG_LOCAL_LIBUNWIND) += unwind-libunwind-local.o
|
|
|
|
perf-util-$(CONFIG_LIBUNWIND) += unwind-libunwind.o
|
|
|
|
perf-util-$(CONFIG_LIBUNWIND_X86) += libunwind/x86_32.o
|
|
|
|
perf-util-$(CONFIG_LIBUNWIND_AARCH64) += libunwind/arm64.o
|
2014-12-29 16:11:11 -07:00
|
|
|
|
perf build: Use libtraceevent from the system
Remove the LIBTRACEEVENT_DYNAMIC and LIBTRACEFS_DYNAMIC make command
line variables.
If libtraceevent isn't installed or NO_LIBTRACEEVENT=1 is passed to the
build, don't compile in libtraceevent and libtracefs support.
This also disables CONFIG_TRACE that controls "perf trace".
CONFIG_LIBTRACEEVENT is used to control enablement in Build/Makefiles,
HAVE_LIBTRACEEVENT is used in C code.
Without HAVE_LIBTRACEEVENT tracepoints are disabled and as such the
commands kmem, kwork, lock, sched and timechart are removed. The
majority of commands continue to work including "perf test".
Committer notes:
Fixed up a tools/perf/util/Build reject and added:
#include <traceevent/event-parse.h>
to tools/perf/util/scripting-engines/trace-event-perl.c.
Committer testing:
$ rpm -qi libtraceevent-devel
Name : libtraceevent-devel
Version : 1.5.3
Release : 2.fc36
Architecture: x86_64
Install Date: Mon 25 Jul 2022 03:20:19 PM -03
Group : Unspecified
Size : 27728
License : LGPLv2+ and GPLv2+
Signature : RSA/SHA256, Fri 15 Apr 2022 02:11:58 PM -03, Key ID 999f7cbf38ab71f4
Source RPM : libtraceevent-1.5.3-2.fc36.src.rpm
Build Date : Fri 15 Apr 2022 10:57:01 AM -03
Build Host : buildvm-x86-05.iad2.fedoraproject.org
Packager : Fedora Project
Vendor : Fedora Project
URL : https://git.kernel.org/pub/scm/libs/libtrace/libtraceevent.git/
Bug URL : https://bugz.fedoraproject.org/libtraceevent
Summary : Development headers of libtraceevent
Description :
Development headers of libtraceevent-libs
$
Default build:
$ ldd ~/bin/perf | grep tracee
libtraceevent.so.1 => /lib64/libtraceevent.so.1 (0x00007f1dcaf8f000)
$
# perf trace -e sched:* --max-events 10
0.000 migration/0/17 sched:sched_migrate_task(comm: "", pid: 1603763 (perf), prio: 120, dest_cpu: 1)
0.005 migration/0/17 sched:sched_wake_idle_without_ipi(cpu: 1)
0.011 migration/0/17 sched:sched_switch(prev_comm: "", prev_pid: 17 (migration/0), prev_state: 1, next_comm: "", next_prio: 120)
1.173 :0/0 sched:sched_wakeup(comm: "", pid: 3138 (gnome-terminal-), prio: 120)
1.180 :0/0 sched:sched_switch(prev_comm: "", prev_prio: 120, next_comm: "", next_pid: 3138 (gnome-terminal-), next_prio: 120)
0.156 migration/1/21 sched:sched_migrate_task(comm: "", pid: 1603763 (perf), prio: 120, orig_cpu: 1, dest_cpu: 2)
0.160 migration/1/21 sched:sched_wake_idle_without_ipi(cpu: 2)
0.166 migration/1/21 sched:sched_switch(prev_comm: "", prev_pid: 21 (migration/1), prev_state: 1, next_comm: "", next_prio: 120)
1.183 :0/0 sched:sched_wakeup(comm: "", pid: 1602985 (kworker/u16:0-f), prio: 120, target_cpu: 1)
1.186 :0/0 sched:sched_switch(prev_comm: "", prev_prio: 120, next_comm: "", next_pid: 1602985 (kworker/u16:0-f), next_prio: 120)
#
Had to tweak tools/perf/util/setup.py to make sure the python binding
shared object links with libtraceevent if -DHAVE_LIBTRACEEVENT is
present in CFLAGS.
Building with NO_LIBTRACEEVENT=1 uncovered some more build failures:
- Make building of data-convert-bt.c to CONFIG_LIBTRACEEVENT=y
- perf-$(CONFIG_LIBTRACEEVENT) += scripts/
- bpf_kwork.o needs also to be dependent on CONFIG_LIBTRACEEVENT=y
- The python binding needed some fixups and util/trace-event.c can't be
built and linked with the python binding shared object, so remove it
in tools/perf/util/setup.py and exclude it from the list of
dependencies in the python/perf.so Makefile.perf target.
Building without libtraceevent-devel installed uncovered more build
failures:
- The python binding tools/perf/util/python.c was assuming that
traceevent/parse-events.h was always available, which was the case
when we defaulted to using the in-kernel tools/lib/traceevent/ files,
now we need to enclose it under ifdef HAVE_LIBTRACEEVENT, just like
the other parts of it that deal with tracepoints.
- We have to ifdef the rules in the Build files with
CONFIG_LIBTRACEEVENT=y to build builtin-trace.c and
tools/perf/trace/beauty/ as we only ifdef setting CONFIG_TRACE=y when
setting NO_LIBTRACEEVENT=1 in the make command line, not when we don't
detect libtraceevent-devel installed in the system. Simplification here
to avoid these two ways of disabling builtin-trace.c and not having
CONFIG_TRACE=y when libtraceevent-devel isn't installed is the clean
way.
From Athira:
<quote>
tools/perf/arch/powerpc/util/Build
-perf-y += kvm-stat.o
+perf-$(CONFIG_LIBTRACEEVENT) += kvm-stat.o
</quote>
Then, ditto for arm64 and s390, detected by container cross build tests.
- s/390 uses test__checkevent_tracepoint() that is now only available if
HAVE_LIBTRACEEVENT is defined, enclose the callsite with ifder HAVE_LIBTRACEEVENT.
Also from Athira:
<quote>
With this change, I could successfully compile in these environment:
- Without libtraceevent-devel installed
- With libtraceevent-devel installed
- With “make NO_LIBTRACEEVENT=1”
</quote>
Then, finally rename CONFIG_TRACEEVENT to CONFIG_LIBTRACEEVENT for
consistency with other libraries detected in tools/perf/.
Signed-off-by: Ian Rogers <irogers@google.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Tested-by: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Nick Desaulniers <ndesaulniers@google.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Cc: bpf@vger.kernel.org
Link: http://lore.kernel.org/lkml/20221205225940.3079667-3-irogers@google.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2022-12-05 15:59:39 -07:00
|
|
|
ifeq ($(CONFIG_LIBTRACEEVENT),y)
|
2024-06-25 14:41:15 -07:00
|
|
|
perf-util-$(CONFIG_LIBBABELTRACE) += data-convert-bt.o
|
perf build: Use libtraceevent from the system
Remove the LIBTRACEEVENT_DYNAMIC and LIBTRACEFS_DYNAMIC make command
line variables.
If libtraceevent isn't installed or NO_LIBTRACEEVENT=1 is passed to the
build, don't compile in libtraceevent and libtracefs support.
This also disables CONFIG_TRACE that controls "perf trace".
CONFIG_LIBTRACEEVENT is used to control enablement in Build/Makefiles,
HAVE_LIBTRACEEVENT is used in C code.
Without HAVE_LIBTRACEEVENT tracepoints are disabled and as such the
commands kmem, kwork, lock, sched and timechart are removed. The
majority of commands continue to work including "perf test".
Committer notes:
Fixed up a tools/perf/util/Build reject and added:
#include <traceevent/event-parse.h>
to tools/perf/util/scripting-engines/trace-event-perl.c.
Committer testing:
$ rpm -qi libtraceevent-devel
Name : libtraceevent-devel
Version : 1.5.3
Release : 2.fc36
Architecture: x86_64
Install Date: Mon 25 Jul 2022 03:20:19 PM -03
Group : Unspecified
Size : 27728
License : LGPLv2+ and GPLv2+
Signature : RSA/SHA256, Fri 15 Apr 2022 02:11:58 PM -03, Key ID 999f7cbf38ab71f4
Source RPM : libtraceevent-1.5.3-2.fc36.src.rpm
Build Date : Fri 15 Apr 2022 10:57:01 AM -03
Build Host : buildvm-x86-05.iad2.fedoraproject.org
Packager : Fedora Project
Vendor : Fedora Project
URL : https://git.kernel.org/pub/scm/libs/libtrace/libtraceevent.git/
Bug URL : https://bugz.fedoraproject.org/libtraceevent
Summary : Development headers of libtraceevent
Description :
Development headers of libtraceevent-libs
$
Default build:
$ ldd ~/bin/perf | grep tracee
libtraceevent.so.1 => /lib64/libtraceevent.so.1 (0x00007f1dcaf8f000)
$
# perf trace -e sched:* --max-events 10
0.000 migration/0/17 sched:sched_migrate_task(comm: "", pid: 1603763 (perf), prio: 120, dest_cpu: 1)
0.005 migration/0/17 sched:sched_wake_idle_without_ipi(cpu: 1)
0.011 migration/0/17 sched:sched_switch(prev_comm: "", prev_pid: 17 (migration/0), prev_state: 1, next_comm: "", next_prio: 120)
1.173 :0/0 sched:sched_wakeup(comm: "", pid: 3138 (gnome-terminal-), prio: 120)
1.180 :0/0 sched:sched_switch(prev_comm: "", prev_prio: 120, next_comm: "", next_pid: 3138 (gnome-terminal-), next_prio: 120)
0.156 migration/1/21 sched:sched_migrate_task(comm: "", pid: 1603763 (perf), prio: 120, orig_cpu: 1, dest_cpu: 2)
0.160 migration/1/21 sched:sched_wake_idle_without_ipi(cpu: 2)
0.166 migration/1/21 sched:sched_switch(prev_comm: "", prev_pid: 21 (migration/1), prev_state: 1, next_comm: "", next_prio: 120)
1.183 :0/0 sched:sched_wakeup(comm: "", pid: 1602985 (kworker/u16:0-f), prio: 120, target_cpu: 1)
1.186 :0/0 sched:sched_switch(prev_comm: "", prev_prio: 120, next_comm: "", next_pid: 1602985 (kworker/u16:0-f), next_prio: 120)
#
Had to tweak tools/perf/util/setup.py to make sure the python binding
shared object links with libtraceevent if -DHAVE_LIBTRACEEVENT is
present in CFLAGS.
Building with NO_LIBTRACEEVENT=1 uncovered some more build failures:
- Make building of data-convert-bt.c to CONFIG_LIBTRACEEVENT=y
- perf-$(CONFIG_LIBTRACEEVENT) += scripts/
- bpf_kwork.o needs also to be dependent on CONFIG_LIBTRACEEVENT=y
- The python binding needed some fixups and util/trace-event.c can't be
built and linked with the python binding shared object, so remove it
in tools/perf/util/setup.py and exclude it from the list of
dependencies in the python/perf.so Makefile.perf target.
Building without libtraceevent-devel installed uncovered more build
failures:
- The python binding tools/perf/util/python.c was assuming that
traceevent/parse-events.h was always available, which was the case
when we defaulted to using the in-kernel tools/lib/traceevent/ files,
now we need to enclose it under ifdef HAVE_LIBTRACEEVENT, just like
the other parts of it that deal with tracepoints.
- We have to ifdef the rules in the Build files with
CONFIG_LIBTRACEEVENT=y to build builtin-trace.c and
tools/perf/trace/beauty/ as we only ifdef setting CONFIG_TRACE=y when
setting NO_LIBTRACEEVENT=1 in the make command line, not when we don't
detect libtraceevent-devel installed in the system. Simplification here
to avoid these two ways of disabling builtin-trace.c and not having
CONFIG_TRACE=y when libtraceevent-devel isn't installed is the clean
way.
From Athira:
<quote>
tools/perf/arch/powerpc/util/Build
-perf-y += kvm-stat.o
+perf-$(CONFIG_LIBTRACEEVENT) += kvm-stat.o
</quote>
Then, ditto for arm64 and s390, detected by container cross build tests.
- s/390 uses test__checkevent_tracepoint() that is now only available if
HAVE_LIBTRACEEVENT is defined, enclose the callsite with ifder HAVE_LIBTRACEEVENT.
Also from Athira:
<quote>
With this change, I could successfully compile in these environment:
- Without libtraceevent-devel installed
- With libtraceevent-devel installed
- With “make NO_LIBTRACEEVENT=1”
</quote>
Then, finally rename CONFIG_TRACEEVENT to CONFIG_LIBTRACEEVENT for
consistency with other libraries detected in tools/perf/.
Signed-off-by: Ian Rogers <irogers@google.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Tested-by: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Nick Desaulniers <ndesaulniers@google.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Cc: bpf@vger.kernel.org
Link: http://lore.kernel.org/lkml/20221205225940.3079667-3-irogers@google.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2022-12-05 15:59:39 -07:00
|
|
|
endif
|
|
|
|
|
2024-06-25 14:41:15 -07:00
|
|
|
perf-util-y += data-convert-json.o
|
perf data: Add perf data to CTF conversion support
Adding 'perf data convert' to convert perf data file into different
format. This patch adds support for CTF format conversion.
To convert perf.data into CTF run:
$ perf data convert --to-ctf=./ctf-data/
[ perf data convert: Converted 'perf.data' into CTF data './ctf-data/' ]
[ perf data convert: Converted and wrote 11.268 MB (100230 samples) ]
The command will create CTF metadata out of perf.data file (or one
specified via -i option) and then convert all sample events into single
CTF stream.
Each sample_type bit is translated into separated CTF event field apart
from following exceptions:
PERF_SAMPLE_RAW - added in next patch
PERF_SAMPLE_READ - TODO
PERF_SAMPLE_CALLCHAIN - TODO
PERF_SAMPLE_BRANCH_STACK - TODO
PERF_SAMPLE_REGS_USER - TODO
PERF_SAMPLE_STACK_USER - TODO
$ perf --debug=data-convert=2 data convert ...
The converted CTF data could be analyzed by CTF tools, like babletrace
or tracecompass [1].
$ babeltrace ./ctf-data/
[03:19:13.962125533] (+?.?????????) cycles: { }, { ip = 0xFFFFFFFF8105443A, tid = 20714, pid = 20714, period = 1 }
[03:19:13.962130001] (+0.000004468) cycles: { }, { ip = 0xFFFFFFFF8105443A, tid = 20714, pid = 20714, period = 1 }
[03:19:13.962131936] (+0.000001935) cycles: { }, { ip = 0xFFFFFFFF8105443A, tid = 20714, pid = 20714, period = 8 }
[03:19:13.962133732] (+0.000001796) cycles: { }, { ip = 0xFFFFFFFF8105443A, tid = 20714, pid = 20714, period = 114 }
[03:19:13.962135557] (+0.000001825) cycles: { }, { ip = 0xFFFFFFFF8105443A, tid = 20714, pid = 20714, period = 2087 }
[03:19:13.962137627] (+0.000002070) cycles: { }, { ip = 0xFFFFFFFF81361938, tid = 20714, pid = 20714, period = 37582 }
[03:19:13.962161091] (+0.000023464) cycles: { }, { ip = 0xFFFFFFFF8124218F, tid = 20714, pid = 20714, period = 600246 }
[03:19:13.962517569] (+0.000356478) cycles: { }, { ip = 0xFFFFFFFF811A75DB, tid = 20714, pid = 20714, period = 1325731 }
[03:19:13.969518008] (+0.007000439) cycles: { }, { ip = 0x34080917B2, tid = 20714, pid = 20714, period = 1144298 }
The following members to the ctf-environment were decided to be added to
distinguish and specify perf CTF data:
- domain
It says "kernel" because it contains a kernel trace (not to be
confused with a user space like lttng-ust does)
- tracer_name
It says perf. This can be used to distinguish between lttng and perf
CTF based trace.
- version
The kernel version from stream. In addition to release, this is what
it looks like on a Debian kernel:
release = "3.14-1-amd64";
version = "3.14.0";
[1] http://projects.eclipse.org/projects/tools.tracecompass
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Reviewed-by: David Ahern <dsahern@gmail.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jeremie Galarneau <jgalar@efficios.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Cc: Tom Zanussi <tzanussi@gmail.com>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/r/1424470628-5969-4-git-send-email-jolsa@kernel.org
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2015-02-20 15:17:00 -07:00
|
|
|
|
2024-06-25 14:41:15 -07:00
|
|
|
perf-util-y += scripting-engines/
|
2014-12-30 05:11:32 -07:00
|
|
|
|
2024-06-25 14:41:15 -07:00
|
|
|
perf-util-$(CONFIG_ZLIB) += zlib.o
|
|
|
|
perf-util-$(CONFIG_LZMA) += lzma.o
|
|
|
|
perf-util-$(CONFIG_ZSTD) += zstd.o
|
2019-03-18 10:42:55 -07:00
|
|
|
|
2024-08-06 15:06:14 -07:00
|
|
|
perf-util-y += cap.o
|
2019-08-07 07:44:14 -07:00
|
|
|
|
2024-06-25 14:41:15 -07:00
|
|
|
perf-util-$(CONFIG_CXX_DEMANGLE) += demangle-cxx.o
|
|
|
|
perf-util-y += demangle-ocaml.o
|
|
|
|
perf-util-y += demangle-java.o
|
|
|
|
perf-util-y += demangle-rust.o
|
perf report: Support LLVM for addr2line()
In addition to the existing support for libbfd and calling out to
an external addr2line command, add support for using libllvm directly.
This is both faster than libbfd, and can be enabled in distro builds
(the LLVM license has an explicit provision for GPLv2 compatibility).
Thus, it is set as the primary choice if available.
As an example, running 'perf report' on a medium-size profile with
DWARF-based backtraces took 58 seconds with LLVM, 78 seconds with
libbfd, 153 seconds with external llvm-addr2line, and I got tired and
aborted the test after waiting for 55 minutes with external bfd
addr2line (which is the default for perf as compiled by distributions
today).
Evidently, for this case, the bfd addr2line process needs 18 seconds (on
a 5.2 GHz Zen 3) to load the .debug ELF in question, hits the 1-second
timeout and gets killed during initialization, getting restarted anew
every time. Having an in-process addr2line makes this much more robust.
As future extensions, libllvm can be used in many other places where
we currently use libbfd or other libraries:
- Symbol enumeration (in particular, for PE binaries).
- Demangling (including non-Itanium demangling, e.g. Microsoft
or Rust).
- Disassembling (perf annotate).
However, these are much less pressing; most people don't profile PE
binaries, and perf has non-bfd paths for ELF. The same with demangling;
the default _cxa_demangle path works fine for most users, and while bfd
objdump can be slow on large binaries, it is possible to use
--objdump=llvm-objdump to get the speed benefits. (It appears
LLVM-based demangling is very simple, should we want that.)
Tested with LLVM 14, 15, 16, 18 and 19. For some reason, LLVM 12 was not
correctly detected using feature_check, and thus was not tested.
Committer notes:
Added the name and a __maybe_unused to address:
1 13.50 almalinux:8 : FAIL gcc version 8.5.0 20210514 (Red Hat 8.5.0-22) (GCC)
util/srcline.c: In function 'dso__free_a2l':
util/srcline.c:184:20: error: parameter name omitted
void dso__free_a2l(struct dso *)
^~~~~~~~~~~~
make[3]: *** [/git/perf-6.11.0-rc3/tools/build/Makefile.build:158: util] Error 2
Signed-off-by: Steinar H. Gunderson <sesse@google.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Ian Rogers <irogers@google.com>
Link: https://lore.kernel.org/r/20240803152008.2818485-1-sesse@google.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2024-08-03 08:20:06 -07:00
|
|
|
perf-util-$(CONFIG_LIBLLVM) += llvm-c-helpers.o
|
2016-03-07 14:48:45 -07:00
|
|
|
|
2016-03-10 09:41:13 -07:00
|
|
|
ifdef CONFIG_JITDUMP
|
2024-06-25 14:41:15 -07:00
|
|
|
perf-util-$(CONFIG_LIBELF) += jitdump.o
|
|
|
|
perf-util-$(CONFIG_LIBELF) += genelf.o
|
|
|
|
perf-util-$(CONFIG_DWARF) += genelf_debug.o
|
2016-03-07 14:48:45 -07:00
|
|
|
endif
|
2014-12-30 05:30:04 -07:00
|
|
|
|
2024-06-25 14:41:15 -07:00
|
|
|
perf-util-y += perf-hooks.o
|
2016-11-26 00:03:28 -07:00
|
|
|
|
2024-06-25 14:41:15 -07:00
|
|
|
perf-util-$(CONFIG_LIBBPF) += bpf-event.o
|
|
|
|
perf-util-$(CONFIG_LIBBPF) += bpf-utils.o
|
perf tools: Handle PERF_RECORD_BPF_EVENT
This patch adds basic handling of PERF_RECORD_BPF_EVENT. Tracking of
PERF_RECORD_BPF_EVENT is OFF by default. Option --bpf-event is added to
turn it on.
Committer notes:
Add dummy machine__process_bpf_event() variant that returns zero for
systems without HAVE_LIBBPF_SUPPORT, such as Alpine Linux, unbreaking
the build in such systems.
Remove the needless include <machine.h> from bpf->event.h, provide just
forward declarations for the structs and unions in the parameters, to
reduce compilation time and needless rebuilds when machine.h gets
changed.
Committer testing:
When running with:
# perf record --bpf-event
On an older kernel where PERF_RECORD_BPF_EVENT and PERF_RECORD_KSYMBOL
is not present, we fallback to removing those two bits from
perf_event_attr, making the tool to continue to work on older kernels:
perf_event_attr:
size 112
{ sample_period, sample_freq } 4000
sample_type IP|TID|TIME|PERIOD
read_format ID
disabled 1
inherit 1
mmap 1
comm 1
freq 1
enable_on_exec 1
task 1
precise_ip 3
sample_id_all 1
exclude_guest 1
mmap2 1
comm_exec 1
ksymbol 1
bpf_event 1
------------------------------------------------------------
sys_perf_event_open: pid 5779 cpu 0 group_fd -1 flags 0x8
sys_perf_event_open failed, error -22
switching off bpf_event
------------------------------------------------------------
perf_event_attr:
size 112
{ sample_period, sample_freq } 4000
sample_type IP|TID|TIME|PERIOD
read_format ID
disabled 1
inherit 1
mmap 1
comm 1
freq 1
enable_on_exec 1
task 1
precise_ip 3
sample_id_all 1
exclude_guest 1
mmap2 1
comm_exec 1
ksymbol 1
------------------------------------------------------------
sys_perf_event_open: pid 5779 cpu 0 group_fd -1 flags 0x8
sys_perf_event_open failed, error -22
switching off ksymbol
------------------------------------------------------------
perf_event_attr:
size 112
{ sample_period, sample_freq } 4000
sample_type IP|TID|TIME|PERIOD
read_format ID
disabled 1
inherit 1
mmap 1
comm 1
freq 1
enable_on_exec 1
task 1
precise_ip 3
sample_id_all 1
exclude_guest 1
mmap2 1
comm_exec 1
------------------------------------------------------------
And then proceeds to work without those two features.
As passing --bpf-event is an explicit action performed by the user, perhaps we
should emit a warning telling that the kernel has no such feature, but this can
be done on top of this patch.
Now with a kernel that supports these events, start the 'record --bpf-event -a'
and then run 'perf trace sleep 10000' that will use the BPF
augmented_raw_syscalls.o prebuilt (for another kernel version even) and thus
should generate PERF_RECORD_BPF_EVENT events:
[root@quaco ~]# perf record -e dummy -a --bpf-event
^C[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0.713 MB perf.data ]
[root@quaco ~]# bpftool prog
13: cgroup_skb tag 7be49e3934a125ba gpl
loaded_at 2019-01-19T09:09:43-0300 uid 0
xlated 296B jited 229B memlock 4096B map_ids 13,14
14: cgroup_skb tag 2a142ef67aaad174 gpl
loaded_at 2019-01-19T09:09:43-0300 uid 0
xlated 296B jited 229B memlock 4096B map_ids 13,14
15: cgroup_skb tag 7be49e3934a125ba gpl
loaded_at 2019-01-19T09:09:43-0300 uid 0
xlated 296B jited 229B memlock 4096B map_ids 15,16
16: cgroup_skb tag 2a142ef67aaad174 gpl
loaded_at 2019-01-19T09:09:43-0300 uid 0
xlated 296B jited 229B memlock 4096B map_ids 15,16
17: cgroup_skb tag 7be49e3934a125ba gpl
loaded_at 2019-01-19T09:09:44-0300 uid 0
xlated 296B jited 229B memlock 4096B map_ids 17,18
18: cgroup_skb tag 2a142ef67aaad174 gpl
loaded_at 2019-01-19T09:09:44-0300 uid 0
xlated 296B jited 229B memlock 4096B map_ids 17,18
21: cgroup_skb tag 7be49e3934a125ba gpl
loaded_at 2019-01-19T09:09:45-0300 uid 0
xlated 296B jited 229B memlock 4096B map_ids 21,22
22: cgroup_skb tag 2a142ef67aaad174 gpl
loaded_at 2019-01-19T09:09:45-0300 uid 0
xlated 296B jited 229B memlock 4096B map_ids 21,22
31: tracepoint name sys_enter tag 12504ba9402f952f gpl
loaded_at 2019-01-19T09:19:56-0300 uid 0
xlated 512B jited 374B memlock 4096B map_ids 30,29,28
32: tracepoint name sys_exit tag c1bd85c092d6e4aa gpl
loaded_at 2019-01-19T09:19:56-0300 uid 0
xlated 256B jited 191B memlock 4096B map_ids 30,29
# perf report -D | grep PERF_RECORD_BPF_EVENT | nl
1 0 55834574849 0x4fc8 [0x18]: PERF_RECORD_BPF_EVENT bpf event with type 1, flags 0, id 13
2 0 60129542145 0x5118 [0x18]: PERF_RECORD_BPF_EVENT bpf event with type 1, flags 0, id 14
3 0 64424509441 0x5268 [0x18]: PERF_RECORD_BPF_EVENT bpf event with type 1, flags 0, id 15
4 0 68719476737 0x53b8 [0x18]: PERF_RECORD_BPF_EVENT bpf event with type 1, flags 0, id 16
5 0 73014444033 0x5508 [0x18]: PERF_RECORD_BPF_EVENT bpf event with type 1, flags 0, id 17
6 0 77309411329 0x5658 [0x18]: PERF_RECORD_BPF_EVENT bpf event with type 1, flags 0, id 18
7 0 90194313217 0x57a8 [0x18]: PERF_RECORD_BPF_EVENT bpf event with type 1, flags 0, id 21
8 0 94489280513 0x58f8 [0x18]: PERF_RECORD_BPF_EVENT bpf event with type 1, flags 0, id 22
9 7 620922484360 0xb6390 [0x30]: PERF_RECORD_BPF_EVENT bpf event with type 1, flags 0, id 29
10 7 620922486018 0xb6410 [0x30]: PERF_RECORD_BPF_EVENT bpf event with type 2, flags 0, id 29
11 7 620922579199 0xb6490 [0x30]: PERF_RECORD_BPF_EVENT bpf event with type 1, flags 0, id 30
12 7 620922580240 0xb6510 [0x30]: PERF_RECORD_BPF_EVENT bpf event with type 2, flags 0, id 30
13 7 620922765207 0xb6598 [0x30]: PERF_RECORD_BPF_EVENT bpf event with type 1, flags 0, id 31
14 7 620922874543 0xb6620 [0x30]: PERF_RECORD_BPF_EVENT bpf event with type 1, flags 0, id 32
#
There, the 31 and 32 tracepoint BPF programs put in place by 'perf trace'.
Signed-off-by: Song Liu <songliubraving@fb.com>
Reviewed-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Alexei Starovoitov <ast@kernel.org>
Cc: Daniel Borkmann <daniel@iogearbox.net>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: kernel-team@fb.com
Cc: netdev@vger.kernel.org
Link: http://lkml.kernel.org/r/20190117161521.1341602-7-songliubraving@fb.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2019-01-17 09:15:18 -07:00
|
|
|
|
2024-06-25 14:41:15 -07:00
|
|
|
perf-util-$(CONFIG_LIBPFM4) += pfm.o
|
2020-05-05 11:29:43 -07:00
|
|
|
|
2014-12-29 09:42:46 -07:00
|
|
|
CFLAGS_config.o += -DETC_PERFCONFIG="BUILD_STR($(ETC_PERFCONFIG_SQ))"
|
2018-05-04 06:37:27 -07:00
|
|
|
|
2015-11-30 02:02:23 -07:00
|
|
|
# avoid compiler warnings in 32-bit mode
|
|
|
|
CFLAGS_genelf_debug.o += -Wno-packed
|
2014-12-29 09:42:46 -07:00
|
|
|
|
2020-06-18 21:33:51 -07:00
|
|
|
$(OUTPUT)util/parse-events-flex.c $(OUTPUT)util/parse-events-flex.h: util/parse-events.l $(OUTPUT)util/parse-events-bison.c
|
2014-12-30 10:44:38 -07:00
|
|
|
$(call rule_mkdir)
|
2020-06-18 21:33:51 -07:00
|
|
|
$(Q)$(call echo-cmd,flex)$(FLEX) -o $(OUTPUT)util/parse-events-flex.c \
|
|
|
|
--header-file=$(OUTPUT)util/parse-events-flex.h $(PARSER_DEBUG_FLEX) $<
|
2014-12-29 09:42:46 -07:00
|
|
|
|
2020-06-18 21:33:52 -07:00
|
|
|
$(OUTPUT)util/parse-events-bison.c $(OUTPUT)util/parse-events-bison.h: util/parse-events.y
|
2014-12-30 10:44:38 -07:00
|
|
|
$(call rule_mkdir)
|
2023-06-27 11:10:23 -07:00
|
|
|
$(Q)$(call echo-cmd,bison)$(BISON) -v $< -d $(PARSER_DEBUG_BISON) $(BISON_FILE_PREFIX_MAP) $(BISON_FALLBACK_FLAGS) \
|
2020-06-18 21:33:52 -07:00
|
|
|
-o $(OUTPUT)util/parse-events-bison.c -p parse_events_
|
2014-12-29 09:42:46 -07:00
|
|
|
|
2020-06-18 21:33:51 -07:00
|
|
|
$(OUTPUT)util/expr-flex.c $(OUTPUT)util/expr-flex.h: util/expr.l $(OUTPUT)util/expr-bison.c
|
2020-02-28 02:36:13 -07:00
|
|
|
$(call rule_mkdir)
|
2020-06-18 21:33:51 -07:00
|
|
|
$(Q)$(call echo-cmd,flex)$(FLEX) -o $(OUTPUT)util/expr-flex.c \
|
|
|
|
--header-file=$(OUTPUT)util/expr-flex.h $(PARSER_DEBUG_FLEX) $<
|
2020-02-28 02:36:13 -07:00
|
|
|
|
2020-06-18 21:33:52 -07:00
|
|
|
$(OUTPUT)util/expr-bison.c $(OUTPUT)util/expr-bison.h: util/expr.y
|
2017-03-20 13:17:05 -07:00
|
|
|
$(call rule_mkdir)
|
2021-05-24 04:15:14 -07:00
|
|
|
$(Q)$(call echo-cmd,bison)$(BISON) -v $< -d $(PARSER_DEBUG_BISON) $(BISON_FILE_PREFIX_MAP) \
|
2020-06-18 21:33:52 -07:00
|
|
|
-o $(OUTPUT)util/expr-bison.c -p expr_
|
2017-03-20 13:17:05 -07:00
|
|
|
|
2020-06-18 21:33:51 -07:00
|
|
|
$(OUTPUT)util/pmu-flex.c $(OUTPUT)util/pmu-flex.h: util/pmu.l $(OUTPUT)util/pmu-bison.c
|
2014-12-30 10:44:38 -07:00
|
|
|
$(call rule_mkdir)
|
2020-06-18 21:33:51 -07:00
|
|
|
$(Q)$(call echo-cmd,flex)$(FLEX) -o $(OUTPUT)util/pmu-flex.c \
|
|
|
|
--header-file=$(OUTPUT)util/pmu-flex.h $(PARSER_DEBUG_FLEX) $<
|
2014-12-29 09:42:46 -07:00
|
|
|
|
2020-06-18 21:33:52 -07:00
|
|
|
$(OUTPUT)util/pmu-bison.c $(OUTPUT)util/pmu-bison.h: util/pmu.y
|
2014-12-30 10:44:38 -07:00
|
|
|
$(call rule_mkdir)
|
2021-05-24 04:15:14 -07:00
|
|
|
$(Q)$(call echo-cmd,bison)$(BISON) -v $< -d $(PARSER_DEBUG_BISON) $(BISON_FILE_PREFIX_MAP) \
|
2020-06-18 21:33:52 -07:00
|
|
|
-o $(OUTPUT)util/pmu-bison.c -p perf_pmu_
|
2014-12-29 09:42:46 -07:00
|
|
|
|
2024-08-26 15:10:43 -07:00
|
|
|
$(OUTPUT)util/bpf-filter-flex.c $(OUTPUT)util/bpf-filter-flex.h: util/bpf-filter.l $(OUTPUT)util/bpf-filter-bison.c util/bpf-filter.h util/bpf_skel/sample-filter.h
|
2023-03-14 16:42:28 -07:00
|
|
|
$(call rule_mkdir)
|
|
|
|
$(Q)$(call echo-cmd,flex)$(FLEX) -o $(OUTPUT)util/bpf-filter-flex.c \
|
|
|
|
--header-file=$(OUTPUT)util/bpf-filter-flex.h $(PARSER_DEBUG_FLEX) $<
|
|
|
|
|
2024-08-26 15:10:43 -07:00
|
|
|
$(OUTPUT)util/bpf-filter-bison.c $(OUTPUT)util/bpf-filter-bison.h: util/bpf-filter.y util/bpf-filter.h util/bpf_skel/sample-filter.h
|
2023-03-14 16:42:28 -07:00
|
|
|
$(call rule_mkdir)
|
|
|
|
$(Q)$(call echo-cmd,bison)$(BISON) -v $< -d $(PARSER_DEBUG_BISON) $(BISON_FILE_PREFIX_MAP) \
|
|
|
|
-o $(OUTPUT)util/bpf-filter-bison.c -p perf_bpf_filter_
|
|
|
|
|
2023-07-27 23:49:15 -07:00
|
|
|
FLEX_VERSION := $(shell $(FLEX) --version | cut -d' ' -f2)
|
|
|
|
|
|
|
|
FLEX_GE_260 := $(call version-ge3,$(FLEX_VERSION),2.6.0)
|
|
|
|
ifeq ($(FLEX_GE_260),1)
|
|
|
|
flex_flags := -Wno-redundant-decls -Wno-switch-default -Wno-unused-function -Wno-misleading-indentation
|
|
|
|
|
|
|
|
# Some newer clang and gcc version complain about this
|
|
|
|
# util/parse-events-bison.c:1317:9: error: variable 'parse_events_nerrs' set but not used [-Werror,-Wunused-but-set-variable]
|
|
|
|
# int yynerrs = 0;
|
|
|
|
|
|
|
|
flex_flags += -Wno-unused-but-set-variable
|
|
|
|
|
|
|
|
FLEX_LT_262 := $(call version-lt3,$(FLEX_VERSION),2.6.2)
|
|
|
|
ifeq ($(FLEX_LT_262),1)
|
|
|
|
flex_flags += -Wno-sign-compare
|
2020-06-18 21:33:53 -07:00
|
|
|
endif
|
|
|
|
else
|
|
|
|
flex_flags := -w
|
|
|
|
endif
|
2023-07-27 23:49:15 -07:00
|
|
|
|
2023-07-27 23:49:16 -07:00
|
|
|
# Some newer clang and gcc version complain about this
|
|
|
|
# util/parse-events-bison.c:1317:9: error: variable 'parse_events_nerrs' set but not used [-Werror,-Wunused-but-set-variable]
|
|
|
|
# int yynerrs = 0;
|
|
|
|
|
|
|
|
bison_flags := -DYYENABLE_NLS=0 -Wno-unused-but-set-variable
|
2023-08-10 07:46:20 -07:00
|
|
|
|
|
|
|
# Old clangs don't grok -Wno-unused-but-set-variable, remove it
|
|
|
|
ifeq ($(CC_NO_CLANG), 0)
|
|
|
|
CLANG_VERSION := $(shell $(CLANG) --version | head -1 | sed 's/.*clang version \([[:digit:]]\+.[[:digit:]]\+.[[:digit:]]\+\).*/\1/g')
|
|
|
|
ifeq ($(call version-lt3,$(CLANG_VERSION),13.0.0),1)
|
|
|
|
bison_flags := $(subst -Wno-unused-but-set-variable,,$(bison_flags))
|
|
|
|
flex_flags := $(subst -Wno-unused-but-set-variable,,$(flex_flags))
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
2023-07-27 23:49:16 -07:00
|
|
|
BISON_GE_382 := $(shell expr $(shell $(BISON) --version | grep bison | sed -e 's/.\+ \([0-9]\+\).\([0-9]\+\).\([0-9]\+\)/\1\2\3/g') \>\= 382)
|
|
|
|
ifeq ($(BISON_GE_382),1)
|
|
|
|
bison_flags += -Wno-switch-enum
|
2020-06-18 21:33:56 -07:00
|
|
|
else
|
|
|
|
bison_flags += -w
|
|
|
|
endif
|
2023-07-28 13:26:54 -07:00
|
|
|
|
|
|
|
BISON_LT_381 := $(shell expr $(shell $(BISON) --version | grep bison | sed -e 's/.\+ \([0-9]\+\).\([0-9]\+\).\([0-9]\+\)/\1\2\3/g') \< 381)
|
|
|
|
ifeq ($(BISON_LT_381),1)
|
|
|
|
bison_flags += -DYYNOMEM=YYABORT
|
|
|
|
endif
|
|
|
|
|
2023-08-11 11:26:11 -07:00
|
|
|
CFLAGS_parse-events-flex.o += $(flex_flags) -Wno-unused-label
|
2023-08-10 07:46:20 -07:00
|
|
|
CFLAGS_pmu-flex.o += $(flex_flags)
|
|
|
|
CFLAGS_expr-flex.o += $(flex_flags)
|
|
|
|
CFLAGS_bpf-filter-flex.o += $(flex_flags)
|
|
|
|
|
2020-06-18 21:33:56 -07:00
|
|
|
CFLAGS_parse-events-bison.o += $(bison_flags)
|
|
|
|
CFLAGS_pmu-bison.o += -DYYLTYPE_IS_TRIVIAL=0 $(bison_flags)
|
|
|
|
CFLAGS_expr-bison.o += -DYYLTYPE_IS_TRIVIAL=0 $(bison_flags)
|
2023-03-14 16:42:28 -07:00
|
|
|
CFLAGS_bpf-filter-bison.o += -DYYLTYPE_IS_TRIVIAL=0 $(bison_flags)
|
2014-12-29 09:42:46 -07:00
|
|
|
|
|
|
|
$(OUTPUT)util/parse-events.o: $(OUTPUT)util/parse-events-flex.c $(OUTPUT)util/parse-events-bison.c
|
|
|
|
$(OUTPUT)util/pmu.o: $(OUTPUT)util/pmu-flex.c $(OUTPUT)util/pmu-bison.c
|
2020-02-28 02:36:13 -07:00
|
|
|
$(OUTPUT)util/expr.o: $(OUTPUT)util/expr-flex.c $(OUTPUT)util/expr-bison.c
|
2023-03-14 16:42:28 -07:00
|
|
|
$(OUTPUT)util/bpf-filter.o: $(OUTPUT)util/bpf-filter-flex.c $(OUTPUT)util/bpf-filter-bison.c
|
2014-12-29 09:42:46 -07:00
|
|
|
|
2016-01-08 08:33:37 -07:00
|
|
|
CFLAGS_bitmap.o += -Wno-unused-parameter -DETC_PERFCONFIG="BUILD_STR($(ETC_PERFCONFIG_SQ))"
|
2016-01-08 06:46:52 -07:00
|
|
|
CFLAGS_find_bit.o += -Wno-unused-parameter -DETC_PERFCONFIG="BUILD_STR($(ETC_PERFCONFIG_SQ))"
|
2014-12-29 09:42:46 -07:00
|
|
|
CFLAGS_rbtree.o += -Wno-unused-parameter -DETC_PERFCONFIG="BUILD_STR($(ETC_PERFCONFIG_SQ))"
|
2015-11-16 07:36:29 -07:00
|
|
|
CFLAGS_libstring.o += -Wno-unused-parameter -DETC_PERFCONFIG="BUILD_STR($(ETC_PERFCONFIG_SQ))"
|
2014-12-29 09:42:46 -07:00
|
|
|
CFLAGS_hweight.o += -Wno-unused-parameter -DETC_PERFCONFIG="BUILD_STR($(ETC_PERFCONFIG_SQ))"
|
2017-01-16 08:22:37 -07:00
|
|
|
CFLAGS_header.o += -include $(OUTPUT)PERF-VERSION-FILE
|
2023-11-21 12:29:56 -07:00
|
|
|
CFLAGS_arm-spe.o += -I$(srctree)/tools/arch/arm64/include/ -I$(OUTPUT)arch/arm64/include/generated/
|
2014-12-29 09:42:46 -07:00
|
|
|
|
2019-06-26 11:27:58 -07:00
|
|
|
$(OUTPUT)util/argv_split.o: ../lib/argv_split.c FORCE
|
|
|
|
$(call rule_mkdir)
|
|
|
|
$(call if_changed_dep,cc_o_c)
|
|
|
|
|
2016-01-08 08:33:37 -07:00
|
|
|
$(OUTPUT)util/bitmap.o: ../lib/bitmap.c FORCE
|
|
|
|
$(call rule_mkdir)
|
|
|
|
$(call if_changed_dep,cc_o_c)
|
|
|
|
|
tools perf: Move from sane_ctype.h obtained from git to the Linux's original
We got the sane_ctype.h headers from git and kept using it so far, but
since that code originally came from the kernel sources to the git
sources, perhaps its better to just use the one in the kernel, so that
we can leverage tools/perf/check_headers.sh to be notified when our copy
gets out of sync, i.e. when fixes or goodies are added to the code we've
copied.
This will help with things like tools/lib/string.c where we want to have
more things in common with the kernel, such as strim(), skip_spaces(),
etc so as to go on removing the things that we have in tools/perf/util/
and instead using the code in the kernel, indirectly and removing things
like EXPORT_SYMBOL(), etc, getting notified when fixes and improvements
are made to the original code.
Hopefully this also should help with reducing the difference of code
hosted in tools/ to the one in the kernel proper.
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Link: https://lkml.kernel.org/n/tip-7k9868l713wqtgo01xxygn12@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2019-06-25 13:27:31 -07:00
|
|
|
$(OUTPUT)util/ctype.o: ../lib/ctype.c FORCE
|
|
|
|
$(call rule_mkdir)
|
|
|
|
$(call if_changed_dep,cc_o_c)
|
|
|
|
|
2016-01-08 06:46:52 -07:00
|
|
|
$(OUTPUT)util/find_bit.o: ../lib/find_bit.c FORCE
|
2014-12-30 10:44:38 -07:00
|
|
|
$(call rule_mkdir)
|
2014-12-29 09:42:46 -07:00
|
|
|
$(call if_changed_dep,cc_o_c)
|
|
|
|
|
2015-07-05 18:48:21 -07:00
|
|
|
$(OUTPUT)util/rbtree.o: ../lib/rbtree.c FORCE
|
2014-12-30 10:44:38 -07:00
|
|
|
$(call rule_mkdir)
|
2014-12-29 09:42:46 -07:00
|
|
|
$(call if_changed_dep,cc_o_c)
|
|
|
|
|
2015-11-16 07:36:29 -07:00
|
|
|
$(OUTPUT)util/libstring.o: ../lib/string.c FORCE
|
|
|
|
$(call rule_mkdir)
|
|
|
|
$(call if_changed_dep,cc_o_c)
|
|
|
|
|
2015-07-09 12:27:25 -07:00
|
|
|
$(OUTPUT)util/hweight.o: ../lib/hweight.c FORCE
|
2014-12-30 10:44:38 -07:00
|
|
|
$(call rule_mkdir)
|
2014-12-29 09:42:46 -07:00
|
|
|
$(call if_changed_dep,cc_o_c)
|
2016-07-07 11:42:33 -07:00
|
|
|
|
|
|
|
$(OUTPUT)util/vsprintf.o: ../lib/vsprintf.c FORCE
|
|
|
|
$(call rule_mkdir)
|
|
|
|
$(call if_changed_dep,cc_o_c)
|
2021-10-15 10:21:12 -07:00
|
|
|
|
|
|
|
$(OUTPUT)util/list_sort.o: ../lib/list_sort.c FORCE
|
|
|
|
$(call rule_mkdir)
|
|
|
|
$(call if_changed_dep,cc_o_c)
|
2024-04-08 19:32:15 -07:00
|
|
|
|
|
|
|
ifdef SHELLCHECK
|
|
|
|
SHELL_TESTS := generate-cmdlist.sh
|
|
|
|
TEST_LOGS := $(SHELL_TESTS:%=%.shellcheck_log)
|
|
|
|
else
|
|
|
|
SHELL_TESTS :=
|
|
|
|
TEST_LOGS :=
|
|
|
|
endif
|
|
|
|
|
|
|
|
$(OUTPUT)%.shellcheck_log: %
|
|
|
|
$(call rule_mkdir)
|
|
|
|
$(Q)$(call echo-cmd,test)shellcheck -a -S warning "$<" > $@ || (cat $@ && rm $@ && false)
|
|
|
|
|
2024-06-25 14:41:15 -07:00
|
|
|
perf-util-y += $(TEST_LOGS)
|