|
@@ -35,7 +35,7 @@ unexport GREP_OPTIONS
|
|
|
# Most importantly: sub-Makefiles should only ever modify files in
|
|
|
# their own directory. If in some directory we have a dependency on
|
|
|
# a file in another dir (which doesn't happen often, but it's often
|
|
|
-# unavoidable when linking the built-in.o targets which finally
|
|
|
+# unavoidable when linking the built-in.a targets which finally
|
|
|
# turn into vmlinux), we will call a sub make in that other dir, and
|
|
|
# after that we are sure that everything which is in that other dir
|
|
|
# is now up to date.
|
|
@@ -220,7 +220,8 @@ export srctree objtree VPATH
|
|
|
version_h := include/generated/uapi/linux/version.h
|
|
|
old_version_h := include/linux/version.h
|
|
|
|
|
|
-no-dot-config-targets := clean mrproper distclean \
|
|
|
+clean-targets := %clean mrproper cleandocs
|
|
|
+no-dot-config-targets := $(clean-targets) \
|
|
|
cscope gtags TAGS tags help% %docs check% coccicheck \
|
|
|
$(version_h) headers_% archheaders archscripts \
|
|
|
kernelversion %src-pkg
|
|
@@ -243,6 +244,14 @@ ifeq ($(KBUILD_EXTMOD),)
|
|
|
endif
|
|
|
endif
|
|
|
endif
|
|
|
+
|
|
|
+# For "make -j clean all", "make -j mrproper defconfig all", etc.
|
|
|
+ifneq ($(filter $(clean-targets),$(MAKECMDGOALS)),)
|
|
|
+ ifneq ($(filter-out $(clean-targets),$(MAKECMDGOALS)),)
|
|
|
+ mixed-targets := 1
|
|
|
+ endif
|
|
|
+endif
|
|
|
+
|
|
|
# install and modules_install need also be processed one by one
|
|
|
ifneq ($(filter install,$(MAKECMDGOALS)),)
|
|
|
ifneq ($(filter modules_install,$(MAKECMDGOALS)),)
|
|
@@ -418,6 +427,7 @@ KBUILD_CFLAGS_KERNEL :=
|
|
|
KBUILD_AFLAGS_MODULE := -DMODULE
|
|
|
KBUILD_CFLAGS_MODULE := -DMODULE
|
|
|
KBUILD_LDFLAGS_MODULE := -T $(srctree)/scripts/module-common.lds
|
|
|
+LDFLAGS :=
|
|
|
GCC_PLUGINS_CFLAGS :=
|
|
|
|
|
|
export ARCH SRCARCH CONFIG_SHELL HOSTCC HOSTCFLAGS CROSS_COMPILE AS LD CC
|
|
@@ -556,14 +566,6 @@ endif
|
|
|
export KBUILD_MODULES KBUILD_BUILTIN
|
|
|
|
|
|
ifeq ($(KBUILD_EXTMOD),)
|
|
|
-# Additional helpers built in scripts/
|
|
|
-# Carefully list dependencies so we do not try to build scripts twice
|
|
|
-# in parallel
|
|
|
-PHONY += scripts
|
|
|
-scripts: scripts_basic include/config/auto.conf include/config/tristate.conf \
|
|
|
- asm-generic gcc-plugins
|
|
|
- $(Q)$(MAKE) $(build)=$(@)
|
|
|
-
|
|
|
# Objects we will link into vmlinux / subdirs we need to visit
|
|
|
init-y := init/
|
|
|
drivers-y := drivers/ sound/ firmware/
|
|
@@ -611,13 +613,6 @@ else
|
|
|
include/config/auto.conf: ;
|
|
|
endif # $(dot-config)
|
|
|
|
|
|
-# For the kernel to actually contain only the needed exported symbols,
|
|
|
-# we have to build modules as well to determine what those symbols are.
|
|
|
-# (this can be evaluated only once include/config/auto.conf has been included)
|
|
|
-ifdef CONFIG_TRIM_UNUSED_KSYMS
|
|
|
- KBUILD_MODULES := 1
|
|
|
-endif
|
|
|
-
|
|
|
# The all: target is the default when no target is given on the
|
|
|
# command line.
|
|
|
# This allow a user to issue only 'make' to build a kernel including modules
|
|
@@ -984,13 +979,13 @@ vmlinux-dirs := $(patsubst %/,%,$(filter %/, $(init-y) $(init-m) \
|
|
|
vmlinux-alldirs := $(sort $(vmlinux-dirs) $(patsubst %/,%,$(filter %/, \
|
|
|
$(init-) $(core-) $(drivers-) $(net-) $(libs-) $(virt-))))
|
|
|
|
|
|
-init-y := $(patsubst %/, %/built-in.o, $(init-y))
|
|
|
-core-y := $(patsubst %/, %/built-in.o, $(core-y))
|
|
|
-drivers-y := $(patsubst %/, %/built-in.o, $(drivers-y))
|
|
|
-net-y := $(patsubst %/, %/built-in.o, $(net-y))
|
|
|
+init-y := $(patsubst %/, %/built-in.a, $(init-y))
|
|
|
+core-y := $(patsubst %/, %/built-in.a, $(core-y))
|
|
|
+drivers-y := $(patsubst %/, %/built-in.a, $(drivers-y))
|
|
|
+net-y := $(patsubst %/, %/built-in.a, $(net-y))
|
|
|
libs-y1 := $(patsubst %/, %/lib.a, $(libs-y))
|
|
|
-libs-y2 := $(filter-out %.a, $(patsubst %/, %/built-in.o, $(libs-y)))
|
|
|
-virt-y := $(patsubst %/, %/built-in.o, $(virt-y))
|
|
|
+libs-y2 := $(patsubst %/, %/built-in.a, $(filter-out %.a, $(libs-y)))
|
|
|
+virt-y := $(patsubst %/, %/built-in.a, $(virt-y))
|
|
|
|
|
|
# Externally visible symbols (used by link-vmlinux.sh)
|
|
|
export KBUILD_VMLINUX_INIT := $(head-y) $(init-y)
|
|
@@ -1003,25 +998,26 @@ export KBUILD_ALLDIRS := $(sort $(filter-out arch/%,$(vmlinux-alldirs)) arch Doc
|
|
|
|
|
|
vmlinux-deps := $(KBUILD_LDS) $(KBUILD_VMLINUX_INIT) $(KBUILD_VMLINUX_MAIN) $(KBUILD_VMLINUX_LIBS)
|
|
|
|
|
|
-# Include targets which we want to execute sequentially if the rest of the
|
|
|
-# kernel build went well. If CONFIG_TRIM_UNUSED_KSYMS is set, this might be
|
|
|
-# evaluated more than once.
|
|
|
-PHONY += vmlinux_prereq
|
|
|
-vmlinux_prereq: $(vmlinux-deps) FORCE
|
|
|
-ifdef CONFIG_HEADERS_CHECK
|
|
|
- $(Q)$(MAKE) -f $(srctree)/Makefile headers_check
|
|
|
-endif
|
|
|
-ifdef CONFIG_GDB_SCRIPTS
|
|
|
- $(Q)ln -fsn $(abspath $(srctree)/scripts/gdb/vmlinux-gdb.py)
|
|
|
-endif
|
|
|
+# Recurse until adjust_autoksyms.sh is satisfied
|
|
|
+PHONY += autoksyms_recursive
|
|
|
+autoksyms_recursive: $(vmlinux-deps)
|
|
|
ifdef CONFIG_TRIM_UNUSED_KSYMS
|
|
|
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/adjust_autoksyms.sh \
|
|
|
"$(MAKE) -f $(srctree)/Makefile vmlinux"
|
|
|
endif
|
|
|
|
|
|
-# standalone target for easier testing
|
|
|
-include/generated/autoksyms.h: FORCE
|
|
|
- $(Q)$(CONFIG_SHELL) $(srctree)/scripts/adjust_autoksyms.sh true
|
|
|
+# For the kernel to actually contain only the needed exported symbols,
|
|
|
+# we have to build modules as well to determine what those symbols are.
|
|
|
+# (this can be evaluated only once include/config/auto.conf has been included)
|
|
|
+ifdef CONFIG_TRIM_UNUSED_KSYMS
|
|
|
+ KBUILD_MODULES := 1
|
|
|
+endif
|
|
|
+
|
|
|
+autoksyms_h := $(if $(CONFIG_TRIM_UNUSED_KSYMS), include/generated/autoksyms.h)
|
|
|
+
|
|
|
+$(autoksyms_h):
|
|
|
+ $(Q)mkdir -p $(dir $@)
|
|
|
+ $(Q)touch $@
|
|
|
|
|
|
ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(SRCARCH)/Makefile.postlink)
|
|
|
|
|
@@ -1030,7 +1026,13 @@ cmd_link-vmlinux = \
|
|
|
$(CONFIG_SHELL) $< $(LD) $(LDFLAGS) $(LDFLAGS_vmlinux) ; \
|
|
|
$(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true)
|
|
|
|
|
|
-vmlinux: scripts/link-vmlinux.sh vmlinux_prereq $(vmlinux-deps) FORCE
|
|
|
+vmlinux: scripts/link-vmlinux.sh autoksyms_recursive $(vmlinux-deps) FORCE
|
|
|
+ifdef CONFIG_HEADERS_CHECK
|
|
|
+ $(Q)$(MAKE) -f $(srctree)/Makefile headers_check
|
|
|
+endif
|
|
|
+ifdef CONFIG_GDB_SCRIPTS
|
|
|
+ $(Q)ln -fsn $(abspath $(srctree)/scripts/gdb/vmlinux-gdb.py)
|
|
|
+endif
|
|
|
+$(call if_changed,link-vmlinux)
|
|
|
|
|
|
# Build samples along the rest of the kernel
|
|
@@ -1060,6 +1062,13 @@ endef
|
|
|
include/config/kernel.release: include/config/auto.conf FORCE
|
|
|
$(call filechk,kernel.release)
|
|
|
|
|
|
+# Additional helpers built in scripts/
|
|
|
+# Carefully list dependencies so we do not try to build scripts twice
|
|
|
+# in parallel
|
|
|
+PHONY += scripts
|
|
|
+scripts: scripts_basic include/config/auto.conf include/config/tristate.conf \
|
|
|
+ asm-generic gcc-plugins $(autoksyms_h)
|
|
|
+ $(Q)$(MAKE) $(build)=$(@)
|
|
|
|
|
|
# Things we need to do before we recursively start building the kernel
|
|
|
# or the modules are listed in "prepare".
|
|
@@ -1088,7 +1097,7 @@ endif
|
|
|
# that need to depend on updated CONFIG_* values can be checked here.
|
|
|
prepare2: prepare3 prepare-compiler-check outputmakefile asm-generic
|
|
|
|
|
|
-prepare1: prepare2 $(version_h) include/generated/utsrelease.h \
|
|
|
+prepare1: prepare2 $(version_h) $(autoksyms_h) include/generated/utsrelease.h \
|
|
|
include/config/auto.conf
|
|
|
$(cmd_crmodverdir)
|
|
|
|
|
@@ -1327,7 +1336,7 @@ endif # CONFIG_MODULES
|
|
|
# make distclean Remove editor backup files, patch leftover files and the like
|
|
|
|
|
|
# Directories & files removed with 'make clean'
|
|
|
-CLEAN_DIRS += $(MODVERDIR)
|
|
|
+CLEAN_DIRS += $(MODVERDIR) include/ksym
|
|
|
|
|
|
# Directories & files removed with 'make mrproper'
|
|
|
MRPROPER_DIRS += include/config usr/include include/generated \
|