2007-07-28 13:00:43 +00:00
|
|
|
# Makefile for OpenWrt
|
|
|
|
#
|
2012-10-08 13:12:37 +00:00
|
|
|
# Copyright (C) 2007-2012 OpenWrt.org
|
2007-07-28 13:00:43 +00:00
|
|
|
#
|
|
|
|
# This is free software, licensed under the GNU General Public License v2.
|
|
|
|
# See /LICENSE for more information.
|
|
|
|
#
|
|
|
|
|
2007-07-30 18:22:01 +00:00
|
|
|
PREP_MK= OPENWRT_BUILD= QUIET=0
|
2007-12-13 06:25:54 +00:00
|
|
|
|
2013-03-17 21:12:02 +00:00
|
|
|
export IS_TTY=$(shell tty -s && echo 1 || echo 0)
|
|
|
|
|
2007-07-28 13:29:03 +00:00
|
|
|
include $(TOPDIR)/include/verbose.mk
|
2007-12-13 06:25:54 +00:00
|
|
|
|
2007-12-14 00:33:25 +00:00
|
|
|
ifeq ($(SDK),1)
|
|
|
|
include $(TOPDIR)/include/version.mk
|
|
|
|
else
|
|
|
|
REVISION:=$(shell $(TOPDIR)/scripts/getver.sh)
|
|
|
|
endif
|
|
|
|
|
2015-02-05 16:57:50 +00:00
|
|
|
HOSTCC ?= $(CC)
|
2007-12-13 06:25:54 +00:00
|
|
|
export REVISION
|
2012-05-08 13:30:54 +00:00
|
|
|
export GIT_CONFIG_PARAMETERS='core.autocrlf=false'
|
2012-09-23 09:49:52 +00:00
|
|
|
export MAKE_JOBSERVER=$(filter --jobserver%,$(MAKEFLAGS))
|
2016-01-31 23:29:07 +00:00
|
|
|
export SOURCE_DATE_EPOCH:=$(shell $(TOPDIR)/scripts/get_source_date_epoch.sh)
|
2007-07-28 13:00:43 +00:00
|
|
|
|
2009-05-07 23:50:19 +00:00
|
|
|
# prevent perforce from messing with the patch utility
|
2009-05-08 15:35:27 +00:00
|
|
|
unexport P4PORT P4USER P4CONFIG P4CLIENT
|
2009-05-07 23:50:19 +00:00
|
|
|
|
2010-01-25 21:45:10 +00:00
|
|
|
# prevent user defaults for quilt from interfering
|
|
|
|
unexport QUILT_PATCHES QUILT_PATCH_OPTS
|
|
|
|
|
2012-07-11 09:59:06 +00:00
|
|
|
unexport C_INCLUDE_PATH CROSS_COMPILE ARCH
|
2012-03-05 21:39:07 +00:00
|
|
|
|
2012-04-05 14:33:03 +00:00
|
|
|
# prevent distro default LPATH from interfering
|
|
|
|
unexport LPATH
|
|
|
|
|
2008-09-25 14:10:04 +00:00
|
|
|
# make sure that a predefined CFLAGS variable does not disturb packages
|
|
|
|
export CFLAGS=
|
2016-01-08 23:18:22 +00:00
|
|
|
export LDFLAGS=
|
2008-09-25 14:10:04 +00:00
|
|
|
|
2016-01-03 23:13:03 +00:00
|
|
|
empty:=
|
|
|
|
space:= $(empty) $(empty)
|
|
|
|
path:=$(subst :,$(space),$(PATH))
|
|
|
|
path:=$(filter-out .%,$(path))
|
|
|
|
path:=$(subst $(space),:,$(path))
|
|
|
|
export PATH:=$(path)
|
|
|
|
|
2014-10-06 04:53:14 +00:00
|
|
|
unexport TAR_OPTIONS
|
|
|
|
|
2013-10-28 15:15:09 +00:00
|
|
|
ifneq ($(shell $(HOSTCC) 2>&1 | grep clang),)
|
|
|
|
export HOSTCC_REAL?=$(HOSTCC)
|
|
|
|
export HOSTCC_WRAPPER:=$(TOPDIR)/scripts/clang-gcc-wrapper
|
|
|
|
else
|
|
|
|
export HOSTCC_WRAPPER:=$(HOSTCC)
|
|
|
|
endif
|
|
|
|
|
2007-07-28 13:00:43 +00:00
|
|
|
ifeq ($(FORCE),)
|
2015-02-27 07:34:24 +00:00
|
|
|
.config scripts/config/conf scripts/config/mconf: staging_dir/host/.prereq-build
|
2007-07-28 13:00:43 +00:00
|
|
|
endif
|
|
|
|
|
|
|
|
SCAN_COOKIE?=$(shell echo $$$$)
|
|
|
|
export SCAN_COOKIE
|
|
|
|
|
2010-10-14 15:53:47 +00:00
|
|
|
SUBMAKE:=umask 022; $(SUBMAKE)
|
|
|
|
|
2012-10-31 00:23:47 +00:00
|
|
|
ULIMIT_FIX=_limit=`ulimit -n`; [ "$$_limit" = "unlimited" -o "$$_limit" -ge 1024 ] || ulimit -n 1024;
|
|
|
|
|
2007-09-23 02:39:01 +00:00
|
|
|
prepare-mk: FORCE ;
|
|
|
|
|
2016-01-10 16:35:24 +00:00
|
|
|
ifdef SDK
|
|
|
|
IGNORE_PACKAGES = linux
|
|
|
|
endif
|
|
|
|
|
|
|
|
_ignore = $(foreach p,$(IGNORE_PACKAGES),--ignore $(p))
|
|
|
|
|
2007-07-30 21:14:08 +00:00
|
|
|
prepare-tmpinfo: FORCE
|
2015-02-27 07:34:24 +00:00
|
|
|
@+$(MAKE) -r -s staging_dir/host/.prereq-build $(PREP_MK)
|
2007-07-30 18:22:01 +00:00
|
|
|
mkdir -p tmp/info
|
2009-08-31 01:11:25 +00:00
|
|
|
$(_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=""
|
2016-05-10 12:46:19 +00:00
|
|
|
$(_SINGLE)$(NO_TRACE_MAKE) -j1 -r -s -f include/scan.mk SCAN_TARGET="targetinfo" SCAN_DIR="target/linux" SCAN_NAME="target" SCAN_DEPS="image/Makefile profiles/*.mk $(TOPDIR)/include/kernel*.mk $(TOPDIR)/include/target.mk" SCAN_DEPTH=2 SCAN_EXTRA="" SCAN_MAKEOPTS="TARGET_BUILD=1"
|
2007-07-30 18:22:01 +00:00
|
|
|
for type in package target; do \
|
2007-07-28 13:00:43 +00:00
|
|
|
f=tmp/.$${type}info; t=tmp/.config-$${type}.in; \
|
2016-05-22 19:31:37 +00:00
|
|
|
[ "$$t" -nt "$$f" ] || ./scripts/$${type}-metadata.pl $(_ignore) config "$$f" > "$$t" || { rm -f "$$t"; echo "Failed to build $$t"; false; break; }; \
|
2007-07-28 13:00:43 +00:00
|
|
|
done
|
2016-01-24 15:36:05 +00:00
|
|
|
[ tmp/.config-feeds.in -nt tmp/.packagesubdirs ] || ./scripts/feeds feed_config > tmp/.config-feeds.in
|
2016-05-22 19:31:37 +00:00
|
|
|
./scripts/package-metadata.pl mk tmp/.packageinfo > tmp/.packagedeps || { rm -f tmp/.packagedeps; false; }
|
|
|
|
./scripts/package-metadata.pl subdirs tmp/.packageinfo > tmp/.packagesubdirs || { rm -f tmp/.packagesubdirs; false; }
|
2007-07-30 21:14:08 +00:00
|
|
|
touch $(TOPDIR)/tmp/.build
|
2007-07-28 13:00:43 +00:00
|
|
|
|
2009-03-03 15:08:55 +00:00
|
|
|
.config: ./scripts/config/conf $(if $(CONFIG_HAVE_DOT_CONFIG),,prepare-tmpinfo)
|
2008-10-18 19:37:34 +00:00
|
|
|
@+if [ \! -e .config ] || ! grep CONFIG_HAVE_DOT_CONFIG .config >/dev/null; then \
|
2007-07-28 13:00:43 +00:00
|
|
|
[ -e $(HOME)/.openwrt/defconfig ] && cp $(HOME)/.openwrt/defconfig .config; \
|
2008-08-16 16:59:47 +00:00
|
|
|
$(_SINGLE)$(NO_TRACE_MAKE) menuconfig $(PREP_MK); \
|
2007-07-28 13:00:43 +00:00
|
|
|
fi
|
|
|
|
|
|
|
|
scripts/config/mconf:
|
2013-10-28 15:15:09 +00:00
|
|
|
@$(_SINGLE)$(SUBMAKE) -s -C scripts/config all CC="$(HOSTCC_WRAPPER)"
|
2007-07-28 13:00:43 +00:00
|
|
|
|
2007-10-14 02:28:34 +00:00
|
|
|
$(eval $(call rdep,scripts/config,scripts/config/mconf))
|
2007-10-14 02:15:37 +00:00
|
|
|
|
2007-07-28 13:00:43 +00:00
|
|
|
scripts/config/conf:
|
2013-10-28 15:15:09 +00:00
|
|
|
@$(_SINGLE)$(SUBMAKE) -s -C scripts/config conf CC="$(HOSTCC_WRAPPER)"
|
2007-07-28 13:00:43 +00:00
|
|
|
|
|
|
|
config: scripts/config/conf prepare-tmpinfo FORCE
|
|
|
|
$< Config.in
|
|
|
|
|
|
|
|
config-clean: FORCE
|
2008-08-16 16:59:47 +00:00
|
|
|
$(_SINGLE)$(NO_TRACE_MAKE) -C scripts/config clean
|
2007-07-28 13:00:43 +00:00
|
|
|
|
|
|
|
defconfig: scripts/config/conf prepare-tmpinfo FORCE
|
|
|
|
touch .config
|
2016-07-04 09:08:58 +00:00
|
|
|
@if [ -s .config -a -e $(HOME)/.openwrt/defconfig ]; then cp $(HOME)/.openwrt/defconfig .config; fi
|
2013-04-18 13:51:16 +00:00
|
|
|
$< --defconfig=.config Config.in
|
2013-04-18 12:05:16 +00:00
|
|
|
|
|
|
|
confdefault-y=allyes
|
|
|
|
confdefault-m=allmod
|
|
|
|
confdefault-n=allno
|
|
|
|
confdefault:=$(confdefault-$(CONFDEFAULT))
|
2007-07-28 13:00:43 +00:00
|
|
|
|
|
|
|
oldconfig: scripts/config/conf prepare-tmpinfo FORCE
|
2013-04-18 12:05:16 +00:00
|
|
|
$< --$(if $(confdefault),$(confdefault),old)config Config.in
|
2007-07-28 13:00:43 +00:00
|
|
|
|
|
|
|
menuconfig: scripts/config/mconf prepare-tmpinfo FORCE
|
2008-10-18 20:16:40 +00:00
|
|
|
if [ \! -e .config -a -e $(HOME)/.openwrt/defconfig ]; then \
|
2007-07-28 13:00:43 +00:00
|
|
|
cp $(HOME)/.openwrt/defconfig .config; \
|
|
|
|
fi
|
|
|
|
$< Config.in
|
|
|
|
|
2009-04-27 10:39:03 +00:00
|
|
|
prepare_kernel_conf: .config FORCE
|
|
|
|
|
2012-01-08 16:52:41 +00:00
|
|
|
ifeq ($(wildcard staging_dir/host/bin/quilt),)
|
2009-04-27 10:39:03 +00:00
|
|
|
prepare_kernel_conf:
|
2012-01-08 16:52:41 +00:00
|
|
|
@+$(SUBMAKE) -r tools/quilt/install
|
2009-04-27 10:39:03 +00:00
|
|
|
else
|
|
|
|
prepare_kernel_conf: ;
|
|
|
|
endif
|
|
|
|
|
|
|
|
kernel_oldconfig: prepare_kernel_conf
|
2008-08-16 16:59:47 +00:00
|
|
|
$(_SINGLE)$(NO_TRACE_MAKE) -C target/linux oldconfig
|
2007-07-28 13:00:43 +00:00
|
|
|
|
2009-04-27 10:39:03 +00:00
|
|
|
kernel_menuconfig: prepare_kernel_conf
|
2008-08-16 16:59:47 +00:00
|
|
|
$(_SINGLE)$(NO_TRACE_MAKE) -C target/linux menuconfig
|
2007-07-28 13:00:43 +00:00
|
|
|
|
2010-08-06 21:36:35 +00:00
|
|
|
kernel_nconfig: prepare_kernel_conf
|
|
|
|
$(_SINGLE)$(NO_TRACE_MAKE) -C target/linux nconfig
|
|
|
|
|
2015-02-27 07:34:24 +00:00
|
|
|
staging_dir/host/.prereq-build: include/prereq-build.mk
|
2007-07-28 13:00:43 +00:00
|
|
|
mkdir -p tmp
|
|
|
|
rm -f tmp/.host.mk
|
2009-03-03 14:16:48 +00:00
|
|
|
@$(_SINGLE)$(NO_TRACE_MAKE) -j1 -r -s -f $(TOPDIR)/include/prereq-build.mk prereq 2>/dev/null || { \
|
2007-07-28 13:00:43 +00:00
|
|
|
echo "Prerequisite check failed. Use FORCE=1 to override."; \
|
|
|
|
false; \
|
|
|
|
}
|
2015-02-08 22:54:19 +00:00
|
|
|
ifneq ($(realpath $(TOPDIR)/include/prepare.mk),)
|
|
|
|
@$(_SINGLE)$(NO_TRACE_MAKE) -j1 -r -s -f $(TOPDIR)/include/prepare.mk prepare 2>/dev/null || { \
|
|
|
|
echo "Preparation failed."; \
|
|
|
|
false; \
|
|
|
|
}
|
|
|
|
endif
|
2007-07-28 13:00:43 +00:00
|
|
|
touch $@
|
|
|
|
|
2010-09-01 17:51:36 +00:00
|
|
|
printdb: FORCE
|
|
|
|
@$(_SINGLE)$(NO_TRACE_MAKE) -p $@ V=99 DUMP_TARGET_DB=1 2>&1
|
|
|
|
|
2016-05-16 09:20:17 +00:00
|
|
|
ifndef SDK
|
|
|
|
DOWNLOAD_DIRS = tools/download toolchain/download package/download target/download
|
|
|
|
else
|
|
|
|
DOWNLOAD_DIRS = package/download
|
|
|
|
endif
|
|
|
|
|
2007-07-28 13:00:43 +00:00
|
|
|
download: .config FORCE
|
2016-05-16 09:20:17 +00:00
|
|
|
@+$(foreach dir,$(DOWNLOAD_DIRS),$(SUBMAKE) $(dir);)
|
2007-07-28 13:00:43 +00:00
|
|
|
|
2007-12-04 03:04:37 +00:00
|
|
|
clean dirclean: .config
|
2015-03-29 07:29:18 +00:00
|
|
|
@+$(SUBMAKE) -r $@
|
2007-07-28 13:00:43 +00:00
|
|
|
|
2009-03-03 15:08:55 +00:00
|
|
|
prereq:: prepare-tmpinfo .config
|
2009-03-03 14:16:48 +00:00
|
|
|
@+$(NO_TRACE_MAKE) -r -s $@
|
2007-07-30 18:22:01 +00:00
|
|
|
|
2015-04-16 12:18:26 +00:00
|
|
|
WARN_PARALLEL_ERROR = $(if $(BUILD_LOG),,$(and $(filter -j,$(MAKEFLAGS)),$(findstring s,$(OPENWRT_VERBOSE))))
|
|
|
|
|
2014-03-13 12:12:58 +00:00
|
|
|
ifeq ($(SDK),1)
|
|
|
|
|
|
|
|
%::
|
|
|
|
@+$(PREP_MK) $(NO_TRACE_MAKE) -r -s prereq
|
|
|
|
@./scripts/config/conf --defconfig=.config Config.in
|
|
|
|
@+$(ULIMIT_FIX) $(SUBMAKE) -r $@
|
|
|
|
|
|
|
|
else
|
|
|
|
|
2007-07-28 13:00:43 +00:00
|
|
|
%::
|
2011-04-17 02:16:52 +00:00
|
|
|
@+$(PREP_MK) $(NO_TRACE_MAKE) -r -s prereq
|
2011-04-04 00:54:33 +00:00
|
|
|
@( \
|
|
|
|
cp .config tmp/.config; \
|
2013-09-02 18:25:06 +00:00
|
|
|
./scripts/config/conf --defconfig=tmp/.config -w tmp/.config Config.in > /dev/null 2>&1; \
|
2011-04-04 00:54:33 +00:00
|
|
|
if ./scripts/kconfig.pl '>' .config tmp/.config | grep -q CONFIG; then \
|
2013-03-17 21:12:02 +00:00
|
|
|
printf "$(_R)WARNING: your configuration is out of sync. Please run make menuconfig, oldconfig or defconfig!$(_N)\n" >&2; \
|
2011-04-04 00:54:33 +00:00
|
|
|
fi \
|
|
|
|
)
|
2015-04-16 12:18:26 +00:00
|
|
|
@+$(ULIMIT_FIX) $(SUBMAKE) -r $@ $(if $(WARN_PARALLEL_ERROR), || { \
|
|
|
|
printf "$(_R)Build failed - please re-run with -j1 to see the real error message$(_N)\n" >&2; \
|
|
|
|
false; \
|
|
|
|
} )
|
2007-07-28 13:00:43 +00:00
|
|
|
|
2014-03-13 12:12:58 +00:00
|
|
|
endif
|
|
|
|
|
build: don't call prereq for any package/symlinks rules
Most of the time, we want to make sure OpenWrt has been configured and
setup before start running make. However, in case of package/symlinks,
forcing prereq as a dependency creates multiple issues:
*when executed on a clean workspace, it will prompt for user input
and open a menuconfig window before executing the feeds command
*the only way around that is to provide a .config. However, the "prereq"
target would then run a "make defconfig", which will remove all the
packages in the .config but from external feeds, as feeds have not been
installed yet.
The only way to currently work around this, is to generate a fake config
by running "make defconfig", then "make package/symlinks", copy the real
config (which at this point disregards the previously generated config),
and run make defconfig again. Something like this:
make defconfig
make package/symlinks
cp real.config .config
make defconfig
This change is removing the need for the first defconfig, making the
process more logical for OpenWrt users using the package/symlinks target.
Signed-off-by: Mathieu Olivari <mathieu@qca.qualcomm.com>
SVN-Revision: 45657
2015-05-10 11:17:29 +00:00
|
|
|
# update all feeds, re-create index files, install symlinks
|
|
|
|
package/symlinks:
|
|
|
|
./scripts/feeds update -a
|
|
|
|
./scripts/feeds install -a
|
|
|
|
|
|
|
|
# re-create index files, install symlinks
|
|
|
|
package/symlinks-install:
|
|
|
|
./scripts/feeds update -i
|
|
|
|
./scripts/feeds install -a
|
|
|
|
|
|
|
|
# remove all symlinks, don't touch ./feeds
|
|
|
|
package/symlinks-clean:
|
|
|
|
./scripts/feeds uninstall -a
|
|
|
|
|
2007-07-28 13:00:43 +00:00
|
|
|
help:
|
|
|
|
cat README
|
|
|
|
|
|
|
|
docs docs/compile: FORCE
|
2008-08-16 16:59:47 +00:00
|
|
|
@$(_SINGLE)$(SUBMAKE) -C docs compile
|
2007-07-28 13:00:43 +00:00
|
|
|
|
|
|
|
docs/clean: FORCE
|
2008-08-16 16:59:47 +00:00
|
|
|
@$(_SINGLE)$(SUBMAKE) -C docs clean
|
2007-07-28 13:00:43 +00:00
|
|
|
|
2007-08-07 00:04:25 +00:00
|
|
|
distclean:
|
2015-11-06 10:53:35 +00:00
|
|
|
rm -rf bin build_dir .config* dl feeds key-build* logs package/feeds package/openwrt-packages staging_dir tmp
|
2008-08-16 16:59:47 +00:00
|
|
|
@$(_SINGLE)$(SUBMAKE) -C scripts/config clean
|
2007-08-07 00:04:25 +00:00
|
|
|
|
2007-07-30 18:22:01 +00:00
|
|
|
ifeq ($(findstring v,$(DEBUG)),)
|
2015-02-27 07:34:24 +00:00
|
|
|
.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
|
2007-07-30 18:22:01 +00:00
|
|
|
endif
|
2007-07-28 13:00:43 +00:00
|
|
|
.PHONY: help FORCE
|
|
|
|
.NOTPARALLEL:
|
|
|
|
|