Commit 168910d0 authored by Ian Rogers's avatar Ian Rogers Committed by Namhyung Kim
Browse files

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: default avatarJames Clark <james.clark@linaro.org>
Signed-off-by: default avatarIan Rogers <irogers@google.com>
Link: https://lore.kernel.org/r/20250311213628.569562-4-irogers@google.com


Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
parent ef238109
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -76,3 +76,16 @@ $(OUTPUT)%.shellcheck_log: %
	$(Q)$(call echo-cmd,test)shellcheck -s bash -a -S warning "$<" > $@ || (cat $@ && rm $@ && false)

perf-y += $(SHELL_TEST_LOGS)

ifdef MYPY
  PY_TESTS := $(shell find python -type f -name '*.py')
  MYPY_TEST_LOGS := $(PY_TESTS:python/%=python/%.mypy_log)
else
  MYPY_TEST_LOGS :=
endif

$(OUTPUT)%.mypy_log: %
	$(call rule_mkdir)
	$(Q)$(call echo-cmd,test)mypy "$<" > $@ || (cat $@ && rm $@ && false)

perf-y += $(MYPY_TEST_LOGS)
+6 −1
Original line number Diff line number Diff line
@@ -306,8 +306,13 @@ ifneq ($(SHELLCHECK),)
  endif
endif

# Runs mypy on perf python files
ifeq ($(MYPY),1)
  MYPY := $(shell which mypy 2> /dev/null)
endif

export srctree OUTPUT RM CC CXX LD AR CFLAGS CXXFLAGS V BISON FLEX AWK
export HOSTCC HOSTLD HOSTAR HOSTCFLAGS SHELLCHECK
export HOSTCC HOSTLD HOSTAR HOSTCFLAGS SHELLCHECK MYPY

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

+13 −1
Original line number Diff line number Diff line
@@ -41,7 +41,19 @@ $(EMPTY_PMU_EVENTS_TEST_LOG): $(EMPTY_PMU_EVENTS_C) $(TEST_EMPTY_PMU_EVENTS_C)
	$(call rule_mkdir)
	$(Q)$(call echo-cmd,test)diff -u $^ 2> $@ || (cat $@ && false)

$(PMU_EVENTS_C): $(JSON) $(JSON_TEST) $(JEVENTS_PY) $(METRIC_PY) $(METRIC_TEST_LOG) $(EMPTY_PMU_EVENTS_TEST_LOG)
ifdef MYPY
  PMU_EVENTS_PY_TESTS := $(wildcard *.py)
  PMU_EVENTS_MYPY_TEST_LOGS := $(JEVENTS_PY_TESTS:%=%.mypy_log)
else
  PMU_EVENTS_MYPY_TEST_LOGS :=
endif

$(OUTPUT)%.mypy_log: %
	$(call rule_mkdir)
	$(Q)$(call echo-cmd,test)mypy "$<" > $@ || (cat $@ && rm $@ && false)

$(PMU_EVENTS_C): $(JSON) $(JSON_TEST) $(JEVENTS_PY) $(METRIC_PY) $(METRIC_TEST_LOG) \
    $(EMPTY_PMU_EVENTS_TEST_LOG) $(PMU_EVENTS_MYPY_TEST_LOGS)
	$(call rule_mkdir)
	$(Q)$(call echo-cmd,gen)$(PYTHON) $(JEVENTS_PY) $(JEVENTS_ARCH) $(JEVENTS_MODEL) pmu-events/arch $@
endif
+13 −0
Original line number Diff line number Diff line
@@ -2,3 +2,16 @@ ifeq ($(CONFIG_LIBTRACEEVENT),y)
  perf-util-$(CONFIG_LIBPERL)   += perl/Perf-Trace-Util/
endif
perf-util-$(CONFIG_LIBPYTHON) += python/Perf-Trace-Util/

ifdef MYPY
  PY_TESTS := $(shell find python -type f -name '*.py')
  MYPY_TEST_LOGS := $(PY_TESTS:python/%=python/%.mypy_log)
else
  MYPY_TEST_LOGS :=
endif

$(OUTPUT)%.mypy_log: %
	$(call rule_mkdir)
	$(Q)$(call echo-cmd,test)mypy "$<" > $@ || (cat $@ && rm $@ && false)

perf-y += $(MYPY_TEST_LOGS)
+13 −0
Original line number Diff line number Diff line
@@ -91,3 +91,16 @@ $(OUTPUT)%.shellcheck_log: %
	$(Q)$(call echo-cmd,test)shellcheck -a -S warning "$<" > $@ || (cat $@ && rm $@ && false)

perf-test-y += $(SHELL_TEST_LOGS)

ifdef MYPY
  PY_TESTS := $(shell find tests/shell -type f -name '*.py')
  MYPY_TEST_LOGS := $(PY_TESTS:tests/shell/%=shell/%.mypy_log)
else
  MYPY_TEST_LOGS :=
endif

$(OUTPUT)%.mypy_log: %
	$(call rule_mkdir)
	$(Q)$(call echo-cmd,test)mypy "$<" > $@ || (cat $@ && rm $@ && false)

perf-test-y += $(MYPY_TEST_LOGS)
Loading