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 | |
44ec8b20 RH |
6 | DT_SCHEMA_LINT = $(shell which yamllint) |
7 | ||
e2b0d998 | 8 | DT_SCHEMA_MIN_VERSION = 2021.2.1 |
ea5b8b5e RH |
9 | |
10 | PHONY += check_dtschema_version | |
11 | check_dtschema_version: | |
28ead0a4 RH |
12 | @which $(DT_DOC_CHECKER) >/dev/null || \ |
13 | { echo "Error: '$(DT_DOC_CHECKER)' not found!" >&2; \ | |
14 | echo "Ensure dtschema python package is installed and in your PATH." >&2; \ | |
15 | echo "Current PATH is:" >&2; \ | |
16 | echo "$$PATH" >&2; false; } | |
ea5b8b5e | 17 | @{ echo $(DT_SCHEMA_MIN_VERSION); \ |
a21ca2da | 18 | $(DT_DOC_CHECKER) --version 2>/dev/null || echo 0; } | sort -Vc >/dev/null || \ |
ea5b8b5e RH |
19 | { echo "ERROR: dtschema minimum version is v$(DT_SCHEMA_MIN_VERSION)" >&2; false; } |
20 | ||
7ba58fff RH |
21 | quiet_cmd_extract_ex = DTEX $@ |
22 | cmd_extract_ex = $(DT_EXTRACT_EX) $< > $@ | |
4f0e3a57 | 23 | |
ea5b8b5e | 24 | $(obj)/%.example.dts: $(src)/%.yaml check_dtschema_version FORCE |
7ba58fff | 25 | $(call if_changed,extract_ex) |
4f0e3a57 | 26 | |
2ba06cd8 | 27 | # Use full schemas when checking %.example.dts |
b8a49399 | 28 | DT_TMP_SCHEMA := $(obj)/processed-schema-examples.json |
4f0e3a57 | 29 | |
378be0cc | 30 | find_all_cmd = find $(srctree)/$(src) \( -name '*.yaml' ! \ |
8b6b8021 RH |
31 | -name 'processed-schema*' ! \ |
32 | -name '*.example.dt.yaml' \) | |
33 | ||
378be0cc GU |
34 | ifeq ($(DT_SCHEMA_FILES),) |
35 | find_cmd = $(find_all_cmd) | |
36 | else | |
37 | find_cmd = echo $(addprefix $(srctree)/, $(DT_SCHEMA_FILES)) | |
38 | endif | |
39 | ||
44ec8b20 | 40 | quiet_cmd_yamllint = LINT $(src) |
3e95dfb3 | 41 | cmd_yamllint = ($(find_cmd) | \ |
378be0cc GU |
42 | xargs -n200 -P$$(nproc) \ |
43 | $(DT_SCHEMA_LINT) -f parsable -c $(srctree)/$(src)/.yamllint >&2) || true | |
44ec8b20 | 44 | |
7ba58fff | 45 | quiet_cmd_chk_bindings = CHKDT $@ |
3e95dfb3 RH |
46 | cmd_chk_bindings = ($(find_cmd) | \ |
47 | xargs -n200 -P$$(nproc) $(DT_DOC_CHECKER) -u $(srctree)/$(src)) || true | |
7ba58fff | 48 | |
4f0e3a57 | 49 | quiet_cmd_mk_schema = SCHEMA $@ |
b8a49399 | 50 | cmd_mk_schema = f=$$(mktemp) ; \ |
8b6b8021 | 51 | $(if $(DT_MK_SCHEMA_FLAGS), \ |
96993a59 | 52 | printf '%s\n' $(real-prereqs), \ |
378be0cc | 53 | $(find_all_cmd)) > $$f ; \ |
b8a49399 AZ |
54 | $(DT_MK_SCHEMA) -j $(DT_MK_SCHEMA_FLAGS) @$$f > $@ ; \ |
55 | rm -f $$f | |
4f0e3a57 | 56 | |
7ba58fff | 57 | define rule_chkdt |
44ec8b20 | 58 | $(if $(DT_SCHEMA_LINT),$(call cmd,yamllint),) |
7ba58fff RH |
59 | $(call cmd,chk_bindings) |
60 | $(call cmd,mk_schema) | |
61 | endef | |
62 | ||
378be0cc | 63 | DT_DOCS = $(patsubst $(srctree)/%,%,$(shell $(find_all_cmd))) |
5fa98c2e | 64 | |
65220630 RH |
65 | override DTC_FLAGS := \ |
66 | -Wno-avoid_unnecessary_addr_size \ | |
3eb619b2 | 67 | -Wno-graph_child_address \ |
4b7c49f7 SP |
68 | -Wno-interrupt_provider \ |
69 | -Wno-unique_unit_address \ | |
70 | -Wunique_unit_address_if_enabled | |
65220630 | 71 | |
c59773d2 RH |
72 | # Disable undocumented compatible checks until warning free |
73 | override DT_CHECKER_FLAGS ?= | |
74 | ||
44ec8b20 | 75 | $(obj)/processed-schema-examples.json: $(DT_DOCS) $(src)/.yamllint check_dtschema_version FORCE |
7ba58fff | 76 | $(call if_changed_rule,chkdt) |
4f0e3a57 | 77 | |
dee9c0b5 MY |
78 | ifeq ($(DT_SCHEMA_FILES),) |
79 | ||
80 | # Unless DT_SCHEMA_FILES is specified, use the full schema for dtbs_check too. | |
b8a49399 | 81 | # Just copy processed-schema-examples.json |
dee9c0b5 | 82 | |
b8a49399 | 83 | $(obj)/processed-schema.json: $(obj)/processed-schema-examples.json FORCE |
dee9c0b5 MY |
84 | $(call if_changed,copy) |
85 | ||
86 | DT_SCHEMA_FILES = $(DT_DOCS) | |
87 | ||
88 | else | |
89 | ||
b8a49399 | 90 | # If DT_SCHEMA_FILES is specified, use it for processed-schema.json |
dee9c0b5 | 91 | |
b8a49399 AZ |
92 | $(obj)/processed-schema.json: DT_MK_SCHEMA_FLAGS := -u |
93 | $(obj)/processed-schema.json: $(DT_SCHEMA_FILES) check_dtschema_version FORCE | |
4f0e3a57 | 94 | $(call if_changed,mk_schema) |
93512dad | 95 | |
dee9c0b5 MY |
96 | endif |
97 | ||
2047ace9 MY |
98 | always-$(CHECK_DT_BINDING) += processed-schema-examples.json |
99 | always-$(CHECK_DTBS) += processed-schema.json | |
100 | always-$(CHECK_DT_BINDING) += $(patsubst $(src)/%.yaml,%.example.dts, $(DT_SCHEMA_FILES)) | |
101 | always-$(CHECK_DT_BINDING) += $(patsubst $(src)/%.yaml,%.example.dt.yaml, $(DT_SCHEMA_FILES)) | |
fa714cf5 MY |
102 | |
103 | # Hack: avoid 'Argument list too long' error for 'make clean'. Remove most of | |
104 | # build artifacts here before they are processed by scripts/Makefile.clean | |
105 | clean-files = $(shell find $(obj) \( -name '*.example.dts' -o \ | |
106 | -name '*.example.dt.yaml' \) -delete 2>/dev/null) |