18c2ecf20Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0 28c2ecf20Sopenharmony_ciDT_DOC_CHECKER ?= dt-doc-validate 38c2ecf20Sopenharmony_ciDT_EXTRACT_EX ?= dt-extract-example 48c2ecf20Sopenharmony_ciDT_MK_SCHEMA ?= dt-mk-schema 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_ciDT_SCHEMA_LINT = $(shell which yamllint) 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_ciDT_SCHEMA_MIN_VERSION = 2020.8.1 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_ciPHONY += check_dtschema_version 118c2ecf20Sopenharmony_cicheck_dtschema_version: 128c2ecf20Sopenharmony_ci @{ echo $(DT_SCHEMA_MIN_VERSION); \ 138c2ecf20Sopenharmony_ci $(DT_DOC_CHECKER) --version 2>/dev/null || echo 0; } | sort -VC || \ 148c2ecf20Sopenharmony_ci { echo "ERROR: dtschema minimum version is v$(DT_SCHEMA_MIN_VERSION)" >&2; false; } 158c2ecf20Sopenharmony_ci 168c2ecf20Sopenharmony_ciquiet_cmd_extract_ex = DTEX $@ 178c2ecf20Sopenharmony_ci cmd_extract_ex = $(DT_EXTRACT_EX) $< > $@ 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_ci$(obj)/%.example.dts: $(src)/%.yaml check_dtschema_version FORCE 208c2ecf20Sopenharmony_ci $(call if_changed,extract_ex) 218c2ecf20Sopenharmony_ci 228c2ecf20Sopenharmony_ci# Use full schemas when checking %.example.dts 238c2ecf20Sopenharmony_ciDT_TMP_SCHEMA := $(obj)/processed-schema-examples.json 248c2ecf20Sopenharmony_ci 258c2ecf20Sopenharmony_cifind_cmd = find $(srctree)/$(src) \( -name '*.yaml' ! \ 268c2ecf20Sopenharmony_ci -name 'processed-schema*' ! \ 278c2ecf20Sopenharmony_ci -name '*.example.dt.yaml' \) 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_ciquiet_cmd_yamllint = LINT $(src) 308c2ecf20Sopenharmony_ci cmd_yamllint = $(find_cmd) | \ 318c2ecf20Sopenharmony_ci xargs $(DT_SCHEMA_LINT) -f parsable -c $(srctree)/$(src)/.yamllint 328c2ecf20Sopenharmony_ci 338c2ecf20Sopenharmony_ciquiet_cmd_chk_bindings = CHKDT $@ 348c2ecf20Sopenharmony_ci cmd_chk_bindings = $(find_cmd) | \ 358c2ecf20Sopenharmony_ci xargs -n200 -P$$(nproc) $(DT_DOC_CHECKER) -u $(srctree)/$(src) 368c2ecf20Sopenharmony_ci 378c2ecf20Sopenharmony_ciquiet_cmd_mk_schema = SCHEMA $@ 388c2ecf20Sopenharmony_ci cmd_mk_schema = f=$$(mktemp) ; \ 398c2ecf20Sopenharmony_ci $(if $(DT_MK_SCHEMA_FLAGS), \ 408c2ecf20Sopenharmony_ci echo $(real-prereqs), \ 418c2ecf20Sopenharmony_ci $(find_cmd)) > $$f ; \ 428c2ecf20Sopenharmony_ci $(DT_MK_SCHEMA) -j $(DT_MK_SCHEMA_FLAGS) @$$f > $@ ; \ 438c2ecf20Sopenharmony_ci rm -f $$f 448c2ecf20Sopenharmony_ci 458c2ecf20Sopenharmony_cidefine rule_chkdt 468c2ecf20Sopenharmony_ci $(if $(DT_SCHEMA_LINT),$(call cmd,yamllint),) 478c2ecf20Sopenharmony_ci $(call cmd,chk_bindings) 488c2ecf20Sopenharmony_ci $(call cmd,mk_schema) 498c2ecf20Sopenharmony_ciendef 508c2ecf20Sopenharmony_ci 518c2ecf20Sopenharmony_ciDT_DOCS = $(shell $(find_cmd) | sed -e 's|^$(srctree)/||') 528c2ecf20Sopenharmony_ci 538c2ecf20Sopenharmony_cioverride DTC_FLAGS := \ 548c2ecf20Sopenharmony_ci -Wno-avoid_unnecessary_addr_size \ 558c2ecf20Sopenharmony_ci -Wno-graph_child_address \ 568c2ecf20Sopenharmony_ci -Wno-interrupt_provider 578c2ecf20Sopenharmony_ci 588c2ecf20Sopenharmony_ci$(obj)/processed-schema-examples.json: $(DT_DOCS) $(src)/.yamllint check_dtschema_version FORCE 598c2ecf20Sopenharmony_ci $(call if_changed_rule,chkdt) 608c2ecf20Sopenharmony_ci 618c2ecf20Sopenharmony_ciifeq ($(DT_SCHEMA_FILES),) 628c2ecf20Sopenharmony_ci 638c2ecf20Sopenharmony_ci# Unless DT_SCHEMA_FILES is specified, use the full schema for dtbs_check too. 648c2ecf20Sopenharmony_ci# Just copy processed-schema-examples.json 658c2ecf20Sopenharmony_ci 668c2ecf20Sopenharmony_ci$(obj)/processed-schema.json: $(obj)/processed-schema-examples.json FORCE 678c2ecf20Sopenharmony_ci $(call if_changed,copy) 688c2ecf20Sopenharmony_ci 698c2ecf20Sopenharmony_ciDT_SCHEMA_FILES = $(DT_DOCS) 708c2ecf20Sopenharmony_ci 718c2ecf20Sopenharmony_cielse 728c2ecf20Sopenharmony_ci 738c2ecf20Sopenharmony_ci# If DT_SCHEMA_FILES is specified, use it for processed-schema.json 748c2ecf20Sopenharmony_ci 758c2ecf20Sopenharmony_ci$(obj)/processed-schema.json: DT_MK_SCHEMA_FLAGS := -u 768c2ecf20Sopenharmony_ci$(obj)/processed-schema.json: $(DT_SCHEMA_FILES) check_dtschema_version FORCE 778c2ecf20Sopenharmony_ci $(call if_changed,mk_schema) 788c2ecf20Sopenharmony_ci 798c2ecf20Sopenharmony_ciendif 808c2ecf20Sopenharmony_ci 818c2ecf20Sopenharmony_ciextra-$(CHECK_DT_BINDING) += processed-schema-examples.json 828c2ecf20Sopenharmony_ciextra-$(CHECK_DTBS) += processed-schema.json 838c2ecf20Sopenharmony_ciextra-$(CHECK_DT_BINDING) += $(patsubst $(src)/%.yaml,%.example.dts, $(DT_SCHEMA_FILES)) 848c2ecf20Sopenharmony_ciextra-$(CHECK_DT_BINDING) += $(patsubst $(src)/%.yaml,%.example.dt.yaml, $(DT_SCHEMA_FILES)) 858c2ecf20Sopenharmony_ci 868c2ecf20Sopenharmony_ci# Hack: avoid 'Argument list too long' error for 'make clean'. Remove most of 878c2ecf20Sopenharmony_ci# build artifacts here before they are processed by scripts/Makefile.clean 888c2ecf20Sopenharmony_ciclean-files = $(shell find $(obj) \( -name '*.example.dts' -o \ 898c2ecf20Sopenharmony_ci -name '*.example.dt.yaml' \) -delete 2>/dev/null) 90