mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 16:48:26 +02:00 
			
		
		
		
	kbuild: Add support for DT binding schema checks
This adds the build infrastructure for checking DT binding schema documents and validating dts files using the binding schema. Check DT binding schema documents: make dt_binding_check Build dts files and check using DT binding schema: make dtbs_check Optionally, DT_SCHEMA_FILES can be passed in with a schema file(s) to use for validation. This makes it easier to find and fix errors generated by a specific schema. Currently, the validation targets are separate from a normal build to avoid a hard dependency on the external DT schema project and because there are lots of warnings generated. Cc: Jonathan Corbet <corbet@lwn.net> Cc: Mark Rutland <mark.rutland@arm.com> Acked-by: Masahiro Yamada <yamada.masahiro@socionext.com> Cc: Michal Marek <michal.lkml@markovi.net> Cc: linux-doc@vger.kernel.org Cc: devicetree@vger.kernel.org Cc: linux-kbuild@vger.kernel.org Signed-off-by: Rob Herring <robh@kernel.org>
This commit is contained in:
		
							parent
							
								
									ccda4af0f4
								
							
						
					
					
						commit
						4f0e3a57d6
					
				
					 7 changed files with 67 additions and 6 deletions
				
			
		
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							|  | @ -15,6 +15,7 @@ | |||
| *.bin | ||||
| *.bz2 | ||||
| *.c.[012]*.* | ||||
| *.dt.yaml | ||||
| *.dtb | ||||
| *.dtb.S | ||||
| *.dwo | ||||
|  |  | |||
|  | @ -2,7 +2,7 @@ | |||
| # Makefile for Sphinx documentation
 | ||||
| #
 | ||||
| 
 | ||||
| subdir-y := | ||||
| subdir-y := devicetree/bindings/ | ||||
| 
 | ||||
| # You can set these variables from the command line.
 | ||||
| SPHINXBUILD   = sphinx-build | ||||
|  |  | |||
							
								
								
									
										2
									
								
								Documentation/devicetree/bindings/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								Documentation/devicetree/bindings/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,2 @@ | |||
| *.example.dts | ||||
| processed-schema.yaml | ||||
							
								
								
									
										27
									
								
								Documentation/devicetree/bindings/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								Documentation/devicetree/bindings/Makefile
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,27 @@ | |||
| # 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_MK_SCHEMA_FLAGS := $(if $(DT_SCHEMA_FILES), -u) | ||||
| 
 | ||||
| quiet_cmd_chk_binding = CHKDT   $(patsubst $(srctree)/%,%,$<) | ||||
|       cmd_chk_binding = $(DT_DOC_CHECKER) $< ; \
 | ||||
|                         $(DT_EXTRACT_EX) $< > $@ | ||||
| 
 | ||||
| $(obj)/%.example.dts: $(src)/%.yaml FORCE | ||||
| 	$(call if_changed,chk_binding) | ||||
| 
 | ||||
| DT_TMP_SCHEMA := processed-schema.yaml | ||||
| extra-y += $(DT_TMP_SCHEMA) | ||||
| 
 | ||||
| quiet_cmd_mk_schema = SCHEMA  $@ | ||||
|       cmd_mk_schema = $(DT_MK_SCHEMA) $(DT_MK_SCHEMA_FLAGS) -o $@ $(filter-out FORCE, $^) | ||||
| 
 | ||||
| DT_DOCS = $(shell cd $(srctree)/$(src) && find * -name '*.yaml') | ||||
| DT_SCHEMA_FILES ?= $(addprefix $(src)/,$(DT_DOCS)) | ||||
| 
 | ||||
| extra-y += $(patsubst $(src)/%.yaml,%.example.dts, $(DT_SCHEMA_FILES)) | ||||
| extra-y += $(patsubst $(src)/%.yaml,%.example.dtb, $(DT_SCHEMA_FILES)) | ||||
| 
 | ||||
| $(obj)/$(DT_TMP_SCHEMA): $(DT_SCHEMA_FILES) FORCE | ||||
| 	$(call if_changed,mk_schema) | ||||
							
								
								
									
										13
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								Makefile
									
									
									
									
									
								
							|  | @ -1232,10 +1232,13 @@ ifneq ($(dtstree),) | |||
