2018-09-06 13:26:07 -05:00
# SPDX-License-Identifier: GPL-2.0
DT_DOC_CHECKER ?= dt-doc-validate
DT_EXTRACT_EX ?= dt-extract-example
DT_MK_SCHEMA ?= dt-mk-schema
2020-10-09 12:05:57 -05:00
DT_SCHEMA_LINT = $( shell which yamllint)
2020-08-13 13:34:14 -06:00
DT_SCHEMA_MIN_VERSION = 2020.8.1
2020-03-05 16:37:48 -06:00
PHONY += check_dtschema_version
check_dtschema_version :
@{ echo $( DT_SCHEMA_MIN_VERSION) ; \
$( DT_DOC_CHECKER) --version 2>/dev/null || echo 0; } | sort -VC || \
{ echo " ERROR: dtschema minimum version is v $( DT_SCHEMA_MIN_VERSION) " >& 2; false; }
2020-08-06 16:50:09 -06:00
quiet_cmd_extract_ex = DTEX $@
cmd_extract_ex = $( DT_EXTRACT_EX) $< > $@
2018-09-06 13:26:07 -05:00
2020-03-05 16:37:48 -06:00
$(obj)/%.example.dts : $( src ) /%.yaml check_dtschema_version FORCE
2020-08-06 16:50:09 -06:00
$( call if_changed,extract_ex)
2018-09-06 13:26:07 -05:00
2020-02-28 18:37:30 -06:00
# Use full schemas when checking %.example.dts
2020-08-13 14:26:11 +01:00
DT_TMP_SCHEMA := $( obj) /processed-schema-examples.json
2018-09-06 13:26:07 -05:00
2020-04-21 15:42:02 -05:00
find_cmd = find $( srctree) /$( src) \( -name '*.yaml' ! \
-name 'processed-schema*' ! \
-name '*.example.dt.yaml' \)
2020-10-09 12:05:57 -05:00
quiet_cmd_yamllint = LINT $( src)
cmd_yamllint = $( find_cmd) | \
xargs $( DT_SCHEMA_LINT) -f parsable -c $( srctree) /$( src) /.yamllint
2020-08-06 16:50:09 -06:00
quiet_cmd_chk_bindings = CHKDT $@
cmd_chk_bindings = $( find_cmd) | \
xargs -n200 -P$$ ( nproc) $( DT_DOC_CHECKER) -u $( srctree) /$( src)
2018-09-06 13:26:07 -05:00
quiet_cmd_mk_schema = SCHEMA $@
2020-08-13 14:26:11 +01:00
cmd_mk_schema = f = $$ ( mktemp) ; \
2020-04-21 15:42:02 -05:00
$( if $( DT_MK_SCHEMA_FLAGS) , \
echo $( real-prereqs) , \
2020-08-13 14:26:11 +01:00
$( find_cmd) ) > $$ f ; \
$( DT_MK_SCHEMA) -j $( DT_MK_SCHEMA_FLAGS) @$$ f > $@ ; \
rm -f $$ f
2018-09-06 13:26:07 -05:00
2020-08-06 16:50:09 -06:00
d e f i n e r u l e _ c h k d t
2020-10-09 12:05:57 -05:00
$( if $( DT_SCHEMA_LINT) ,$( call cmd,yamllint) ,)
2020-08-06 16:50:09 -06:00
$( call cmd,chk_bindings)
$( call cmd,mk_schema)
e n d e f
2020-04-21 15:42:02 -05:00
DT_DOCS = $( shell $( find_cmd) | sed -e 's|^$(srctree)/||' )
2019-01-22 09:10:10 -06:00
2020-02-28 18:37:31 -06:00
override DTC_FLAGS : = \
-Wno-avoid_unnecessary_addr_size \
2020-06-29 12:15:13 -06:00
-Wno-graph_child_address \
-Wno-interrupt_provider
2020-02-28 18:37:31 -06:00
2020-10-09 12:05:57 -05:00
$(obj)/processed-schema-examples.json : $( DT_DOCS ) $( src ) /.yamllint check_dtschema_version FORCE
2020-08-06 16:50:09 -06:00
$( call if_changed_rule,chkdt)
2018-09-06 13:26:07 -05:00
2020-06-26 02:04:33 +09:00
i f e q ( $( DT_SCHEMA_FILES ) , )
# Unless DT_SCHEMA_FILES is specified, use the full schema for dtbs_check too.
2020-08-13 14:26:11 +01:00
# Just copy processed-schema-examples.json
2020-06-26 02:04:33 +09:00
2020-08-13 14:26:11 +01:00
$(obj)/processed-schema.json : $( obj ) /processed -schema -examples .json FORCE
2020-06-26 02:04:33 +09:00
$( call if_changed,copy)
DT_SCHEMA_FILES = $( DT_DOCS)
e l s e
2020-08-13 14:26:11 +01:00
# If DT_SCHEMA_FILES is specified, use it for processed-schema.json
2020-06-26 02:04:33 +09:00
2020-08-13 14:26:11 +01:00
$(obj)/processed-schema.json : DT_MK_SCHEMA_FLAGS := -u
$(obj)/processed-schema.json : $( DT_SCHEMA_FILES ) check_dtschema_version FORCE
2018-09-06 13:26:07 -05:00
$( call if_changed,mk_schema)
2019-11-13 09:46:19 -06:00
2020-06-26 02:04:33 +09:00
e n d i f
2020-08-13 14:26:11 +01:00
extra-$(CHECK_DT_BINDING) += processed-schema-examples.json
extra-$(CHECK_DTBS) += processed-schema.json
2020-08-06 16:50:09 -06:00
extra-$(CHECK_DT_BINDING) += $( patsubst $( src) /%.yaml,%.example.dts, $( DT_SCHEMA_FILES) )
extra-$(CHECK_DT_BINDING) += $( patsubst $( src) /%.yaml,%.example.dt.yaml, $( DT_SCHEMA_FILES) )
2020-06-26 02:04:31 +09:00
# Hack: avoid 'Argument list too long' error for 'make clean'. Remove most of
# build artifacts here before they are processed by scripts/Makefile.clean
clean-files = $( shell find $( obj) \( -name '*.example.dts' -o \
-name '*.example.dt.yaml' \) -delete 2>/dev/null)