3 # Copyright (C) 2007-2012 OpenWrt.org
5 # This is free software, licensed under the GNU General Public License v2.
6 # See /LICENSE for more information.
9 RELEASE
:=Designated Driver
10 PREP_MK
= OPENWRT_BUILD
= QUIET
=0
12 export IS_TTY
=$(shell tty
-s
&& echo
1 || echo
0)
14 include $(TOPDIR
)/include/verbose.mk
17 include $(TOPDIR
)/include/version.mk
19 REVISION
:=$(shell $(TOPDIR
)/scripts
/getver.sh
)
25 export GIT_CONFIG_PARAMETERS
='core.autocrlf=false'
26 export MAKE_JOBSERVER
=$(filter --jobserver
%,$(MAKEFLAGS
))
28 # prevent perforce from messing with the patch utility
29 unexport P4PORT P4USER P4CONFIG P4CLIENT
31 # prevent user defaults for quilt from interfering
32 unexport QUILT_PATCHES QUILT_PATCH_OPTS
34 unexport C_INCLUDE_PATH CROSS_COMPILE ARCH
36 # prevent distro default LPATH from interfering
39 # make sure that a predefined CFLAGS variable does not disturb packages
44 space
:= $(empty
) $(empty
)
45 path
:=$(subst :,$(space
),$(PATH
))
46 path
:=$(filter-out .
%,$(path
))
47 path
:=$(subst $(space
),:,$(path
))
52 ifneq ($(shell $(HOSTCC
) 2>&1 | grep clang
),)
53 export HOSTCC_REAL?
=$(HOSTCC
)
54 export HOSTCC_WRAPPER
:=$(TOPDIR
)/scripts
/clang-gcc-wrapper
56 export HOSTCC_WRAPPER
:=$(HOSTCC
)
60 .config scripts
/config
/conf scripts
/config
/mconf
: staging_dir
/host
/.prereq-build
63 SCAN_COOKIE?
=$(shell echo
$$$$)
66 SUBMAKE
:=umask
022; $(SUBMAKE
)
68 ULIMIT_FIX
=_limit
=`ulimit -n`; [ "$$_limit" = "unlimited" -o
"$$_limit" -ge
1024 ] || ulimit
-n
1024;
72 prepare-tmpinfo
: FORCE
73 @
+$(MAKE
) -r
-s staging_dir
/host
/.prereq-build
$(PREP_MK
)
75 $(_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
=""
76 $(_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"
77 for type in package target
; do \
78 f
=tmp
/.
$${type}info; t
=tmp
/.config-
$${type}.in
; \
79 [ "$$t" -nt
"$$f" ] || .
/scripts
/metadata.pl
$${type}_config
"$$f" > "$$t" ||
{ rm -f
"$$t"; echo
"Failed to build $$t"; false
; break
; }; \
81 [ tmp
/.config-feeds.in
-nt tmp
/.packagefeeds
] || .
/scripts
/feeds feed_config
> tmp
/.config-feeds.in
82 .
/scripts
/metadata.pl package_mk tmp
/.packageinfo
> tmp
/.packagedeps ||
{ rm -f tmp
/.packagedeps
; false
; }
83 .
/scripts
/metadata.pl package_feeds tmp
/.packageinfo
> tmp
/.packagefeeds ||
{ rm -f tmp
/.packagefeeds
; false
; }
84 touch
$(TOPDIR
)/tmp
/.build
86 .config
: .
/scripts
/config
/conf
$(if
$(CONFIG_HAVE_DOT_CONFIG
),,prepare-tmpinfo
)
87 @
+if
[ \
! -e .config
] ||
! grep CONFIG_HAVE_DOT_CONFIG .config
>/dev
/null
; then \
88 [ -e
$(HOME
)/.openwrt
/defconfig
] && cp
$(HOME
)/.openwrt
/defconfig .config
; \
89 $(_SINGLE
)$(NO_TRACE_MAKE
) menuconfig
$(PREP_MK
); \
93 @
$(_SINGLE
)$(SUBMAKE
) -s
-C scripts
/config
all CC
="$(HOSTCC_WRAPPER)"
95 $(eval
$(call rdep
,scripts
/config
,scripts
/config
/mconf
))
98 @
$(_SINGLE
)$(SUBMAKE
) -s
-C scripts
/config conf CC
="$(HOSTCC_WRAPPER)"
100 config
: scripts
/config
/conf prepare-tmpinfo FORCE
104 $(_SINGLE
)$(NO_TRACE_MAKE
) -C scripts
/config
clean
106 defconfig
: scripts
/config
/conf prepare-tmpinfo FORCE
108 @if
[ -e
$(HOME
)/.openwrt
/defconfig
]; then cp
$(HOME
)/.openwrt
/defconfig .config
; fi
109 $< --defconfig
=.config Config.in
114 confdefault
:=$(confdefault-
$(CONFDEFAULT
))
116 oldconfig
: scripts
/config
/conf prepare-tmpinfo FORCE
117 $< --$(if
$(confdefault
),$(confdefault
),old
)config Config.in
119 menuconfig
: scripts
/config
/mconf prepare-tmpinfo FORCE
120 if
[ \
! -e .config
-a
-e
$(HOME
)/.openwrt
/defconfig
]; then \
121 cp
$(HOME
)/.openwrt
/defconfig .config
; \
125 prepare_kernel_conf
: .config FORCE
127 ifeq ($(wildcard staging_dir
/host
/bin
/quilt
),)
129 @
+$(SUBMAKE
) -r tools
/quilt
/install
131 prepare_kernel_conf
: ;
134 kernel_oldconfig
: prepare_kernel_conf
135 $(_SINGLE
)$(NO_TRACE_MAKE
) -C target
/linux oldconfig
137 kernel_menuconfig
: prepare_kernel_conf
138 $(_SINGLE
)$(NO_TRACE_MAKE
) -C target
/linux menuconfig
140 kernel_nconfig
: prepare_kernel_conf
141 $(_SINGLE
)$(NO_TRACE_MAKE
) -C target
/linux nconfig
143 staging_dir
/host
/.prereq-build
: include/prereq-build.mk
146 @
$(_SINGLE
)$(NO_TRACE_MAKE
) -j1
-r
-s
-f
$(TOPDIR
)/include/prereq-build.mk prereq
2>/dev
/null ||
{ \
147 echo
"Prerequisite check failed. Use FORCE=1 to override."; \
150 ifneq ($(realpath
$(TOPDIR
)/include/prepare.mk
),)
151 @
$(_SINGLE
)$(NO_TRACE_MAKE
) -j1
-r
-s
-f
$(TOPDIR
)/include/prepare.mk prepare
2>/dev
/null ||
{ \
152 echo
"Preparation failed."; \
159 @
$(_SINGLE
)$(NO_TRACE_MAKE
) -p
$@ V
=99 DUMP_TARGET_DB
=1 2>&1
161 download
: .config FORCE
162 @
+$(SUBMAKE
) tools
/download
163 @
+$(SUBMAKE
) toolchain
/download
164 @
+$(SUBMAKE
) package
/download
165 @
+$(SUBMAKE
) target
/download
167 clean dirclean
: .config
170 prereq
:: prepare-tmpinfo .config
171 @
+$(NO_TRACE_MAKE
) -r
-s
$@
173 WARN_PARALLEL_ERROR
= $(if
$(BUILD_LOG
),,$(and
$(filter -j
,$(MAKEFLAGS
)),$(findstring s
,$(OPENWRT_VERBOSE
))))
178 @
+$(PREP_MK
) $(NO_TRACE_MAKE
) -r
-s prereq
179 @.
/scripts
/config
/conf
--defconfig
=.config Config.in
180 @
+$(ULIMIT_FIX
) $(SUBMAKE
) -r
$@
185 @
+$(PREP_MK
) $(NO_TRACE_MAKE
) -r
-s prereq
187 cp .config tmp
/.config
; \
188 .
/scripts
/config
/conf
--defconfig
=tmp
/.config
-w tmp
/.config Config.in
> /dev
/null
2>&1; \
189 if .
/scripts
/kconfig.pl
'>' .config tmp
/.config | grep
-q CONFIG
; then \
190 printf
"$(_R)WARNING: your configuration is out of sync. Please run make menuconfig, oldconfig or defconfig!$(_N)\n" >&2; \
193 @
+$(ULIMIT_FIX
) $(SUBMAKE
) -r
$@
$(if
$(WARN_PARALLEL_ERROR
), ||
{ \
194 printf
"$(_R)Build failed - please re-run with -j1 to see the real error message$(_N)\n" >&2; \
200 # update all feeds, re-create index files, install symlinks
202 .
/scripts
/feeds update
-a
203 .
/scripts
/feeds
install -a
205 # re-create index files, install symlinks
206 package
/symlinks-install
:
207 .
/scripts
/feeds update
-i
208 .
/scripts
/feeds
install -a
210 # remove all symlinks, don't touch ./feeds
211 package
/symlinks-clean
:
212 .
/scripts
/feeds
uninstall -a
217 docs docs
/compile
: FORCE
218 @
$(_SINGLE
)$(SUBMAKE
) -C docs compile
221 @
$(_SINGLE
)$(SUBMAKE
) -C docs
clean
224 rm -rf bin build_dir .config
* dl feeds key-build
* logs package
/feeds package
/openwrt-packages staging_dir tmp
225 @
$(_SINGLE
)$(SUBMAKE
) -C scripts
/config
clean
227 ifeq ($(findstring v
,$(DEBUG
)),)
228 .SILENT
: symlinkclean
clean dirclean
distclean config-clean download help tmpinfo-clean .config scripts
/config
/mconf scripts
/config
/conf menuconfig staging_dir
/host
/.prereq-build tmp
/.prereq-package prepare-tmpinfo