1pmu-events-y += pmu-events.o 2JDIR = pmu-events/arch/$(SRCARCH) 3JSON = $(shell find pmu-events/arch -name *.json -o -name *.csv) 4JDIR_TEST = pmu-events/arch/test 5JSON_TEST = $(shell [ -d $(JDIR_TEST) ] && \ 6 find $(JDIR_TEST) -name '*.json') 7JEVENTS_PY = pmu-events/jevents.py 8METRIC_PY = pmu-events/metric.py 9METRIC_TEST_PY = pmu-events/metric_test.py 10EMPTY_PMU_EVENTS_C = pmu-events/empty-pmu-events.c 11PMU_EVENTS_C = $(OUTPUT)pmu-events/pmu-events.c 12METRIC_TEST_LOG = $(OUTPUT)pmu-events/metric_test.log 13TEST_EMPTY_PMU_EVENTS_C = $(OUTPUT)pmu-events/test-empty-pmu-events.c 14EMPTY_PMU_EVENTS_TEST_LOG = $(OUTPUT)pmu-events/empty-pmu-events.log 15LEGACY_CACHE_PY = pmu-events/make_legacy_cache.py 16LEGACY_CACHE_JSON = $(OUTPUT)pmu-events/arch/common/common/legacy-cache.json 17 18ifeq ($(JEVENTS_ARCH),) 19JEVENTS_ARCH=$(SRCARCH) 20endif 21JEVENTS_MODEL ?= all 22 23# 24# Locate/process JSON files in pmu-events/arch/ 25# directory and create tables in pmu-events.c. 26# 27 28ifeq ($(NO_JEVENTS),1) 29$(PMU_EVENTS_C): $(EMPTY_PMU_EVENTS_C) 30 $(call rule_mkdir) 31 $(Q)$(call echo-cmd,gen)cp $< $@ 32else 33# Copy checked-in json for generation. 34$(OUTPUT)pmu-events/arch/%: pmu-events/arch/% 35 $(call rule_mkdir) 36 $(Q)$(call echo-cmd,gen)cp $< $@ 37 38$(LEGACY_CACHE_JSON): $(LEGACY_CACHE_PY) 39 $(call rule_mkdir) 40 $(Q)$(call echo-cmd,gen)$(PYTHON) $(LEGACY_CACHE_PY) > $@ 41 42GEN_JSON = $(patsubst %,$(OUTPUT)%,$(JSON)) $(LEGACY_CACHE_JSON) 43 44$(METRIC_TEST_LOG): $(METRIC_TEST_PY) $(METRIC_PY) 45 $(call rule_mkdir) 46 $(Q)$(call echo-cmd,test)$(PYTHON) $< 2> $@ || (cat $@ && false) 47 48$(TEST_EMPTY_PMU_EVENTS_C): $(GEN_JSON) $(JSON_TEST) $(JEVENTS_PY) $(METRIC_PY) $(METRIC_TEST_LOG) 49 $(call rule_mkdir) 50 $(Q)$(call echo-cmd,gen)$(PYTHON) $(JEVENTS_PY) none none $(OUTPUT)pmu-events/arch $@ 51 52$(EMPTY_PMU_EVENTS_TEST_LOG): $(EMPTY_PMU_EVENTS_C) $(TEST_EMPTY_PMU_EVENTS_C) 53 $(call rule_mkdir) 54 $(Q)$(call echo-cmd,test)diff -u $^ 2> $@ || (cat $@ && false) 55 56ifdef MYPY 57 PMU_EVENTS_PY_TESTS := $(wildcard *.py) 58 PMU_EVENTS_MYPY_TEST_LOGS := $(JEVENTS_PY_TESTS:%=%.mypy_log) 59else 60 PMU_EVENTS_MYPY_TEST_LOGS := 61endif 62 63$(OUTPUT)%.mypy_log: % 64 $(call rule_mkdir) 65 $(Q)$(call echo-cmd,test)mypy "$<" > $@ || (cat $@ && rm $@ && false) 66 67ifdef PYLINT 68 PMU_EVENTS_PY_TESTS := $(wildcard *.py) 69 PMU_EVENTS_PYLINT_TEST_LOGS := $(JEVENTS_PY_TESTS:%=%.pylint_log) 70else 71 PMU_EVENTS_PYLINT_TEST_LOGS := 72endif 73 74$(OUTPUT)%.pylint_log: % 75 $(call rule_mkdir) 76 $(Q)$(call echo-cmd,test)pylint "$<" > $@ || (cat $@ && rm $@ && false) 77 78$(PMU_EVENTS_C): $(GEN_JSON) $(JSON_TEST) $(JEVENTS_PY) $(METRIC_PY) $(METRIC_TEST_LOG) \ 79 $(EMPTY_PMU_EVENTS_TEST_LOG) $(PMU_EVENTS_MYPY_TEST_LOGS) $(PMU_EVENTS_PYLINT_TEST_LOGS) 80 $(call rule_mkdir) 81 $(Q)$(call echo-cmd,gen)$(PYTHON) $(JEVENTS_PY) $(JEVENTS_ARCH) $(JEVENTS_MODEL) $(OUTPUT)pmu-events/arch $@ 82endif 83 84# pmu-events.c file is generated in the OUTPUT directory so it needs a 85# separate rule to depend on it properly 86$(OUTPUT)pmu-events/pmu-events.o: $(PMU_EVENTS_C) 87 $(call rule_mkdir) 88 $(call if_changed_dep,cc_o_c) 89