Skip to content

Commit 168910d

Browse files
captain5050namhyung
authored andcommitted
perf build: Add mypy build tests
If MYPY=1 is passed to the build then run mypy over python code in perf. Unlike shellcheck this isn't default on as there are currently too many errors. An example of an error: ``` util/setup.py:8: error: Item "None" of "str | None" has no attribute "split" [union-attr] util/setup.py:15: error: Item "None" of "IO[bytes] | None" has no attribute "readline" [union-attr] util/setup.py:15: error: List item 0 has incompatible type "str | None"; expected "str | bytes | PathLike[str] | PathLike[bytes]" [list-item] util/setup.py:16: error: Unsupported left operand type for + ("None") [operator] util/setup.py:16: note: Left operand is of type "str | None" util/setup.py:74: error: Unsupported left operand type for + ("None") [operator] util/setup.py:74: note: Left operand is of type "str | None" Found 5 errors in 1 file (checked 1 source file) make[4]: *** [util/Build:430: util/setup.py.mypy_log] Error 1 ``` Reviewed-by: James Clark <[email protected]> Signed-off-by: Ian Rogers <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Namhyung Kim <[email protected]>
1 parent ef23810 commit 168910d

File tree

6 files changed

+71
-2
lines changed

6 files changed

+71
-2
lines changed

tools/perf/Build

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,3 +76,16 @@ $(OUTPUT)%.shellcheck_log: %
7676
$(Q)$(call echo-cmd,test)shellcheck -s bash -a -S warning "$<" > $@ || (cat $@ && rm $@ && false)
7777

7878
perf-y += $(SHELL_TEST_LOGS)
79+
80+
ifdef MYPY
81+
PY_TESTS := $(shell find python -type f -name '*.py')
82+
MYPY_TEST_LOGS := $(PY_TESTS:python/%=python/%.mypy_log)
83+
else
84+
MYPY_TEST_LOGS :=
85+
endif
86+
87+
$(OUTPUT)%.mypy_log: %
88+
$(call rule_mkdir)
89+
$(Q)$(call echo-cmd,test)mypy "$<" > $@ || (cat $@ && rm $@ && false)
90+
91+
perf-y += $(MYPY_TEST_LOGS)

tools/perf/Makefile.perf

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -306,8 +306,13 @@ ifneq ($(SHELLCHECK),)
306306
endif
307307
endif
308308

309+
# Runs mypy on perf python files
310+
ifeq ($(MYPY),1)
311+
MYPY := $(shell which mypy 2> /dev/null)
312+
endif
313+
309314
export srctree OUTPUT RM CC CXX LD AR CFLAGS CXXFLAGS V BISON FLEX AWK
310-
export HOSTCC HOSTLD HOSTAR HOSTCFLAGS SHELLCHECK
315+
export HOSTCC HOSTLD HOSTAR HOSTCFLAGS SHELLCHECK MYPY
311316

312317
include $(srctree)/tools/build/Makefile.include
313318

tools/perf/pmu-events/Build

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,19 @@ $(EMPTY_PMU_EVENTS_TEST_LOG): $(EMPTY_PMU_EVENTS_C) $(TEST_EMPTY_PMU_EVENTS_C)
4141
$(call rule_mkdir)
4242
$(Q)$(call echo-cmd,test)diff -u $^ 2> $@ || (cat $@ && false)
4343

44-
$(PMU_EVENTS_C): $(JSON) $(JSON_TEST) $(JEVENTS_PY) $(METRIC_PY) $(METRIC_TEST_LOG) $(EMPTY_PMU_EVENTS_TEST_LOG)
44+
ifdef MYPY
45+
PMU_EVENTS_PY_TESTS := $(wildcard *.py)
46+
PMU_EVENTS_MYPY_TEST_LOGS := $(JEVENTS_PY_TESTS:%=%.mypy_log)
47+
else
48+
PMU_EVENTS_MYPY_TEST_LOGS :=
49+
endif
50+
51+
$(OUTPUT)%.mypy_log: %
52+
$(call rule_mkdir)
53+
$(Q)$(call echo-cmd,test)mypy "$<" > $@ || (cat $@ && rm $@ && false)
54+
55+
$(PMU_EVENTS_C): $(JSON) $(JSON_TEST) $(JEVENTS_PY) $(METRIC_PY) $(METRIC_TEST_LOG) \
56+
$(EMPTY_PMU_EVENTS_TEST_LOG) $(PMU_EVENTS_MYPY_TEST_LOGS)
4557
$(call rule_mkdir)
4658
$(Q)$(call echo-cmd,gen)$(PYTHON) $(JEVENTS_PY) $(JEVENTS_ARCH) $(JEVENTS_MODEL) pmu-events/arch $@
4759
endif

tools/perf/scripts/Build

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,16 @@ ifeq ($(CONFIG_LIBTRACEEVENT),y)
22
perf-util-$(CONFIG_LIBPERL) += perl/Perf-Trace-Util/
33
endif
44
perf-util-$(CONFIG_LIBPYTHON) += python/Perf-Trace-Util/
5+
6+
ifdef MYPY
7+
PY_TESTS := $(shell find python -type f -name '*.py')
8+
MYPY_TEST_LOGS := $(PY_TESTS:python/%=python/%.mypy_log)
9+
else
10+
MYPY_TEST_LOGS :=
11+
endif
12+
13+
$(OUTPUT)%.mypy_log: %
14+
$(call rule_mkdir)
15+
$(Q)$(call echo-cmd,test)mypy "$<" > $@ || (cat $@ && rm $@ && false)
16+
17+
perf-y += $(MYPY_TEST_LOGS)

tools/perf/tests/Build

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,3 +91,16 @@ $(OUTPUT)%.shellcheck_log: %
9191
$(Q)$(call echo-cmd,test)shellcheck -a -S warning "$<" > $@ || (cat $@ && rm $@ && false)
9292

9393
perf-test-y += $(SHELL_TEST_LOGS)
94+
95+
ifdef MYPY
96+
PY_TESTS := $(shell find tests/shell -type f -name '*.py')
97+
MYPY_TEST_LOGS := $(PY_TESTS:tests/shell/%=shell/%.mypy_log)
98+
else
99+
MYPY_TEST_LOGS :=
100+
endif
101+
102+
$(OUTPUT)%.mypy_log: %
103+
$(call rule_mkdir)
104+
$(Q)$(call echo-cmd,test)mypy "$<" > $@ || (cat $@ && rm $@ && false)
105+
106+
perf-test-y += $(MYPY_TEST_LOGS)

tools/perf/util/Build

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -417,3 +417,16 @@ $(OUTPUT)%.shellcheck_log: %
417417
$(Q)$(call echo-cmd,test)shellcheck -a -S warning "$<" > $@ || (cat $@ && rm $@ && false)
418418

419419
perf-util-y += $(SHELL_TEST_LOGS)
420+
421+
PY_TESTS := setup.py
422+
ifdef MYPY
423+
MYPY_TEST_LOGS := $(PY_TESTS:%=%.mypy_log)
424+
else
425+
MYPY_TEST_LOGS :=
426+
endif
427+
428+
$(OUTPUT)%.mypy_log: %
429+
$(call rule_mkdir)
430+
$(Q)$(call echo-cmd,test)mypy "$<" > $@ || (cat $@ && rm $@ && false)
431+
432+
perf-util-y += $(MYPY_TEST_LOGS)

0 commit comments

Comments
 (0)