Skip to content

Commit

Permalink
Merge tag 'kbuild-v5.8' of git://git.kernel.org/pub/scm/linux/kernel/…
Browse files Browse the repository at this point in the history
…git/masahiroy/linux-kbuild

Pull Kbuild updates from Masahiro Yamada:

 - fix warnings in 'make clean' for ARCH=um, hexagon, h8300, unicore32

 - ensure to rebuild all objects when the compiler is upgraded

 - exclude system headers from dependency tracking and fixdep processing

 - fix potential bit-size mismatch between the kernel and BPF user-mode
   helper

 - add the new syntax 'userprogs' to build user-space programs for the
   target architecture (the same arch as the kernel)

 - compile user-space sample code under samples/ for the target arch
   instead of the host arch

 - make headers_install fail if a CONFIG option is leaked to user-space

 - sanitize the output format of scripts/checkstack.pl

 - handle ARM 'push' instruction in scripts/checkstack.pl

 - error out before modpost if a module name conflict is found

 - error out when multiple directories are passed to M= because this
   feature is broken for a long time

 - add CONFIG_DEBUG_INFO_COMPRESSED to support compressed debug info

 - a lot of cleanups of modpost

 - dump vmlinux symbols out into vmlinux.symvers, and reuse it in the
   second pass of modpost

 - do not run the second pass of modpost if nothing in modules is
   updated

 - install modules.builtin(.modinfo) by 'make install' as well as by
   'make modules_install' because it is useful even when
   CONFIG_MODULES=n

 - add new command line variables, GZIP, BZIP2, LZOP, LZMA, LZ4, and XZ
   to allow users to use alternatives such as pigz, pbzip2, etc.

* tag 'kbuild-v5.8' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild: (96 commits)
  kbuild: add variables for compression tools
  Makefile: install modules.builtin even if CONFIG_MODULES=n
  mksysmap: Fix the mismatch of '.L' symbols in System.map
  kbuild: doc: rename LDFLAGS to KBUILD_LDFLAGS
  modpost: change elf_info->size to size_t
  modpost: remove is_vmlinux() helper
  modpost: strip .o from modname before calling new_module()
  modpost: set have_vmlinux in new_module()
  modpost: remove mod->skip struct member
  modpost: add mod->is_vmlinux struct member
  modpost: remove is_vmlinux() call in check_for_{gpl_usage,unused}()
  modpost: remove mod->is_dot_o struct member
  modpost: move -d option in scripts/Makefile.modpost
  modpost: remove -s option
  modpost: remove get_next_text() and make {grab,release_}file static
  modpost: use read_text_file() and get_line() for reading text files
  modpost: avoid false-positive file open error
  modpost: fix potential mmap'ed file overrun in get_src_version()
  modpost: add read_text_file() and get_line() helpers
  modpost: do not call get_modinfo() for vmlinux(.o)
  ...
  • Loading branch information
