1# ========================================================================== 2# Build system 3# ========================================================================== 4 5busybox.links: $(srctree)/applets/busybox.mkll $(objtree)/include/autoconf.h $(srctree)/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 f \ 68 -name .\#* \ 69 -print \ 70 -exec rm -f {} \; ; \ 71 tar -czf busybox-$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION).tar.gz \ 72 busybox-$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)/ ; } 73 74.PHONY: checkhelp 75checkhelp: 76 $(Q)$(srctree)/scripts/checkhelp.awk \ 77 $(patsubst %,$(srctree)/%,$(wildcard $(patsubst %,%/Config.in,$(busybox-dirs) ./))) 78 79.PHONY: sizes 80sizes: busybox_unstripped 81 $(NM) --size-sort $(<) 82 83.PHONY: bloatcheck 84bloatcheck: busybox_old busybox_unstripped 85 @$(srctree)/scripts/bloat-o-meter busybox_old busybox_unstripped 86 @$(CROSS_COMPILE)size busybox_old busybox_unstripped 87 88.PHONY: baseline 89baseline: busybox_unstripped 90 @mv busybox_unstripped busybox_old 91 92.PHONY: objsizes 93objsizes: busybox_unstripped 94 $(srctree)/scripts/objsizes 95 96.PHONY: stksizes 97stksizes: busybox_unstripped 98 $(CROSS_COMPILE)objdump -d busybox_unstripped | $(srctree)/scripts/checkstack.pl $(ARCH) | uniq 99 100.PHONY: bigdata 101bigdata: busybox_unstripped 102 $(CROSS_COMPILE)nm --size-sort busybox_unstripped | grep -vi ' [trw] ' 103 104# Documentation Targets 105.PHONY: doc 106doc: docs/busybox.pod docs/BusyBox.txt docs/BusyBox.1 docs/BusyBox.html 107 108# FIXME: Doesn't belong here 109 cmd_doc = 110 quiet_cmd_doc = $(Q)echo " DOC $(@F)" 111silent_cmd_doc = 112disp_doc = $($(quiet)cmd_doc) 113 114# sed adds newlines after "Options:" etc, 115# this is needed in order to get good BusyBox.{1,txt,html} 116docs/busybox.pod: $(srctree)/docs/busybox_header.pod \ 117 $(srctree)/include/usage.h \ 118 $(srctree)/docs/busybox_footer.pod \ 119 applets/usage_pod 120 $(disp_doc) 121 $(Q)-mkdir -p docs 122 $(Q)-( \ 123 cat $(srctree)/docs/busybox_header.pod; \ 124 applets/usage_pod | sed 's/^[A-Za-z][A-Za-z ]*[a-z]:$$/&\n/'; \ 125 cat $(srctree)/docs/busybox_footer.pod; \ 126 ) > docs/busybox.pod 127 128docs/BusyBox.txt: docs/busybox.pod 129 $(disp_doc) 130 $(Q)-mkdir -p docs 131 $(Q)-pod2text $< > $@ 132 133docs/BusyBox.1: docs/busybox.pod 134 $(disp_doc) 135 $(Q)-mkdir -p docs 136 $(Q)-pod2man --center=BusyBox --release="version $(KERNELVERSION)" $< > $@ 137 138docs/BusyBox.html: docs/busybox.net/BusyBox.html 139 $(disp_doc) 140 $(Q)-mkdir -p docs 141 $(Q)-rm -f docs/BusyBox.html 142 $(Q)-cp docs/busybox.net/BusyBox.html docs/BusyBox.html 143 144docs/busybox.net/BusyBox.html: docs/busybox.pod 145 $(Q)-mkdir -p docs/busybox.net 146 $(Q)-pod2html --noindex $< > $@ 147 $(Q)-rm -f pod2htm* 148 149# documentation, cross-reference 150# Modern distributions already ship synopsis packages (e.g. debian) 151# If you have an old distribution go to http://synopsis.fresco.org/ 152syn_tgt = $(wildcard $(patsubst %,%/*.c,$(busybox-alldirs))) 153syn = $(patsubst %.c, %.syn, $(syn_tgt)) 154 155comma:= , 156brace_open:= ( 157brace_close:= ) 158 159SYN_CPPFLAGS := $(strip $(CPPFLAGS) $(EXTRA_CPPFLAGS)) 160SYN_CPPFLAGS := $(subst $(brace_open),\$(brace_open),$(SYN_CPPFLAGS)) 161SYN_CPPFLAGS := $(subst $(brace_close),\$(brace_close),$(SYN_CPPFLAGS)) 162#SYN_CPPFLAGS := $(subst ",\",$(SYN_CPPFLAGS)) 163#") 164#SYN_CPPFLAGS := [$(patsubst %,'%'$(comma),$(SYN_CPPFLAGS))''] 165 166%.syn: %.c 167 synopsis -p C -l Comments.SSDFilter,Comments.Previous -Wp,preprocess=True,cppflags="'$(SYN_CPPFLAGS)'" -o $@ $< 168 169.PHONY: html 170html: $(syn) 171 synopsis -f HTML -Wf,title="'BusyBox Documentation'" -o $@ $^ 172 173-include $(srctree)/Makefile.local 174