mirror of
https://github.com/hanwckf/immortalwrt-mt798x.git
synced 2025-01-08 10:23:47 +08:00
e06d8f0f6f
When running "make {config|defconfig|oldconfig}" with symlinked .config (e.g. to env/.config) it renames symlink to .config.old, creates new .config file, and writes the updated configuration into it. This breaks the desired workflow when changes in the configuration can be checked using "scripts/env diff" and commited using "scripts/env save". Since the env/.config file is not updated. The things become even worse when working with feeds, since feeds script quite often silently invokes "make {oldconfig|defconfig}" and breaks the symlink. Fix this issue by exporting KCONFIG_OVERWRITECONFIG=1, which forces mconf to overwrite the .config content, instead of renaming it and creating a new file. This variable is set only if .config is a symlink, otherwise the variable is not exported and the old behaviour is preserved. This change uses the same behaviour as "make menucofig", which has already been fixed in commit 5bf98b1acc3b6b178f8954c5075a58e1e6a99d6a. Also make a tiny cosmetic update to the "make menuconfig" target code layout to make it look like other config handling targets. Signed-off-by: Sergey Ryazanov <ryazanov.s.a@gmail.com>
248 lines
7.6 KiB
Makefile
248 lines
7.6 KiB
Makefile
# Makefile for OpenWrt
|
|
#
|
|
# Copyright (C) 2007-2012 OpenWrt.org
|
|
#
|
|
# This is free software, licensed under the GNU General Public License v2.
|
|
# See /LICENSE for more information.
|
|
#
|
|
|
|
PREP_MK= OPENWRT_BUILD= QUIET=0
|
|
|
|
export IS_TTY=$(shell tty -s && echo 1 || echo 0)
|
|
|
|
include $(TOPDIR)/include/verbose.mk
|
|
|
|
ifeq ($(SDK),1)
|
|
include $(TOPDIR)/include/version.mk
|
|
else
|
|
REVISION:=$(shell $(TOPDIR)/scripts/getver.sh)
|
|
SOURCE_DATE_EPOCH:=$(shell $(TOPDIR)/scripts/get_source_date_epoch.sh)
|
|
endif
|
|
|
|
HOSTCC ?= $(CC)
|
|
export REVISION
|
|
export SOURCE_DATE_EPOCH
|
|
export GIT_CONFIG_PARAMETERS='core.autocrlf=false'
|
|
export MAKE_JOBSERVER=$(filter --jobserver%,$(MAKEFLAGS))
|
|
export GNU_HOST_NAME:=$(shell $(TOPDIR)/scripts/config.guess)
|
|
export HOST_OS:=$(shell uname)
|
|
export HOST_ARCH:=$(shell uname -m)
|
|
|
|
# prevent perforce from messing with the patch utility
|
|
unexport P4PORT P4USER P4CONFIG P4CLIENT
|
|
|
|
# prevent user defaults for quilt from interfering
|
|
unexport QUILT_PATCHES QUILT_PATCH_OPTS
|
|
|
|
unexport C_INCLUDE_PATH CROSS_COMPILE ARCH
|
|
|
|
# prevent distro default LPATH from interfering
|
|
unexport LPATH
|
|
|
|
# make sure that a predefined CFLAGS variable does not disturb packages
|
|
export CFLAGS=
|
|
export LDFLAGS=
|
|
|
|
empty:=
|
|
space:= $(empty) $(empty)
|
|
path:=$(subst :,$(space),$(PATH))
|
|
path:=$(filter-out .%,$(path))
|
|
path:=$(subst $(space),:,$(path))
|
|
export PATH:=$(path)
|
|
|
|
unexport TAR_OPTIONS
|
|
|
|
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
|
|
|
|
ifeq ($(FORCE),)
|
|
.config scripts/config/conf scripts/config/mconf: staging_dir/host/.prereq-build
|
|
endif
|
|
|
|
SCAN_COOKIE?=$(shell echo $$$$)
|
|
export SCAN_COOKIE
|
|
|
|
SUBMAKE:=umask 022; $(SUBMAKE)
|
|
|
|
ULIMIT_FIX=_limit=`ulimit -n`; [ "$$_limit" = "unlimited" -o "$$_limit" -ge 1024 ] || ulimit -n 1024;
|
|
|
|
prepare-mk: staging_dir/host/.prereq-build FORCE ;
|
|
|
|
ifdef SDK
|
|
IGNORE_PACKAGES = linux
|
|
endif
|
|
|
|
_ignore = $(foreach p,$(IGNORE_PACKAGES),--ignore $(p))
|
|
|
|
prepare-tmpinfo: FORCE
|
|
@+$(MAKE) -r -s staging_dir/host/.prereq-build $(PREP_MK)
|
|
mkdir -p tmp/info
|
|
$(_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" SCAN_DEPTH=5 SCAN_EXTRA=""
|
|
$(_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"
|
|
for type in package target; do \
|
|
f=tmp/.$${type}info; t=tmp/.config-$${type}.in; \
|
|
[ "$$t" -nt "$$f" ] || ./scripts/$${type}-metadata.pl $(_ignore) config "$$f" > "$$t" || { rm -f "$$t"; echo "Failed to build $$t"; false; break; }; \
|
|
done
|
|
[ tmp/.config-feeds.in -nt tmp/.packagesubdirs ] || ./scripts/feeds feed_config > tmp/.config-feeds.in
|
|
./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; }
|
|
touch $(TOPDIR)/tmp/.build
|
|
|
|
.config: ./scripts/config/conf $(if $(CONFIG_HAVE_DOT_CONFIG),,prepare-tmpinfo)
|
|
@+if [ \! -e .config ] || ! grep CONFIG_HAVE_DOT_CONFIG .config >/dev/null; then \
|
|
[ -e $(HOME)/.openwrt/defconfig ] && cp $(HOME)/.openwrt/defconfig .config; \
|
|
$(_SINGLE)$(NO_TRACE_MAKE) menuconfig $(PREP_MK); \
|
|
fi
|
|
|
|
scripts/config/mconf:
|
|
@$(_SINGLE)$(SUBMAKE) -s -C scripts/config all CC="$(HOSTCC_WRAPPER)"
|
|
|
|
$(eval $(call rdep,scripts/config,scripts/config/mconf))
|
|
|
|
scripts/config/conf:
|
|
@$(_SINGLE)$(SUBMAKE) -s -C scripts/config conf CC="$(HOSTCC_WRAPPER)"
|
|
|
|
config: scripts/config/conf prepare-tmpinfo FORCE
|
|
[ -L .config ] && export KCONFIG_OVERWRITECONFIG=1; \
|
|
$< Config.in
|
|
|
|
config-clean: FORCE
|
|
$(_SINGLE)$(NO_TRACE_MAKE) -C scripts/config clean
|
|
|
|
defconfig: scripts/config/conf prepare-tmpinfo FORCE
|
|
touch .config
|
|
@if [ ! -s .config -a -e $(HOME)/.openwrt/defconfig ]; then cp $(HOME)/.openwrt/defconfig .config; fi
|
|
[ -L .config ] && export KCONFIG_OVERWRITECONFIG=1; \
|
|
$< --defconfig=.config Config.in
|
|
|
|
confdefault-y=allyes
|
|
confdefault-m=allmod
|
|
confdefault-n=allno
|
|
confdefault:=$(confdefault-$(CONFDEFAULT))
|
|
|
|
oldconfig: scripts/config/conf prepare-tmpinfo FORCE
|
|
[ -L .config ] && export KCONFIG_OVERWRITECONFIG=1; \
|
|
$< --$(if $(confdefault),$(confdefault),old)config Config.in
|
|
|
|
menuconfig: scripts/config/mconf prepare-tmpinfo FORCE
|
|
if [ \! -e .config -a -e $(HOME)/.openwrt/defconfig ]; then \
|
|
cp $(HOME)/.openwrt/defconfig .config; \
|
|
fi
|
|
[ -L .config ] && export KCONFIG_OVERWRITECONFIG=1; \
|
|
$< Config.in
|
|
|
|
prepare_kernel_conf: .config FORCE
|
|
|
|
ifeq ($(wildcard staging_dir/host/bin/quilt),)
|
|
prepare_kernel_conf:
|
|
@+$(SUBMAKE) -r tools/quilt/compile
|
|
else
|
|
prepare_kernel_conf: ;
|
|
endif
|
|
|
|
kernel_oldconfig: prepare_kernel_conf
|
|
$(_SINGLE)$(NO_TRACE_MAKE) -C target/linux oldconfig
|
|
|
|
kernel_menuconfig: prepare_kernel_conf
|
|
$(_SINGLE)$(NO_TRACE_MAKE) -C target/linux menuconfig
|
|
|
|
kernel_nconfig: prepare_kernel_conf
|
|
$(_SINGLE)$(NO_TRACE_MAKE) -C target/linux nconfig
|
|
|
|
staging_dir/host/.prereq-build: include/prereq-build.mk
|
|
mkdir -p tmp
|
|
@$(_SINGLE)$(NO_TRACE_MAKE) -j1 -r -s -f $(TOPDIR)/include/prereq-build.mk prereq 2>/dev/null || { \
|
|
echo "Prerequisite check failed. Use FORCE=1 to override."; \
|
|
false; \
|
|
}
|
|
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
|
|
touch $@
|
|
|
|
printdb: FORCE
|
|
@$(_SINGLE)$(NO_TRACE_MAKE) -p $@ V=99 DUMP_TARGET_DB=1 2>&1
|
|
|
|
ifndef SDK
|
|
DOWNLOAD_DIRS = tools/download toolchain/download package/download target/download
|
|
else
|
|
DOWNLOAD_DIRS = package/download
|
|
endif
|
|
|
|
download: .config FORCE
|
|
@+$(foreach dir,$(DOWNLOAD_DIRS),$(SUBMAKE) $(dir);)
|
|
|
|
clean dirclean: .config
|
|
@+$(SUBMAKE) -r $@
|
|
|
|
prereq:: prepare-tmpinfo .config
|
|
@+$(NO_TRACE_MAKE) -r -s $@
|
|
|
|
check: .config FORCE
|
|
@+$(NO_TRACE_MAKE) -r -s $@ QUIET= V=s
|
|
|
|
val.%: FORCE
|
|
@+$(NO_TRACE_MAKE) -r -s $@ QUIET= V=s
|
|
|
|
WARN_PARALLEL_ERROR = $(if $(BUILD_LOG),,$(and $(filter -j,$(MAKEFLAGS)),$(findstring s,$(OPENWRT_VERBOSE))))
|
|
|
|
ifeq ($(SDK),1)
|
|
|
|
%::
|
|
@+$(PREP_MK) $(NO_TRACE_MAKE) -r -s prereq
|
|
@./scripts/config/conf --defconfig=.config Config.in
|
|
@+$(ULIMIT_FIX) $(SUBMAKE) -r $@
|
|
|
|
else
|
|
|
|
%::
|
|
@+$(PREP_MK) $(NO_TRACE_MAKE) -r -s prereq
|
|
@( \
|
|
cp .config tmp/.config; \
|
|
./scripts/config/conf --defconfig=tmp/.config -w tmp/.config Config.in > /dev/null 2>&1; \
|
|
if ./scripts/kconfig.pl '>' .config tmp/.config | grep -q CONFIG; then \
|
|
printf "$(_R)WARNING: your configuration is out of sync. Please run make menuconfig, oldconfig or defconfig!$(_N)\n" >&2; \
|
|
fi \
|
|
)
|
|
@+$(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; \
|
|
} )
|
|
|
|
endif
|
|
|
|
# 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
|
|
|
|
help:
|
|
cat README
|
|
|
|
distclean:
|
|
rm -rf bin build_dir .config* dl feeds key-build* logs package/feeds package/openwrt-packages staging_dir tmp
|
|
@$(_SINGLE)$(SUBMAKE) -C scripts/config clean
|
|
|
|
ifeq ($(findstring v,$(DEBUG)),)
|
|
.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
|
|
endif
|
|
.PHONY: help FORCE
|
|
.NOTPARALLEL:
|
|
|