[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Minios-devel] [UNIKRAFT PATCH v2 05/23] kbuild: Add build helper function from Linux
Import Makefile.rules from scripts/kbuild.include. Tag: v5.2 Signed-off-by: Sharan Santhanam <sharan.santhanam@xxxxxxxxx> --- support/kconfig.new/Makefile.br | 1 + support/kconfig.new/Makefile.rules | 84 +++++++++++++++ .../03-include-makefile-helper-from-kernel | 102 ++++++++++++++++++ 3 files changed, 187 insertions(+) create mode 100644 support/kconfig.new/Makefile.rules create mode 100644 support/kconfig.new/patches/03-include-makefile-helper-from-kernel diff --git a/support/kconfig.new/Makefile.br b/support/kconfig.new/Makefile.br index 41c5ce16..0fdbe9ab 100644 --- a/support/kconfig.new/Makefile.br +++ b/support/kconfig.new/Makefile.br @@ -4,6 +4,7 @@ top_builddir=../../ srctree := . obj ?= . +include Makefile.rules include Makefile #HOSTCFLAGS+=-Dinline="" -include foo.h -include $(obj)/.depend diff --git a/support/kconfig.new/Makefile.rules b/support/kconfig.new/Makefile.rules new file mode 100644 index 00000000..78a9c81d --- /dev/null +++ b/support/kconfig.new/Makefile.rules @@ -0,0 +1,84 @@ +kecho := echo +comma := , + + +dot-target = $(dir $@).$(notdir $@) + +any-prereq = $(filter-out $(PHONY),$?) $(filter-out $(PHONY) $(wildcard $^),$^) + +arg-check = $(if $(strip $(cmd_$@)),,1) + +make-cmd = $(call escsq,$(subst $(pound),$$(pound),$(subst $$,$$$$,$(cmd_$(1))))) + +# printing commands +cmd = @set -e; $(echo-cmd) $(cmd_$(1)) + +depfile = $(subst $(comma),_,$(dot-target).d) +depflags = -Wp$(comma)-MD$(comma)$(call dot-target) + +cmd_and_fixdep = \ + $(cmd); \ + $(obj)/fixdep $(depfile) $@ '$(make-cmd)' > $(dot-target).cmd;\ + rm -f $(depfile) + +if_changed_dep = $(if $(strip $(any-prereq) $(arg-check)),$(cmd_and_fixdep),@:) + +define multi_depend +$(foreach m, $(notdir $1), \ + $(eval $(obj)/$m: \ + $(addprefix $(obj)/, $(foreach s, $3, $($(m:%$(strip $2)=%$(s))))))) +endef + +### +# filechk is used to check if the content of a generated file is updated. +# Sample usage: +# +# filechk_sample = echo $(KERNELRELEASE) +# version.h: FORCE +# $(call filechk,sample) +# +# The rule defined shall write to stdout the content of the new file. +# The existing file will be compared with the new one. +# - If no file exist it is created +# - If the content differ the new file is used +# - If they are equal no change, and no timestamp update +# - stdin is piped in from the first prerequisite ($<) so one has +# to specify a valid file as first prerequisite (often the kbuild file) +define filechk + $(Q)set -e; \ + mkdir -p $(dir $@); \ + { $(filechk_$(1)); } > $@.tmp; \ + if [ -r $@ ] && cmp -s $@ $@.tmp; then \ + rm -f $@.tmp; \ + else \ + $(kecho) ' UPD $@'; \ + mv -f $@.tmp $@; \ + fi +endef + +# Execute command if command has changed or prerequisite(s) are updated. +if_changed = $(if $(strip $(any-prereq) $(arg-check)), \ + $(cmd);\ + printf '%s\n' 'cmd_$@ := $(make-cmd)' > $(dot-target).cmd, @:) + +# LEX +# --------------------------------------------------------------------------- +quiet_cmd_flex = LEX $@ +cmd_flex = $(LEX) -o$@ -L $< + +$(obj)/%.lex.c: $(src)/%.l FORCE + $(call if_changed,flex) + +# YACC +# --------------------------------------------------------------------------- +quiet_cmd_bison = YACC $@ +cmd_bison = $(YACC) -o$@ -t -l $< + +$(obj)/%.tab.c: $(src)/%.y FORCE + $(call if_changed,bison) + +quiet_cmd_bison_h = YACC $@ +cmd_bison_h = $(YACC) -o/dev/null --defines=$@ -t -l $< + +$(obj)/%.tab.h: $(src)/%.y FORCE + $(call if_changed,bison_h) diff --git a/support/kconfig.new/patches/03-include-makefile-helper-from-kernel b/support/kconfig.new/patches/03-include-makefile-helper-from-kernel new file mode 100644 index 00000000..35c79f8f --- /dev/null +++ b/support/kconfig.new/patches/03-include-makefile-helper-from-kernel @@ -0,0 +1,102 @@ +diff --git a/support/kconfig.new/Makefile.br b/support/kconfig.new/Makefile.br +index 41c5ce1..0fdbe9a 100644 +--- a/support/kconfig.new/Makefile.br ++++ b/support/kconfig.new/Makefile.br +@@ -4,6 +4,7 @@ top_builddir=../../ + srctree := . + obj ?= . + ++include Makefile.rules + include Makefile + #HOSTCFLAGS+=-Dinline="" -include foo.h + -include $(obj)/.depend +diff --git a/support/kconfig.new/Makefile.rules b/support/kconfig.new/Makefile.rules +new file mode 100644 +index 0000000..78a9c81 +--- /dev/null ++++ b/support/kconfig.new/Makefile.rules +@@ -0,0 +1,84 @@ ++kecho := echo ++comma := , ++ ++ ++dot-target = $(dir $@).$(notdir $@) ++ ++any-prereq = $(filter-out $(PHONY),$?) $(filter-out $(PHONY) $(wildcard $^),$^) ++ ++arg-check = $(if $(strip $(cmd_$@)),,1) ++ ++make-cmd = $(call escsq,$(subst $(pound),$$(pound),$(subst $$,$$$$,$(cmd_$(1))))) ++ ++# printing commands ++cmd = @set -e; $(echo-cmd) $(cmd_$(1)) ++ ++depfile = $(subst $(comma),_,$(dot-target).d) ++depflags = -Wp$(comma)-MD$(comma)$(call dot-target) ++ ++cmd_and_fixdep = \ ++ $(cmd); \ ++ $(obj)/fixdep $(depfile) $@ '$(make-cmd)' > $(dot-target).cmd;\ ++ rm -f $(depfile) ++ ++if_changed_dep = $(if $(strip $(any-prereq) $(arg-check)),$(cmd_and_fixdep),@:) ++ ++define multi_depend ++$(foreach m, $(notdir $1), \ ++ $(eval $(obj)/$m: \ ++ $(addprefix $(obj)/, $(foreach s, $3, $($(m:%$(strip $2)=%$(s))))))) ++endef ++ ++### ++# filechk is used to check if the content of a generated file is updated. ++# Sample usage: ++# ++# filechk_sample = echo $(KERNELRELEASE) ++# version.h: FORCE ++# $(call filechk,sample) ++# ++# The rule defined shall write to stdout the content of the new file. ++# The existing file will be compared with the new one. ++# - If no file exist it is created ++# - If the content differ the new file is used ++# - If they are equal no change, and no timestamp update ++# - stdin is piped in from the first prerequisite ($<) so one has ++# to specify a valid file as first prerequisite (often the kbuild file) ++define filechk ++ $(Q)set -e; \ ++ mkdir -p $(dir $@); \ ++ { $(filechk_$(1)); } > $@.tmp; \ ++ if [ -r $@ ] && cmp -s $@ $@.tmp; then \ ++ rm -f $@.tmp; \ ++ else \ ++ $(kecho) ' UPD $@'; \ ++ mv -f $@.tmp $@; \ ++ fi ++endef ++ ++# Execute command if command has changed or prerequisite(s) are updated. ++if_changed = $(if $(strip $(any-prereq) $(arg-check)), \ ++ $(cmd);\ ++ printf '%s\n' 'cmd_$@ := $(make-cmd)' > $(dot-target).cmd, @:) ++ ++# LEX ++# --------------------------------------------------------------------------- ++quiet_cmd_flex = LEX $@ ++cmd_flex = $(LEX) -o$@ -L $< ++ ++$(obj)/%.lex.c: $(src)/%.l FORCE ++ $(call if_changed,flex) ++ ++# YACC ++# --------------------------------------------------------------------------- ++quiet_cmd_bison = YACC $@ ++cmd_bison = $(YACC) -o$@ -t -l $< ++ ++$(obj)/%.tab.c: $(src)/%.y FORCE ++ $(call if_changed,bison) ++ ++quiet_cmd_bison_h = YACC $@ ++cmd_bison_h = $(YACC) -o/dev/null --defines=$@ -t -l $< ++ ++$(obj)/%.tab.h: $(src)/%.y FORCE ++ $(call if_changed,bison_h) -- 2.20.1 _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |