make 3.7 KB
Newer Older
1 2 3
PERF := .
MK   := Makefile

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

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
# 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

# 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_minimal

61 62 63 64 65 66 67
ifneq ($(call has,ctags),)
run += make_tags
endif
ifneq ($(call has,cscope),)
run += make_cscope
endif

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
# $(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

# 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))

105
test_default_O = test -x $$TMP_O/perf
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
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)
	@cmd="cd $(PERF) && make -f $(MK) $($@)"; \
	echo "- $@: $$cmd" && echo $$cmd > $@ && \
	( eval $$cmd ) >> $@ 2>&1; \
	echo "  test: $(call test,$@)"; \
	$(call test,$@) && \
	rm -f $@

$(run_O):
	$(call clean)
130 131
	@TMP_O=$$(mktemp -d); \
	cmd="cd $(PERF) && make -f $(MK) $($(patsubst %_O,%,$@)) O=$$TMP_O"; \
132 133 134 135 136
	echo "- $@: $$cmd" && echo $$cmd > $@ && \
	( eval $$cmd ) >> $@ 2>&1 && \
	echo "  test: $(call test_O,$@)"; \
	$(call test_O,$@) && \
	rm -f $@ && \
137
	rm -rf $$TMP_O
138 139 140 141 142 143 144 145

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

out: $(run_O)
	@echo OK

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