summaryrefslogtreecommitdiff
path: root/tools/perf/tests/make
blob: 2ca0abf1b2b6090165a4ccdb091729da4e7a1c48 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
PERF := .
MK   := Makefile

has = $(shell which $1 2>/dev/null)

# standard single make variable specified
make_clean_all      := clean all
make_python_perf_so := python/perf.so
make_debug          := DEBUG=1
make_no_libperl     := NO_LIBPERL=1
make_no_libpython   := NO_LIBPYTHON=1
make_no_scripts     := NO_LIBPYTHON=1 NO_LIBPERL=1
make_no_newt        := NO_NEWT=1
make_no_slang       := NO_SLANG=1
make_no_gtk2        := NO_GTK2=1
make_no_ui          := NO_NEWT=1 NO_SLANG=1 NO_GTK2=1
make_no_demangle    := NO_DEMANGLE=1
make_no_libelf      := NO_LIBELF=1
make_no_libunwind   := NO_LIBUNWIND=1
make_no_backtrace   := NO_BACKTRACE=1
make_no_libnuma     := NO_LIBNUMA=1
make_no_libaudit    := NO_LIBAUDIT=1
make_no_libbionic   := NO_LIBBIONIC=1
make_tags           := tags
make_cscope         := cscope
make_help           := help
make_doc            := doc
make_perf_o         := perf.o
make_util_map_o     := util/map.o
make_install        := install
make_install_bin    := install-bin
make_install_doc    := install-doc
make_install_man    := install-man
make_install_html   := install-html
make_install_info   := install-info
make_install_pdf    := install-pdf

# all the NO_* variable combined
make_minimal        := NO_LIBPERL=1 NO_LIBPYTHON=1 NO_NEWT=1 NO_GTK2=1
make_minimal        += NO_DEMANGLE=1 NO_LIBELF=1 NO_LIBUNWIND=1 NO_BACKTRACE=1
make_minimal        += NO_LIBNUMA=1 NO_LIBAUDIT=1 NO_LIBBIONIC=1

# $(run) contains all available tests
run := make_pure
run += make_clean_all
run += make_python_perf_so
run += make_debug
run += make_no_libperl
run += make_no_libpython
run += make_no_scripts
run += make_no_newt
run += make_no_slang
run += make_no_gtk2
run += make_no_ui
run += make_no_demangle
run += make_no_libelf
run += make_no_libunwind
run += make_no_backtrace
run += make_no_libnuma
run += make_no_libaudit
run += make_no_libbionic
run += make_help
run += make_doc
run += make_perf_o
run += make_util_map_o
run += make_install
run += make_install_bin
# FIXME 'install-*' commented out till they're fixed
# run += make_install_doc
# run += make_install_man
# run += make_install_html
# run += make_install_info
# run += make_install_pdf
run += make_minimal

ifneq ($(call has,ctags),)
run += make_tags
endif
ifneq ($(call has,cscope),)
run += make_cscope
endif

# $(run_O) contains same portion of $(run) tests with '_O' attached
# to distinguish O=... tests
run_O := $(addsuffix _O,$(run))

# disable some tests for O=...
run_O := $(filter-out make_python_perf_so_O,$(run_O))

# define test for each compile as 'test_NAME' variable
# with the test itself as a value
test_make_tags   = test -f tags
test_make_cscope = test -f cscope.out

test_make_tags_O   := $(test_make_tags)
test_make_cscope_O := $(test_make_cscope)

test_ok          := true
test_make_help   := $(test_ok)
test_make_doc    := $(test_ok)
test_make_help_O := $(test_ok)
test_make_doc_O  := $(test_ok)

test_make_python_perf_so := test -f $(PERF)/python/perf.so

test_make_perf_o     := test -f $(PERF)/perf.o
test_make_util_map_o := test -f $(PERF)/util/map.o

test_make_install       := test -x $$TMP_DEST/bin/perf
test_make_install_O     := $(test_make_install)
test_make_install_bin   := $(test_make_install)
test_make_install_bin_O := $(test_make_install)

# FIXME nothing gets installed
test_make_install_man    := test -f $$TMP_DEST/share/man/man1/perf.1
test_make_install_man_O  := $(test_make_install_man)

# FIXME nothing gets installed
test_make_install_doc    := $(test_ok)
test_make_install_doc_O  := $(test_ok)

# FIXME nothing gets installed
test_make_install_html   := $(test_ok)
test_make_install_html_O := $(test_ok)

# FIXME nothing gets installed
test_make_install_info   := $(test_ok)
test_make_install_info_O := $(test_ok)

# FIXME nothing gets installed
test_make_install_pdf    := $(test_ok)
test_make_install_pdf_O  := $(test_ok)

# Kbuild tests only
#test_make_python_perf_so_O := test -f $$TMP/tools/perf/python/perf.so
#test_make_perf_o_O         := test -f $$TMP/tools/perf/perf.o
#test_make_util_map_o_O     := test -f $$TMP/tools/perf/util/map.o

test_make_perf_o_O     := true
test_make_util_map_o_O := true

test_default = test -x $(PERF)/perf
test = $(if $(test_$1),$(test_$1),$(test_default))

test_default_O = test -x $$TMP_O/perf
test_O = $(if $(test_$1),$(test_$1),$(test_default_O))

all:

ifdef DEBUG
d := $(info run   $(run))
d := $(info run_O $(run_O))
endif

MAKEFLAGS := --no-print-directory

clean := @(cd $(PERF); make -s -f $(MK) clean >/dev/null)

$(run):
	$(call clean)
	@TMP_DEST=$$(mktemp -d); \
	cmd="cd $(PERF) && make -f $(MK) DESTDIR=$$TMP_DEST $($@)"; \
	echo "- $@: $$cmd" && echo $$cmd > $@ && \
	( eval $$cmd ) >> $@ 2>&1; \
	echo "  test: $(call test,$@)"; \
	$(call test,$@) && \
	rm -f $@ \
	rm -rf $$TMP_DEST

$(run_O):
	$(call clean)
	@TMP_O=$$(mktemp -d); \
	TMP_DEST=$$(mktemp -d); \
	cmd="cd $(PERF) && make -f $(MK) O=$$TMP_O DESTDIR=$$TMP_DEST $($(patsubst %_O,%,$@))"; \
	echo "- $@: $$cmd" && echo $$cmd > $@ && \
	( eval $$cmd ) >> $@ 2>&1 && \
	echo "  test: $(call test_O,$@)"; \
	$(call test_O,$@) && \
	rm -f $@ && \
	rm -rf $$TMP_O \
	rm -rf $$TMP_DEST

all: $(run) $(run_O)
	@echo OK

out: $(run_O)
	@echo OK

.PHONY: all $(run) $(run_O) clean