.. | .. |
---|
1 | | -#!/bin/bash |
---|
| 1 | +#!/bin/sh |
---|
2 | 2 | # SPDX-License-Identifier: GPL-2.0 |
---|
3 | 3 | |
---|
4 | 4 | # This script generates an archive consisting of kernel headers |
---|
.. | .. |
---|
21 | 21 | # Uncomment it for debugging. |
---|
22 | 22 | # if [ ! -f /tmp/iter ]; then iter=1; echo 1 > /tmp/iter; |
---|
23 | 23 | # else iter=$(($(cat /tmp/iter) + 1)); echo $iter > /tmp/iter; fi |
---|
24 | | -# find $src_file_list -name "*.h" | xargs ls -l > /tmp/src-ls-$iter |
---|
25 | | -# find $obj_file_list -name "*.h" | xargs ls -l > /tmp/obj-ls-$iter |
---|
| 24 | +# find $all_dirs -name "*.h" | xargs ls -l > /tmp/ls-$iter |
---|
| 25 | + |
---|
| 26 | +all_dirs= |
---|
| 27 | +if [ "$building_out_of_srctree" ]; then |
---|
| 28 | + for d in $dir_list; do |
---|
| 29 | + all_dirs="$all_dirs $srctree/$d" |
---|
| 30 | + done |
---|
| 31 | +fi |
---|
| 32 | +all_dirs="$all_dirs $dir_list" |
---|
26 | 33 | |
---|
27 | 34 | # include/generated/compile.h is ignored because it is touched even when none |
---|
28 | | -# of the source files changed. This causes pointless regeneration, so let us |
---|
29 | | -# ignore them for md5 calculation. |
---|
30 | | -pushd $srctree > /dev/null |
---|
31 | | -src_files_md5="$(find $dir_list -name "*.h" | |
---|
32 | | - grep -v "include/generated/compile.h" | |
---|
33 | | - grep -v "include/generated/autoconf.h" | |
---|
| 35 | +# of the source files changed. |
---|
| 36 | +# |
---|
| 37 | +# When Kconfig regenerates include/generated/autoconf.h, its timestamp is |
---|
| 38 | +# updated, but the contents might be still the same. When any CONFIG option is |
---|
| 39 | +# changed, Kconfig touches the corresponding timestamp file include/config/*.h. |
---|
| 40 | +# Hence, the md5sum detects the configuration change anyway. We do not need to |
---|
| 41 | +# check include/generated/autoconf.h explicitly. |
---|
| 42 | +# |
---|
| 43 | +# Ignore them for md5 calculation to avoid pointless regeneration. |
---|
| 44 | +headers_md5="$(find $all_dirs -name "*.h" | |
---|
| 45 | + grep -v "include/generated/compile.h" | |
---|
| 46 | + grep -v "include/generated/autoconf.h" | |
---|
34 | 47 | xargs ls -l | md5sum | cut -d ' ' -f1)" |
---|
35 | | -popd > /dev/null |
---|
36 | | -obj_files_md5="$(find $dir_list -name "*.h" | |
---|
37 | | - grep -v "include/generated/compile.h" | |
---|
38 | | - grep -v "include/generated/autoconf.h" | |
---|
39 | | - xargs ls -l | md5sum | cut -d ' ' -f1)" |
---|
| 48 | + |
---|
40 | 49 | # Any changes to this script will also cause a rebuild of the archive. |
---|
41 | 50 | this_file_md5="$(ls -l $sfile | md5sum | cut -d ' ' -f1)" |
---|
42 | 51 | if [ -f $tarfile ]; then tarfile_md5="$(md5sum $tarfile | cut -d ' ' -f1)"; fi |
---|
43 | 52 | if [ -f kernel/kheaders.md5 ] && |
---|
44 | | - [ "$(cat kernel/kheaders.md5|head -1)" == "$src_files_md5" ] && |
---|
45 | | - [ "$(cat kernel/kheaders.md5|head -2|tail -1)" == "$obj_files_md5" ] && |
---|
46 | | - [ "$(cat kernel/kheaders.md5|head -3|tail -1)" == "$this_file_md5" ] && |
---|
47 | | - [ "$(cat kernel/kheaders.md5|tail -1)" == "$tarfile_md5" ]; then |
---|
| 53 | + [ "$(head -n 1 kernel/kheaders.md5)" = "$headers_md5" ] && |
---|
| 54 | + [ "$(head -n 2 kernel/kheaders.md5 | tail -n 1)" = "$this_file_md5" ] && |
---|
| 55 | + [ "$(tail -n 1 kernel/kheaders.md5)" = "$tarfile_md5" ]; then |
---|
48 | 56 | exit |
---|
49 | 57 | fi |
---|
50 | 58 | |
---|
.. | .. |
---|
55 | 63 | rm -rf $cpio_dir |
---|
56 | 64 | mkdir $cpio_dir |
---|
57 | 65 | |
---|
58 | | -pushd $srctree > /dev/null |
---|
59 | | -for f in $dir_list; |
---|
60 | | - do find "$f" -name "*.h"; |
---|
61 | | -done | cpio --quiet -pd $cpio_dir |
---|
62 | | -popd > /dev/null |
---|
| 66 | +if [ "$building_out_of_srctree" ]; then |
---|
| 67 | + ( |
---|
| 68 | + cd $srctree |
---|
| 69 | + for f in $dir_list |
---|
| 70 | + do find "$f" -name "*.h"; |
---|
| 71 | + done | cpio --quiet -pd $cpio_dir |
---|
| 72 | + ) |
---|
| 73 | +fi |
---|
63 | 74 | |
---|
64 | | -# The second CPIO can complain if files already exist which can |
---|
65 | | -# happen with out of tree builds. Just silence CPIO for now. |
---|
| 75 | +# The second CPIO can complain if files already exist which can happen with out |
---|
| 76 | +# of tree builds having stale headers in srctree. Just silence CPIO for now. |
---|
66 | 77 | for f in $dir_list; |
---|
67 | 78 | do find "$f" -name "*.h"; |
---|
68 | 79 | done | cpio --quiet -pd $cpio_dir >/dev/null 2>&1 |
---|
.. | .. |
---|
71 | 82 | find $cpio_dir -type f -print0 | |
---|
72 | 83 | xargs -0 -P8 -n1 perl -pi -e 'BEGIN {undef $/;}; s/\/\*((?!SPDX).)*?\*\///smg;' |
---|
73 | 84 | |
---|
74 | | -tar -Jcf $tarfile -C $cpio_dir/ . > /dev/null |
---|
| 85 | +# Create archive and try to normalize metadata for reproducibility. |
---|
| 86 | +# For compatibility with older versions of tar, files are fed to tar |
---|
| 87 | +# pre-sorted, as --sort=name might not be available. |
---|
| 88 | +find $cpio_dir -printf "./%P\n" | LC_ALL=C sort | \ |
---|
| 89 | + tar "${KBUILD_BUILD_TIMESTAMP:+--mtime=$KBUILD_BUILD_TIMESTAMP}" \ |
---|
| 90 | + --owner=0 --group=0 --numeric-owner --no-recursion \ |
---|
| 91 | + -I $XZ -cf $tarfile -C $cpio_dir/ -T - > /dev/null |
---|
75 | 92 | |
---|
76 | | -echo "$src_files_md5" > kernel/kheaders.md5 |
---|
77 | | -echo "$obj_files_md5" >> kernel/kheaders.md5 |
---|
| 93 | +echo $headers_md5 > kernel/kheaders.md5 |
---|
78 | 94 | echo "$this_file_md5" >> kernel/kheaders.md5 |
---|
79 | 95 | echo "$(md5sum $tarfile | cut -d ' ' -f1)" >> kernel/kheaders.md5 |
---|
80 | 96 | |
---|