xref: /optee_os/mk/checkconf.mk (revision fe52b1f588403d8145ef1de326985460a3b1a2da)
1*fe52b1f5SJerome Forissier# Generate/check/update a .h file to reflect the values of Makefile
2*fe52b1f5SJerome Forissier# variables
3*fe52b1f5SJerome Forissier#
4*fe52b1f5SJerome Forissier# Example usage (by default, check-conf-h will consider all CFG_*
5*fe52b1f5SJerome Forissier# variables):
6*fe52b1f5SJerome Forissier#
7*fe52b1f5SJerome Forissier# path/to/conf.h: FORCE
8*fe52b1f5SJerome Forissier#	$(call check-conf-h)
9*fe52b1f5SJerome Forissier#
10*fe52b1f5SJerome Forissier# Or, to include only the variables with the given prefix(es):
11*fe52b1f5SJerome Forissier#
12*fe52b1f5SJerome Forissier# path/to/crypto_config.h: FORCE
13*fe52b1f5SJerome Forissier#	$(call check-conf-h,CFG_CRYPTO_ CRYPTO_)
14*fe52b1f5SJerome Forissier
15*fe52b1f5SJerome Forissierdefine check-conf-h
16*fe52b1f5SJerome Forissier	$(q)set -e;						\
17*fe52b1f5SJerome Forissier	echo '  CHK     $@';					\
18*fe52b1f5SJerome Forissier	cnf="$(strip $(foreach var,				\
19*fe52b1f5SJerome Forissier		$(call cfg-vars-by-prefix,$1),			\
20*fe52b1f5SJerome Forissier		$(call cfg-make-define,$(var))))";		\
21*fe52b1f5SJerome Forissier	guard="_`echo $@ | tr -- -/. ___`_";			\
22*fe52b1f5SJerome Forissier	mkdir -p $(dir $@);					\
23*fe52b1f5SJerome Forissier	echo "#ifndef $${guard}" >$@.tmp;			\
24*fe52b1f5SJerome Forissier	echo "#define $${guard}" >>$@.tmp;			\
25*fe52b1f5SJerome Forissier	echo -n "$${cnf}" | sed 's/_nl_ */\n/g' >>$@.tmp;	\
26*fe52b1f5SJerome Forissier	echo "#endif" >>$@.tmp;					\
27*fe52b1f5SJerome Forissier	if [ -r $@ ] && cmp -s $@ $@.tmp; then			\
28*fe52b1f5SJerome Forissier		rm -f $@.tmp;					\
29*fe52b1f5SJerome Forissier	else							\
30*fe52b1f5SJerome Forissier		echo '  UPD     $@';				\
31*fe52b1f5SJerome Forissier		mv $@.tmp $@;					\
32*fe52b1f5SJerome Forissier	fi
33*fe52b1f5SJerome Forissierendef
34*fe52b1f5SJerome Forissier
35*fe52b1f5SJerome Forissierdefine cfg-vars-by-prefix
36*fe52b1f5SJerome Forissier	$(strip $(if $(1),$(call _cfg-vars-by-prefix,$(1)),
37*fe52b1f5SJerome Forissier			  $(call _cfg-vars-by-prefix,CFG_)))
38*fe52b1f5SJerome Forissierendef
39*fe52b1f5SJerome Forissier
40*fe52b1f5SJerome Forissierdefine _cfg-vars-by-prefix
41*fe52b1f5SJerome Forissier	$(sort $(foreach prefix,$(1),$(filter $(prefix)%,$(.VARIABLES))))
42*fe52b1f5SJerome Forissierendef
43*fe52b1f5SJerome Forissier
44*fe52b1f5SJerome Forissier# Convert a makefile variable to a #define
45*fe52b1f5SJerome Forissier# <undefined>, n => <undefined>
46*fe52b1f5SJerome Forissier# y              => 1
47*fe52b1f5SJerome Forissier# <other value>  => <other value>
48*fe52b1f5SJerome Forissierdefine cfg-make-define
49*fe52b1f5SJerome Forissier	$(strip $(if $(filter y,$($1)),
50*fe52b1f5SJerome Forissier		     #define $1 1 /* '$($1)' */_nl_,
51*fe52b1f5SJerome Forissier		     $(if $(filter xn x,x$($1)),
52*fe52b1f5SJerome Forissier			  /* $1 is not set ('$($1)') */_nl_,
53*fe52b1f5SJerome Forissier			  #define $1 $($1) /* '$($1)' */_nl_)))
54*fe52b1f5SJerome Forissierendef
55