2005-04-16 15:20:36 -07:00
|
|
|
# ===========================================================================
|
|
|
|
# Module versions
|
|
|
|
# ===========================================================================
|
|
|
|
#
|
|
|
|
# Stage one of module building created the following:
|
|
|
|
# a) The individual .o files used for the module
|
2006-03-24 18:23:14 +01:00
|
|
|
# b) A <module>.o file which is the .o files above linked together
|
2005-04-16 15:20:36 -07:00
|
|
|
# c) A <module>.mod file in $(MODVERDIR)/, listing the name of the
|
|
|
|
# the preliminary <module>.o file, plus all .o files
|
|
|
|
|
|
|
|
# Stage 2 is handled by this file and does the following
|
|
|
|
# 1) Find all modules from the files listed in $(MODVERDIR)/
|
|
|
|
# 2) modpost is then used to
|
|
|
|
# 3) create one <module>.mod.c file pr. module
|
|
|
|
# 4) create one Module.symvers file with CRC for all exported symbols
|
|
|
|
# 5) compile all <module>.mod.c files
|
2012-10-19 11:53:15 +10:30
|
|
|
# 6) final link of the module to a <module.ko> file
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
# Step 3 is used to place certain information in the module's ELF
|
|
|
|
# section, including information such as:
|
2011-05-25 11:09:59 +02:00
|
|
|
# Version magic (see include/linux/vermagic.h for full details)
|
2005-04-16 15:20:36 -07:00
|
|
|
# - Kernel release
|
|
|
|
# - SMP is CONFIG_SMP
|
|
|
|
# - PREEMPT is CONFIG_PREEMPT
|
|
|
|
# - GCC Version
|
|
|
|
# Module info
|
|
|
|
# - Module version (MODULE_VERSION)
|
|
|
|
# - Module alias'es (MODULE_ALIAS)
|
|
|
|
# - Module license (MODULE_LICENSE)
|
|
|
|
# - See include/linux/module.h for more details
|
|
|
|
|
|
|
|
# Step 4 is solely used to allow module versioning in external modules,
|
2010-07-30 20:43:20 +02:00
|
|
|
# where the CRC of each module is retrieved from the Module.symvers file.
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2006-10-01 11:35:24 +02:00
|
|
|
# KBUILD_MODPOST_WARN can be set to avoid error out in case of undefined
|
|
|
|
# symbols in the final module linking stage
|
|
|
|
# KBUILD_MODPOST_NOFINAL can be set to skip the final link of modules.
|
2011-03-30 22:57:33 -03:00
|
|
|
# This is solely useful to speed up test compiles
|
2006-03-05 17:14:10 -05:00
|
|
|
PHONY := _modpost
|
2005-04-16 15:20:36 -07:00
|
|
|
_modpost: __modpost
|
|
|
|
|
2006-06-08 22:12:39 -07:00
|
|
|
include include/config/auto.conf
|
2005-07-25 20:10:36 +00:00
|
|
|
include scripts/Kbuild.include
|
2008-02-28 09:40:58 +01:00
|
|
|
|
2011-03-30 22:57:33 -03:00
|
|
|
# When building external modules load the Kbuild file to retrieve EXTRA_SYMBOLS info
|
2008-02-28 09:40:58 +01:00
|
|
|
ifneq ($(KBUILD_EXTMOD),)
|
2008-05-31 22:28:40 +02:00
|
|
|
|
|
|
|
# set src + obj - they may be used when building the .mod.c file
|
|
|
|
obj := $(KBUILD_EXTMOD)
|
|
|
|
src := $(obj)
|
|
|
|
|
2008-02-28 09:40:58 +01:00
|
|
|
# Include the module's Makefile to find KBUILD_EXTRA_SYMBOLS
|
|
|
|
include $(if $(wildcard $(KBUILD_EXTMOD)/Kbuild), \
|
|
|
|
$(KBUILD_EXTMOD)/Kbuild, $(KBUILD_EXTMOD)/Makefile)
|
|
|
|
endif
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
include scripts/Makefile.lib
|
|
|
|
|
2006-01-28 22:15:55 +01:00
|
|
|
kernelsymfile := $(objtree)/Module.symvers
|
2006-10-17 00:10:30 -07:00
|
|
|
modulesymfile := $(firstword $(KBUILD_EXTMOD))/Module.symvers
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
# Step 1), find all modules listed in $(MODVERDIR)/
|
2013-04-04 17:37:38 +10:30
|
|
|
MODLISTCMD := find $(MODVERDIR) -name '*.mod' | xargs -r grep -h '\.ko$$' | sort -u
|
|
|
|
__modules := $(shell $(MODLISTCMD))
|
2005-04-16 15:20:36 -07:00
|
|
|
modules := $(patsubst %.o,%.ko, $(wildcard $(__modules:.ko=.o)))
|
|
|
|
|
2006-10-01 11:35:24 +02:00
|
|
|
# Stop after building .o files if NOFINAL is set. Makes compile tests quicker
|
|
|
|
_modpost: $(if $(KBUILD_MODPOST_NOFINAL), $(modules:.ko:.o),$(modules))
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
# Step 2), invoke modpost
|
|
|
|
# Includes step 3,4
|
2007-07-20 22:36:56 +02:00
|
|
|
modpost = scripts/mod/modpost \
|
|
|
|
$(if $(CONFIG_MODVERSIONS),-m) \
|
|
|
|
$(if $(CONFIG_MODULE_SRCVERSION_ALL),-a,) \
|
|
|
|
$(if $(KBUILD_EXTMOD),-i,-o) $(kernelsymfile) \
|
|
|
|
$(if $(KBUILD_EXTMOD),-I $(modulesymfile)) \
|
2019-07-31 00:59:00 +09:00
|
|
|
$(if $(KBUILD_EXTMOD),$(addprefix -e ,$(KBUILD_EXTRA_SYMBOLS))) \
|
2007-07-20 22:36:56 +02:00
|
|
|
$(if $(KBUILD_EXTMOD),-o $(modulesymfile)) \
|
2008-01-24 21:12:37 +01:00
|
|
|
$(if $(CONFIG_DEBUG_SECTION_MISMATCH),,-S) \
|
2015-10-06 09:44:42 +10:30
|
|
|
$(if $(CONFIG_SECTION_MISMATCH_WARN_ONLY),,-E) \
|
2013-01-20 17:58:47 +01:00
|
|
|
$(if $(KBUILD_EXTMOD)$(KBUILD_MODPOST_WARN),-w)
|
2007-07-20 22:36:56 +02:00
|
|
|
|
2013-09-23 15:23:54 +09:30
|
|
|
MODPOST_OPT=$(subst -i,-n,$(filter -i,$(MAKEFLAGS)))
|
|
|
|
|
FROMLIST: BACKPORT: kbuild: add support for clang LTO
This change adds the configuration option CONFIG_LTO_CLANG, and
build system support for clang's Link Time Optimization (LTO). In
preparation for LTO support for other compilers, potentially common
parts of the changes are gated behind CONFIG_LTO instead.
With -flto, instead of object files, clang produces LLVM bitcode,
which is compiled into a native object at link time, allowing the
final binary to be optimized globally. For more details, see:
https://llvm.org/docs/LinkTimeOptimization.html
While the kernel normally uses GNU ld for linking, LLVM supports LTO
only with lld or GNU gold linkers. This patch set assumes gold will
be used with the LLVMgold plug-in to perform the LTO link step. Due
to potential incompatibilities with GNU ld, this change also adds
LDFINAL_vmlinux for using a different linker for the vmlinux_link
step, and defaults to using GNU ld.
Assuming LLVMgold.so is in LD_LIBRARY_PATH and CONFIG_LTO_CLANG has
been selected, an LTO kernel can be built simply by running make
CC=clang. LTO requires clang >= 5.0 and gold from binutils >= 2.27.
Bug: 62093296
Bug: 67506682
Change-Id: Ibcd9fc7ec501b4f30b43b4877897615645f8655f
(am from https://patchwork.kernel.org/patch/10060329/)
Signed-off-by: Sami Tolvanen <samitolvanen@google.com>
2017-11-28 08:48:49 -08:00
|
|
|
# If CONFIG_LTO_CLANG is enabled, .o files are either LLVM IR, or empty, so we
|
|
|
|
# need to link them into actual objects before passing them to modpost
|
|
|
|
modpost-ext = $(if $(CONFIG_LTO_CLANG),.lto,)
|
|
|
|
|
|
|
|
ifdef CONFIG_LTO_CLANG
|
|
|
|
quiet_cmd_cc_lto_link_modules = LD [M] $@
|
2018-12-13 15:23:08 -08:00
|
|
|
bad_ld_flags = -plugin-opt=-function-sections -plugin-opt=-data-sections
|
|
|
|
filtered_ld_flags = $(filter-out $(bad_ld_flags),$(ld_flags))
|
FROMLIST: BACKPORT: kbuild: add support for clang LTO
This change adds the configuration option CONFIG_LTO_CLANG, and
build system support for clang's Link Time Optimization (LTO). In
preparation for LTO support for other compilers, potentially common
parts of the changes are gated behind CONFIG_LTO instead.
With -flto, instead of object files, clang produces LLVM bitcode,
which is compiled into a native object at link time, allowing the
final binary to be optimized globally. For more details, see:
https://llvm.org/docs/LinkTimeOptimization.html
While the kernel normally uses GNU ld for linking, LLVM supports LTO
only with lld or GNU gold linkers. This patch set assumes gold will
be used with the LLVMgold plug-in to perform the LTO link step. Due
to potential incompatibilities with GNU ld, this change also adds
LDFINAL_vmlinux for using a different linker for the vmlinux_link
step, and defaults to using GNU ld.
Assuming LLVMgold.so is in LD_LIBRARY_PATH and CONFIG_LTO_CLANG has
been selected, an LTO kernel can be built simply by running make
CC=clang. LTO requires clang >= 5.0 and gold from binutils >= 2.27.
Bug: 62093296
Bug: 67506682
Change-Id: Ibcd9fc7ec501b4f30b43b4877897615645f8655f
(am from https://patchwork.kernel.org/patch/10060329/)
Signed-off-by: Sami Tolvanen <samitolvanen@google.com>
2017-11-28 08:48:49 -08:00
|
|
|
cmd_cc_lto_link_modules = \
|
2018-12-13 15:23:08 -08:00
|
|
|
$(LD) $(filtered_ld_flags) -r -o $(@) \
|
FROMLIST: BACKPORT: kbuild: add support for clang LTO
This change adds the configuration option CONFIG_LTO_CLANG, and
build system support for clang's Link Time Optimization (LTO). In
preparation for LTO support for other compilers, potentially common
parts of the changes are gated behind CONFIG_LTO instead.
With -flto, instead of object files, clang produces LLVM bitcode,
which is compiled into a native object at link time, allowing the
final binary to be optimized globally. For more details, see:
https://llvm.org/docs/LinkTimeOptimization.html
While the kernel normally uses GNU ld for linking, LLVM supports LTO
only with lld or GNU gold linkers. This patch set assumes gold will
be used with the LLVMgold plug-in to perform the LTO link step. Due
to potential incompatibilities with GNU ld, this change also adds
LDFINAL_vmlinux for using a different linker for the vmlinux_link
step, and defaults to using GNU ld.
Assuming LLVMgold.so is in LD_LIBRARY_PATH and CONFIG_LTO_CLANG has
been selected, an LTO kernel can be built simply by running make
CC=clang. LTO requires clang >= 5.0 and gold from binutils >= 2.27.
Bug: 62093296
Bug: 67506682
Change-Id: Ibcd9fc7ec501b4f30b43b4877897615645f8655f
(am from https://patchwork.kernel.org/patch/10060329/)
Signed-off-by: Sami Tolvanen <samitolvanen@google.com>
2017-11-28 08:48:49 -08:00
|
|
|
$(shell [ -s $(@:$(modpost-ext).o=.o.symversions) ] && \
|
|
|
|
echo -T $(@:$(modpost-ext).o=.o.symversions)) \
|
|
|
|
--whole-archive $(filter-out FORCE,$^)
|
|
|
|
|
|
|
|
$(modules:.ko=$(modpost-ext).o): %$(modpost-ext).o: %.o FORCE
|
|
|
|
$(call if_changed,cc_lto_link_modules)
|
|
|
|
endif
|
|
|
|
|
2013-04-04 17:37:38 +10:30
|
|
|
# We can go over command line length here, so be careful.
|
2006-08-08 20:43:39 +02:00
|
|
|
quiet_cmd_modpost = MODPOST $(words $(filter-out vmlinux FORCE, $^)) modules
|
FROMLIST: BACKPORT: kbuild: add support for clang LTO
This change adds the configuration option CONFIG_LTO_CLANG, and
build system support for clang's Link Time Optimization (LTO). In
preparation for LTO support for other compilers, potentially common
parts of the changes are gated behind CONFIG_LTO instead.
With -flto, instead of object files, clang produces LLVM bitcode,
which is compiled into a native object at link time, allowing the
final binary to be optimized globally. For more details, see:
https://llvm.org/docs/LinkTimeOptimization.html
While the kernel normally uses GNU ld for linking, LLVM supports LTO
only with lld or GNU gold linkers. This patch set assumes gold will
be used with the LLVMgold plug-in to perform the LTO link step. Due
to potential incompatibilities with GNU ld, this change also adds
LDFINAL_vmlinux for using a different linker for the vmlinux_link
step, and defaults to using GNU ld.
Assuming LLVMgold.so is in LD_LIBRARY_PATH and CONFIG_LTO_CLANG has
been selected, an LTO kernel can be built simply by running make
CC=clang. LTO requires clang >= 5.0 and gold from binutils >= 2.27.
Bug: 62093296
Bug: 67506682
Change-Id: Ibcd9fc7ec501b4f30b43b4877897615645f8655f
(am from https://patchwork.kernel.org/patch/10060329/)
Signed-off-by: Sami Tolvanen <samitolvanen@google.com>
2017-11-28 08:48:49 -08:00
|
|
|
cmd_modpost = $(MODLISTCMD) | sed 's/\.ko$$/$(modpost-ext)\.o/' | $(modpost) $(MODPOST_OPT) -s -T -
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2006-03-05 17:14:10 -05:00
|
|
|
PHONY += __modpost
|
FROMLIST: BACKPORT: kbuild: add support for clang LTO
This change adds the configuration option CONFIG_LTO_CLANG, and
build system support for clang's Link Time Optimization (LTO). In
preparation for LTO support for other compilers, potentially common
parts of the changes are gated behind CONFIG_LTO instead.
With -flto, instead of object files, clang produces LLVM bitcode,
which is compiled into a native object at link time, allowing the
final binary to be optimized globally. For more details, see:
https://llvm.org/docs/LinkTimeOptimization.html
While the kernel normally uses GNU ld for linking, LLVM supports LTO
only with lld or GNU gold linkers. This patch set assumes gold will
be used with the LLVMgold plug-in to perform the LTO link step. Due
to potential incompatibilities with GNU ld, this change also adds
LDFINAL_vmlinux for using a different linker for the vmlinux_link
step, and defaults to using GNU ld.
Assuming LLVMgold.so is in LD_LIBRARY_PATH and CONFIG_LTO_CLANG has
been selected, an LTO kernel can be built simply by running make
CC=clang. LTO requires clang >= 5.0 and gold from binutils >= 2.27.
Bug: 62093296
Bug: 67506682
Change-Id: Ibcd9fc7ec501b4f30b43b4877897615645f8655f
(am from https://patchwork.kernel.org/patch/10060329/)
Signed-off-by: Sami Tolvanen <samitolvanen@google.com>
2017-11-28 08:48:49 -08:00
|
|
|
__modpost: $(modules:.ko=$(modpost-ext).o) FORCE
|
2013-04-04 17:37:38 +10:30
|
|
|
$(call cmd,modpost) $(wildcard vmlinux)
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2006-08-08 20:43:39 +02:00
|
|
|
quiet_cmd_kernel-mod = MODPOST $@
|
2007-07-20 22:36:56 +02:00
|
|
|
cmd_kernel-mod = $(modpost) $@
|
2006-08-08 20:43:39 +02:00
|
|
|
|
2007-07-17 10:54:06 +02:00
|
|
|
vmlinux.o: FORCE
|
2006-08-08 20:43:39 +02:00
|
|
|
$(call cmd,kernel-mod)
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
# Declare generated files as targets for modpost
|
|
|
|
$(symverfile): __modpost ;
|
FROMLIST: BACKPORT: kbuild: add support for clang LTO
This change adds the configuration option CONFIG_LTO_CLANG, and
build system support for clang's Link Time Optimization (LTO). In
preparation for LTO support for other compilers, potentially common
parts of the changes are gated behind CONFIG_LTO instead.
With -flto, instead of object files, clang produces LLVM bitcode,
which is compiled into a native object at link time, allowing the
final binary to be optimized globally. For more details, see:
https://llvm.org/docs/LinkTimeOptimization.html
While the kernel normally uses GNU ld for linking, LLVM supports LTO
only with lld or GNU gold linkers. This patch set assumes gold will
be used with the LLVMgold plug-in to perform the LTO link step. Due
to potential incompatibilities with GNU ld, this change also adds
LDFINAL_vmlinux for using a different linker for the vmlinux_link
step, and defaults to using GNU ld.
Assuming LLVMgold.so is in LD_LIBRARY_PATH and CONFIG_LTO_CLANG has
been selected, an LTO kernel can be built simply by running make
CC=clang. LTO requires clang >= 5.0 and gold from binutils >= 2.27.
Bug: 62093296
Bug: 67506682
Change-Id: Ibcd9fc7ec501b4f30b43b4877897615645f8655f
(am from https://patchwork.kernel.org/patch/10060329/)
Signed-off-by: Sami Tolvanen <samitolvanen@google.com>
2017-11-28 08:48:49 -08:00
|
|
|
$(modules:.ko=$(modpost-ext).mod.c): __modpost ;
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
# Step 5), compile all *.mod.c files
|
|
|
|
|
|
|
|
# modname is set to make c_flags define KBUILD_MODNAME
|
2006-07-01 09:58:02 +02:00
|
|
|
modname = $(notdir $(@:.mod.o=))
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
quiet_cmd_cc_o_c = CC $@
|
kbuild: allow assignment to {A,C,LD}FLAGS_MODULE on the command line
It is now possible to assign options to AS, CC and LD
on the command line - which is only used when building modules.
{A,C,LD}FLAGS_MODULE was all used both in the top-level Makefile
in the arch makefiles, thus users had no way to specify
additional options to AS, CC, LD when building modules
without overriding the original value.
Introduce a new set of variables KBUILD_{A,C,LD}FLAGS_MODULE
that is used by arch specific files and free up
{A,C,LD}FLAGS_MODULE so they can be assigned on
the command line.
All arch Makefiles that used the old variables has been updated.
Note: Previously we had a MODFLAGS variable for both
AS and CC. But in favour of consistency this was dropped.
So in some cases arch Makefile has one assignmnet replaced by
two assignmnets.
Note2: MODFLAGS was not documented and is dropped
without any notice. I do not expect much/any breakage
from this.
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Denys Vlasenko <vda.linux@googlemail.com>
Cc: Haavard Skinnemoen <hskinnemoen@atmel.com>
Cc: Mike Frysinger <vapier@gentoo.org>
Cc: Tony Luck <tony.luck@intel.com>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Chen Liqin <liqin.chen@sunplusct.com>
Acked-by: Mike Frysinger <vapier@gentoo.org> [blackfin]
Acked-by: Haavard Skinnemoen <haavard.skinnemoen@atmel.com> [avr32]
Signed-off-by: Michal Marek <mmarek@suse.cz>
2010-07-28 17:33:09 +02:00
|
|
|
cmd_cc_o_c = $(CC) $(c_flags) $(KBUILD_CFLAGS_MODULE) $(CFLAGS_MODULE) \
|
2005-04-16 15:20:36 -07:00
|
|
|
-c -o $@ $<
|
|
|
|
|
FROMLIST: BACKPORT: kbuild: add support for clang LTO
This change adds the configuration option CONFIG_LTO_CLANG, and
build system support for clang's Link Time Optimization (LTO). In
preparation for LTO support for other compilers, potentially common
parts of the changes are gated behind CONFIG_LTO instead.
With -flto, instead of object files, clang produces LLVM bitcode,
which is compiled into a native object at link time, allowing the
final binary to be optimized globally. For more details, see:
https://llvm.org/docs/LinkTimeOptimization.html
While the kernel normally uses GNU ld for linking, LLVM supports LTO
only with lld or GNU gold linkers. This patch set assumes gold will
be used with the LLVMgold plug-in to perform the LTO link step. Due
to potential incompatibilities with GNU ld, this change also adds
LDFINAL_vmlinux for using a different linker for the vmlinux_link
step, and defaults to using GNU ld.
Assuming LLVMgold.so is in LD_LIBRARY_PATH and CONFIG_LTO_CLANG has
been selected, an LTO kernel can be built simply by running make
CC=clang. LTO requires clang >= 5.0 and gold from binutils >= 2.27.
Bug: 62093296
Bug: 67506682
Change-Id: Ibcd9fc7ec501b4f30b43b4877897615645f8655f
(am from https://patchwork.kernel.org/patch/10060329/)
Signed-off-by: Sami Tolvanen <samitolvanen@google.com>
2017-11-28 08:48:49 -08:00
|
|
|
$(modules:.ko=.mod.o): %.mod.o: %$(modpost-ext).mod.c FORCE
|
2005-04-16 15:20:36 -07:00
|
|
|
$(call if_changed_dep,cc_o_c)
|
|
|
|
|
FROMLIST: BACKPORT: kbuild: add support for clang LTO
This change adds the configuration option CONFIG_LTO_CLANG, and
build system support for clang's Link Time Optimization (LTO). In
preparation for LTO support for other compilers, potentially common
parts of the changes are gated behind CONFIG_LTO instead.
With -flto, instead of object files, clang produces LLVM bitcode,
which is compiled into a native object at link time, allowing the
final binary to be optimized globally. For more details, see:
https://llvm.org/docs/LinkTimeOptimization.html
While the kernel normally uses GNU ld for linking, LLVM supports LTO
only with lld or GNU gold linkers. This patch set assumes gold will
be used with the LLVMgold plug-in to perform the LTO link step. Due
to potential incompatibilities with GNU ld, this change also adds
LDFINAL_vmlinux for using a different linker for the vmlinux_link
step, and defaults to using GNU ld.
Assuming LLVMgold.so is in LD_LIBRARY_PATH and CONFIG_LTO_CLANG has
been selected, an LTO kernel can be built simply by running make
CC=clang. LTO requires clang >= 5.0 and gold from binutils >= 2.27.
Bug: 62093296
Bug: 67506682
Change-Id: Ibcd9fc7ec501b4f30b43b4877897615645f8655f
(am from https://patchwork.kernel.org/patch/10060329/)
Signed-off-by: Sami Tolvanen <samitolvanen@google.com>
2017-11-28 08:48:49 -08:00
|
|
|
targets += $(modules:.ko=$(modpost-ext).mod.o)
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2016-08-24 22:29:21 +10:00
|
|
|
ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(SRCARCH)/Makefile.postlink)
|
|
|
|
|
|
|
|
# Step 6), final link of the modules with optional arch pass after final link
|
2005-04-16 15:20:36 -07:00
|
|
|
quiet_cmd_ld_ko_o = LD [M] $@
|
FROMLIST: BACKPORT: kbuild: add support for clang LTO
This change adds the configuration option CONFIG_LTO_CLANG, and
build system support for clang's Link Time Optimization (LTO). In
preparation for LTO support for other compilers, potentially common
parts of the changes are gated behind CONFIG_LTO instead.
With -flto, instead of object files, clang produces LLVM bitcode,
which is compiled into a native object at link time, allowing the
final binary to be optimized globally. For more details, see:
https://llvm.org/docs/LinkTimeOptimization.html
While the kernel normally uses GNU ld for linking, LLVM supports LTO
only with lld or GNU gold linkers. This patch set assumes gold will
be used with the LLVMgold plug-in to perform the LTO link step. Due
to potential incompatibilities with GNU ld, this change also adds
LDFINAL_vmlinux for using a different linker for the vmlinux_link
step, and defaults to using GNU ld.
Assuming LLVMgold.so is in LD_LIBRARY_PATH and CONFIG_LTO_CLANG has
been selected, an LTO kernel can be built simply by running make
CC=clang. LTO requires clang >= 5.0 and gold from binutils >= 2.27.
Bug: 62093296
Bug: 67506682
Change-Id: Ibcd9fc7ec501b4f30b43b4877897615645f8655f
(am from https://patchwork.kernel.org/patch/10060329/)
Signed-off-by: Sami Tolvanen <samitolvanen@google.com>
2017-11-28 08:48:49 -08:00
|
|
|
|
|
|
|
ifdef CONFIG_LTO_CLANG
|
2018-12-13 15:23:08 -08:00
|
|
|
cmd_ld_ko_o = \
|
2019-08-01 12:45:43 -07:00
|
|
|
$(LD) -r $(KBUILD_LDFLAGS) \
|
FROMLIST: BACKPORT: kbuild: add support for clang LTO
This change adds the configuration option CONFIG_LTO_CLANG, and
build system support for clang's Link Time Optimization (LTO). In
preparation for LTO support for other compilers, potentially common
parts of the changes are gated behind CONFIG_LTO instead.
With -flto, instead of object files, clang produces LLVM bitcode,
which is compiled into a native object at link time, allowing the
final binary to be optimized globally. For more details, see:
https://llvm.org/docs/LinkTimeOptimization.html
While the kernel normally uses GNU ld for linking, LLVM supports LTO
only with lld or GNU gold linkers. This patch set assumes gold will
be used with the LLVMgold plug-in to perform the LTO link step. Due
to potential incompatibilities with GNU ld, this change also adds
LDFINAL_vmlinux for using a different linker for the vmlinux_link
step, and defaults to using GNU ld.
Assuming LLVMgold.so is in LD_LIBRARY_PATH and CONFIG_LTO_CLANG has
been selected, an LTO kernel can be built simply by running make
CC=clang. LTO requires clang >= 5.0 and gold from binutils >= 2.27.
Bug: 62093296
Bug: 67506682
Change-Id: Ibcd9fc7ec501b4f30b43b4877897615645f8655f
(am from https://patchwork.kernel.org/patch/10060329/)
Signed-off-by: Sami Tolvanen <samitolvanen@google.com>
2017-11-28 08:48:49 -08:00
|
|
|
$(KBUILD_LDFLAGS_MODULE) $(LDFLAGS_MODULE) \
|
|
|
|
$(shell [ -s $(@:.ko=.o.symversions) ] && \
|
|
|
|
echo -T $(@:.ko=.o.symversions)) \
|
|
|
|
-o $@ --whole-archive \
|
|
|
|
$(filter-out FORCE,$(^:$(modpost-ext).o=.o))
|
2017-06-16 12:52:57 -07:00
|
|
|
|
|
|
|
ifdef CONFIG_FTRACE_MCOUNT_RECORD
|
|
|
|
cmd_ld_ko_o += ; $(objtree)/scripts/recordmcount $(RECORDMCOUNT_FLAGS) $@
|
|
|
|
endif
|
FROMLIST: BACKPORT: kbuild: add support for clang LTO
This change adds the configuration option CONFIG_LTO_CLANG, and
build system support for clang's Link Time Optimization (LTO). In
preparation for LTO support for other compilers, potentially common
parts of the changes are gated behind CONFIG_LTO instead.
With -flto, instead of object files, clang produces LLVM bitcode,
which is compiled into a native object at link time, allowing the
final binary to be optimized globally. For more details, see:
https://llvm.org/docs/LinkTimeOptimization.html
While the kernel normally uses GNU ld for linking, LLVM supports LTO
only with lld or GNU gold linkers. This patch set assumes gold will
be used with the LLVMgold plug-in to perform the LTO link step. Due
to potential incompatibilities with GNU ld, this change also adds
LDFINAL_vmlinux for using a different linker for the vmlinux_link
step, and defaults to using GNU ld.
Assuming LLVMgold.so is in LD_LIBRARY_PATH and CONFIG_LTO_CLANG has
been selected, an LTO kernel can be built simply by running make
CC=clang. LTO requires clang >= 5.0 and gold from binutils >= 2.27.
Bug: 62093296
Bug: 67506682
Change-Id: Ibcd9fc7ec501b4f30b43b4877897615645f8655f
(am from https://patchwork.kernel.org/patch/10060329/)
Signed-off-by: Sami Tolvanen <samitolvanen@google.com>
2017-11-28 08:48:49 -08:00
|
|
|
else
|
2016-08-24 22:29:21 +10:00
|
|
|
cmd_ld_ko_o = \
|
2018-08-24 08:20:39 +09:00
|
|
|
$(LD) -r $(KBUILD_LDFLAGS) \
|
2016-08-24 22:29:21 +10:00
|
|
|
$(KBUILD_LDFLAGS_MODULE) $(LDFLAGS_MODULE) \
|
|
|
|
-o $@ $(filter-out FORCE,$^) ; \
|
|
|
|
$(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true)
|
FROMLIST: BACKPORT: kbuild: add support for clang LTO
This change adds the configuration option CONFIG_LTO_CLANG, and
build system support for clang's Link Time Optimization (LTO). In
preparation for LTO support for other compilers, potentially common
parts of the changes are gated behind CONFIG_LTO instead.
With -flto, instead of object files, clang produces LLVM bitcode,
which is compiled into a native object at link time, allowing the
final binary to be optimized globally. For more details, see:
https://llvm.org/docs/LinkTimeOptimization.html
While the kernel normally uses GNU ld for linking, LLVM supports LTO
only with lld or GNU gold linkers. This patch set assumes gold will
be used with the LLVMgold plug-in to perform the LTO link step. Due
to potential incompatibilities with GNU ld, this change also adds
LDFINAL_vmlinux for using a different linker for the vmlinux_link
step, and defaults to using GNU ld.
Assuming LLVMgold.so is in LD_LIBRARY_PATH and CONFIG_LTO_CLANG has
been selected, an LTO kernel can be built simply by running make
CC=clang. LTO requires clang >= 5.0 and gold from binutils >= 2.27.
Bug: 62093296
Bug: 67506682
Change-Id: Ibcd9fc7ec501b4f30b43b4877897615645f8655f
(am from https://patchwork.kernel.org/patch/10060329/)
Signed-off-by: Sami Tolvanen <samitolvanen@google.com>
2017-11-28 08:48:49 -08:00
|
|
|
endif
|
2005-04-16 15:20:36 -07:00
|
|
|
|
FROMLIST: BACKPORT: kbuild: add support for clang LTO
This change adds the configuration option CONFIG_LTO_CLANG, and
build system support for clang's Link Time Optimization (LTO). In
preparation for LTO support for other compilers, potentially common
parts of the changes are gated behind CONFIG_LTO instead.
With -flto, instead of object files, clang produces LLVM bitcode,
which is compiled into a native object at link time, allowing the
final binary to be optimized globally. For more details, see:
https://llvm.org/docs/LinkTimeOptimization.html
While the kernel normally uses GNU ld for linking, LLVM supports LTO
only with lld or GNU gold linkers. This patch set assumes gold will
be used with the LLVMgold plug-in to perform the LTO link step. Due
to potential incompatibilities with GNU ld, this change also adds
LDFINAL_vmlinux for using a different linker for the vmlinux_link
step, and defaults to using GNU ld.
Assuming LLVMgold.so is in LD_LIBRARY_PATH and CONFIG_LTO_CLANG has
been selected, an LTO kernel can be built simply by running make
CC=clang. LTO requires clang >= 5.0 and gold from binutils >= 2.27.
Bug: 62093296
Bug: 67506682
Change-Id: Ibcd9fc7ec501b4f30b43b4877897615645f8655f
(am from https://patchwork.kernel.org/patch/10060329/)
Signed-off-by: Sami Tolvanen <samitolvanen@google.com>
2017-11-28 08:48:49 -08:00
|
|
|
$(modules): %.ko: %$(modpost-ext).o %.mod.o FORCE
|
2016-08-24 22:29:21 +10:00
|
|
|
+$(call if_changed,ld_ko_o)
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
targets += $(modules)
|
|
|
|
|
|
|
|
|
|
|
|
# Add FORCE to the prequisites of a target to force it to be always rebuilt.
|
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
|
2006-03-05 17:14:10 -05:00
|
|
|
PHONY += FORCE
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
FORCE:
|
|
|
|
|
|
|
|
# Read all saved command lines and dependencies for the $(targets) we
|
|
|
|
# may be building above, using $(if_changed{,_dep}). As an
|
|
|
|
# optimization, we don't need to read them if the target does not
|
|
|
|
# exist, we will rebuild anyway in that case.
|
|
|
|
|
|
|
|
targets := $(wildcard $(sort $(targets)))
|
|
|
|
cmd_files := $(wildcard $(foreach f,$(targets),$(dir $(f)).$(notdir $(f)).cmd))
|
|
|
|
|
|
|
|
ifneq ($(cmd_files),)
|
|
|
|
include $(cmd_files)
|
|
|
|
endif
|
2006-03-05 17:14:10 -05:00
|
|
|
|
|
|
|
|
|
|
|
# Declare the contents of the .PHONY variable as phony. We keep that
|
|
|
|
# information in a variable se we can use it in if_changed and friends.
|
|
|
|
|
|
|
|
.PHONY: $(PHONY)
|