Commit | Line | Data |
---|---|---|
4f0e3a57 RH |
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 | |
4f0e3a57 | 5 | |
6b49f340 | 6 | DT_SCHEMA_LINT = $(shell which yamllint || \ |
b3e664a7 | 7 | echo "warning: python package 'yamllint' not installed, skipping" >&2) |
44ec8b20 | 8 | |
2783a7f5 | 9 | DT_SCHEMA_MIN_VERSION = 2022.3 |
ea5b8b5e RH |
10 | |
11 | PHONY += check_dtschema_version | |
12 | check_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 |
22 | quiet_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 | 28 | find_all_cmd = find $(srctree)/$(src) \( -name '*.yaml' ! \ |
ef8795f3 | 29 | -name 'processed-schema*' \) |
8b6b8021 | 30 | |
309d9559 RH |
31 | find_cmd = $(find_all_cmd) | grep -F "$(DT_SCHEMA_FILES)" |
32 | CHK_DT_DOCS := $(shell $(find_cmd)) | |
378be0cc | 33 | |
44ec8b20 | 34 | quiet_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 | 39 | quiet_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 | 43 | quiet_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 | 49 | define rule_chkdt |
44ec8b20 | 50 | $(if $(DT_SCHEMA_LINT),$(call cmd,yamllint),) |
7ba58fff RH |
51 | $(call cmd,chk_bindings) |
52 | $(call cmd,mk_schema) | |
53 | endef | |
54 | ||
378be0cc | 55 | DT_DOCS = $(patsubst $(srctree)/%,%,$(shell $(find_all_cmd))) |
5fa98c2e | 56 | |
65220630 RH |
57 | override 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 |
65 | override 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 | 70 | always-y += processed-schema.json |
309d9559 | 71 | always-$(CHECK_DT_BINDING) += $(patsubst $(srctree)/$(src)/%.yaml,%.example.dts, $(CHK_DT_DOCS)) |
ef8795f3 | 72 | always-$(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 | |
76 | clean-files = $(shell find $(obj) \( -name '*.example.dts' -o \ | |
ef8795f3 | 77 | -name '*.example.dtb' \) -delete 2>/dev/null) |
b6acf807 RH |
78 | |
79 | dt_compatible_check: $(obj)/processed-schema.json | |
80 | $(Q)$(srctree)/scripts/dtc/dt-extract-compatibles $(srctree) | xargs dt-check-compatible -v -s $< |