torvalds committed Jun 6, 2020
2 parents 6f2dc3d + 8dfb61d commit cff11ab
Show file tree
Hide file tree
Showing 60 changed files with 883 additions and 757 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ modules.order
/linux
/vmlinux
/vmlinux.32
/vmlinux.symvers
/vmlinux-gdb.py
/vmlinuz
/System.map
Expand Down
1 change: 1 addition & 0 deletions Documentation/dontdiff
Original file line number Diff line number Diff line change
Expand Up @@ -251,6 +251,7 @@ vmlinux-*
vmlinux.aout
vmlinux.bin.all
vmlinux.lds
vmlinux.symvers
vmlinuz
voffset.h
vsyscall.lds
Expand Down
187 changes: 137 additions & 50 deletions Documentation/kbuild/makefiles.rst
Original file line number Diff line number Diff line change
Expand Up @@ -29,31 +29,37 @@ This document describes the Linux kernel Makefiles.
--- 4.4 Controlling compiler options for host programs
--- 4.5 When host programs are actually built
=== 5 Kbuild clean infrastructure
=== 6 Architecture Makefiles
--- 6.1 Set variables to tweak the build to the architecture
--- 6.2 Add prerequisites to archheaders:
--- 6.3 Add prerequisites to archprepare:
--- 6.4 List directories to visit when descending
--- 6.5 Architecture-specific boot images
--- 6.6 Building non-kbuild targets
--- 6.7 Commands useful for building a boot image
--- 6.8 Custom kbuild commands
--- 6.9 Preprocessing linker scripts
--- 6.10 Generic header files
--- 6.11 Post-link pass
=== 7 Kbuild syntax for exported headers
--- 7.1 no-export-headers
--- 7.2 generic-y
--- 7.3 generated-y
--- 7.4 mandatory-y
=== 8 Kbuild Variables
=== 9 Makefile language
=== 10 Credits
=== 11 TODO
=== 5 Userspace Program support
--- 5.1 Simple Userspace Program
--- 5.2 Composite Userspace Programs
--- 5.3 Controlling compiler options for userspace programs
--- 5.4 When userspace programs are actually built
=== 6 Kbuild clean infrastructure
=== 7 Architecture Makefiles
--- 7.1 Set variables to tweak the build to the architecture
--- 7.2 Add prerequisites to archheaders:
--- 7.3 Add prerequisites to archprepare:
--- 7.4 List directories to visit when descending
--- 7.5 Architecture-specific boot images
--- 7.6 Building non-kbuild targets
--- 7.7 Commands useful for building a boot image
--- 7.8 Custom kbuild commands
--- 7.9 Preprocessing linker scripts
--- 7.10 Generic header files
--- 7.11 Post-link pass
=== 8 Kbuild syntax for exported headers
--- 8.1 no-export-headers
--- 8.2 generic-y
--- 8.3 generated-y
--- 8.4 mandatory-y
=== 9 Kbuild Variables
=== 10 Makefile language
=== 11 Credits
=== 12 TODO
1 Overview
==========
Expand Down Expand Up @@ -732,7 +738,88 @@ Both possibilities are described in the following.
This will tell kbuild to build lxdialog even if not referenced in
any rule.

5 Kbuild clean infrastructure
5 Userspace Program support
===========================

Just like host programs, Kbuild also supports building userspace executables
for the target architecture (i.e. the same architecture as you are building
the kernel for).

The syntax is quite similar. The difference is to use "userprogs" instead of
"hostprogs".

5.1 Simple Userspace Program
----------------------------

The following line tells kbuild that the program bpf-direct shall be
built for the target architecture.

Example::

userprogs := bpf-direct

Kbuild assumes in the above example that bpf-direct is made from a
single C source file named bpf-direct.c located in the same directory
as the Makefile.

5.2 Composite Userspace Programs
--------------------------------

Userspace programs can be made up based on composite objects.
The syntax used to define composite objects for userspace programs is
similar to the syntax used for kernel objects.
$(<executable>-objs) lists all objects used to link the final
executable.

Example::

#samples/seccomp/Makefile
userprogs := bpf-fancy
bpf-fancy-objs := bpf-fancy.o bpf-helper.o

Objects with extension .o are compiled from the corresponding .c
files. In the above example, bpf-fancy.c is compiled to bpf-fancy.o
and bpf-helper.c is compiled to bpf-helper.o.

Finally, the two .o files are linked to the executable, bpf-fancy.
Note: The syntax <executable>-y is not permitted for userspace programs.

5.3 Controlling compiler options for userspace programs
-------------------------------------------------------

When compiling userspace programs, it is possible to set specific flags.
The programs will always be compiled utilising $(CC) passed
the options specified in $(KBUILD_USERCFLAGS).
To set flags that will take effect for all userspace programs created
in that Makefile, use the variable userccflags.

Example::

# samples/seccomp/Makefile
userccflags += -I usr/include

To set specific flags for a single file the following construction
is used:

Example::

bpf-helper-userccflags += -I user/include

It is also possible to specify additional options to the linker.

Example::

# net/bpfilter/Makefile
bpfilter_umh-userldflags += -static

When linking bpfilter_umh, it will be passed the extra option -static.

5.4 When userspace programs are actually built
----------------------------------------------

Same as "When host programs are actually built".

6 Kbuild clean infrastructure
=============================

