blob: 28b041ce005a6e9dd65d7b40474f7d79650953c4 [file] [log] [blame]
Eric Andersenc4996011999-10-20 22:08:37 +00001# Makefile for busybox
2#
Eric Andersen85208e22002-04-12 12:05:57 +00003# Copyright (C) 1999-2002 Erik Andersen <andersee@debian.org>
Erik Andersen9ffdaa62000-02-11 21:55:04 +00004#
Eric Andersenc4996011999-10-20 22:08:37 +00005# This program is free software; you can redistribute it and/or modify
6# it under the terms of the GNU General Public License as published by
7# the Free Software Foundation; either version 2 of the License, or
8# (at your option) any later version.
9#
10# This program is distributed in the hope that it will be useful,
11# but WITHOUT ANY WARRANTY; without even the implied warranty of
12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13# General Public License for more details.
14#
15# You should have received a copy of the GNU General Public License
16# along with this program; if not, write to the Free Software
17# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18#
19
Eric Andersen85208e22002-04-12 12:05:57 +000020TOPDIR:= $(shell /bin/pwd)/
21include $(TOPDIR).config
22include $(TOPDIR)Rules.mak
23SUBDIRS:=applets archival archival/libunarchive console-tools \
24 editors fileutils findutils init miscutils modutils networking \
25 procps pwd_grp pwd_grp/libpwd_grp shell shellutils sysklogd \
26 textutils util-linux libbb
Eric Andersenab050f52001-01-27 06:01:43 +000027
Eric Andersenbdfd0d72001-10-24 05:00:29 +000028all: do-it-all
Eric Andersen00814662001-04-26 23:29:10 +000029
Eric Andersenbdfd0d72001-10-24 05:00:29 +000030#
31# Make "config" the default target if there is no configuration file or
32# "depend" the target if there is no top-level dependency information.
33ifeq (.config,$(wildcard .config))
34include .config
35ifeq (.depend,$(wildcard .depend))
36include .depend
Eric Andersen85208e22002-04-12 12:05:57 +000037do-it-all: busybox busybox.links #doc
38include $(patsubst %,%/Makefile.in, $(SUBDIRS))
Eric Andersenbdfd0d72001-10-24 05:00:29 +000039else
40CONFIGURATION = depend
41do-it-all: depend
42endif
43else
44CONFIGURATION = menuconfig
45do-it-all: menuconfig
46endif
Erik Andersen0a704e82000-05-03 03:19:06 +000047
Eric Andersen3cd27602001-10-24 07:58:02 +000048
Eric Andersen85208e22002-04-12 12:05:57 +000049busybox: depend $(libraries-y)
50 $(CC) $(LDFLAGS) $(libraries-y) $(LIBRARIES) -o $@
51 $(STRIPCMD) $@
Eric Andersenbdfd0d72001-10-24 05:00:29 +000052
53busybox.links: applets/busybox.mkll
54 - $(SHELL) $^ >$@
55
56install: applets/install.sh busybox busybox.links
57 $(SHELL) $< $(PREFIX)
58
59install-hardlinks: applets/install.sh busybox busybox.links
60 $(SHELL) $< $(PREFIX) --hardlinks
61
62
63# Documentation Targets
Eric Andersen67536ff2000-07-06 22:53:22 +000064doc: olddoc
Eric Andersen53310252000-07-04 19:42:23 +000065
66# Old Docs...
John Beppu94e50542001-04-05 19:42:03 +000067olddoc: docs/busybox.pod docs/BusyBox.txt docs/BusyBox.1 docs/BusyBox.html
68
Eric Andersen1552ff72001-10-31 11:07:12 +000069docs/busybox.pod : docs/busybox_header.pod include/usage.h docs/busybox_footer.pod
John Beppu94e50542001-04-05 19:42:03 +000070 - ( cat docs/busybox_header.pod; \
Eric Andersen1552ff72001-10-31 11:07:12 +000071 docs/autodocifier.pl include/usage.h; \
John Beppu94e50542001-04-05 19:42:03 +000072 cat docs/busybox_footer.pod ) > docs/busybox.pod
Eric Andersen53310252000-07-04 19:42:23 +000073
Eric Andersen67536ff2000-07-06 22:53:22 +000074docs/BusyBox.txt: docs/busybox.pod
Eric Andersen53310252000-07-04 19:42:23 +000075 @echo
76 @echo BusyBox Documentation
77 @echo
Eric Andersen29be79c2000-12-01 22:57:44 +000078 -mkdir -p docs
Eric Andersen19f86202001-02-17 00:42:47 +000079 -pod2text $< > $@
Eric Andersen53310252000-07-04 19:42:23 +000080
Eric Andersen67536ff2000-07-06 22:53:22 +000081docs/BusyBox.1: docs/busybox.pod
Eric Andersen09a34e52000-12-01 19:40:18 +000082 - mkdir -p docs
Eric Andersen29be79c2000-12-01 22:57:44 +000083 - pod2man --center=BusyBox --release="version $(VERSION)" \
Eric Andersen19f86202001-02-17 00:42:47 +000084 $< > $@
Eric Andersen53310252000-07-04 19:42:23 +000085
Eric Andersen2423b122001-12-08 01:56:15 +000086docs/BusyBox.html: docs/busybox.net/BusyBox.html
Eric Andersen1cf81662001-02-17 15:55:15 +000087 - mkdir -p docs
Eric Andersene2f6e122000-12-01 19:55:04 +000088 -@ rm -f docs/BusyBox.html
Eric Andersen2423b122001-12-08 01:56:15 +000089 -@ ln -s busybox.net/BusyBox.html docs/BusyBox.html
Eric Andersen53310252000-07-04 19:42:23 +000090
Eric Andersen2423b122001-12-08 01:56:15 +000091docs/busybox.net/BusyBox.html: docs/busybox.pod
92 -@ mkdir -p docs/busybox.net
Eric Andersen19f86202001-02-17 00:42:47 +000093 - pod2html --noindex $< > \
Eric Andersen2423b122001-12-08 01:56:15 +000094 docs/busybox.net/BusyBox.html
Eric Andersen36763742001-04-24 21:46:07 +000095 -@ rm -f pod2htm*
Erik Andersen0a704e82000-05-03 03:19:06 +000096
Eric Andersen67536ff2000-07-06 22:53:22 +000097
98# New docs based on DOCBOOK SGML
Eric Andersen488aac22000-09-24 02:42:48 +000099newdoc: docs/busybox.txt docs/busybox.pdf docs/busybox/busyboxdocumentation.html
Eric Andersen67536ff2000-07-06 22:53:22 +0000100
101docs/busybox.txt: docs/busybox.sgml
102 @echo
103 @echo BusyBox Documentation
104 @echo
Eric Andersen09a34e52000-12-01 19:40:18 +0000105 - mkdir -p docs
Eric Andersen868c0572000-12-02 00:44:48 +0000106 (cd docs; sgmltools -b txt busybox.sgml)
Eric Andersen67536ff2000-07-06 22:53:22 +0000107
108docs/busybox.dvi: docs/busybox.sgml
Eric Andersen09a34e52000-12-01 19:40:18 +0000109 - mkdir -p docs
Eric Andersen868c0572000-12-02 00:44:48 +0000110 (cd docs; sgmltools -b dvi busybox.sgml)
Eric Andersen67536ff2000-07-06 22:53:22 +0000111
Eric Andersena2c83d82000-07-07 20:52:56 +0000112docs/busybox.ps: docs/busybox.sgml
Eric Andersen09a34e52000-12-01 19:40:18 +0000113 - mkdir -p docs
Eric Andersen868c0572000-12-02 00:44:48 +0000114 (cd docs; sgmltools -b ps busybox.sgml)
Eric Andersen67536ff2000-07-06 22:53:22 +0000115
Eric Andersena2c83d82000-07-07 20:52:56 +0000116docs/busybox.pdf: docs/busybox.ps
Eric Andersen09a34e52000-12-01 19:40:18 +0000117 - mkdir -p docs
Eric Andersen868c0572000-12-02 00:44:48 +0000118 (cd docs; ps2pdf busybox.ps)
Eric Andersen67536ff2000-07-06 22:53:22 +0000119
Eric Andersen488aac22000-09-24 02:42:48 +0000120docs/busybox/busyboxdocumentation.html: docs/busybox.sgml
Eric Andersen09a34e52000-12-01 19:40:18 +0000121 - mkdir -p docs
Eric Andersen2423b122001-12-08 01:56:15 +0000122 (cd docs/busybox.net; sgmltools -b html ../busybox.sgml)
Eric Andersen67536ff2000-07-06 22:53:22 +0000123
Eric Andersen85208e22002-04-12 12:05:57 +0000124
125
Eric Andersenbdfd0d72001-10-24 05:00:29 +0000126# The nifty new buildsystem stuff
Eric Andersen85208e22002-04-12 12:05:57 +0000127$(TOPDIR)scripts/mkdep: scripts/mkdep.c
Eric Andersenbdfd0d72001-10-24 05:00:29 +0000128 $(HOSTCC) $(HOSTCFLAGS) -o scripts/mkdep scripts/mkdep.c
Eric Andersen67536ff2000-07-06 22:53:22 +0000129
Eric Andersen85208e22002-04-12 12:05:57 +0000130$(TOPDIR)scripts/split-include: scripts/split-include.c
Eric Andersenbdfd0d72001-10-24 05:00:29 +0000131 $(HOSTCC) $(HOSTCFLAGS) -o scripts/split-include scripts/split-include.c
Erik Andersen1d1d9502000-04-21 01:26:49 +0000132
Eric Andersen85208e22002-04-12 12:05:57 +0000133$(TOPDIR).depend: $(TOPDIR)scripts/mkdep
134 rm -f .depend .hdepend;
135 mkdir -p $(TOPDIR)include/config;
136 $(HOSTCC) $(HOSTCFLAGS) -o scripts/mkdep scripts/mkdep.c
137 scripts/mkdep -I $(TOPDIR)include -- \
138 `find $(TOPDIR) -name \*.c -print` >> .depend;
139 scripts/mkdep -I $(TOPDIR)include -- \
140 `find $(TOPDIR) -name \*.h -print` >> .hdepend;
141 $(MAKE) $(patsubst %,_sfdep_%,$(SUBDIRS)) _FASTDEP_ALL_SUB_DIRS="$(SUBDIRS)" ;
Eric Andersenbdfd0d72001-10-24 05:00:29 +0000142 @ echo -e "\n\nNow run 'make' to build BusyBox\n\n"
143
Eric Andersen85208e22002-04-12 12:05:57 +0000144depend dep: $(TOPDIR)include/config.h $(TOPDIR).depend
145
Eric Andersen3ec5c692002-03-20 01:32:25 +0000146BB_SHELL := ${shell if [ -x "$$BASH" ]; then echo $$BASH; \
Eric Andersenbdfd0d72001-10-24 05:00:29 +0000147 else if [ -x /bin/bash ]; then echo /bin/bash; \
148 else echo sh; fi ; fi}
149
Eric Andersen85208e22002-04-12 12:05:57 +0000150include/config/MARKER: depend $(TOPDIR)scripts/split-include
Eric Andersenbdfd0d72001-10-24 05:00:29 +0000151 scripts/split-include include/config.h include/config
152 @ touch include/config/MARKER
153
Eric Andersen85208e22002-04-12 12:05:57 +0000154$(TOPDIR)include/config.h:
155 @if [ ! -f $(TOPDIR)include/config.h ] ; then \
Eric Andersen3cd27602001-10-24 07:58:02 +0000156 make oldconfig; \
157 fi;
158
Eric Andersenbdfd0d72001-10-24 05:00:29 +0000159menuconfig:
Eric Andersen85208e22002-04-12 12:05:57 +0000160 mkdir -p $(TOPDIR)include/config
Eric Andersenbdfd0d72001-10-24 05:00:29 +0000161 $(MAKE) -C scripts/lxdialog all
Eric Andersen3ec5c692002-03-20 01:32:25 +0000162 $(BB_SHELL) scripts/Menuconfig sysdeps/$(TARGET_OS)/config.in
Eric Andersenbdfd0d72001-10-24 05:00:29 +0000163
164config:
Eric Andersen85208e22002-04-12 12:05:57 +0000165 mkdir -p $(TOPDIR)include/config
Eric Andersen3ec5c692002-03-20 01:32:25 +0000166 $(BB_SHELL) scripts/Configure sysdeps/$(TARGET_OS)/config.in
Eric Andersenbdfd0d72001-10-24 05:00:29 +0000167
168oldconfig:
Eric Andersen85208e22002-04-12 12:05:57 +0000169 mkdir -p $(TOPDIR)include/config
Eric Andersen3ec5c692002-03-20 01:32:25 +0000170 $(BB_SHELL) scripts/Configure -d sysdeps/$(TARGET_OS)/config.in
Eric Andersenbdfd0d72001-10-24 05:00:29 +0000171
172
173ifdef CONFIGURATION
174..$(CONFIGURATION):
175 @echo
176 @echo "You have a bad or nonexistent" .$(CONFIGURATION) ": running 'make" $(CONFIGURATION)"'"
177 @echo
178 $(MAKE) $(CONFIGURATION)
179 @echo
180 @echo "Successful. Try re-making (ignore the error that follows)"
181 @echo
182 exit 1
183
184dummy:
185
Eric Andersen0b7d70c2001-08-02 20:56:16 +0000186else
Eric Andersenbdfd0d72001-10-24 05:00:29 +0000187
188dummy:
189
Eric Andersen0b7d70c2001-08-02 20:56:16 +0000190endif
Eric Andersen19f86202001-02-17 00:42:47 +0000191
Eric Andersen85208e22002-04-12 12:05:57 +0000192
193%.o: %.c
194 $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -c -o $@ $<
195
Eric Andersen19f86202001-02-17 00:42:47 +0000196
Eric Andersenbdfd0d72001-10-24 05:00:29 +0000197# Testing...
Erik Andersen9ffdaa62000-02-11 21:55:04 +0000198test tests:
Mark Whitleyd2117e92001-03-10 00:51:29 +0000199 # old way of doing it
200 #cd tests && $(MAKE) all
201 # new way of doing it
202 cd tests && ./tester.sh
Erik Andersen9ffdaa62000-02-11 21:55:04 +0000203
Eric Andersenbdfd0d72001-10-24 05:00:29 +0000204# Cleanup
Eric Andersencc8ed391999-10-05 16:24:54 +0000205clean:
Eric Andersenbdfd0d72001-10-24 05:00:29 +0000206 - $(MAKE) -C tests clean
207 - $(MAKE) -C scripts/lxdialog clean
Eric Andersen67536ff2000-07-06 22:53:22 +0000208 - rm -f docs/BusyBox.txt docs/BusyBox.1 docs/BusyBox.html \
Eric Andersen2423b122001-12-08 01:56:15 +0000209 docs/busybox.net/BusyBox.html
Eric Andersen53310252000-07-04 19:42:23 +0000210 - rm -f docs/busybox.txt docs/busybox.dvi docs/busybox.ps \
Eric Andersen2423b122001-12-08 01:56:15 +0000211 docs/busybox.pdf docs/busybox.net/busybox.html \
Eric Andersenbdfd0d72001-10-24 05:00:29 +0000212 docs/busybox _install pod2htm* *.gdb *.elf *~ core
Eric Andersen3ec5c692002-03-20 01:32:25 +0000213 - rm -f busybox busybox.links libbb/loop.h .config.old .hdepend
Eric Andersenbdfd0d72001-10-24 05:00:29 +0000214 - rm -f scripts/split-include scripts/mkdep .*config.log
215 - rm -rf include/config include/config.h
216 - find -name .\*.flags -o -name .depend -exec rm -f {} \;
Eric Andersena183f052001-02-20 06:22:54 +0000217 - find -name \*.o -exec rm -f {} \;
Eric Andersenbdfd0d72001-10-24 05:00:29 +0000218 - find -name \*.a -exec rm -f {} \;
Eric Andersencc8ed391999-10-05 16:24:54 +0000219
220distclean: clean
Eric Andersenbdfd0d72001-10-24 05:00:29 +0000221 - rm -f busybox
Erik Andersen9ffdaa62000-02-11 21:55:04 +0000222 - cd tests && $(MAKE) distclean
Eric Andersencc8ed391999-10-05 16:24:54 +0000223
Erik Andersen0a704e82000-05-03 03:19:06 +0000224dist release: distclean doc
Erik Andersenfac10d72000-02-07 05:29:42 +0000225 cd ..; \
226 rm -rf busybox-$(VERSION); \
227 cp -a busybox busybox-$(VERSION); \
228 \
229 find busybox-$(VERSION)/ -type d \
230 -name CVS \
231 -print \
Eric Andersen53b55ac2001-03-16 07:43:53 +0000232 -exec rm -rf {} \; ; \
Erik Andersenfac10d72000-02-07 05:29:42 +0000233 \
234 find busybox-$(VERSION)/ -type f \
Eric Andersenb0b732b2000-07-06 23:17:16 +0000235 -name .\#* \
236 -print \
Eric Andersen53b55ac2001-03-16 07:43:53 +0000237 -exec rm -f {} \; ; \
Eric Andersenb0b732b2000-07-06 23:17:16 +0000238 \
Erik Andersenfac10d72000-02-07 05:29:42 +0000239 tar -cvzf busybox-$(VERSION).tar.gz busybox-$(VERSION)/;
Mark Whitleydd23b8b2000-07-10 23:00:47 +0000240
Eric Andersenbdfd0d72001-10-24 05:00:29 +0000241
242
Eric Andersen85208e22002-04-12 12:05:57 +0000243.PHONY: tags check depend
244
Mark Whitleydd23b8b2000-07-10 23:00:47 +0000245tags:
246 ctags -R .
Matt Kraai4e05da82001-11-19 19:47:56 +0000247
248check: busybox
249 cd testsuite && ./runtest
Eric Andersen85208e22002-04-12 12:05:57 +0000250