Commit 2646719a authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull Kbuild updates from Masahiro Yamada:

 - allow users to invoke 'make' out of the source tree

 - refactor scripts/mkmakefile

 - deprecate KBUILD_SRC, which was used to track the source tree
   location for O= build.

 - fix recordmcount.pl in case objdump output is localized

 - turn unresolved symbols in external modules to errors from warnings
   by default; pass KBUILD_MODPOST_WARN=1 to get them back to warnings

 - generate modules.builtin.modinfo to collect .modinfo data from
   built-in modules

 - misc Makefile cleanups

* tag 'kbuild-v5.2' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild: (21 commits)
  .gitignore: add more all*.config patterns
  moduleparam: Save information about built-in modules in separate file
  Remove MODULE_ALIAS() calls that take undefined macro
  .gitignore: add leading and trailing slashes to generated directories
  scripts/tags.sh: fix direct execution of scripts/tags.sh
  scripts: override locale from environment when running recordmcount.pl
  samples: kobject: allow CONFIG_SAMPLE_KOBJECT to become y
  samples: seccomp: turn CONFIG_SAMPLE_SECCOMP into a bool option
  kbuild: move Documentation to vmlinux-alldirs
  kbuild: move samples/ to KBUILD_VMLINUX_OBJS
  modpost: make KBUILD_MODPOST_WARN also configurable for external modules
  kbuild: check arch/$(SRCARCH)/include/generated before out-of-tree build
  kbuild: remove unneeded dependency for include/config/kernel.release
  memory: squash drivers/memory/Makefile.asm-offsets
  kbuild: use $(srctree) instead of KBUILD_SRC to check out-of-tree build
  kbuild: mkmakefile: generate a simple wrapper of top Makefile
  kbuild: mkmakefile: do not check the generated Makefile marker
  kbuild: allow Kbuild to start from any directory
  kbuild: pass $(MAKECMDGOALS) to sub-make as is
  kbuild: fix warning "overriding recipe for target 'Makefile'"
  ...
parents 019d7316 7fb1fc42
Loading
Loading
Loading
Loading
+11 −5
Original line number Original line Diff line number Diff line
@@ -58,6 +58,7 @@ modules.builtin
/vmlinuz
/vmlinuz
/System.map
/System.map
/Module.markers
/Module.markers
/modules.builtin.modinfo


#
#
# RPM spec file (make rpm-pkg)
# RPM spec file (make rpm-pkg)
@@ -90,10 +91,10 @@ modules.builtin
#
#
# Generated include files
# Generated include files
#
#
include/config
/include/config/
include/generated
/include/generated/
include/ksym
/include/ksym/
arch/*/include/generated
/arch/*/include/generated/


# stgit generated dirs
# stgit generated dirs
patches-*
patches-*
@@ -129,7 +130,12 @@ signing_key.x509
x509.genkey
x509.genkey


# Kconfig presets
# Kconfig presets
all.config
/all.config
/alldef.config
/allmod.config
/allno.config
/allrandom.config
/allyes.config


# Kdevelop4
# Kdevelop4
*.kdev4
*.kdev4
+1 −0
Original line number Original line Diff line number Diff line
@@ -179,6 +179,7 @@ mktree
mkutf8data
mkutf8data
modpost
modpost
modules.builtin
modules.builtin
modules.builtin.modinfo
modules.order
modules.order
modversions.h*
modversions.h*
nconf
nconf
+5 −0
Original line number Original line Diff line number Diff line
@@ -11,6 +11,11 @@ modules.builtin
This file lists all modules that are built into the kernel. This is used
This file lists all modules that are built into the kernel. This is used
by modprobe to not fail when trying to load something builtin.
by modprobe to not fail when trying to load something builtin.


modules.builtin.modinfo
--------------------------------------------------
This file contains modinfo from all modules that are built into the kernel.
Unlike modinfo of a separate module, all fields are prefixed with module name.



Environment variables
Environment variables


+81 −65
Original line number Original line Diff line number Diff line
@@ -96,56 +96,65 @@ endif


