Merge tag 'block-6.1-2022-11-11' of git://git.kernel.dk/linux
[linux-block.git] / Documentation / devicetree / bindings / Makefile
CommitLineData
4f0e3a57
RH
1# SPDX-License-Identifier: GPL-2.0
2DT_DOC_CHECKER ?= dt-doc-validate
3DT_EXTRACT_EX ?= dt-extract-example
4DT_MK_SCHEMA ?= dt-mk-schema
4f0e3a57 5
6b49f340 6DT_SCHEMA_LINT = $(shell which yamllint || \
b3e664a7 7 echo "warning: python package 'yamllint' not installed, skipping" >&2)
44ec8b20 8
2783a7f5 9DT_SCHEMA_MIN_VERSION = 2022.3
ea5b8b5e
RH
10
11PHONY += check_dtschema_version
12check_dtschema_version:
28ead0a4
RH
13 @which $(DT_DOC_CHECKER) >/dev/null || \
14 { echo "Error: '$(DT_DOC_CHECKER)' not found!" >&2; \
15 echo "Ensure dtschema python package is installed and in your PATH." >&2; \
16 echo "Current PATH is:" >&2; \
17 echo "$$PATH" >&2; false; }
ea5b8b5e 18 @{ echo $(DT_SCHEMA_MIN_VERSION); \
a21ca2da 19 $(DT_DOC_CHECKER) --version 2>/dev/null || echo 0; } | sort -Vc >/dev/null || \
ea5b8b5e
RH
20 { echo "ERROR: dtschema minimum version is v$(DT_SCHEMA_MIN_VERSION)" >&2; false; }
21
7ba58fff
RH
22quiet_cmd_extract_ex = DTEX $@
23 cmd_extract_ex = $(DT_EXTRACT_EX) $< > $@
4f0e3a57 24
ea5b8b5e 25$(obj)/%.example.dts: $(src)/%.yaml check_dtschema_version FORCE
7ba58fff 26 $(call if_changed,extract_ex)
4f0e3a57 27
378be0cc 28find_all_cmd = find $(srctree)/$(src) \( -name '*.yaml' ! \
ef8795f3 29 -name 'processed-schema*' \)
8b6b8021 30
309d9559
RH
31find_cmd = $(find_all_cmd) | grep -F "$(DT_SCHEMA_FILES)"
32CHK_DT_DOCS := $(shell $(find_cmd))
378be0cc 33
44ec8b20 34quiet_cmd_yamllint = LINT $(src)
3e95dfb3 35 cmd_yamllint = ($(find_cmd) | \
378be0cc
GU
36 xargs -n200 -P$$(nproc) \
37 $(DT_SCHEMA_LINT) -f parsable -c $(srctree)/$(src)/.yamllint >&2) || true
44ec8b20 38
7ba58fff 39quiet_cmd_chk_bindings = CHKDT $@
3e95dfb3
RH
40 cmd_chk_bindings = ($(find_cmd) | \
41 xargs -n200 -P$$(nproc) $(DT_DOC_CHECKER) -u $(srctree)/$(src)) || true
7ba58fff 42
4f0e3a57 43quiet_cmd_mk_schema = SCHEMA $@
b8a49399 44 cmd_mk_schema = f=$$(mktemp) ; \
dcc2ed39 45 $(find_all_cmd) > $$f ; \
b8a49399
AZ
46 $(DT_MK_SCHEMA) -j $(DT_MK_SCHEMA_FLAGS) @$$f > $@ ; \
47 rm -f $$f
4f0e3a57 48
7ba58fff 49define rule_chkdt
44ec8b20 50 $(if $(DT_SCHEMA_LINT),$(call cmd,yamllint),)
7ba58fff
RH
51 $(call cmd,chk_bindings)
52 $(call cmd,mk_schema)
53endef
54
378be0cc 55DT_DOCS = $(patsubst $(srctree)/%,%,$(shell $(find_all_cmd)))
5fa98c2e 56
65220630
RH
57override DTC_FLAGS := \
58 -Wno-avoid_unnecessary_addr_size \
3eb619b2 59 -Wno-graph_child_address \
4b7c49f7
SP
60 -Wno-interrupt_provider \
61 -Wno-unique_unit_address \
62 -Wunique_unit_address_if_enabled
65220630 63
c59773d2
RH
64# Disable undocumented compatible checks until warning free
65override DT_CHECKER_FLAGS ?=
66
2783a7f5 67$(obj)/processed-schema.json: $(DT_DOCS) $(src)/.yamllint check_dtschema_version FORCE
7ba58fff 68 $(call if_changed_rule,chkdt)
4f0e3a57 69
2783a7f5 70always-y += processed-schema.json
309d9559 71always-$(CHECK_DT_BINDING) += $(patsubst $(srctree)/$(src)/%.yaml,%.example.dts, $(CHK_DT_DOCS))
ef8795f3 72always-$(CHECK_DT_BINDING) += $(patsubst $(srctree)/$(src)/%.yaml,%.example.dtb, $(CHK_DT_DOCS))
fa714cf5
MY
73
74# Hack: avoid 'Argument list too long' error for 'make clean'. Remove most of
75# build artifacts here before they are processed by scripts/Makefile.clean
76clean-files = $(shell find $(obj) \( -name '*.example.dts' -o \
ef8795f3 77 -name '*.example.dtb' \) -delete 2>/dev/null)
b6acf807
RH
78
79dt_compatible_check: $(obj)/processed-schema.json
80 $(Q)$(srctree)/scripts/dtc/dt-extract-compatibles $(srctree) | xargs dt-check-compatible -v -s $<