1# ========================================================================== 2# Build system 3# ========================================================================== 4 5busybox.links: $(srctree)/applets/busybox.mkll $(objtree)/include/autoconf.h include/applets.h 6 $(Q)-$(SHELL) $^ > $@ 7 8busybox.cfg.suid: $(srctree)/applets/busybox.mksuid $(objtree)/include/autoconf.h include/applets.h 9 $(Q)-SUID="yes" $(SHELL) $^ > $@ 10busybox.cfg.nosuid: $(srctree)/applets/busybox.mksuid $(objtree)/include/autoconf.h include/applets.h 11 $(Q)-SUID="DROP" $(SHELL) $^ > $@ 12 13.PHONY: install 14ifeq ($(CONFIG_INSTALL_APPLET_SYMLINKS),y) 15INSTALL_OPTS:= --symlinks 16endif 17ifeq ($(CONFIG_INSTALL_APPLET_HARDLINKS),y) 18INSTALL_OPTS:= --hardlinks 19endif 20ifeq ($(CONFIG_INSTALL_APPLET_SCRIPT_WRAPPERS),y) 21ifeq ($(CONFIG_INSTALL_SH_APPLET_SYMLINK),y) 22INSTALL_OPTS:= --sw-sh-sym 23endif 24ifeq ($(CONFIG_INSTALL_SH_APPLET_HARDLINK),y) 25INSTALL_OPTS:= --sw-sh-hard 26endif 27ifeq ($(CONFIG_INSTALL_SH_APPLET_SCRIPT_WRAPPER),y) 28INSTALL_OPTS:= --scriptwrapper 29endif 30endif 31ifeq ($(CONFIG_FEATURE_INDIVIDUAL),y) 32INSTALL_OPTS:= --binaries 33LIBBUSYBOX_SONAME:= 0_lib/libbusybox.so.$(BB_VER) 34endif 35install: $(srctree)/applets/install.sh busybox busybox.links 36 $(Q)DO_INSTALL_LIBS="$(strip $(LIBBUSYBOX_SONAME) $(DO_INSTALL_LIBS))" \ 37 $(SHELL) $< $(CONFIG_PREFIX) $(INSTALL_OPTS) 38ifeq ($(strip $(CONFIG_FEATURE_SUID)),y) 39 @echo 40 @echo 41 @echo -------------------------------------------------- 42 @echo You will probably need to make your busybox binary 43 @echo setuid root to ensure all configured applets will 44 @echo work properly. 45 @echo -------------------------------------------------- 46 @echo 47endif 48 49uninstall: busybox.links 50 rm -f $(CONFIG_PREFIX)/bin/busybox 51 for i in `cat busybox.links` ; do rm -f $(CONFIG_PREFIX)$$i; done 52ifneq ($(strip $(DO_INSTALL_LIBS)),n) 53 for i in $(LIBBUSYBOX_SONAME) $(DO_INSTALL_LIBS); do \ 54 rm -f $(CONFIG_PREFIX)$$i; \ 55 done 56endif 57 58# Not very elegant: copies testsuite to objdir... 59# (cp -pPR is POSIX-compliant (cp -dpR or cp -a would not be)) 60.PHONY: check 61.PHONY: test 62ifeq ($(CONFIG_UNIT_TEST),y) 63UNIT_CMD = ./busybox unit 64endif 65check test: busybox busybox.links 66 $(UNIT_CMD) 67 test -d $(objtree)/testsuite || cp -pPR $(srctree)/testsuite $(objtree) 68 bindir=$(objtree) srcdir=$(srctree)/testsuite \ 69 $(SHELL) -c "cd $(objtree)/testsuite && $(srctree)/testsuite/runtest $(if $(KBUILD_VERBOSE:0=),-v)" 70 71.PHONY: release 72release: distclean 73 cd ..; \ 74 rm -r -f busybox-$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION); \ 75 cp -pPR busybox busybox-$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) && { \ 76 find busybox-$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)/ -type d \ 77 -name .svn \ 78 -print \ 79 -exec rm -r -f {} \; ; \ 80 find busybox-$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)/ -type d \ 81 -name .git \ 82 -print \ 83 -exec rm -r -f {} \; ; \ 84 find busybox-$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)/ -type f \ 85 -name .gitignore \ 86 -print \ 87 -exec rm -f {} \; ; \ 88 find busybox-$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)/ -type f \ 89 -name .\#* \ 90 -print \ 91 -exec rm -f {} \; ; \ 92 tar -czf busybox-$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION).tar.gz \ 93 busybox-$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)/ ; } 94 95.PHONY: checkhelp 96checkhelp: 97 $(Q)$(srctree)/scripts/checkhelp.awk \ 98 $(patsubst %,$(srctree)/%,$(wildcard $(patsubst %,%/Config.in,$(busybox-dirs) ./))) 99 100.PHONY: sizes 101sizes: busybox_unstripped 102 $(NM) --size-sort $(<) 103 104.PHONY: bloatcheck 105bloatcheck: busybox_old busybox_unstripped 106 @$(srctree)/scripts/bloat-o-meter busybox_old busybox_unstripped 107 @$(CROSS_COMPILE)size busybox_old busybox_unstripped 108 109.PHONY: baseline 110baseline: busybox_unstripped 111 @mv busybox_unstripped busybox_old 112 113.PHONY: objsizes 114objsizes: busybox_unstripped 115 $(srctree)/scripts/objsizes 116 117.PHONY: stksizes 118stksizes: busybox_unstripped 119 $(CROSS_COMPILE)objdump -d busybox_unstripped | $(srctree)/scripts/checkstack.pl $(ARCH) | uniq 120 121.PHONY: bigdata 122bigdata: busybox_unstripped 123 $(CROSS_COMPILE)nm --size-sort busybox_unstripped | grep -vi ' [trw] ' 124 125# Documentation Targets 126.PHONY: doc 127doc: docs/busybox.pod docs/BusyBox.txt docs/busybox.1 docs/BusyBox.html 128 129# FIXME: Doesn't belong here 130 cmd_doc = 131 quiet_cmd_doc = $(Q)echo " DOC $(@F)" 132silent_cmd_doc = 133disp_doc = $($(quiet)cmd_doc) 134 135# sed adds newlines after "Options:" etc, 136# this is needed in order to get good BusyBox.{1,txt,html} 137docs/busybox.pod: $(srctree)/docs/busybox_header.pod \ 138 include/usage.h \ 139 $(srctree)/docs/busybox_footer.pod \ 140 applets/usage_pod 141 $(disp_doc) 142 $(Q)-mkdir -p docs 143 $(Q)-( \ 144 cat $(srctree)/docs/busybox_header.pod; \ 145 echo; \ 146 applets/usage_pod | sed 's/^[A-Za-z][A-Za-z ]*[a-z]:$$/&\n/'; \ 147 cat $(srctree)/docs/busybox_footer.pod; \ 148 ) > docs/busybox.pod 149 150docs/BusyBox.txt: docs/busybox.pod 151 $(disp_doc) 152 $(Q)-mkdir -p docs 153 $(Q)-pod2text $< > $@ 154 155docs/busybox.1: docs/busybox.pod 156 $(disp_doc) 157 $(Q)-mkdir -p docs 158 $(Q)-pod2man --center=busybox --release="version $(KERNELVERSION)" $< > $@ 159 160docs/BusyBox.html: docs/busybox.net/BusyBox.html 161 $(disp_doc) 162 $(Q)-mkdir -p docs 163 $(Q)-rm -f docs/BusyBox.html 164 $(Q)-cp docs/busybox.net/BusyBox.html docs/BusyBox.html 165 166docs/busybox.net/BusyBox.html: docs/busybox.pod 167 $(Q)-mkdir -p docs/busybox.net 168 $(Q)-pod2html --noindex $< > $@ 169 $(Q)-rm -f pod2htm* 170 171# documentation, cross-reference 172# Modern distributions already ship synopsis packages (e.g. debian) 173# If you have an old distribution go to http://synopsis.fresco.org/ 174syn_tgt = $(wildcard $(patsubst %,%/*.c,$(busybox-alldirs))) 175syn = $(patsubst %.c, %.syn, $(syn_tgt)) 176 177comma:= , 178brace_open:= ( 179brace_close:= ) 180 181SYN_CPPFLAGS := $(strip $(CPPFLAGS) $(EXTRA_CPPFLAGS)) 182SYN_CPPFLAGS := $(subst $(brace_open),\$(brace_open),$(SYN_CPPFLAGS)) 183SYN_CPPFLAGS := $(subst $(brace_close),\$(brace_close),$(SYN_CPPFLAGS)) 184#SYN_CPPFLAGS := $(subst ",\",$(SYN_CPPFLAGS)) 185#") 186#SYN_CPPFLAGS := [$(patsubst %,'%'$(comma),$(SYN_CPPFLAGS))''] 187 188%.syn: %.c 189 synopsis -p C -l Comments.SSDFilter,Comments.Previous -Wp,preprocess=True,cppflags="'$(SYN_CPPFLAGS)'" -o $@ $< 190 191.PHONY: html 192html: $(syn) 193 synopsis -f HTML -Wf,title="'BusyBox Documentation'" -o $@ $^ 194 195-include $(srctree)/Makefile.local 196