| %.dtb: prepare3 scripts_dtc | ||||
| 	$(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@ | ||||
| 
 | ||||
| PHONY += dtbs dtbs_install | ||||
| dtbs: prepare3 scripts_dtc | ||||
| PHONY += dtbs dtbs_install dt_binding_check | ||||
| dtbs dtbs_check: prepare3 scripts_dtc | ||||
| 	$(Q)$(MAKE) $(build)=$(dtstree) | ||||
| 
 | ||||
| dtbs_check: export CHECK_DTBS=1 | ||||
| dtbs_check: dt_binding_check | ||||
| 
 | ||||
| dtbs_install: | ||||
| 	$(Q)$(MAKE) $(dtbinst)=$(dtstree) | ||||
| 
 | ||||
|  | @ -1249,6 +1252,9 @@ PHONY += scripts_dtc | |||
| scripts_dtc: scripts_basic | ||||
| 	$(Q)$(MAKE) $(build)=scripts/dtc | ||||
| 
 | ||||
| dt_binding_check: scripts_dtc | ||||
| 	$(Q)$(MAKE) $(build)=Documentation/devicetree/bindings | ||||
| 
 | ||||
| # ---------------------------------------------------------------------------
 | ||||
| # Modules
 | ||||
| 
 | ||||
|  | @ -1611,7 +1617,8 @@ clean: $(clean-dirs) | |||
| 	$(call cmd,rmfiles) | ||||
| 	@find $(if $(KBUILD_EXTMOD), $(KBUILD_EXTMOD), .) $(RCS_FIND_IGNORE) \
 | ||||
| 		\( -name '*.[aios]' -o -name '*.ko' -o -name '.*.cmd' \
 | ||||
| 		-o -name '*.ko.*' -o -name '*.dtb' -o -name '*.dtb.S' \
 | ||||
| 		-o -name '*.ko.*' \
 | ||||
| 		-o -name '*.dtb' -o -name '*.dtb.S' -o -name '*.dt.yaml' \
 | ||||
| 		-o -name '*.dwo' -o -name '*.lst' \
 | ||||
| 		-o -name '*.su'  \
 | ||||
| 		-o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \
 | ||||
|  |  | |||
|  | @ -61,6 +61,11 @@ real-obj-m := $(foreach m, $(obj-m), $(if $(strip $($(m:.o=-objs)) $($(m:.o=-y)) | |||
| extra-y				+= $(dtb-y) | ||||
| extra-$(CONFIG_OF_ALL_DTBS)	+= $(dtb-) | ||||
| 
 | ||||
| ifneq ($(CHECK_DTBS),) | ||||
| extra-y += $(patsubst %.dtb,%.dt.yaml, $(dtb-y)) | ||||
| extra-$(CONFIG_OF_ALL_DTBS) += $(patsubst %.dtb,%.dt.yaml, $(dtb-)) | ||||
| endif | ||||
| 
 | ||||
| # Add subdir path | ||||
| 
 | ||||
| extra-y		:= $(addprefix $(obj)/,$(extra-y)) | ||||
|  | @ -284,13 +289,28 @@ $(obj)/%.dtb.S: $(obj)/%.dtb FORCE | |||
| quiet_cmd_dtc = DTC     $@ | ||||
| cmd_dtc = mkdir -p $(dir ${dtc-tmp}) ; \ | ||||
| 	$(HOSTCC) -E $(dtc_cpp_flags) -x assembler-with-cpp -o $(dtc-tmp) $< ; \ | ||||
| 	$(DTC) -O dtb -o $@ -b 0 \ | ||||
| 	$(DTC) -O $(2) -o $@ -b 0 \ | ||||
| 		$(addprefix -i,$(dir $<) $(DTC_INCLUDE)) $(DTC_FLAGS) \ | ||||
| 		-d $(depfile).dtc.tmp $(dtc-tmp) ; \ | ||||
| 	cat $(depfile).pre.tmp $(depfile).dtc.tmp > $(depfile) | ||||
| 
 | ||||
| $(obj)/%.dtb: $(src)/%.dts $(DTC) FORCE | ||||
| 	$(call if_changed_dep,dtc) | ||||
| 	$(call if_changed_dep,dtc,dtb) | ||||
| 
 | ||||
| DT_CHECKER ?= dt-validate | ||||
| DT_BINDING_DIR := Documentation/devicetree/bindings | ||||
| DT_TMP_SCHEMA := $(objtree)/$(DT_BINDING_DIR)/processed-schema.yaml | ||||
| 
 | ||||
| quiet_cmd_dtb_check =	CHECK   $@ | ||||
|       cmd_dtb_check =	$(DT_CHECKER) -p $(DT_TMP_SCHEMA) $@ ; | ||||
| 
 | ||||
| define rule_dtc_dt_yaml | ||||
| 	$(call cmd_and_fixdep,dtc,yaml)		\ | ||||
| 	$(call echo-cmd,dtb_check) $(cmd_dtb_check) | ||||
| endef | ||||
| 
 | ||||
| $(obj)/%.dt.yaml: $(src)/%.dts $(DTC) $(DT_TMP_SCHEMA) FORCE | ||||
| 	$(call if_changed_rule,dtc_dt_yaml) | ||||
| 
 | ||||
| dtc-tmp = $(subst $(comma),_,$(dot-target).dts.tmp) | ||||
| 
 | ||||
|  |  | |||
|  | @ -12,6 +12,10 @@ dtc-objs	+= dtc-lexer.lex.o dtc-parser.tab.o | |||
| HOST_EXTRACFLAGS := -I$(src)/libfdt | ||||
| 
 | ||||
| ifeq ($(wildcard /usr/include/yaml.h),) | ||||
| ifneq ($(CHECK_DTBS),) | ||||
| $(error dtc needs libyaml for DT schema validation support. \ | ||||
| 	Install the necessary libyaml development package.) | ||||
| endif | ||||
| HOST_EXTRACFLAGS += -DNO_YAML | ||||
| else | ||||
| dtc-objs	+= yamltree.o | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Rob Herring
						Rob Herring