| 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 | DT_MK_SCHEMA_USERONLY_FLAG := $(if $(DT_SCHEMA_FILES), -u) |
| 6 | |
| 7 | DT_SCHEMA_MIN_VERSION = 2020.5 |
| 8 | |
| 9 | PHONY += check_dtschema_version |
| 10 | check_dtschema_version: |
| 11 | @{ echo $(DT_SCHEMA_MIN_VERSION); \ |
| 12 | $(DT_DOC_CHECKER) --version 2>/dev/null || echo 0; } | sort -VC || \ |
| 13 | { echo "ERROR: dtschema minimum version is v$(DT_SCHEMA_MIN_VERSION)" >&2; false; } |
| 14 | |
| 15 | quiet_cmd_chk_binding = CHKDT $(patsubst $(srctree)/%,%,$<) |
| 16 | cmd_chk_binding = $(DT_DOC_CHECKER) -u $(srctree)/$(src) $< ; \ |
| 17 | $(DT_EXTRACT_EX) $< > $@ |
| 18 | |
| 19 | $(obj)/%.example.dts: $(src)/%.yaml check_dtschema_version FORCE |
| 20 | $(call if_changed,chk_binding) |
| 21 | |
| 22 | # Use full schemas when checking %.example.dts |
| 23 | DT_TMP_SCHEMA := $(obj)/processed-schema-examples.yaml |
| 24 | |
| 25 | find_cmd = find $(srctree)/$(src) \( -name '*.yaml' ! \ |
| 26 | -name 'processed-schema*' ! \ |
| 27 | -name '*.example.dt.yaml' \) |
| 28 | |
| 29 | quiet_cmd_mk_schema = SCHEMA $@ |
| 30 | cmd_mk_schema = rm -f $@ ; \ |
| 31 | $(if $(DT_MK_SCHEMA_FLAGS), \ |
| 32 | echo $(real-prereqs), \ |
| 33 | $(find_cmd)) | \ |
| 34 | xargs $(DT_MK_SCHEMA) $(DT_MK_SCHEMA_FLAGS) >> $@ |
| 35 | |
| 36 | DT_DOCS = $(shell $(find_cmd) | sed -e 's|^$(srctree)/||') |
| 37 | |
| 38 | DT_SCHEMA_FILES ?= $(DT_DOCS) |
| 39 | |
| 40 | extra-$(CHECK_DT_BINDING) += $(patsubst $(src)/%.yaml,%.example.dts, $(DT_SCHEMA_FILES)) |
| 41 | extra-$(CHECK_DT_BINDING) += $(patsubst $(src)/%.yaml,%.example.dt.yaml, $(DT_SCHEMA_FILES)) |
| 42 | extra-$(CHECK_DT_BINDING) += processed-schema-examples.yaml |
| 43 | |
| 44 | override DTC_FLAGS := \ |
| 45 | -Wno-avoid_unnecessary_addr_size \ |
| 46 | -Wno-graph_child_address \ |
| 47 | -Wno-interrupt_provider |
| 48 | |
| 49 | $(obj)/processed-schema-examples.yaml: $(DT_DOCS) check_dtschema_version FORCE |
| 50 | $(call if_changed,mk_schema) |
| 51 | |
| 52 | $(obj)/processed-schema.yaml: DT_MK_SCHEMA_FLAGS := $(DT_MK_SCHEMA_USERONLY_FLAG) |
| 53 | $(obj)/processed-schema.yaml: $(DT_SCHEMA_FILES) check_dtschema_version FORCE |
| 54 | $(call if_changed,mk_schema) |
| 55 | |
| 56 | extra-$(CHECK_DTBS) += processed-schema.yaml |
| 57 | |
| 58 | # Hack: avoid 'Argument list too long' error for 'make clean'. Remove most of |
| 59 | # build artifacts here before they are processed by scripts/Makefile.clean |
| 60 | clean-files = $(shell find $(obj) \( -name '*.example.dts' -o \ |
| 61 | -name '*.example.dt.yaml' \) -delete 2>/dev/null) |