export quiet Q KBUILD_VERBOSE
export quiet Q KBUILD_VERBOSE


# kbuild supports saving output files in a separate directory.
# Kbuild will save output files in the current working directory.
# To locate output files in a separate directory two syntaxes are supported.
# This does not need to match to the root of the kernel source tree.
# In both cases the working directory must be the root of the kernel src.
#
# For example, you can do this:
#
#  cd /dir/to/store/output/files; make -f /dir/to/kernel/source/Makefile
#
# If you want to save output files in a different location, there are
# two syntaxes to specify it.
#
# 1) O=
# 1) O=
# Use "make O=dir/to/store/output/files/"
# Use "make O=dir/to/store/output/files/"
#
#
# 2) Set KBUILD_OUTPUT
# 2) Set KBUILD_OUTPUT
# Set the environment variable KBUILD_OUTPUT to point to the directory
# Set the environment variable KBUILD_OUTPUT to point to the output directory.
# where the output files shall be placed.
# export KBUILD_OUTPUT=dir/to/store/output/files/; make
# export KBUILD_OUTPUT=dir/to/store/output/files/
# make
#
#
# The O= assignment takes precedence over the KBUILD_OUTPUT environment
# The O= assignment takes precedence over the KBUILD_OUTPUT environment
# variable.
# variable.


# KBUILD_SRC is not intended to be used by the regular user (for now),
# Do we want to change the working directory?
# it is set on invocation of make with KBUILD_OUTPUT or O= specified.

# OK, Make called in directory where kernel src resides
# Do we want to locate output files in a separate directory?
ifeq ("$(origin O)", "command line")
ifeq ("$(origin O)", "command line")
  KBUILD_OUTPUT := $(O)
  KBUILD_OUTPUT := $(O)
endif
endif


ifneq ($(words $(subst :, ,$(CURDIR))), 1)
ifneq ($(KBUILD_OUTPUT),)
  $(error main directory cannot contain spaces nor colons)
# Make's built-in functions such as $(abspath ...), $(realpath ...) cannot
# expand a shell special character '~'. We use a somewhat tedious way here.
abs_objtree := $(shell mkdir -p $(KBUILD_OUTPUT) && cd $(KBUILD_OUTPUT) && pwd)
$(if $(abs_objtree),, \
     $(error failed to create output directory "$(KBUILD_OUTPUT)"))

# $(realpath ...) resolves symlinks
abs_objtree := $(realpath $(abs_objtree))
else
abs_objtree := $(CURDIR)
endif # ifneq ($(KBUILD_OUTPUT),)

ifeq ($(abs_objtree),$(CURDIR))
# Suppress "Entering directory ..." unless we are changing the work directory.
MAKEFLAGS += --no-print-directory
else
need-sub-make := 1
endif
endif


ifneq ($(KBUILD_OUTPUT),)
abs_srctree := $(realpath $(dir $(lastword $(MAKEFILE_LIST))))
# check that the output directory actually exists
saved-output := $(KBUILD_OUTPUT)
KBUILD_OUTPUT := $(shell mkdir -p $(KBUILD_OUTPUT) && cd $(KBUILD_OUTPUT) \
								&& pwd)
$(if $(KBUILD_OUTPUT),, \
     $(error failed to create output directory "$(saved-output)"))


ifneq ($(words $(subst :, ,$(abs_srctree))), 1)
$(error source directory cannot contain spaces or colons)
endif

ifneq ($(abs_srctree),$(abs_objtree))
# Look for make include files relative to root of kernel src
# Look for make include files relative to root of kernel src
#
#
# This does not become effective immediately because MAKEFLAGS is re-parsed
# This does not become effective immediately because MAKEFLAGS is re-parsed
# once after the Makefile is read.  It is OK since we are going to invoke
# once after the Makefile is read. We need to invoke sub-make.
# 'sub-make' below.
MAKEFLAGS += --include-dir=$(abs_srctree)
MAKEFLAGS += --include-dir=$(CURDIR)

need-sub-make := 1
need-sub-make := 1
else
endif

# Do not print "Entering directory ..." at all for in-tree build.
MAKEFLAGS += --no-print-directory

