Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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 <james.clark@linaro.org>
Signed-off-by: Ian Rogers <irogers@google.com>
Link: https://lore.kernel.org/r/20250311213628.569562-4-irogers@google.com
Signed-off-by: Namhyung Kim <namhyung@kernel.org>

authored by

Ian Rogers and committed by
Namhyung Kim
168910d0 ef238109

+71 -2
+13
tools/perf/Build
··· 76 76 $(Q)$(call echo-cmd,test)shellcheck -s bash -a -S warning "$<" > $@ || (cat $@ && rm $@ && false) 77 77 78 78 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)
+6 -1
tools/perf/Makefile.perf
··· 306 306 endif 307 307 endif 308 308 309 + # Runs mypy on perf python files 310 + ifeq ($(MYPY),1) 311 + MYPY := $(shell which mypy 2> /dev/null) 312 + endif 313 + 309 314 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 311 316 312 317 include $(srctree)/tools/build/Makefile.include 313 318
+13 -1
tools/perf/pmu-events/Build
··· 41 41 $(call rule_mkdir) 42 42 $(Q)$(call echo-cmd,test)diff -u $^ 2> $@ || (cat $@ && false) 43 43 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) 45 57 $(call rule_mkdir) 46 58 $(Q)$(call echo-cmd,gen)$(PYTHON) $(JEVENTS_PY) $(JEVENTS_ARCH) $(JEVENTS_MODEL) pmu-events/arch $@ 47 59 endif
+13
tools/perf/scripts/Build
··· 2 2 perf-util-$(CONFIG_LIBPERL) += perl/Perf-Trace-Util/ 3 3 endif 4 4 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)
+13
tools/perf/tests/Build
··· 91 91 $(Q)$(call echo-cmd,test)shellcheck -a -S warning "$<" > $@ || (cat $@ && rm $@ && false) 92 92 93 93 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)
+13
tools/perf/util/Build
··· 417 417 $(Q)$(call echo-cmd,test)shellcheck -a -S warning "$<" > $@ || (cat $@ && rm $@ && false) 418 418 419 419 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)