@@ -3,34 +3,50 @@ DT_DOC_CHECKER ?= dt-doc-validate
33DT_EXTRACT_EX ?= dt-extract-example
44DT_MK_SCHEMA ?= dt-mk-schema
55
6- DT_SCHEMA_MIN_VERSION = 2020.5
6+ DT_SCHEMA_LINT = $(shell which yamllint)
7+
8+ DT_SCHEMA_MIN_VERSION = 2020.8.1
79
810PHONY += check_dtschema_version
911check_dtschema_version :
1012 @{ echo $(DT_SCHEMA_MIN_VERSION ) ; \
1113 $(DT_DOC_CHECKER ) --version 2> /dev/null || echo 0; } | sort -VC || \
1214 { echo " ERROR: dtschema minimum version is v$( DT_SCHEMA_MIN_VERSION) " >&2 ; false ; }
1315
14- quiet_cmd_chk_binding = CHKDT $(patsubst $(srctree ) /% ,% ,$< )
15- cmd_chk_binding = $(DT_DOC_CHECKER ) -u $(srctree ) /$(src ) $< ; \
16- $(DT_EXTRACT_EX ) $< > $@
16+ quiet_cmd_extract_ex = DTEX $@
17+ cmd_extract_ex = $(DT_EXTRACT_EX ) $< > $@
1718
1819$(obj ) /% .example.dts : $(src ) /% .yaml check_dtschema_version FORCE
19- $(call if_changed,chk_binding )
20+ $(call if_changed,extract_ex )
2021
2122# Use full schemas when checking %.example.dts
22- DT_TMP_SCHEMA := $(obj ) /processed-schema-examples.yaml
23+ DT_TMP_SCHEMA := $(obj ) /processed-schema-examples.json
2324
2425find_cmd = find $(srctree ) /$(src ) \( -name '*.yaml' ! \
2526 -name 'processed-schema*' ! \
2627 -name '*.example.dt.yaml' \)
2728
29+ quiet_cmd_yamllint = LINT $(src )
30+ cmd_yamllint = $(find_cmd ) | \
31+ xargs $(DT_SCHEMA_LINT ) -f parsable -c $(srctree ) /$(src ) /.yamllint
32+
33+ quiet_cmd_chk_bindings = CHKDT $@
34+ cmd_chk_bindings = $(find_cmd ) | \
35+ xargs -n200 -P$$(nproc ) $(DT_DOC_CHECKER ) -u $(srctree ) /$(src )
36+
2837quiet_cmd_mk_schema = SCHEMA $@
29- cmd_mk_schema = rm -f $@ ; \
38+ cmd_mk_schema = f= $$( mktemp ) ; \
3039 $(if $(DT_MK_SCHEMA_FLAGS ) , \
3140 echo $(real-prereqs ) , \
32- $(find_cmd ) ) | \
33- xargs $(DT_MK_SCHEMA ) $(DT_MK_SCHEMA_FLAGS ) >> $@
41+ $(find_cmd ) ) > $$f ; \
42+ $(DT_MK_SCHEMA ) -j $(DT_MK_SCHEMA_FLAGS ) @$$f > $@ ; \
43+ rm -f $$f
44+
45+ define rule_chkdt
46+ $(if $(DT_SCHEMA_LINT ) ,$(call cmd,yamllint) ,)
47+ $(call cmd,chk_bindings)
48+ $(call cmd,mk_schema)
49+ endef
3450
3551DT_DOCS = $(shell $(find_cmd ) | sed -e 's|^$(srctree ) /||')
3652
@@ -39,33 +55,33 @@ override DTC_FLAGS := \
3955 -Wno-graph_child_address \
4056 -Wno-interrupt_provider
4157
42- $(obj ) /processed-schema-examples.yaml : $(DT_DOCS ) check_dtschema_version FORCE
43- $(call if_changed,mk_schema )
58+ $(obj ) /processed-schema-examples.json : $(DT_DOCS ) $( src ) /.yamllint check_dtschema_version FORCE
59+ $(call if_changed_rule,chkdt )
4460
4561ifeq ($(DT_SCHEMA_FILES ) ,)
4662
4763# Unless DT_SCHEMA_FILES is specified, use the full schema for dtbs_check too.
48- # Just copy processed-schema-examples.yaml
64+ # Just copy processed-schema-examples.json
4965
50- $(obj ) /processed-schema.yaml : $(obj ) /processed-schema-examples.yaml FORCE
66+ $(obj ) /processed-schema.json : $(obj ) /processed-schema-examples.json FORCE
5167 $(call if_changed,copy)
5268
5369DT_SCHEMA_FILES = $(DT_DOCS )
5470
5571else
5672
57- # If DT_SCHEMA_FILES is specified, use it for processed-schema.yaml
73+ # If DT_SCHEMA_FILES is specified, use it for processed-schema.json
5874
59- $(obj ) /processed-schema.yaml : DT_MK_SCHEMA_FLAGS := -u
60- $(obj ) /processed-schema.yaml : $(DT_SCHEMA_FILES ) check_dtschema_version FORCE
75+ $(obj ) /processed-schema.json : DT_MK_SCHEMA_FLAGS := -u
76+ $(obj ) /processed-schema.json : $(DT_SCHEMA_FILES ) check_dtschema_version FORCE
6177 $(call if_changed,mk_schema)
6278
6379endif
6480
81+ extra-$(CHECK_DT_BINDING) += processed-schema-examples.json
82+ extra-$(CHECK_DTBS) += processed-schema.json
6583extra-$(CHECK_DT_BINDING) += $(patsubst $(src ) /% .yaml,% .example.dts, $(DT_SCHEMA_FILES ) )
6684extra-$(CHECK_DT_BINDING) += $(patsubst $(src ) /% .yaml,% .example.dt.yaml, $(DT_SCHEMA_FILES ) )
67- extra-$(CHECK_DT_BINDING) += processed-schema-examples.yaml
68- extra-$(CHECK_DTBS) += processed-schema.yaml
6985
7086# Hack: avoid 'Argument list too long' error for 'make clean'. Remove most of
7187# build artifacts here before they are processed by scripts/Makefile.clean
0 commit comments