1 ############################################################################
4 # Makefile -- Top level dist makefile.
6 # Copyright (c) 2001-2007, SnapGear (www.snapgear.com)
7 # Copyright (c) 2001, Lineo
10 ############################################################################
12 # Lets work out what the user wants, and if they have configured us yet
15 ifeq (.config,$(wildcard .config))
16 all: tools automake subdirs romfs image
21 ROOTDIR = $(shell pwd)
23 include vendors/config/common/config.arch
25 ############################################################################
27 DIRS = $(VENDOR_TOPDIRS) include lib include user
32 chmod +x tools/romfs-inst.sh tools/modules-alias.sh tools/build-udev-perms.sh
35 ucfront: tools/ucfront/*.c
36 $(MAKE) -C tools/ucfront
37 ln -sf $(ROOTDIR)/tools/ucfront/ucfront tools/ucfront-gcc
38 ln -sf $(ROOTDIR)/tools/ucfront/ucfront tools/ucfront-g++
39 ln -sf $(ROOTDIR)/tools/ucfront/ucfront-ld tools/ucfront-ld
40 ln -sf $(ROOTDIR)/tools/ucfront/jlibtool tools/jlibtool
44 tools/cksum: tools/sg-cksum/*.c
45 $(MAKE) -C tools/sg-cksum
46 ln -sf $(ROOTDIR)/tools/sg-cksum/cksum tools/cksum
50 $(MAKE) -C config automake
52 ############################################################################
55 # Config stuff, we recall ourselves to load the new config.arch before
56 # running the kernel and other config scripts
61 @chmod u+x config/mkconfig
62 config/mkconfig > Kconfig
64 include config/Makefile.conf
66 SCRIPTS_BINARY_config = conf
67 SCRIPTS_BINARY_menuconfig = mconf
68 SCRIPTS_BINARY_qconfig = qconf
69 SCRIPTS_BINARY_gconfig = gconf
70 SCRIPTS_BINARY_xconfig = gconf
71 .PHONY: config menuconfig qconfig gconfig xconfig
75 xconfig: $(SCRIPTS_BINARY_xconfig)
76 config menuconfig qconfig gconfig xconfig: Kconfig conf
77 KCONFIG_NOTIMESTAMP=1 $(SCRIPTSDIR)/$(SCRIPTS_BINARY_$@) Kconfig
78 @if [ ! -f .config ]; then \
80 echo "You have not saved your config, please re-run 'make $@'"; \
84 @chmod u+x config/setconfig
85 @config/setconfig defaults
86 @if egrep "^CONFIG_DEFAULTS_KERNEL=y" .config > /dev/null; then \
89 @if egrep "^CONFIG_DEFAULTS_MODULES=y" .config > /dev/null; then \
92 @if egrep "^CONFIG_DEFAULTS_VENDOR=y" .config > /dev/null; then \
93 $(MAKE) myconfig_$@; \
95 @config/setconfig final
98 oldconfig: Kconfig conf
99 KCONFIG_NOTIMESTAMP=1 $(SCRIPTSDIR)/conf -o Kconfig
100 @chmod u+x config/setconfig
101 @config/setconfig defaults
102 @$(MAKE) oldconfig_linux
103 @$(MAKE) oldconfig_modules
104 @$(MAKE) oldconfig_config
105 @$(MAKE) oldconfig_uClibc
106 @config/setconfig final
108 .PHONY: generated_headers
110 if [ ! -f $(LINUXDIR)/include/linux/autoconf.h ] ; then \
111 ln -sf $(ROOTDIR)/$(LINUXDIR)/include/generated/autoconf.h $(LINUXDIR)/include/linux/autoconf.h ; \
115 modules: generated_headers
116 . $(LINUXDIR)/.config; if [ "$$CONFIG_MODULES" = "y" ]; then \
117 [ -d $(LINUXDIR)/modules ] || mkdir $(LINUXDIR)/modules; \
118 $(MAKEARCH_KERNEL) -j$(HOST_NCPU) -C $(LINUXDIR) modules || exit 1; \
121 .PHONY: modules_install
124 . $(CONFIG_CONFIG); \
125 if [ "$$CONFIG_MODULES" = "y" ]; then \
126 [ -d $(ROMFSDIR)/lib/modules ] || mkdir -p $(ROMFSDIR)/lib/modules; \
127 $(MAKEARCH_KERNEL) -C $(LINUXDIR) INSTALL_MOD_CMD="$(ROMFSINST) -S -r \"\"" INSTALL_MOD_PATH=$(ROMFSDIR) DEPMOD=$(ROOTDIR)/tools/depmod.sh modules_install; \
128 rm -f $(ROMFSDIR)/lib/modules/*/build; \
129 rm -f $(ROMFSDIR)/lib/modules/*/source; \
130 find $(ROMFSDIR)/lib/modules -type f -name "*o" | xargs -r $(STRIP) -R .comment -R .note -g --strip-unneeded; \
134 KCONFIG_NOTIMESTAMP=1 $(MAKEARCH_KERNEL) -C $(LINUXDIR) $(patsubst linux_%,%,$@)
136 [ ! -d modules ] || KCONFIG_NOTIMESTAMP=1 $(MAKEARCH) -C modules $(patsubst modules_%,%,$@)
138 KCONFIG_NOTIMESTAMP=1 $(MAKEARCH) -C config $(patsubst myconfig_%,%,$@)
139 oldconfig_config: myconfig_oldconfig
140 oldconfig_modules: modules_oldconfig
141 oldconfig_linux: linux_oldconfig
143 [ -z "$(findstring uClibc,$(LIBCDIR))" ] || KCONFIG_NOTIMESTAMP=1 $(MAKEARCH) -C $(LIBCDIR) oldconfig
145 ############################################################################
147 # normal make targets
151 romfs: romfs.newlog romfs.subdirs modules_install romfs.post
155 rm -f $(IMAGEDIR)/romfs-inst.log
157 .PHONY: romfs.subdirs
159 for dir in vendors $(DIRS) ; do [ ! -d $$dir ] || $(MAKEARCH) -C $$dir romfs || exit 1 ; done
163 $(MAKEARCH) -C vendors romfs.post
164 -find $(ROMFSDIR)/. -name CVS | xargs -r rm -rf
165 . $(LINUXDIR)/.config; if [ "$$CONFIG_INITRAMFS_SOURCE" != "" ]; then \
166 $(MAKEARCH_KERNEL) -j$(HOST_NCPU) -C $(LINUXDIR) $(LINUXTARGET) || exit 1; \
171 [ -d $(IMAGEDIR) ] || mkdir $(IMAGEDIR)
172 $(MAKEARCH) -C vendors image
176 $(MAKE) -C release release
180 $(MAKE) NON_SMP_BUILD=1
183 @echo "This target no longer works"
184 @echo "Do a make -C release $@"
187 # fancy target that allows a vendor to have other top level
188 # make targets, for example "make vendor_flash" will run the
189 # vendor_flash target in the vendors directory
193 $(MAKEARCH) -C vendors $@
197 . $(LINUXDIR)/.config; if [ "$$CONFIG_INITRAMFS_SOURCE" != "" ]; then \
198 mkdir -p `dirname $$CONFIG_INITRAMFS_SOURCE`; \
199 touch $$CONFIG_INITRAMFS_SOURCE || exit 1; \
201 @if expr "$(LINUXDIR)" : 'linux-2\.[0-4].*' > /dev/null && \
202 [ ! -f $(LINUXDIR)/.depend ] ; then \
203 echo "ERROR: you need to do a 'make dep' first" ; \
206 $(MAKEARCH_KERNEL) -j$(HOST_NCPU) -C $(LINUXDIR) $(LINUXTARGET) || exit 1
207 @if ! expr "$(LINUXDIR)" : 'linux-2.[01234].*' > /dev/null ; then \
208 : ignore failure in headers_install; \
209 $(MAKEARCH_KERNEL) -j$(HOST_NCPU) -C $(LINUXDIR) headers_install || true; \
211 if [ -f $(LINUXDIR)/vmlinux ]; then \
212 ln -f $(LINUXDIR)/vmlinux $(LINUXDIR)/linux ; \
219 $(MAKEARCH_KERNEL) -C $(LINUXDIR) C=1 $(LINUXTARGET) || exit 1
223 $(MAKEARCH_KERNEL) -C $(LINUXDIR) C=2 $(LINUXTARGET) || exit 1
226 subdirs: linux modules
227 for dir in $(DIRS) ; do [ ! -d $$dir ] || $(MAKEARCH) -C $$dir || exit 1 ; done
230 @if [ ! -f $(LINUXDIR)/.config ] ; then \
231 echo "ERROR: you need to do a 'make config' first" ; \
234 $(MAKEARCH_KERNEL) -C $(LINUXDIR) dep
236 # This one removes all executables from the tree and forces their relinking
239 find user prop vendors -type f -name '*.gdb' | sed 's/^\(.*\)\.gdb/\1 \1.gdb/' | xargs rm -f
242 for dir in $(LINUXDIR) $(DIRS); do [ ! -d $$dir ] || $(MAKEARCH) -C $$dir clean ; done
246 rm -f $(LINUXDIR)/linux
247 rm -f $(LINUXDIR)/include/asm
248 rm -f $(LINUXDIR)/include/linux/autoconf.h
249 rm -f $(LINUXDIR)/usr/include/linux/autoconf.h
250 rm -rf $(LINUXDIR)/net/ipsec/alg/libaes $(LINUXDIR)/net/ipsec/alg/perlasm
251 rm -f $(LINUXDIR)/net/ipsec/.linked
253 real_clean mrproper: clean
254 [ -d "$(LINUXDIR)" ] && $(MAKEARCH_KERNEL) -C $(LINUXDIR) mrproper || :
255 [ -d uClibc ] && $(MAKEARCH) -C uClibc distclean || :
256 [ -d modules ] && $(MAKEARCH) -C modules distclean || :
257 [ -d "$(RELDIR)" ] && $(MAKEARCH) -C $(RELDIR) clean || :
258 -$(MAKEARCH) -C config clean
259 rm -rf romfs Kconfig config.arch images
260 rm -rf .config .config.old .oldconfig autoconf.h auto.conf
263 -$(MAKEARCH_KERNEL) -C $(LINUXDIR) distclean
265 distclean: mrproper linux_distclean
266 -rm -f user/tinylogin/applet_source_list user/tinylogin/config.h
267 -rm -f lib/uClibc lib/glibc
268 -$(MAKE) -C tools/ucfront clean
269 -rm -f tools/ucfront-gcc tools/ucfront-g++ tools/ucfront-ld tools/jlibtool
270 -$(MAKE) -C tools/sg-cksum clean
275 rm -rf ./bugreport.tar.gz ./bugreport
277 $(HOSTCC) -v 2> ./bugreport/host_vers
278 $(CROSS_COMPILE)gcc -v 2> ./bugreport/toolchain_vers
279 cp .config bugreport/
280 mkdir bugreport/$(LINUXDIR)
281 cp $(LINUXDIR)/.config bugreport/$(LINUXDIR)/
282 if [ -f $(LIBCDIR)/.config ] ; then \
284 mkdir bugreport/$(LIBCDIR) ; \
285 cp $(LIBCDIR)/.config bugreport/$(LIBCDIR)/ ; \
287 mkdir bugreport/config
288 cp config/.config bugreport/config/
289 tar czf bugreport.tar.gz bugreport
294 single*) $(MAKE) NON_SMP_BUILD=1 `expr $(@) : 'single[_]*\(.*\)'` ;; \
295 */*) d=`expr $(@) : '\([^/]*\)/.*'`; \
296 t=`expr $(@) : '[^/]*/\(.*\)'`; \
297 $(MAKEARCH) -C $$d $$t;; \
298 *) $(MAKEARCH) -C $(*);; \
303 single*) $(MAKE) NON_SMP_BUILD=1 `expr $(@) : 'single[_]*\(.*\)'` ;; \
304 */*) d=`expr $(@) : '\([^/]*\)/.*'`; \
305 t=`expr $(@) : '[^/]*/\(.*\)'`; \
306 $(MAKEARCH) -C $$d $$t;; \
307 *) $(MAKEARCH) -C $(*) clean;; \
312 single*) $(MAKE) NON_SMP_BUILD=1 `expr $(@) : 'single[_]*\(.*\)'` ;; \
313 */*) d=`expr $(@) : '\([^/]*\)/.*'`; \
314 t=`expr $(@) : '[^/]*/\(.*\)'`; \
315 $(MAKEARCH) -C $$d $$t;; \
316 *) $(MAKEARCH) -C $(*) romfs;; \
320 $(MAKE) $(*)_defconfig
323 @if [ ! -f "vendors/$(*)/config.device" ]; then \
324 echo "vendors/$(*)/config.device must exist first"; \
327 -$(MAKE) clean > /dev/null 2>&1
328 cp vendors/$(*)/config.device .config
329 chmod u+x config/setconfig
330 yes "" | config/setconfig defaults
331 config/setconfig final
335 $(MAKE) $(*)_defconfig
339 @echo "*************************************************"
340 @echo "You have not run make config."
341 @echo "The build sequence for this source tree is:"
342 @echo "1. 'make config' or 'make xconfig'"
343 @echo "2. 'make dep'"
345 @echo "*************************************************"
349 @for i in `ls -d linux-* | grep -v $(LINUXDIR)`; do \
353 $(MAKE) -C user prune
354 $(MAKE) -C vendors prune
357 -find $(ROOTDIR) -name 'Makefile*.bin' | while read t; do \
358 $(MAKEARCH) -C `dirname $$t` -f `basename $$t` $@; \
362 @echo "Quick reference for various supported make commands."
363 @echo "----------------------------------------------------"
365 @echo "make xconfig Configure the target etc"
366 @echo "make config \""
367 @echo "make menuconfig \""
368 @echo "make qconfig \""
369 @echo "make gconfig \""
370 @echo "make dep 2.4 and earlier kernels need this step"
371 @echo "make build the entire tree and final images"
372 @echo "make clean clean out compiled files, but not config"
373 @echo "make distclean clean out all non-distributed files"
374 @echo "make oldconfig re-run the config without interaction"
375 @echo "make linux compile the selected kernel only"
376 @echo "make romfs install all files to romfs directory"
377 @echo "make image combine romfs and kernel into final image"
378 @echo "make modules build all modules"
379 @echo "make modules_install install modules into romfs"
380 @echo "make DIR_only build just the directory DIR"
381 @echo "make DIR_romfs install files from directory DIR to romfs"
382 @echo "make DIR_clean clean just the directory DIR"
383 @echo "make single non-parallelised build"
384 @echo "make single[make-target] non-parallelised build of \"make-target\""
385 @echo "make V/P_default full default build for V=Vendor/P=Product"
386 @echo "make prune clean out uncompiled source (be careful)"
388 @echo "Typically you want to start with this sequence before experimenting."
390 @echo "make config select platform, kernel, etc, customise nothing."
391 @echo "make dep optional but safe even on newer kernels."
392 @echo "make build it as the creators intended."
396 ############################################################################