[PATCH v2] make: check if DTC variable is an absolute path

Rasmus Villemoes rasmus.villemoes at prevas.dk
Fri Oct 20 10:57:27 CEST 2023


On 19/10/2023 15.04, Richard Marko wrote:
> If we try to build using external dtc using
> 
>> make DTC=dtc
> 
> we get a confusing error like
> 
>> make[2]: *** No rule to make target 'arch/x86/dts/bayleybay.dtb',
>> needed by 'dtbs'.  Stop.
> 
> Workaround is to use
> 
>> make DTC=$( which dtc )
> 
> which gives make a full path, so the dependency
> is satisfied.
> 
> This was introduced by commit d50af66
> kbuild: add dtc as dependency on .dtb file
> 
> This patch checks that DTC is an absolute path
> and fails early if not.
> 
> We also replace `which` in `scripts/dtc-version.sh`
> with POSIXy `command -v`.

I think this patch is very hard to read because of the initial check
that moves all the other checks a level down and increases the indent.

I was more thinking you could let make do the work instead of doing it
in embedded shell script. Something like

diff --git a/Makefile b/Makefile
index aeaa6987360..f313e9dba66 100644
--- a/Makefile
+++ b/Makefile
@@ -419,6 +419,11 @@ PYTHON3            ?= python3
 DTC_INTREE     := $(objtree)/scripts/dtc/dtc
 DTC            ?= $(DTC_INTREE)
 DTC_MIN_VERSION        := 010406
+ifneq ($(DTC),$(DTC_INTREE))
+ifneq ($(patsubst /%,,$(DTC)),)
+$(error "$$(DTC) must be an absolute path")
+endif
+endif

 CHECK          = sparse

seems to work (though I have only tested it very lightly). One could
also add

ifeq ($(wildcard $(DTC)),)
$(error "$$(DTC) = $(DTC) does not exist")
endif

inside the outer ifneq to make the failure very explicit.

Rasmus



More information about the U-Boot mailing list