mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-18 06:15:12 +00:00
c59773d204
dt-validate has an option to warn on any compatible strings which don't match any schema. The option has recently been improved to fix false positives, so let's enable the option. This is useful for tracking compatibles which are undocumented or not yet converted to DT schema. Previously, the only check of undocumented compatible strings has been an imperfect checkpatch.pl check. The option is enabled by default for 'dtbs_check'. This will add more warnings, but some platforms are down to only a handful of these warnings (good job!). There's about 100 cases in the binding examples, so the option is disabled until these are fixed. In the meantime, they can be checked with: make DT_CHECKER_FLAGS=-m dt_binding_check Cc: Maxime Ripard <mripard@kernel.org> Cc: Masahiro Yamada <masahiroy@kernel.org> Cc: Michal Marek <michal.lkml@markovi.net> Cc: linux-kbuild@vger.kernel.org Signed-off-by: Rob Herring <robh@kernel.org> Link: https://lore.kernel.org/r/20210311233640.1581526-2-robh@kernel.org
93 lines
3.1 KiB
Makefile
93 lines
3.1 KiB
Makefile
# SPDX-License-Identifier: GPL-2.0
|
|
DT_DOC_CHECKER ?= dt-doc-validate
|
|
DT_EXTRACT_EX ?= dt-extract-example
|
|
DT_MK_SCHEMA ?= dt-mk-schema
|
|
|
|
DT_SCHEMA_LINT = $(shell which yamllint)
|
|
|
|
DT_SCHEMA_MIN_VERSION = 2021.2.1
|
|
|
|
PHONY += check_dtschema_version
|
|
check_dtschema_version:
|
|
@{ echo $(DT_SCHEMA_MIN_VERSION); \
|
|
$(DT_DOC_CHECKER) --version 2>/dev/null || echo 0; } | sort -Vc >/dev/null || \
|
|
{ echo "ERROR: dtschema minimum version is v$(DT_SCHEMA_MIN_VERSION)" >&2; false; }
|
|
|
|
quiet_cmd_extract_ex = DTEX $@
|
|
cmd_extract_ex = $(DT_EXTRACT_EX) $< > $@
|
|
|
|
$(obj)/%.example.dts: $(src)/%.yaml check_dtschema_version FORCE
|
|
$(call if_changed,extract_ex)
|
|
|
|
# Use full schemas when checking %.example.dts
|
|
DT_TMP_SCHEMA := $(obj)/processed-schema-examples.json
|
|
|
|
find_cmd = find $(srctree)/$(src) \( -name '*.yaml' ! \
|
|
-name 'processed-schema*' ! \
|
|
-name '*.example.dt.yaml' \)
|
|
|
|
quiet_cmd_yamllint = LINT $(src)
|
|
cmd_yamllint = ($(find_cmd) | \
|
|
xargs $(DT_SCHEMA_LINT) -f parsable -c $(srctree)/$(src)/.yamllint) || true
|
|
|
|
quiet_cmd_chk_bindings = CHKDT $@
|
|
cmd_chk_bindings = ($(find_cmd) | \
|
|
xargs -n200 -P$$(nproc) $(DT_DOC_CHECKER) -u $(srctree)/$(src)) || true
|
|
|
|
quiet_cmd_mk_schema = SCHEMA $@
|
|
cmd_mk_schema = f=$$(mktemp) ; \
|
|
$(if $(DT_MK_SCHEMA_FLAGS), \
|
|
printf '%s\n' $(real-prereqs), \
|
|
$(find_cmd)) > $$f ; \
|
|
$(DT_MK_SCHEMA) -j $(DT_MK_SCHEMA_FLAGS) @$$f > $@ ; \
|
|
rm -f $$f
|
|
|
|
define rule_chkdt
|
|
$(if $(DT_SCHEMA_LINT),$(call cmd,yamllint),)
|
|
$(call cmd,chk_bindings)
|
|
$(call cmd,mk_schema)
|
|
endef
|
|
|
|
DT_DOCS = $(shell $(find_cmd) | sed -e 's|^$(srctree)/||')
|
|
|
|
override DTC_FLAGS := \
|
|
-Wno-avoid_unnecessary_addr_size \
|
|
-Wno-graph_child_address \
|
|
-Wno-interrupt_provider
|
|
|
|
# Disable undocumented compatible checks until warning free
|
|
override DT_CHECKER_FLAGS ?=
|
|
|
|
$(obj)/processed-schema-examples.json: $(DT_DOCS) $(src)/.yamllint check_dtschema_version FORCE
|
|
$(call if_changed_rule,chkdt)
|
|
|
|
ifeq ($(DT_SCHEMA_FILES),)
|
|
|
|
# Unless DT_SCHEMA_FILES is specified, use the full schema for dtbs_check too.
|
|
# Just copy processed-schema-examples.json
|
|
|
|
$(obj)/processed-schema.json: $(obj)/processed-schema-examples.json FORCE
|
|
$(call if_changed,copy)
|
|
|
|
DT_SCHEMA_FILES = $(DT_DOCS)
|
|
|
|
else
|
|
|
|
# If DT_SCHEMA_FILES is specified, use it for processed-schema.json
|
|
|
|
$(obj)/processed-schema.json: DT_MK_SCHEMA_FLAGS := -u
|
|
$(obj)/processed-schema.json: $(DT_SCHEMA_FILES) check_dtschema_version FORCE
|
|
$(call if_changed,mk_schema)
|
|
|
|
endif
|
|
|
|
always-$(CHECK_DT_BINDING) += processed-schema-examples.json
|
|
always-$(CHECK_DTBS) += processed-schema.json
|
|
always-$(CHECK_DT_BINDING) += $(patsubst $(src)/%.yaml,%.example.dts, $(DT_SCHEMA_FILES))
|
|
always-$(CHECK_DT_BINDING) += $(patsubst $(src)/%.yaml,%.example.dt.yaml, $(DT_SCHEMA_FILES))
|
|
|
|
# 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)
|