diff options
| author | vda <vda@69ca8d6d-28ef-0310-b511-8ec308f3f277> | 2006-10-05 10:17:08 +0000 |
|---|---|---|
| committer | vda <vda@69ca8d6d-28ef-0310-b511-8ec308f3f277> | 2006-10-05 10:17:08 +0000 |
| commit | c2a198d4d1552b349750a13d2c22486e99ef6270 (patch) | |
| tree | 20db60b3a787cd3152160fb60206922fd5eb18ed /scripts/Kbuild.include | |
| parent | d8cf793135eac928e653eb5178894a611aa27837 (diff) | |
| download | busybox-w32-c2a198d4d1552b349750a13d2c22486e99ef6270.tar.gz busybox-w32-c2a198d4d1552b349750a13d2c22486e99ef6270.tar.bz2 busybox-w32-c2a198d4d1552b349750a13d2c22486e99ef6270.zip | |
build system overhaul
git-svn-id: svn://busybox.net/trunk/busybox@16307 69ca8d6d-28ef-0310-b511-8ec308f3f277
Diffstat (limited to 'scripts/Kbuild.include')
| -rw-r--r-- | scripts/Kbuild.include | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include new file mode 100644 index 000000000..b0d067be7 --- /dev/null +++ b/scripts/Kbuild.include | |||
| @@ -0,0 +1,148 @@ | |||
| 1 | #### | ||
| 2 | # kbuild: Generic definitions | ||
| 3 | |||
| 4 | # Convinient variables | ||
| 5 | comma := , | ||
| 6 | squote := ' | ||
| 7 | empty := | ||
| 8 | space := $(empty) $(empty) | ||
| 9 | |||
| 10 | ### | ||
| 11 | # The temporary file to save gcc -MD generated dependencies must not | ||
| 12 | # contain a comma | ||
| 13 | depfile = $(subst $(comma),_,$(@D)/.$(@F).d) | ||
| 14 | |||
| 15 | ### | ||
| 16 | # Escape single quote for use in echo statements | ||
| 17 | escsq = $(subst $(squote),'\$(squote)',$1) | ||
| 18 | |||
| 19 | ### | ||
| 20 | # filechk is used to check if the content of a generated file is updated. | ||
| 21 | # Sample usage: | ||
| 22 | # define filechk_sample | ||
| 23 | # echo $KERNELRELEASE | ||
| 24 | # endef | ||
| 25 | # version.h : Makefile | ||
| 26 | # $(call filechk,sample) | ||
| 27 | # The rule defined shall write to stdout the content of the new file. | ||
| 28 | # The existing file will be compared with the new one. | ||
| 29 | # - If no file exist it is created | ||
| 30 | # - If the content differ the new file is used | ||
| 31 | # - If they are equal no change, and no timestamp update | ||
| 32 | # - stdin is piped in from the first prerequisite ($<) so one has | ||
| 33 | # to specify a valid file as first prerequisite (often the kbuild file) | ||
| 34 | define filechk | ||
| 35 | $(Q)set -e; \ | ||
| 36 | echo ' CHK $@'; \ | ||
| 37 | mkdir -p $(dir $@); \ | ||
| 38 | $(filechk_$(1)) < $< > $@.tmp; \ | ||
| 39 | if [ -r $@ ] && cmp -s $@ $@.tmp; then \ | ||
| 40 | rm -f $@.tmp; \ | ||
| 41 | else \ | ||
| 42 | echo ' UPD $@'; \ | ||
| 43 | mv -f $@.tmp $@; \ | ||
| 44 | fi | ||
| 45 | endef | ||
| 46 | |||
| 47 | ###### | ||
| 48 | # gcc support functions | ||
| 49 | # See documentation in Documentation/kbuild/makefiles.txt | ||
| 50 | |||
| 51 | # as-option | ||
| 52 | # Usage: cflags-y += $(call as-option, -Wa$(comma)-isa=foo,) | ||
| 53 | |||
| 54 | as-option = $(shell if $(CC) $(CFLAGS) $(1) -Wa,-Z -c -o /dev/null \ | ||
| 55 | -xassembler /dev/null > /dev/null 2>&1; then echo "$(1)"; \ | ||
| 56 | else echo "$(2)"; fi ;) | ||
| 57 | |||
| 58 | # cc-option | ||
| 59 | # Usage: cflags-y += $(call cc-option, -march=winchip-c6, -march=i586) | ||
| 60 | |||
| 61 | cc-option = $(shell if $(CC) $(CFLAGS) $(1) -S -o /dev/null -xc /dev/null \ | ||
| 62 | > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi ;) | ||
| 63 | |||
| 64 | # cc-option-yn | ||
| 65 | # Usage: flag := $(call cc-option-yn, -march=winchip-c6) | ||
| 66 | cc-option-yn = $(shell if $(CC) $(CFLAGS) $(1) -S -o /dev/null -xc /dev/null \ | ||
| 67 | > /dev/null 2>&1; then echo "y"; else echo "n"; fi;) | ||
| 68 | |||
| 69 | # cc-option-align | ||
| 70 | # Prefix align with either -falign or -malign | ||
| 71 | cc-option-align = $(subst -functions=0,,\ | ||
| 72 | $(call cc-option,-falign-functions=0,-malign-functions=0)) | ||
| 73 | |||
| 74 | # cc-version | ||
| 75 | # Usage gcc-ver := $(call cc-version, $(CC)) | ||
| 76 | cc-version = $(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-version.sh \ | ||
| 77 | $(if $(1), $(1), $(CC))) | ||
| 78 | |||
| 79 | # cc-ifversion | ||
| 80 | # Usage: EXTRA_CFLAGS += $(call cc-ifversion, -lt, 0402, -O1) | ||
| 81 | cc-ifversion = $(shell if [ $(call cc-version, $(CC)) $(1) $(2) ]; then \ | ||
| 82 | echo $(3); fi;) | ||
| 83 | |||
| 84 | ### | ||
| 85 | # Shorthand for $(Q)$(MAKE) -f scripts/Makefile.build obj= | ||
| 86 | # Usage: | ||
| 87 | # $(Q)$(MAKE) $(build)=dir | ||
| 88 | build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj | ||
| 89 | |||
| 90 | # Prefix -I with $(srctree) if it is not an absolute path | ||
| 91 | addtree = $(if $(filter-out -I/%,$(1)),$(patsubst -I%,-I$(srctree)/%,$(1))) $(1) | ||
| 92 | # Find all -I options and call addtree | ||
| 93 | flags = $(foreach o,$($(1)),$(if $(filter -I%,$(o)),$(call addtree,$(o)),$(o))) | ||
| 94 | |||
| 95 | # If quiet is set, only print short version of command | ||
| 96 | cmd = @$(echo-cmd) $(cmd_$(1)) | ||
| 97 | |||
| 98 | # Add $(obj)/ for paths that is not absolute | ||
| 99 | objectify = $(foreach o,$(1),$(if $(filter /%,$(o)),$(o),$(obj)/$(o))) | ||
| 100 | |||
| 101 | ### | ||
| 102 | # if_changed - execute command if any prerequisite is newer than | ||
| 103 | # target, or command line has changed | ||
| 104 | # if_changed_dep - as if_changed, but uses fixdep to reveal dependencies | ||
| 105 | # including used config symbols | ||
| 106 | # if_changed_rule - as if_changed but execute rule instead | ||
| 107 | # See Documentation/kbuild/makefiles.txt for more info | ||
| 108 | |||
| 109 | ifneq ($(KBUILD_NOCMDDEP),1) | ||
| 110 | # Check if both arguments has same arguments. Result in empty string if equal | ||
| 111 | # User may override this check using make KBUILD_NOCMDDEP=1 | ||
| 112 | arg-check = $(strip $(filter-out $(1), $(2)) $(filter-out $(2), $(1)) ) | ||
| 113 | endif | ||
| 114 | |||
| 115 | # echo command. Short version is $(quiet) equals quiet, otherwise full command | ||
| 116 | echo-cmd = $(if $($(quiet)cmd_$(1)), \ | ||
| 117 | echo ' $(call escsq,$($(quiet)cmd_$(1)))';) | ||
| 118 | |||
| 119 | make-cmd = $(subst \#,\\\#,$(subst $$,$$$$,$(call escsq,$(cmd_$(1))))) | ||
| 120 | |||
| 121 | # function to only execute the passed command if necessary | ||
| 122 | # >'< substitution is for echo to work, >$< substitution to preserve $ when reloading .cmd file | ||
| 123 | # note: when using inline perl scripts [perl -e '...$$t=1;...'] in $(cmd_xxx) double $$ your perl vars | ||
| 124 | # | ||
| 125 | if_changed = $(if $(strip $(filter-out $(PHONY),$?) \ | ||
| 126 | $(call arg-check, $(cmd_$(1)), $(cmd_$@)) ), \ | ||
| 127 | @set -e; \ | ||
| 128 | $(echo-cmd) $(cmd_$(1)); \ | ||
| 129 | echo 'cmd_$@ := $(make-cmd)' > $(@D)/.$(@F).cmd) | ||
| 130 | |||
| 131 | # execute the command and also postprocess generated .d dependencies | ||
| 132 | # file | ||
| 133 | if_changed_dep = $(if $(strip $(filter-out $(PHONY),$?) \ | ||
| 134 | $(filter-out FORCE $(wildcard $^),$^) \ | ||
| 135 | $(call arg-check, $(cmd_$(1)), $(cmd_$@)) ), \ | ||
| 136 | @set -e; \ | ||
| 137 | $(echo-cmd) $(cmd_$(1)); \ | ||
| 138 | scripts/basic/fixdep $(depfile) $@ '$(make-cmd)' > $(@D)/.$(@F).tmp; \ | ||
| 139 | rm -f $(depfile); \ | ||
| 140 | mv -f $(@D)/.$(@F).tmp $(@D)/.$(@F).cmd) | ||
| 141 | |||
| 142 | # Usage: $(call if_changed_rule,foo) | ||
| 143 | # will check if $(cmd_foo) changed, or any of the prequisites changed, | ||
| 144 | # and if so will execute $(rule_foo) | ||
| 145 | if_changed_rule = $(if $(strip $(filter-out $(PHONY),$?) \ | ||
| 146 | $(call arg-check, $(cmd_$(1)), $(cmd_$@)) ),\ | ||
| 147 | @set -e; \ | ||
| 148 | $(rule_$(1))) | ||
