1 | # Makefile for OpenWrt |
2 | # |
3 | # Copyright (C) 2007-2011 OpenWrt.org |
4 | # |
5 | # This is free software, licensed under the GNU General Public License v2. |
6 | # See /LICENSE for more information. |
7 | # |
8 | |
9 | RELEASE:=Attitude Adjustment |
10 | PREP_MK= OPENWRT_BUILD= QUIET=0 |
11 | |
12 | include $(TOPDIR)/include/verbose.mk |
13 | |
14 | ifeq ($(SDK),1) |
15 | include $(TOPDIR)/include/version.mk |
16 | else |
17 | REVISION:=$(shell $(TOPDIR)/scripts/getver.sh) |
18 | endif |
19 | |
20 | OPENWRTVERSION:=$(RELEASE)$(if $(REVISION), ($(REVISION))) |
21 | export RELEASE |
22 | export REVISION |
23 | export OPENWRTVERSION |
24 | export IS_TTY=$(shell tty -s && echo 1 || echo 0) |
25 | export LD_LIBRARY_PATH:=$(if $(LD_LIBRARY_PATH),$(LD_LIBRARY_PATH):)$(STAGING_DIR_HOST)/lib |
26 | export DYLD_LIBRARY_PATH:=$(if $(DYLD_LIBRARY_PATH),$(DYLD_LIBRARY_PATH):)$(STAGING_DIR_HOST)/lib |
27 | |
28 | # prevent perforce from messing with the patch utility |
29 | unexport P4PORT P4USER P4CONFIG P4CLIENT |
30 | |
31 | # prevent user defaults for quilt from interfering |
32 | unexport QUILT_PATCHES QUILT_PATCH_OPTS |
33 | |
34 | # make sure that a predefined CFLAGS variable does not disturb packages |
35 | export CFLAGS= |
36 | |
37 | ifeq ($(FORCE),) |
38 | .config scripts/config/conf scripts/config/mconf: tmp/.prereq-build |
39 | endif |
40 | |
41 | SCAN_COOKIE?=$(shell echo $$$$) |
42 | export SCAN_COOKIE |
43 | |
44 | SUBMAKE:=umask 022; $(SUBMAKE) |
45 | |
46 | prepare-mk: FORCE ; |
47 | |
48 | prepare-tmpinfo: FORCE |
49 | mkdir -p tmp/info |
50 | $(_SINGLE)$(NO_TRACE_MAKE) -j1 -r -s -f include/scan.mk SCAN_TARGET="packageinfo" SCAN_DIR="package" SCAN_NAME="package" SCAN_DEPS="$(TOPDIR)/include/package*.mk $(TOPDIR)/overlay/*/*.mk" SCAN_DEPTH=5 SCAN_EXTRA="" |
51 | $(_SINGLE)$(NO_TRACE_MAKE) -j1 -r -s -f include/scan.mk SCAN_TARGET="targetinfo" SCAN_DIR="target/linux" SCAN_NAME="target" SCAN_DEPS="profiles/*.mk $(TOPDIR)/include/kernel*.mk $(TOPDIR)/include/target.mk" SCAN_DEPTH=2 SCAN_EXTRA="" SCAN_MAKEOPTS="TARGET_BUILD=1" |
52 | for type in package target; do \ |
53 | f=tmp/.$${type}info; t=tmp/.config-$${type}.in; \ |
54 | [ "$$t" -nt "$$f" ] || ./scripts/metadata.pl $${type}_config "$$f" > "$$t" || { rm -f "$$t"; echo "Failed to build $$t"; false; break; }; \ |
55 | done |
56 | ./scripts/metadata.pl package_mk tmp/.packageinfo > tmp/.packagedeps || { rm -f tmp/.packagedeps; false; } |
57 | touch $(TOPDIR)/tmp/.build |
58 | |
59 | .config: ./scripts/config/conf $(if $(CONFIG_HAVE_DOT_CONFIG),,prepare-tmpinfo) |
60 | @+if [ \! -e .config ] || ! grep CONFIG_HAVE_DOT_CONFIG .config >/dev/null; then \ |
61 | [ -e $(HOME)/.openwrt/defconfig ] && cp $(HOME)/.openwrt/defconfig .config; \ |
62 | $(_SINGLE)$(NO_TRACE_MAKE) menuconfig $(PREP_MK); \ |
63 | fi |
64 | |
65 | scripts/config/mconf: |
66 | @$(_SINGLE)$(SUBMAKE) -s -C scripts/config all |
67 | |
68 | $(eval $(call rdep,scripts/config,scripts/config/mconf)) |
69 | |
70 | scripts/config/conf: |
71 | @$(_SINGLE)$(SUBMAKE) -s -C scripts/config conf |
72 | |
73 | config: scripts/config/conf prepare-tmpinfo FORCE |
74 | $< Config.in |
75 | |
76 | config-clean: FORCE |
77 | $(_SINGLE)$(NO_TRACE_MAKE) -C scripts/config clean |
78 | |
79 | defconfig: scripts/config/conf prepare-tmpinfo FORCE |
80 | touch .config |
81 | $< -D .config Config.in |
82 | |
83 | oldconfig: scripts/config/conf prepare-tmpinfo FORCE |
84 | $< -$(if $(CONFDEFAULT),$(CONFDEFAULT),o) Config.in |
85 | |
86 | menuconfig: scripts/config/mconf prepare-tmpinfo FORCE |
87 | if [ \! -e .config -a -e $(HOME)/.openwrt/defconfig ]; then \ |
88 | cp $(HOME)/.openwrt/defconfig .config; \ |
89 | fi |
90 | $< Config.in |
91 | |
92 | prepare_kernel_conf: .config FORCE |
93 | |
94 | ifeq ($(wildcard staging_dir/host/bin/sed),) |
95 | prepare_kernel_conf: |
96 | @+$(SUBMAKE) -r tools/sed/install |
97 | else |
98 | prepare_kernel_conf: ; |
99 | endif |
100 | |
101 | kernel_oldconfig: prepare_kernel_conf |
102 | $(_SINGLE)$(NO_TRACE_MAKE) -C target/linux oldconfig |
103 | |
104 | kernel_menuconfig: prepare_kernel_conf |
105 | $(_SINGLE)$(NO_TRACE_MAKE) -C target/linux menuconfig |
106 | |
107 | kernel_nconfig: prepare_kernel_conf |
108 | $(_SINGLE)$(NO_TRACE_MAKE) -C target/linux nconfig |
109 | |
110 | tmp/.prereq-build: include/prereq-build.mk |
111 | mkdir -p tmp |
112 | rm -f tmp/.host.mk |
113 | @$(_SINGLE)$(NO_TRACE_MAKE) -j1 -r -s -f $(TOPDIR)/include/prereq-build.mk prereq 2>/dev/null || { \ |
114 | echo "Prerequisite check failed. Use FORCE=1 to override."; \ |
115 | false; \ |
116 | } |
117 | touch $@ |
118 | |
119 | printdb: FORCE |
120 | @$(_SINGLE)$(NO_TRACE_MAKE) -p $@ V=99 DUMP_TARGET_DB=1 2>&1 |
121 | |
122 | download: .config FORCE |
123 | @+$(SUBMAKE) tools/download |
124 | @+$(SUBMAKE) toolchain/download |
125 | @+$(SUBMAKE) package/download |
126 | @+$(SUBMAKE) target/download |
127 | |
128 | clean dirclean: .config |
129 | @+$(SUBMAKE) -r $@ |
130 | |
131 | prereq:: prepare-tmpinfo .config |
132 | @+$(MAKE) -r -s tmp/.prereq-build $(PREP_MK) |
133 | @+$(NO_TRACE_MAKE) -r -s $@ |
134 | |
135 | %:: |
136 | @+$(PREP_MK) $(NO_TRACE_MAKE) -r -s prereq |
137 | @( \ |
138 | cp .config tmp/.config; \ |
139 | ./scripts/config/conf -D tmp/.config -w tmp/.config Config.in > /dev/null 2>&1; \ |
140 | if ./scripts/kconfig.pl '>' .config tmp/.config | grep -q CONFIG; then \ |
141 | echo "WARNING: your configuration is out of sync. Please run make menuconfig, oldconfig or defconfig!"; \ |
142 | fi \ |
143 | ) |
144 | @+$(SUBMAKE) -r $@ |
145 | |
146 | help: |
147 | cat README |
148 | |
149 | docs docs/compile: FORCE |
150 | @$(_SINGLE)$(SUBMAKE) -C docs compile |
151 | |
152 | docs/clean: FORCE |
153 | @$(_SINGLE)$(SUBMAKE) -C docs clean |
154 | |
155 | distclean: |
156 | rm -rf tmp build_dir staging_dir dl .config* feeds package/feeds package/openwrt-packages bin |
157 | @$(_SINGLE)$(SUBMAKE) -C scripts/config clean |
158 | |
159 | ifeq ($(findstring v,$(DEBUG)),) |
160 | .SILENT: symlinkclean clean dirclean distclean config-clean download help tmpinfo-clean .config scripts/config/mconf scripts/config/conf menuconfig tmp/.prereq-build tmp/.prereq-package prepare-tmpinfo |
161 | endif |
162 | .PHONY: help FORCE |
163 | .NOTPARALLEL: |
164 | |
165 | |