"make clean" deletes most generated files in the obj tree where the kernel
Expand Down Expand Up @@ -790,7 +877,7 @@ is not operational at that point.
Note 2: All directories listed in core-y, libs-y, drivers-y and net-y will
be visited during "make clean".

6 Architecture Makefiles
7 Architecture Makefiles
========================

The top level Makefile sets up the environment and does the preparation,
Expand Down Expand Up @@ -820,10 +907,10 @@ When kbuild executes, the following steps are followed (roughly):
- Preparing initrd images and the like


6.1 Set variables to tweak the build to the architecture
7.1 Set variables to tweak the build to the architecture
--------------------------------------------------------

LDFLAGS
KBUILD_LDFLAGS
Generic $(LD) options

Flags used for all invocations of the linker.
Expand All @@ -832,7 +919,7 @@ When kbuild executes, the following steps are followed (roughly):
Example::

#arch/s390/Makefile
LDFLAGS := -m elf_s390
KBUILD_LDFLAGS := -m elf_s390

Note: ldflags-y can be used to further customise
the flags used. See chapter 3.7.
Expand Down Expand Up @@ -967,7 +1054,7 @@ When kbuild executes, the following steps are followed (roughly):
KBUILD_VMLINUX_LIBS together specify all the object files used to
link vmlinux.

6.2 Add prerequisites to archheaders
7.2 Add prerequisites to archheaders
------------------------------------

The archheaders: rule is used to generate header files that
Expand All @@ -977,7 +1064,7 @@ When kbuild executes, the following steps are followed (roughly):
architecture itself.


6.3 Add prerequisites to archprepare
7.3 Add prerequisites to archprepare
------------------------------------

The archprepare: rule is used to list prerequisites that need to be
Expand All @@ -995,7 +1082,7 @@ When kbuild executes, the following steps are followed (roughly):
generating offset header files.


6.4 List directories to visit when descending
7.4 List directories to visit when descending
---------------------------------------------

An arch Makefile cooperates with the top Makefile to define variables
Expand Down Expand Up @@ -1030,7 +1117,7 @@ When kbuild executes, the following steps are followed (roughly):
drivers-$(CONFIG_OPROFILE) += arch/sparc64/oprofile/


6.5 Architecture-specific boot images
7.5 Architecture-specific boot images
-------------------------------------

An arch Makefile specifies goals that take the vmlinux file, compress
Expand Down Expand Up @@ -1085,7 +1172,7 @@ When kbuild executes, the following steps are followed (roughly):

When "make" is executed without arguments, bzImage will be built.

6.6 Building non-kbuild targets
7.6 Building non-kbuild targets
-------------------------------

extra-y
Expand All @@ -1108,7 +1195,7 @@ When kbuild executes, the following steps are followed (roughly):
In this example, extra-y is used to list object files that
shall be built, but shall not be linked as part of built-in.a.

6.7 Commands useful for building a boot image
7.7 Commands useful for building a boot image
---------------------------------------------

Kbuild provides a few macros that are useful when building a
Expand Down Expand Up @@ -1211,7 +1298,7 @@ When kbuild executes, the following steps are followed (roughly):
targets += $(dtb-y)
DTC_FLAGS ?= -p 1024

6.8 Custom kbuild commands
7.8 Custom kbuild commands
--------------------------

When kbuild is executing with KBUILD_VERBOSE=0, then only a shorthand
Expand Down Expand Up @@ -1241,7 +1328,7 @@ When kbuild executes, the following steps are followed (roughly):
will be displayed with "make KBUILD_VERBOSE=0".


6.9 Preprocessing linker scripts
7.9 Preprocessing linker scripts
--------------------------------

When the vmlinux image is built, the linker script
Expand Down Expand Up @@ -1274,7 +1361,7 @@ When kbuild executes, the following steps are followed (roughly):
The kbuild infrastructure for `*lds` files is used in several
architecture-specific files.

6.10 Generic header files
7.10 Generic header files
-------------------------

The directory include/asm-generic contains the header files
Expand All @@ -1283,7 +1370,7 @@ When kbuild executes, the following steps are followed (roughly):
to list the file in the Kbuild file.
See "7.2 generic-y" for further info on syntax etc.

