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