switch on new verbose system
[openwrt.git] / Makefile
1 # Makefile for OpenWrt
2 #
3 # Copyright (C) 2006 by Felix Fietkau <openwrt@nbd.name>
4 #
5 # 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
20 RELEASE:=Kamikaze
21 #VERSION:=2.0 # uncomment for final release
22
23 #--------------------------------------------------------------
24 # Just run 'make menuconfig', configure stuff, then run 'make'.
25 # You shouldn't need to mess with anything beyond this point...
26 #--------------------------------------------------------------
27 TOPDIR=${shell pwd}
28 export TOPDIR
29 include $(TOPDIR)/include/verbose.mk
30
31 OPENWRTVERSION:=$(RELEASE)
32 ifneq ($(VERSION),)
33 OPENWRTVERSION:=$(VERSION) ($(OPENWRTVERSION))
34 else
35 REV:=$(shell LANG=C svn info | awk '/^Revision:/ { print$$2 }' )
36 ifneq ($(REV),)
37 OPENWRTVERSION:=$(OPENWRTVERSION)/r$(REV)
38 endif
39 endif
40 export OPENWRTVERSION
41
42 all: world
43
44 .pkginfo: FORCE
45 ifneq ($(shell ./scripts/timestamp.pl -p .pkginfo package Makefile),.pkginfo)
46         @echo Collecting package info...
47         @-for dir in package/*/; do \
48                 echo Source-Makefile: $${dir}Makefile; \
49                 $(MAKE) --no-print-dir DUMP=1 -C $$dir 2>&- || true; \
50         done > $@
51 endif
52
53 .config.in: .pkginfo
54         ./scripts/gen_menuconfig.pl < $< > $@ || rm -f $@
55
56 pkginfo-clean: FORCE
57         -rm -f .pkginfo .config.in
58
59 ./scripts/config/mconf: .config.in
60         $(MAKE) -C scripts/config all
61
62 ./scripts/config/conf: .config.in
63         $(MAKE) -C scripts/config conf
64
65 config: ./scripts/config/conf FORCE
66         $< Config.in
67
68 defconfig: ./scripts/config/conf FORCE
69         touch .config
70         $< -D .config Config.in
71
72 oldconfig: ./scripts/config/conf FORCE
73         $< -o Config.in
74
75 menuconfig: ./scripts/config/mconf FORCE
76         $< Config.in
77
78 config-clean: FORCE
79         $(MAKE) -C scripts/config clean
80
81 package/%: .pkginfo FORCE
82         $(MAKE) -C package $(patsubst package/%,%,$@)
83
84 target/%: .pkginfo FORCE
85         $(MAKE) -C target $(patsubst target/%,%,$@)
86
87 toolchain/%: FORCE
88         $(MAKE) -C toolchain $(patsubst toolchain/%,%,$@)
89
90 .config: ./scripts/config/conf FORCE
91         @[ -f .config ] || $(MAKE) menuconfig
92         $< -D .config Config.in >/dev/null 2>/dev/null
93
94 download: .config FORCE
95         $(MAKE) toolchain/download
96         $(MAKE) package/download
97         $(MAKE) target/download
98
99 world: .config FORCE
100         $(MAKE) toolchain/install
101         $(MAKE) target/compile
102         $(MAKE) package/compile
103         $(MAKE) package/install
104         $(MAKE) target/install
105
106 clean: FORCE
107         rm -rf build_* bin
108
109 dirclean: clean
110         rm -rf staging_dir_* toolchain_build_*
111
112 distclean: dirclean config-clean
113         rm -rf dl .*config* .pkg*
114
115 .PHONY: FORCE
116 FORCE: