1*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0 2*4882a593SmuzhiyunDT_DOC_CHECKER ?= dt-doc-validate 3*4882a593SmuzhiyunDT_EXTRACT_EX ?= dt-extract-example 4*4882a593SmuzhiyunDT_MK_SCHEMA ?= dt-mk-schema 5*4882a593Smuzhiyun 6*4882a593SmuzhiyunDT_SCHEMA_LINT = $(shell which yamllint) 7*4882a593Smuzhiyun 8*4882a593SmuzhiyunDT_SCHEMA_MIN_VERSION = 2020.8.1 9*4882a593Smuzhiyun 10*4882a593SmuzhiyunPHONY += check_dtschema_version 11*4882a593Smuzhiyuncheck_dtschema_version: 12*4882a593Smuzhiyun @{ echo $(DT_SCHEMA_MIN_VERSION); \ 13*4882a593Smuzhiyun $(DT_DOC_CHECKER) --version 2>/dev/null || echo 0; } | sort -VC || \ 14*4882a593Smuzhiyun { echo "ERROR: dtschema minimum version is v$(DT_SCHEMA_MIN_VERSION)" >&2; false; } 15*4882a593Smuzhiyun 16*4882a593Smuzhiyunquiet_cmd_extract_ex = DTEX $@ 17*4882a593Smuzhiyun cmd_extract_ex = $(DT_EXTRACT_EX) $< > $@ 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun$(obj)/%.example.dts: $(src)/%.yaml check_dtschema_version FORCE 20*4882a593Smuzhiyun $(call if_changed,extract_ex) 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun# Use full schemas when checking %.example.dts 23*4882a593SmuzhiyunDT_TMP_SCHEMA := $(obj)/processed-schema-examples.json 24*4882a593Smuzhiyun 25*4882a593Smuzhiyunfind_cmd = find $(srctree)/$(src) \( -name '*.yaml' ! \ 26*4882a593Smuzhiyun -name 'processed-schema*' ! \ 27*4882a593Smuzhiyun -name '*.example.dt.yaml' \) 28*4882a593Smuzhiyun 29*4882a593Smuzhiyunquiet_cmd_yamllint = LINT $(src) 30*4882a593Smuzhiyun cmd_yamllint = $(find_cmd) | \ 31*4882a593Smuzhiyun xargs $(DT_SCHEMA_LINT) -f parsable -c $(srctree)/$(src)/.yamllint 32*4882a593Smuzhiyun 33*4882a593Smuzhiyunquiet_cmd_chk_bindings = CHKDT $@ 34*4882a593Smuzhiyun cmd_chk_bindings = $(find_cmd) | \ 35*4882a593Smuzhiyun xargs -n200 -P$$(nproc) $(DT_DOC_CHECKER) -u $(srctree)/$(src) 36*4882a593Smuzhiyun 37*4882a593Smuzhiyunquiet_cmd_mk_schema = SCHEMA $@ 38*4882a593Smuzhiyun cmd_mk_schema = f=$$(mktemp) ; \ 39*4882a593Smuzhiyun $(if $(DT_MK_SCHEMA_FLAGS), \ 40*4882a593Smuzhiyun echo $(real-prereqs), \ 41*4882a593Smuzhiyun $(find_cmd)) > $$f ; \ 42*4882a593Smuzhiyun $(DT_MK_SCHEMA) -j $(DT_MK_SCHEMA_FLAGS) @$$f > $@ ; \ 43*4882a593Smuzhiyun rm -f $$f 44*4882a593Smuzhiyun 45*4882a593Smuzhiyundefine rule_chkdt 46*4882a593Smuzhiyun $(if $(DT_SCHEMA_LINT),$(call cmd,yamllint),) 47*4882a593Smuzhiyun $(call cmd,chk_bindings) 48*4882a593Smuzhiyun $(call cmd,mk_schema) 49*4882a593Smuzhiyunendef 50*4882a593Smuzhiyun 51*4882a593SmuzhiyunDT_DOCS = $(shell $(find_cmd) | sed -e 's|^$(srctree)/||') 52*4882a593Smuzhiyun 53*4882a593Smuzhiyunoverride DTC_FLAGS := \ 54*4882a593Smuzhiyun -Wno-avoid_unnecessary_addr_size \ 55*4882a593Smuzhiyun -Wno-graph_child_address \ 56*4882a593Smuzhiyun -Wno-interrupt_provider 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun$(obj)/processed-schema-examples.json: $(DT_DOCS) $(src)/.yamllint check_dtschema_version FORCE 59*4882a593Smuzhiyun $(call if_changed_rule,chkdt) 60*4882a593Smuzhiyun 61*4882a593Smuzhiyunifeq ($(DT_SCHEMA_FILES),) 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun# Unless DT_SCHEMA_FILES is specified, use the full schema for dtbs_check too. 64*4882a593Smuzhiyun# Just copy processed-schema-examples.json 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun$(obj)/processed-schema.json: $(obj)/processed-schema-examples.json FORCE 67*4882a593Smuzhiyun $(call if_changed,copy) 68*4882a593Smuzhiyun 69*4882a593SmuzhiyunDT_SCHEMA_FILES = $(DT_DOCS) 70*4882a593Smuzhiyun 71*4882a593Smuzhiyunelse 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun# If DT_SCHEMA_FILES is specified, use it for processed-schema.json 74*4882a593Smuzhiyun 75*4882a593Smuzhiyun$(obj)/processed-schema.json: DT_MK_SCHEMA_FLAGS := -u 76*4882a593Smuzhiyun$(obj)/processed-schema.json: $(DT_SCHEMA_FILES) check_dtschema_version FORCE 77*4882a593Smuzhiyun $(call if_changed,mk_schema) 78*4882a593Smuzhiyun 79*4882a593Smuzhiyunendif 80*4882a593Smuzhiyun 81*4882a593Smuzhiyunextra-$(CHECK_DT_BINDING) += processed-schema-examples.json 82*4882a593Smuzhiyunextra-$(CHECK_DTBS) += processed-schema.json 83*4882a593Smuzhiyunextra-$(CHECK_DT_BINDING) += $(patsubst $(src)/%.yaml,%.example.dts, $(DT_SCHEMA_FILES)) 84*4882a593Smuzhiyunextra-$(CHECK_DT_BINDING) += $(patsubst $(src)/%.yaml,%.example.dt.yaml, $(DT_SCHEMA_FILES)) 85*4882a593Smuzhiyun 86*4882a593Smuzhiyun# Hack: avoid 'Argument list too long' error for 'make clean'. Remove most of 87*4882a593Smuzhiyun# build artifacts here before they are processed by scripts/Makefile.clean 88*4882a593Smuzhiyunclean-files = $(shell find $(obj) \( -name '*.example.dts' -o \ 89*4882a593Smuzhiyun -name '*.example.dt.yaml' \) -delete 2>/dev/null) 90