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