6.11 Post-link pass
7.11 Post-link pass
-------------------

If the file arch/xxx/Makefile.postlink exists, this makefile
Expand All @@ -1299,7 +1386,7 @@ When kbuild executes, the following steps are followed (roughly):
For example, powerpc uses this to check relocation sanity of
the linked vmlinux file.

7 Kbuild syntax for exported headers
8 Kbuild syntax for exported headers
------------------------------------

The kernel includes a set of headers that is exported to userspace.
Expand All @@ -1319,14 +1406,14 @@ A Kbuild file may be defined under arch/<arch>/include/uapi/asm/ and
arch/<arch>/include/asm/ to list asm files coming from asm-generic.
See subsequent chapter for the syntax of the Kbuild file.

7.1 no-export-headers
8.1 no-export-headers
---------------------

no-export-headers is essentially used by include/uapi/linux/Kbuild to
avoid exporting specific headers (e.g. kvm.h) on architectures that do
not support it. It should be avoided as much as possible.

7.2 generic-y
8.2 generic-y
-------------

If an architecture uses a verbatim copy of a header from
Expand Down Expand Up @@ -1356,7 +1443,7 @@ See subsequent chapter for the syntax of the Kbuild file.

#include <asm-generic/termios.h>

7.3 generated-y
8.3 generated-y
---------------

If an architecture generates other header files alongside generic-y
Expand All @@ -1370,7 +1457,7 @@ See subsequent chapter for the syntax of the Kbuild file.
#arch/x86/include/asm/Kbuild
generated-y += syscalls_32.h

7.4 mandatory-y
8.4 mandatory-y
---------------

mandatory-y is essentially used by include/(uapi/)asm-generic/Kbuild
Expand All @@ -1380,7 +1467,7 @@ See subsequent chapter for the syntax of the Kbuild file.
in arch/$(ARCH)/include/(uapi/)/asm, Kbuild will automatically generate
a wrapper of the asm-generic one.

8 Kbuild Variables
9 Kbuild Variables
==================

The top Makefile exports the following variables:
Expand Down Expand Up @@ -1438,8 +1525,8 @@ The top Makefile exports the following variables:
command.


9 Makefile language
===================
10 Makefile language
====================

The kernel Makefiles are designed to be run with GNU Make. The Makefiles
use only the documented features of GNU Make, but they do use many
Expand All @@ -1458,15 +1545,15 @@ time the left-hand side is used.
There are some cases where "=" is appropriate. Usually, though, ":="
is the right choice.

10 Credits
11 Credits
==========

- Original version made by Michael Elizabeth Chastain, <mailto:[email protected]>
- Updates by Kai Germaschewski <[email protected]>
- Updates by Sam Ravnborg <[email protected]>
- Language QA by Jan Engelhardt <[email protected]>

11 TODO
12 TODO
=======

- Describe how kbuild supports shipped files with _shipped.
Expand Down
12 changes: 0 additions & 12 deletions Documentation/kbuild/modules.rst
Original file line number Diff line number Diff line change
Expand Up @@ -528,18 +528,6 @@ build.
will then do the expected and compile both modules with
full knowledge of symbols from either module.

Use an extra Module.symvers file
When an external module is built, a Module.symvers file
is generated containing all exported symbols which are
not defined in the kernel. To get access to symbols
from bar.ko, copy the Module.symvers file from the
compilation of bar.ko to the directory where foo.ko is
built. During the module build, kbuild will read the
Module.symvers file in the directory of the external
module, and when the build is finished, a new
Module.symvers file is created containing the sum of
all symbols defined and not part of the kernel.

Use "make" variable KBUILD_EXTRA_SYMBOLS
If it is impractical to add a top-level kbuild file,
you can assign a space separated list
Expand Down
2 changes: 0 additions & 2 deletions Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@
#
mainmenu "Linux/$(ARCH) $(KERNELVERSION) Kernel Configuration"

comment "Compiler: $(CC_VERSION_TEXT)"

source "scripts/Kconfig.include"

source "init/Kconfig"
Expand Down
Loading

0 comments on commit cff11ab

Please sign in to comment.