endif # ifneq ($(KBUILD_OUTPUT),)


ifneq ($(filter 3.%,$(MAKE_VERSION)),)
ifneq ($(filter 3.%,$(MAKE_VERSION)),)
# 'MAKEFLAGS += -rR' does not immediately become effective for GNU Make 3.x
# 'MAKEFLAGS += -rR' does not immediately become effective for GNU Make 3.x
@@ -155,20 +164,19 @@ need-sub-make := 1
$(lastword $(MAKEFILE_LIST)): ;
$(lastword $(MAKEFILE_LIST)): ;
endif
endif


export abs_srctree abs_objtree
export sub_make_done := 1
export sub_make_done := 1


ifeq ($(need-sub-make),1)
ifeq ($(need-sub-make),1)


PHONY += $(MAKECMDGOALS) sub-make
PHONY += $(MAKECMDGOALS) sub-make


$(filter-out _all sub-make $(CURDIR)/Makefile, $(MAKECMDGOALS)) _all: sub-make
$(filter-out _all sub-make $(lastword $(MAKEFILE_LIST)), $(MAKECMDGOALS)) _all: sub-make
	@:
	@:


# Invoke a second make in the output directory, passing relevant variables
# Invoke a second make in the output directory, passing relevant variables
sub-make:
sub-make:
	$(Q)$(MAKE) \
	$(Q)$(MAKE) -C $(abs_objtree) -f $(abs_srctree)/Makefile $(MAKECMDGOALS)
	$(if $(KBUILD_OUTPUT),-C $(KBUILD_OUTPUT) KBUILD_SRC=$(CURDIR)) \
	-f $(CURDIR)/Makefile $(filter-out _all sub-make,$(MAKECMDGOALS))


endif # need-sub-make
endif # need-sub-make
endif # sub_make_done
endif # sub_make_done
@@ -213,16 +221,21 @@ ifeq ("$(origin M)", "command line")
  KBUILD_EXTMOD := $(M)
  KBUILD_EXTMOD := $(M)
endif
endif


ifeq ($(KBUILD_SRC),)
ifeq ($(abs_srctree),$(abs_objtree))
        # building in the source tree
        # building in the source tree
        srctree := .
        srctree := .
else
else
        ifeq ($(KBUILD_SRC)/,$(dir $(CURDIR)))
        ifeq ($(abs_srctree)/,$(dir $(abs_objtree)))
                # building in a subdirectory of the source tree
                # building in a subdirectory of the source tree
                srctree := ..
                srctree := ..
        else
        else
                srctree := $(KBUILD_SRC)
                srctree := $(abs_srctree)
        endif
        endif

	# TODO:
	# KBUILD_SRC is only used to distinguish in-tree/out-of-tree build.
	# Replace it with $(srctree) or something.
	KBUILD_SRC := $(abs_srctree)
endif
endif


export KBUILD_CHECKSRC KBUILD_EXTMOD KBUILD_SRC
export KBUILD_CHECKSRC KBUILD_EXTMOD KBUILD_SRC
@@ -436,7 +449,7 @@ USERINCLUDE := \
LINUXINCLUDE    := \
LINUXINCLUDE    := \
		-I$(srctree)/arch/$(SRCARCH)/include \
		-I$(srctree)/arch/$(SRCARCH)/include \
		-I$(objtree)/arch/$(SRCARCH)/include/generated \
		-I$(objtree)/arch/$(SRCARCH)/include/generated \
		$(if $(KBUILD_SRC), -I$(srctree)/include) \
		$(if $(filter .,$(srctree)),,-I$(srctree)/include) \
		-I$(objtree)/include \
		-I$(objtree)/include \
		$(USERINCLUDE)
		$(USERINCLUDE)


@@ -497,7 +510,7 @@ PHONY += outputmakefile
# At the same time when output Makefile generated, generate .gitignore to
# At the same time when output Makefile generated, generate .gitignore to
# ignore whole output directory
# ignore whole output directory
outputmakefile:
outputmakefile:
ifneq ($(KBUILD_SRC),)
ifneq ($(srctree),.)
	$(Q)ln -fsn $(srctree) source
	$(Q)ln -fsn $(srctree) source
	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile $(srctree)
	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile $(srctree)
	$(Q)test -e .gitignore || \
	$(Q)test -e .gitignore || \
