06 Jun, 2020

1 commit

  • Allow user to use alternative implementations of compression tools,
    such as pigz, pbzip2, pxz. For example, multi-threaded tools to
    speed up the build:
    $ make GZIP=pigz BZIP2=pbzip2

    Variables _GZIP, _BZIP2, _LZOP are used internally because original env
    vars are reserved by the tools. The use of GZIP in gzip tool is obsolete
    since 2015. However, alternative implementations (e.g., pigz) still rely
    on it. BZIP2, BZIP, LZOP vars are not obsolescent.

    The credit goes to @grsecurity.

    As a sidenote, for multi-threaded lzma, xz compression one can use:
    $ export XZ_OPT="--threads=0"

    Signed-off-by: Denis Efremov
    Signed-off-by: Masahiro Yamada

    Denis Efremov
     

11 Nov, 2019

5 commits

  • This comment block explains why include/generated/compile.h is omitted,
    but nothing about include/generated/autoconf.h, which might be more
    difficult to understand. Add more comments.

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     
  • 'pushd' ... 'popd' is the last bash-specific code in this script.
    One way to avoid it is to run the code in a sub-shell.

    With that addressed, you can run this script with sh.

    I replaced $(BASH) with $(CONFIG_SHELL), and I changed the hashbang
    to #!/bin/sh.

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     
  • This script copies headers by the cpio command twice; first from
    srctree, and then from objtree. However, when we building in-tree,
    we know the srctree and the objtree are the same. That is, all the
    headers copied by the first cpio are overwritten by the second one.

    Skip the first cpio when we are building in-tree.

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     
  • This script computes md5sum of headers in srctree and in objtree.
    However, when we are building in-tree, we know the srctree and the
    objtree are the same. That is, we end up with the same computation
    twice. In fact, the first two lines of kernel/kheaders.md5 are always
    the same for in-tree builds.

    Unify the two md5sum calculations.

    For in-tree builds ($building_out_of_srctree is empty), we check
    only two directories, "include", and "arch/$SRCARCH/include".

    For out-of-tree builds ($building_out_of_srctree is 1), we check
    4 directories, "$srctree/include", "$srctree/arch/$SRCARCH/include",
    "include", and "arch/$SRCARCH/include" since we know they are all
    different.

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     
  • The 'head' and 'tail' commands can take a file path directly.
    So, you do not need to run 'cat'.

    cat kernel/kheaders.md5 | head -1

    ... is equivalent to:

    head -1 kernel/kheaders.md5

    and the latter saves forking one process.

    While I was here, I replaced 'head -1' with 'head -n 1'.

    I also replaced '==' with '=' since we do not have a good reason to
    use the bashism.

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     

17 Oct, 2019

1 commit

  • The option --sort=ORDER was only introduced in tar 1.28 (2014), which
    is rather new and might not be available in some setups.

    This patch tries to replicate the previous behaviour as closely as
    possible to fix the kheaders build for older environments. It does
    not produce identical archives compared to the previous version due
    to minor sorting differences but produces reproducible results itself
    in my tests.

    Reported-by: Andreas Schwab
    Signed-off-by: Dmitry Goldin
    Tested-by: Andreas Schwab
    Tested-by: Quentin Perret
    Signed-off-by: Masahiro Yamada

    Dmitry Goldin
     

05 Oct, 2019

1 commit

  • In commit 43d8ce9d65a5 ("Provide in-kernel headers to make
    extending kernel easier") a new mechanism was introduced, for kernels
    >=5.2, which embeds the kernel headers in the kernel image or a module
    and exposes them in procfs for use by userland tools.

    The archive containing the header files has nondeterminism caused by
    header files metadata. This patch normalizes the metadata and utilizes
    KBUILD_BUILD_TIMESTAMP if provided and otherwise falls back to the
    default behaviour.

    In commit f7b101d33046 ("kheaders: Move from proc to sysfs") it was
    modified to use sysfs and the script for generation of the archive was
    renamed to what is being patched.

    Signed-off-by: Dmitry Goldin
    Reviewed-by: Greg Kroah-Hartman
    Reviewed-by: Joel Fernandes (Google)
    Signed-off-by: Masahiro Yamada

    Dmitry Goldin
     

09 Jul, 2019

2 commits

  • Currently, kheaders_data.tar.xz contains some build scripts as well as
    headers. None of them is needed in the header archive.

    For ARCH=x86, this commit excludes the following from the archive:

    arch/x86/include/asm/Kbuild
    arch/x86/include/uapi/asm/Kbuild
    include/asm-generic/Kbuild
    include/config/auto.conf
    include/config/kernel.release
    include/config/tristate.conf
    include/uapi/asm-generic/Kbuild
    include/uapi/Kbuild
    kernel/gen_kheaders.sh

    This change is actually motivated for the planned header compile-testing
    because it will generate more build artifacts, which should not be
    included in the archive.

    Signed-off-by: Masahiro Yamada
    Reviewed-by: Joel Fernandes (Google)

    Masahiro Yamada
     
  • The -R option of 'ls' is supposed to be used for directories.

    -R, --recursive
    list subdirectories recursively

    Since 'find ... -type f' only matches to regular files, we do not
    expect directories passed to the 'ls' command here.

    Giving -R is harmless at least, but unneeded.

    Signed-off-by: Masahiro Yamada
    Reviewed-by: Joel Fernandes (Google)

    Masahiro Yamada
     

25 May, 2019

2 commits

  • Linus reported an issue that doing an allmodconfig was causing the
    kheaders archive to be regenerated even though the config is the same.
    This patch fixes the issue by ignoring the config-related header files
    for "knowing when to regenerate based on timestamps". Instead, if the
    CONFIG_X_Y option really changes, then we there are the
    include/config/X/Y.h which will already tells us "if a config really
    changed". So we don't really need these files for regeneration detection
    anyway, and ignoring them fixes Linus's issue.

    Reported-by: Linus Torvalds
    Signed-off-by: Joel Fernandes (Google)
    Signed-off-by: Greg Kroah-Hartman

    Joel Fernandes (Google)
     
  • The kheaders archive consisting of the kernel headers used for compiling
    bpf programs is in /proc. However there is concern that moving it here
    will make it permanent. Let us move it to /sys/kernel as discussed [1].

    [1] https://lore.kernel.org/patchwork/patch/1067310/#1265969

    Suggested-by: Steven Rostedt
    Signed-off-by: Joel Fernandes (Google)
    Signed-off-by: Greg Kroah-Hartman

    Joel Fernandes (Google)