]>
Commit | Line | Data |
---|---|---|
53633a89 TR |
1 | # SPDX-License-Identifier: GPL-2.0 |
2 | DT_DOC_CHECKER ?= dt-doc-validate | |
3 | DT_EXTRACT_EX ?= dt-extract-example | |
4 | DT_MK_SCHEMA ?= dt-mk-schema | |
5 | ||
6 | DT_SCHEMA_LINT = $(shell which yamllint || \ | |
7 | echo "warning: python package 'yamllint' not installed, skipping" >&2) | |
8 | ||
9 | DT_SCHEMA_MIN_VERSION = 2023.9 | |
10 | ||
11 | PHONY += check_dtschema_version | |
12 | check_dtschema_version: | |
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; } | |
18 | @{ echo $(DT_SCHEMA_MIN_VERSION); \ | |
19 | $(DT_DOC_CHECKER) --version 2>/dev/null || echo 0; } | sort -Vc >/dev/null || \ | |
20 | { echo "ERROR: dtschema minimum version is v$(DT_SCHEMA_MIN_VERSION)" >&2; false; } | |
21 | ||
22 | quiet_cmd_extract_ex = DTEX $@ | |
23 | cmd_extract_ex = $(DT_EXTRACT_EX) $< > $@ | |
24 | ||
25 | $(obj)/%.example.dts: $(src)/%.yaml check_dtschema_version FORCE | |
26 | $(call if_changed,extract_ex) | |
27 | ||
28 | find_all_cmd = find $(srctree)/$(src) \( -name '*.yaml' ! \ | |
29 | -name 'processed-schema*' \) | |
30 | ||
31 | find_cmd = $(find_all_cmd) | grep -F -e "$(subst :," -e ",$(DT_SCHEMA_FILES))" | |
32 | CHK_DT_DOCS := $(shell $(find_cmd)) | |
33 | ||
34 | quiet_cmd_yamllint = LINT $(src) | |
35 | cmd_yamllint = ($(find_cmd) | \ | |
36 | xargs -n200 -P$$(nproc) \ | |
37 | $(DT_SCHEMA_LINT) -f parsable -c $(srctree)/$(src)/.yamllint >&2) || true | |
38 | ||
39 | quiet_cmd_chk_bindings = CHKDT $@ | |
40 | cmd_chk_bindings = ($(find_cmd) | \ | |
41 | xargs -n200 -P$$(nproc) $(DT_DOC_CHECKER) -u $(srctree)/$(src)) || true | |
42 | ||
43 | quiet_cmd_mk_schema = SCHEMA $@ | |
44 | cmd_mk_schema = f=$$(mktemp) ; \ | |
45 | $(find_all_cmd) > $$f ; \ | |
46 | $(DT_MK_SCHEMA) -j $(DT_MK_SCHEMA_FLAGS) @$$f > $@ ; \ | |
47 | rm -f $$f | |
48 | ||
49 | define rule_chkdt | |
4be3fe9d SG |
50 | $(if $(DT_SCHEMA_LINT),$(call echo-cmd,yamllint) $(cmd_yamllint),); \ |
51 | $(call echo-cmd,chk_bindings) $(cmd_chk_bindings); \ | |
52 | $(call echo-cmd,mk_schema) $(cmd_mk_schema) | |
53633a89 TR |
53 | endef |
54 | ||
55 | DT_DOCS = $(patsubst $(srctree)/%,%,$(shell $(find_all_cmd))) | |
56 | ||
57 | override DTC_FLAGS := \ | |
58 | -Wno-avoid_unnecessary_addr_size \ | |
59 | -Wno-graph_child_address \ | |
60 | -Wno-interrupt_provider \ | |
61 | -Wno-unique_unit_address \ | |
62 | -Wunique_unit_address_if_enabled | |
63 | ||
64 | # Disable undocumented compatible checks until warning free | |
65 | override DT_CHECKER_FLAGS ?= | |
66 | ||
67 | $(obj)/processed-schema.json: $(DT_DOCS) $(src)/.yamllint check_dtschema_version FORCE | |
68 | $(call if_changed_rule,chkdt) | |
69 | ||
70 | always-y += processed-schema.json | |
71 | always-$(CHECK_DT_BINDING) += $(patsubst $(srctree)/$(src)/%.yaml,%.example.dts, $(CHK_DT_DOCS)) | |
72 | always-$(CHECK_DT_BINDING) += $(patsubst $(srctree)/$(src)/%.yaml,%.example.dtb, $(CHK_DT_DOCS)) | |
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 | |
76 | clean-files = $(shell find $(obj) \( -name '*.example.dts' -o \ | |
77 | -name '*.example.dtb' \) -delete 2>/dev/null) | |
78 | ||
79 | dt_compatible_check: $(obj)/processed-schema.json | |
80 | $(Q)$(srctree)/scripts/dtc/dt-extract-compatibles $(srctree) | xargs dt-check-compatible -v -s $< |