@@ -520,15 +533,6 @@ KBUILD_AFLAGS += $(CLANG_FLAGS)
export CLANG_FLAGS
export CLANG_FLAGS
endif
endif


RETPOLINE_CFLAGS_GCC := -mindirect-branch=thunk-extern -mindirect-branch-register
RETPOLINE_VDSO_CFLAGS_GCC := -mindirect-branch=thunk-inline -mindirect-branch-register
RETPOLINE_CFLAGS_CLANG := -mretpoline-external-thunk
RETPOLINE_VDSO_CFLAGS_CLANG := -mretpoline
RETPOLINE_CFLAGS := $(call cc-option,$(RETPOLINE_CFLAGS_GCC),$(call cc-option,$(RETPOLINE_CFLAGS_CLANG)))
RETPOLINE_VDSO_CFLAGS := $(call cc-option,$(RETPOLINE_VDSO_CFLAGS_GCC),$(call cc-option,$(RETPOLINE_VDSO_CFLAGS_CLANG)))
export RETPOLINE_CFLAGS
export RETPOLINE_VDSO_CFLAGS

# The expansion should be delayed until arch/$(SRCARCH)/Makefile is included.
# The expansion should be delayed until arch/$(SRCARCH)/Makefile is included.
# Some architectures define CROSS_COMPILE in arch/$(SRCARCH)/Makefile.
# Some architectures define CROSS_COMPILE in arch/$(SRCARCH)/Makefile.
# CC_VERSION_TEXT is referenced from Kconfig (so it needs export),
# CC_VERSION_TEXT is referenced from Kconfig (so it needs export),
@@ -595,20 +599,21 @@ endif


export KBUILD_MODULES KBUILD_BUILTIN
export KBUILD_MODULES KBUILD_BUILTIN


ifeq ($(dot-config),1)
include include/config/auto.conf
endif

ifeq ($(KBUILD_EXTMOD),)
ifeq ($(KBUILD_EXTMOD),)
# Objects we will link into vmlinux / subdirs we need to visit
# Objects we will link into vmlinux / subdirs we need to visit
init-y		:= init/
init-y		:= init/
drivers-y	:= drivers/ sound/
drivers-y	:= drivers/ sound/
drivers-$(CONFIG_SAMPLES) += samples/
net-y		:= net/
net-y		:= net/
libs-y		:= lib/
libs-y		:= lib/
core-y		:= usr/
core-y		:= usr/
virt-y		:= virt/
virt-y		:= virt/
endif # KBUILD_EXTMOD
endif # KBUILD_EXTMOD


ifeq ($(dot-config),1)
include include/config/auto.conf
endif

# The all: target is the default when no target is given on the
# The all: target is the default when no target is given on the
# command line.
# command line.
# This allow a user to issue only 'make' to build a kernel including modules
# This allow a user to issue only 'make' to build a kernel including modules
@@ -625,6 +630,15 @@ ifdef CONFIG_FUNCTION_TRACER
  CC_FLAGS_FTRACE := -pg
  CC_FLAGS_FTRACE := -pg
endif
endif


RETPOLINE_CFLAGS_GCC := -mindirect-branch=thunk-extern -mindirect-branch-register
RETPOLINE_VDSO_CFLAGS_GCC := -mindirect-branch=thunk-inline -mindirect-branch-register
RETPOLINE_CFLAGS_CLANG := -mretpoline-external-thunk
RETPOLINE_VDSO_CFLAGS_CLANG := -mretpoline
RETPOLINE_CFLAGS := $(call cc-option,$(RETPOLINE_CFLAGS_GCC),$(call cc-option,$(RETPOLINE_CFLAGS_CLANG)))
RETPOLINE_VDSO_CFLAGS := $(call cc-option,$(RETPOLINE_VDSO_CFLAGS_GCC),$(call cc-option,$(RETPOLINE_VDSO_CFLAGS_CLANG)))
export RETPOLINE_CFLAGS
export RETPOLINE_VDSO_CFLAGS

