2014-12-30 00:42:46 +08:00
|
|
|
libperf-y += abspath.o
|
|
|
|
libperf-y += alias.o
|
|
|
|
libperf-y += annotate.o
|
|
|
|
libperf-y += build-id.o
|
|
|
|
libperf-y += config.o
|
|
|
|
libperf-y += ctype.o
|
|
|
|
libperf-y += db-export.o
|
2015-09-09 00:30:00 +08:00
|
|
|
libperf-y += env.o
|
2014-12-30 00:42:46 +08:00
|
|
|
libperf-y += environment.o
|
|
|
|
libperf-y += event.o
|
|
|
|
libperf-y += evlist.o
|
|
|
|
libperf-y += evsel.o
|
|
|
|
libperf-y += exec_cmd.o
|
|
|
|
libperf-y += find_next_bit.o
|
|
|
|
libperf-y += help.o
|
|
|
|
libperf-y += kallsyms.o
|
|
|
|
libperf-y += levenshtein.o
|
2015-07-21 19:13:34 +08:00
|
|
|
libperf-y += llvm-utils.o
|
2014-12-30 00:42:46 +08:00
|
|
|
libperf-y += parse-options.o
|
|
|
|
libperf-y += parse-events.o
|
2015-09-25 05:53:49 +08:00
|
|
|
libperf-y += perf_regs.o
|
2014-12-30 00:42:46 +08:00
|
|
|
libperf-y += path.o
|
|
|
|
libperf-y += rbtree.o
|
|
|
|
libperf-y += bitmap.o
|
|
|
|
libperf-y += hweight.o
|
|
|
|
libperf-y += run-command.o
|
|
|
|
libperf-y += quote.o
|
|
|
|
libperf-y += strbuf.o
|
|
|
|
libperf-y += string.o
|
|
|
|
libperf-y += strlist.o
|
|
|
|
libperf-y += strfilter.o
|
|
|
|
libperf-y += top.o
|
|
|
|
libperf-y += usage.o
|
|
|
|
libperf-y += wrapper.o
|
|
|
|
libperf-y += sigchain.o
|
|
|
|
libperf-y += dso.o
|
|
|
|
libperf-y += symbol.o
|
|
|
|
libperf-y += color.o
|
|
|
|
libperf-y += pager.o
|
|
|
|
libperf-y += header.o
|
|
|
|
libperf-y += callchain.o
|
|
|
|
libperf-y += values.o
|
|
|
|
libperf-y += debug.o
|
|
|
|
libperf-y += machine.o
|
|
|
|
libperf-y += map.o
|
|
|
|
libperf-y += pstack.o
|
|
|
|
libperf-y += session.o
|
|
|
|
libperf-y += ordered-events.o
|
|
|
|
libperf-y += comm.o
|
|
|
|
libperf-y += thread.o
|
|
|
|
libperf-y += thread_map.o
|
|
|
|
libperf-y += trace-event-parse.o
|
|
|
|
libperf-y += parse-events-flex.o
|
|
|
|
libperf-y += parse-events-bison.o
|
|
|
|
libperf-y += pmu.o
|
|
|
|
libperf-y += pmu-flex.o
|
|
|
|
libperf-y += pmu-bison.o
|
|
|
|
libperf-y += trace-event-read.o
|
|
|
|
libperf-y += trace-event-info.o
|
|
|
|
libperf-y += trace-event-scripting.o
|
|
|
|
libperf-y += trace-event.o
|
|
|
|
libperf-y += svghelper.o
|
|
|
|
libperf-y += sort.o
|
|
|
|
libperf-y += hist.o
|
|
|
|
libperf-y += util.o
|
|
|
|
libperf-y += xyarray.o
|
|
|
|
libperf-y += cpumap.o
|
|
|
|
libperf-y += cgroup.o
|
|
|
|
libperf-y += target.o
|
|
|
|
libperf-y += rblist.o
|
|
|
|
libperf-y += intlist.o
|
|
|
|
libperf-y += vdso.o
|
2015-08-07 18:51:03 +08:00
|
|
|
libperf-y += counts.o
|
2014-12-30 00:42:46 +08:00
|
|
|
libperf-y += stat.o
|
2015-06-03 22:25:59 +08:00
|
|
|
libperf-y += stat-shadow.o
|
2014-12-30 00:42:46 +08:00
|
|
|
libperf-y += record.o
|
|
|
|
libperf-y += srcline.o
|
|
|
|
libperf-y += data.o
|
2015-02-20 02:22:33 +08:00
|
|
|
libperf-$(CONFIG_X86) += tsc.o
|
2015-09-01 02:39:44 +08:00
|
|
|
libperf-$(CONFIG_AUXTRACE) += tsc.o
|
2014-12-30 00:42:46 +08:00
|
|
|
libperf-y += cloexec.o
|
|
|
|
libperf-y += thread-stack.o
|
2015-04-30 22:37:27 +08:00
|
|
|
libperf-$(CONFIG_AUXTRACE) += auxtrace.o
|
2015-07-18 00:33:37 +08:00
|
|
|
libperf-$(CONFIG_AUXTRACE) += intel-pt-decoder/
|
2015-07-18 00:33:41 +08:00
|
|
|
libperf-$(CONFIG_AUXTRACE) += intel-pt.o
|
perf tools: Add Intel BTS support
Intel BTS support fits within the new auxtrace infrastructure. Recording is
supporting by identifying the Intel BTS PMU, parsing options and setting up
events.
Decoding is supported by queuing up trace data by thread and then decoding
synchronously delivering synthesized event samples into the session processing
for tools to consume.
Committer note:
E.g:
[root@felicio ~]# perf record --per-thread -e intel_bts// ls
anaconda-ks.cfg apctest.output bin kernel-rt-3.10.0-298.rt56.171.el7.x86_64.rpm libexec lock_page.bpf.c perf.data perf.data.old
[ perf record: Woken up 3 times to write data ]
[ perf record: Captured and wrote 4.367 MB perf.data ]
[root@felicio ~]# perf evlist -v
intel_bts//: type: 6, size: 112, { sample_period, sample_freq }: 1, sample_type: IP|TID|IDENTIFIER, read_format: ID, disabled: 1, enable_on_exec: 1, sample_id_all: 1, exclude_guest: 1
dummy:u: type: 1, size: 112, config: 0x9, { sample_period, sample_freq }: 1, sample_type: IP|TID|IDENTIFIER, read_format: ID, disabled: 1, exclude_kernel: 1, exclude_hv: 1, mmap: 1, comm: 1, enable_on_exec: 1, task: 1, sample_id_all: 1, mmap2: 1, comm_exec: 1
[root@felicio ~]# perf script # the navigate in the pager to some interesting place:
ls 1843 1 branches: ffffffff810a60cb flush_signal_handlers ([kernel.kallsyms]) => ffffffff8121a522 setup_new_exec ([kernel.kallsyms])
ls 1843 1 branches: ffffffff8121a529 setup_new_exec ([kernel.kallsyms]) => ffffffff8122fa30 do_close_on_exec ([kernel.kallsyms])
ls 1843 1 branches: ffffffff8122fa5d do_close_on_exec ([kernel.kallsyms]) => ffffffff81767ae0 _raw_spin_lock ([kernel.kallsyms])
ls 1843 1 branches: ffffffff81767af4 _raw_spin_lock ([kernel.kallsyms]) => ffffffff8122fa62 do_close_on_exec ([kernel.kallsyms])
ls 1843 1 branches: ffffffff8122fa8e do_close_on_exec ([kernel.kallsyms]) => ffffffff8122faf0 do_close_on_exec ([kernel.kallsyms])
ls 1843 1 branches: ffffffff8122faf7 do_close_on_exec ([kernel.kallsyms]) => ffffffff8122fa8b do_close_on_exec ([kernel.kallsyms])
ls 1843 1 branches: ffffffff8122fa8e do_close_on_exec ([kernel.kallsyms]) => ffffffff8122faf0 do_close_on_exec ([kernel.kallsyms])
ls 1843 1 branches: ffffffff8122faf7 do_close_on_exec ([kernel.kallsyms]) => ffffffff8122fa8b do_close_on_exec ([kernel.kallsyms])
ls 1843 1 branches: ffffffff8122fa8e do_close_on_exec ([kernel.kallsyms]) => ffffffff8122faf0 do_close_on_exec ([kernel.kallsyms])
ls 1843 1 branches: ffffffff8122faf7 do_close_on_exec ([kernel.kallsyms]) => ffffffff8122fa8b do_close_on_exec ([kernel.kallsyms])
ls 1843 1 branches: ffffffff8122fa8e do_close_on_exec ([kernel.kallsyms]) => ffffffff8122faf0 do_close_on_exec ([kernel.kallsyms])
ls 1843 1 branches: ffffffff8122faf7 do_close_on_exec ([kernel.kallsyms]) => ffffffff8122fa8b do_close_on_exec ([kernel.kallsyms])
ls 1843 1 branches: ffffffff8122fa8e do_close_on_exec ([kernel.kallsyms]) => ffffffff8122faf0 do_close_on_exec ([kernel.kallsyms])
ls 1843 1 branches: ffffffff8122faf7 do_close_on_exec ([kernel.kallsyms]) => ffffffff8122fa8b do_close_on_exec ([kernel.kallsyms])
ls 1843 1 branches: ffffffff8122fa8e do_close_on_exec ([kernel.kallsyms]) => ffffffff8122faf0 do_close_on_exec ([kernel.kallsyms])
ls 1843 1 branches: ffffffff8122faf7 do_close_on_exec ([kernel.kallsyms]) => ffffffff8122fa8b do_close_on_exec ([kernel.kallsyms])
ls 1843 1 branches: ffffffff8122fac9 do_close_on_exec ([kernel.kallsyms]) => ffffffff8122fad2 do_close_on_exec ([kernel.kallsyms])
ls 1843 1 branches: ffffffff8122fadd do_close_on_exec ([kernel.kallsyms]) => ffffffff8120fc80 filp_close ([kernel.kallsyms])
ls 1843 1 branches: ffffffff8120fcaf filp_close ([kernel.kallsyms]) => ffffffff8120fcb6 filp_close ([kernel.kallsyms])
ls 1843 1 branches: ffffffff8120fcc2 filp_close ([kernel.kallsyms]) => ffffffff812547f0 dnotify_flush ([kernel.kallsyms])
ls 1843 1 branches: ffffffff81254823 dnotify_flush ([kernel.kallsyms]) => ffffffff8120fcc7 filp_close ([kernel.kallsyms])
ls 1843 1 branches: ffffffff8120fccd filp_close ([kernel.kallsyms]) => ffffffff81261790 locks_remove_posix ([kernel.kallsyms])
ls 1843 1 branches: ffffffff812617a3 locks_remove_posix ([kernel.kallsyms]) => ffffffff812617b9 locks_remove_posix ([kernel.kallsyms])
ls 1843 1 branches: ffffffff812617b9 locks_remove_posix ([kernel.kallsyms]) => ffffffff8120fcd2 filp_close ([kernel.kallsyms])
ls 1843 1 branches: ffffffff8120fcd5 filp_close ([kernel.kallsyms]) => ffffffff812142c0 fput ([kernel.kallsyms])
ls 1843 1 branches: ffffffff812142d6 fput ([kernel.kallsyms]) => ffffffff812142df fput ([kernel.kallsyms])
ls 1843 1 branches: ffffffff8121430c fput ([kernel.kallsyms]) => ffffffff810b6580 task_work_add ([kernel.kallsyms])
ls 1843 1 branches: ffffffff810b65ad task_work_add ([kernel.kallsyms]) => ffffffff810b65b1 task_work_add ([kernel.kallsyms])
ls 1843 1 branches: ffffffff810b65c1 task_work_add ([kernel.kallsyms]) => ffffffff810bc710 kick_process ([kernel.kallsyms])
ls 1843 1 branches: ffffffff810bc725 kick_process ([kernel.kallsyms]) => ffffffff810bc742 kick_process ([kernel.kallsyms])
ls 1843 1 branches: ffffffff810bc742 kick_process ([kernel.kallsyms]) => ffffffff810b65c6 task_work_add ([kernel.kallsyms])
ls 1843 1 branches: ffffffff810b65c9 task_work_add ([kernel.kallsyms]) => ffffffff81214311 fput ([kernel.kallsyms])
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Link: http://lkml.kernel.org/r/1437150840-31811-9-git-send-email-adrian.hunter@intel.com
[ Merged sample->time fix for bug found after first round of testing on slightly older kernel ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2015-07-18 00:33:43 +08:00
|
|
|
libperf-$(CONFIG_AUXTRACE) += intel-bts.o
|
2015-05-28 01:51:51 +08:00
|
|
|
libperf-y += parse-branch-options.o
|
perf record: Add ability to name registers to record
This patch modifies the -I/--int-regs option to enablepassing the name
of the registers to sample on interrupt. Registers can be specified by
their symbolic names. For instance on x86, --intr-regs=ax,si.
The motivation is to reduce the size of the perf.data file and the
overhead of sampling by only collecting the registers useful to a
specific analysis. For instance, for value profiling, sampling only the
registers used to passed arguements to functions.
With no parameter, the --intr-regs still records all possible registers
based on the architecture.
To name registers, it is necessary to use the long form of the option,
i.e., --intr-regs:
$ perf record --intr-regs=si,di,r8,r9 .....
To record any possible registers:
$ perf record -I .....
$ perf report --intr-regs ...
To display the register, one can use perf report -D
To list the available registers:
$ perf record --intr-regs=\?
available registers: AX BX CX DX SI DI BP SP IP FLAGS CS SS R8 R9 R10 R11 R12 R13 R14 R15
Signed-off-by: Stephane Eranian <eranian@google.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Kan Liang <kan.liang@intel.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/1441039273-16260-4-git-send-email-eranian@google.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2015-09-01 00:41:12 +08:00
|
|
|
libperf-y += parse-regs-options.o
|
2014-12-30 00:42:46 +08:00
|
|
|
|
2014-12-30 06:52:25 +08:00
|
|
|
libperf-$(CONFIG_LIBELF) += symbol-elf.o
|
2015-07-15 17:14:07 +08:00
|
|
|
libperf-$(CONFIG_LIBELF) += probe-file.o
|
2014-12-30 06:52:25 +08:00
|
|
|
libperf-$(CONFIG_LIBELF) += probe-event.o
|
|
|
|
|
|
|
|
ifndef CONFIG_LIBELF
|
|
|
|
libperf-y += symbol-minimal.o
|
|
|
|
endif
|
|
|
|
|
2014-12-30 07:06:25 +08:00
|
|
|
libperf-$(CONFIG_DWARF) += probe-finder.o
|
|
|
|
libperf-$(CONFIG_DWARF) += dwarf-aux.o
|
|
|
|
|
2014-12-30 07:11:11 +08:00
|
|
|
libperf-$(CONFIG_LIBDW_DWARF_UNWIND) += unwind-libdw.o
|
|
|
|
libperf-$(CONFIG_LIBUNWIND) += unwind-libunwind.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-21 06:17:00 +08:00
|
|
|
libperf-$(CONFIG_LIBBABELTRACE) += data-convert-bt.o
|
|
|
|
|
2014-12-30 20:11:32 +08:00
|
|
|
libperf-y += scripting-engines/
|
|
|
|
|
2014-12-30 20:31:12 +08:00
|
|
|
libperf-$(CONFIG_ZLIB) += zlib.o
|
2015-01-29 20:29:39 +08:00
|
|
|
libperf-$(CONFIG_LZMA) += lzma.o
|
2014-12-30 20:30:04 +08:00
|
|
|
|
2014-12-30 00:42:46 +08:00
|
|
|
CFLAGS_config.o += -DETC_PERFCONFIG="BUILD_STR($(ETC_PERFCONFIG_SQ))"
|
|
|
|
CFLAGS_exec_cmd.o += -DPERF_EXEC_PATH="BUILD_STR($(perfexecdir_SQ))" -DPREFIX="BUILD_STR($(prefix_SQ))"
|
|
|
|
|
|
|
|
$(OUTPUT)util/parse-events-flex.c: util/parse-events.l $(OUTPUT)util/parse-events-bison.c
|
2014-12-31 01:44:38 +08:00
|
|
|
$(call rule_mkdir)
|
2015-05-14 23:31:48 +08:00
|
|
|
$(Q)$(call echo-cmd,flex)$(FLEX) -o $@ --header-file=$(OUTPUT)util/parse-events-flex.h $(PARSER_DEBUG_FLEX) util/parse-events.l
|
2014-12-30 00:42:46 +08:00
|
|
|
|
|
|
|
$(OUTPUT)util/parse-events-bison.c: util/parse-events.y
|
2014-12-31 01:44:38 +08:00
|
|
|
$(call rule_mkdir)
|
2015-05-14 23:31:48 +08:00
|
|
|
$(Q)$(call echo-cmd,bison)$(BISON) -v util/parse-events.y -d $(PARSER_DEBUG_BISON) -o $@ -p parse_events_
|
2014-12-30 00:42:46 +08:00
|
|
|
|
|
|
|
$(OUTPUT)util/pmu-flex.c: util/pmu.l $(OUTPUT)util/pmu-bison.c
|
2014-12-31 01:44:38 +08:00
|
|
|
$(call rule_mkdir)
|
2015-05-14 23:31:48 +08:00
|
|
|
$(Q)$(call echo-cmd,flex)$(FLEX) -o $@ --header-file=$(OUTPUT)util/pmu-flex.h util/pmu.l
|
2014-12-30 00:42:46 +08:00
|
|
|
|
|
|
|
$(OUTPUT)util/pmu-bison.c: util/pmu.y
|
2014-12-31 01:44:38 +08:00
|
|
|
$(call rule_mkdir)
|
2015-05-14 23:31:48 +08:00
|
|
|
$(Q)$(call echo-cmd,bison)$(BISON) -v util/pmu.y -d -o $@ -p perf_pmu_
|
2014-12-30 00:42:46 +08:00
|
|
|
|
|
|
|
CFLAGS_parse-events-flex.o += -w
|
|
|
|
CFLAGS_pmu-flex.o += -w
|
2015-04-29 23:55:00 +08:00
|
|
|
CFLAGS_parse-events-bison.o += -DYYENABLE_NLS=0 -w
|
2014-12-30 00:42:46 +08:00
|
|
|
CFLAGS_pmu-bison.o += -DYYENABLE_NLS=0 -DYYLTYPE_IS_TRIVIAL=0 -w
|
|
|
|
|
|
|
|
$(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
|
|
|
|
|
|
|
|
CFLAGS_find_next_bit.o += -Wno-unused-parameter -DETC_PERFCONFIG="BUILD_STR($(ETC_PERFCONFIG_SQ))"
|
|
|
|
CFLAGS_rbtree.o += -Wno-unused-parameter -DETC_PERFCONFIG="BUILD_STR($(ETC_PERFCONFIG_SQ))"
|
|
|
|
CFLAGS_hweight.o += -Wno-unused-parameter -DETC_PERFCONFIG="BUILD_STR($(ETC_PERFCONFIG_SQ))"
|
|
|
|
CFLAGS_parse-events.o += -Wno-redundant-decls
|
|
|
|
|
|
|
|
$(OUTPUT)util/kallsyms.o: ../lib/symbol/kallsyms.c FORCE
|
2014-12-31 01:44:38 +08:00
|
|
|
$(call rule_mkdir)
|
2014-12-30 00:42:46 +08:00
|
|
|
$(call if_changed_dep,cc_o_c)
|
|
|
|
|
|
|
|
$(OUTPUT)util/find_next_bit.o: ../lib/util/find_next_bit.c FORCE
|
2014-12-31 01:44:38 +08:00
|
|
|
$(call rule_mkdir)
|
2014-12-30 00:42:46 +08:00
|
|
|
$(call if_changed_dep,cc_o_c)
|
|
|
|
|
2015-07-06 09:48:21 +08:00
|
|
|
$(OUTPUT)util/rbtree.o: ../lib/rbtree.c FORCE
|
2014-12-31 01:44:38 +08:00
|
|
|
$(call rule_mkdir)
|
2014-12-30 00:42:46 +08:00
|
|
|
$(call if_changed_dep,cc_o_c)
|
|
|
|
|
2015-07-10 03:27:25 +08:00
|
|
|
$(OUTPUT)util/hweight.o: ../lib/hweight.c FORCE
|
2014-12-31 01:44:38 +08:00
|
|
|
$(call rule_mkdir)
|
2014-12-30 00:42:46 +08:00
|
|
|
$(call if_changed_dep,cc_o_c)
|