# The arch Makefile can set ARCH_{CPP,A,C}FLAGS to override the default
# The arch Makefile can set ARCH_{CPP,A,C}FLAGS to override the default
# values of the respective KBUILD_* variables
# values of the respective KBUILD_* variables
ARCH_CPPFLAGS :=
ARCH_CPPFLAGS :=
@@ -985,8 +999,9 @@ vmlinux-dirs := $(patsubst %/,%,$(filter %/, $(init-y) $(init-m) \
		     $(core-y) $(core-m) $(drivers-y) $(drivers-m) \
		     $(core-y) $(core-m) $(drivers-y) $(drivers-m) \
		     $(net-y) $(net-m) $(libs-y) $(libs-m) $(virt-y)))
		     $(net-y) $(net-m) $(libs-y) $(libs-m) $(virt-y)))


vmlinux-alldirs	:= $(sort $(vmlinux-dirs) $(patsubst %/,%,$(filter %/, \
vmlinux-alldirs	:= $(sort $(vmlinux-dirs) Documentation \
		     $(init-) $(core-) $(drivers-) $(net-) $(libs-) $(virt-))))
		     $(patsubst %/,%,$(filter %/, $(init-) $(core-) \
			$(drivers-) $(net-) $(libs-) $(virt-))))


init-y		:= $(patsubst %/, %/built-in.a, $(init-y))
init-y		:= $(patsubst %/, %/built-in.a, $(init-y))
core-y		:= $(patsubst %/, %/built-in.a, $(core-y))
core-y		:= $(patsubst %/, %/built-in.a, $(core-y))
@@ -1003,7 +1018,7 @@ export KBUILD_VMLINUX_LIBS := $(libs-y1)
export KBUILD_LDS          := arch/$(SRCARCH)/kernel/vmlinux.lds
export KBUILD_LDS          := arch/$(SRCARCH)/kernel/vmlinux.lds
export LDFLAGS_vmlinux
export LDFLAGS_vmlinux
# used by scripts/package/Makefile
# used by scripts/package/Makefile
export KBUILD_ALLDIRS := $(sort $(filter-out arch/%,$(vmlinux-alldirs)) arch Documentation include samples scripts tools)
export KBUILD_ALLDIRS := $(sort $(filter-out arch/%,$(vmlinux-alldirs)) arch include scripts tools)


vmlinux-deps := $(KBUILD_LDS) $(KBUILD_VMLINUX_OBJS) $(KBUILD_VMLINUX_LIBS)
vmlinux-deps := $(KBUILD_LDS) $(KBUILD_VMLINUX_OBJS) $(KBUILD_VMLINUX_LIBS)


@@ -1040,11 +1055,8 @@ vmlinux: scripts/link-vmlinux.sh autoksyms_recursive $(vmlinux-deps) FORCE


targets := vmlinux
targets := vmlinux


# Build samples along the rest of the kernel. This needs headers_install.
# Some samples need headers_install.
ifdef CONFIG_SAMPLES
vmlinux-dirs += samples
samples: headers_install
samples: headers_install
endif


# The actual objects are generated when descending,
# The actual objects are generated when descending,
# make sure no implicit rule kicks in
# make sure no implicit rule kicks in
@@ -1064,7 +1076,7 @@ filechk_kernel.release = \
	echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"
	echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"


# Store (new) KERNELRELEASE string in include/config/kernel.release
# Store (new) KERNELRELEASE string in include/config/kernel.release
include/config/kernel.release: $(srctree)/Makefile FORCE
include/config/kernel.release: FORCE
	$(call filechk,kernel.release)
	$(call filechk,kernel.release)


# Additional helpers built in scripts/
# Additional helpers built in scripts/
@@ -1086,9 +1098,11 @@ PHONY += prepare archprepare prepare1 prepare3
# and if so do:
# and if so do:
# 1) Check that make has not been executed in the kernel src $(srctree)
# 1) Check that make has not been executed in the kernel src $(srctree)
prepare3: include/config/kernel.release
prepare3: include/config/kernel.release
ifneq ($(KBUILD_SRC),)
ifneq ($(srctree),.)
	@$(kecho) '  Using $(srctree) as source for kernel'
	@$(kecho) '  Using $(srctree) as source for kernel'
	$(Q)if [ -f $(srctree)/.config -o -d $(srctree)/include/config ]; then \
	$(Q)if [ -f $(srctree)/.config -o \
		 -d $(srctree)/include/config -o \
		 -d $(srctree)/arch/$(SRCARCH)/include/generated ]; then \
		echo >&2 "  $(srctree) is not clean, please run 'make mrproper'"; \
		echo >&2 "  $(srctree) is not clean, please run 'make mrproper'"; \
		echo >&2 "  in the '$(srctree)' directory.";\
		echo >&2 "  in the '$(srctree)' directory.";\
		/bin/false; \
		/bin/false; \
@@ -1304,6 +1318,7 @@ _modinst_:
	fi
	fi
	@cp -f $(objtree)/modules.order $(MODLIB)/
	@cp -f $(objtree)/modules.order $(MODLIB)/
	@cp -f $(objtree)/modules.builtin $(MODLIB)/
	@cp -f $(objtree)/modules.builtin $(MODLIB)/
	@cp -f $(objtree)/modules.builtin.modinfo $(MODLIB)/
	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modinst
	$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modinst


# This depmod is only for convenience to give the initial
# This depmod is only for convenience to give the initial
@@ -1344,10 +1359,11 @@ endif # CONFIG_MODULES


# Directories & files removed with 'make clean'
# Directories & files removed with 'make clean'
CLEAN_DIRS  += $(MODVERDIR) include/ksym
CLEAN_DIRS  += $(MODVERDIR) include/ksym
CLEAN_FILES += modules.builtin.modinfo


# Directories & files removed with 'make mrproper'
# Directories & files removed with 'make mrproper'
MRPROPER_DIRS  += include/config usr/include include/generated          \
MRPROPER_DIRS  += include/config usr/include include/generated          \
		  arch/*/include/generated .tmp_objdiff
		  arch/$(SRCARCH)/include/generated .tmp_objdiff
MRPROPER_FILES += .config .config.old .version \
MRPROPER_FILES += .config .config.old .version \
		  Module.symvers tags TAGS cscope* GPATH GTAGS GRTAGS GSYMS \
		  Module.symvers tags TAGS cscope* GPATH GTAGS GRTAGS GSYMS \
		  signing_key.pem signing_key.priv signing_key.x509	\
		  signing_key.pem signing_key.priv signing_key.x509	\
@@ -1358,7 +1374,7 @@ MRPROPER_FILES += .config .config.old .version \
#
#
clean: rm-dirs  := $(CLEAN_DIRS)
clean: rm-dirs  := $(CLEAN_DIRS)
clean: rm-files := $(CLEAN_FILES)
clean: rm-files := $(CLEAN_FILES)
clean-dirs      := $(addprefix _clean_, . $(vmlinux-alldirs) Documentation samples)
clean-dirs      := $(addprefix _clean_, . $(vmlinux-alldirs))


PHONY += $(clean-dirs) clean archclean vmlinuxclean
PHONY += $(clean-dirs) clean archclean vmlinuxclean
$(clean-dirs):
$(clean-dirs):
+0 −1
Original line number Original line Diff line number Diff line
@@ -1449,7 +1449,6 @@ static void __exit omap_system_dma_exit(void)


MODULE_DESCRIPTION("OMAP SYSTEM DMA DRIVER");
MODULE_DESCRIPTION("OMAP SYSTEM DMA DRIVER");
MODULE_LICENSE("GPL");
MODULE_LICENSE("GPL");
MODULE_ALIAS("platform:" DRIVER_NAME);
MODULE_AUTHOR("Texas Instruments Inc");
MODULE_AUTHOR("Texas Instruments Inc");


/*
/*
Loading