forked from Minki/linux
ea79e5168b
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 <yamada.masahiro@socionext.com>
90 lines
2.8 KiB
Bash
Executable File
90 lines
2.8 KiB
Bash
Executable File
#!/bin/bash
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
|
|
# This script generates an archive consisting of kernel headers
|
|
# for CONFIG_IKHEADERS.
|
|
set -e
|
|
sfile="$(readlink -f "$0")"
|
|
outdir="$(pwd)"
|
|
tarfile=$1
|
|
cpio_dir=$outdir/$tarfile.tmp
|
|
|
|
dir_list="
|
|
include/
|
|
arch/$SRCARCH/include/
|
|
"
|
|
|
|
# Support incremental builds by skipping archive generation
|
|
# if timestamps of files being archived are not changed.
|
|
|
|
# This block is useful for debugging the incremental builds.
|
|
# Uncomment it for debugging.
|
|
# if [ ! -f /tmp/iter ]; then iter=1; echo 1 > /tmp/iter;
|
|
# else iter=$(($(cat /tmp/iter) + 1)); echo $iter > /tmp/iter; fi
|
|
# find $all_dirs -name "*.h" | xargs ls -l > /tmp/ls-$iter
|
|
|
|
all_dirs=
|
|
if [ "$building_out_of_srctree" ]; then
|
|
for d in $dir_list; do
|
|
all_dirs="$all_dirs $srctree/$d"
|
|
done
|
|
fi
|
|
all_dirs="$all_dirs $dir_list"
|
|
|
|
# include/generated/compile.h is ignored because it is touched even when none
|
|
# of the source files changed. This causes pointless regeneration, so let us
|
|
# ignore them for md5 calculation.
|
|
headers_md5="$(find $all_dirs -name "*.h" |
|
|
grep -v "include/generated/compile.h" |
|
|
grep -v "include/generated/autoconf.h" |
|
|
xargs ls -l | md5sum | cut -d ' ' -f1)"
|
|
|
|
# Any changes to this script will also cause a rebuild of the archive.
|
|
this_file_md5="$(ls -l $sfile | md5sum | cut -d ' ' -f1)"
|
|
if [ -f $tarfile ]; then tarfile_md5="$(md5sum $tarfile | cut -d ' ' -f1)"; fi
|
|
if [ -f kernel/kheaders.md5 ] &&
|
|
[ "$(head -n 1 kernel/kheaders.md5)" = "$headers_md5" ] &&
|
|
[ "$(head -n 2 kernel/kheaders.md5 | tail -n 1)" = "$this_file_md5" ] &&
|
|
[ "$(tail -n 1 kernel/kheaders.md5)" = "$tarfile_md5" ]; then
|
|
exit
|
|
fi
|
|
|
|
if [ "${quiet}" != "silent_" ]; then
|
|
echo " GEN $tarfile"
|
|
fi
|
|
|
|
rm -rf $cpio_dir
|
|
mkdir $cpio_dir
|
|
|
|
if [ "$building_out_of_srctree" ]; then
|
|
pushd $srctree > /dev/null
|
|
for f in $dir_list
|
|
do find "$f" -name "*.h";
|
|
done | cpio --quiet -pd $cpio_dir
|
|
popd > /dev/null
|
|
fi
|
|
|
|
# The second CPIO can complain if files already exist which can happen with out
|
|
# of tree builds having stale headers in srctree. Just silence CPIO for now.
|
|
for f in $dir_list;
|
|
do find "$f" -name "*.h";
|
|
done | cpio --quiet -pd $cpio_dir >/dev/null 2>&1
|
|
|
|
# Remove comments except SDPX lines
|
|
find $cpio_dir -type f -print0 |
|
|
xargs -0 -P8 -n1 perl -pi -e 'BEGIN {undef $/;}; s/\/\*((?!SPDX).)*?\*\///smg;'
|
|
|
|
# Create archive and try to normalize metadata for reproducibility.
|
|
# For compatibility with older versions of tar, files are fed to tar
|
|
# pre-sorted, as --sort=name might not be available.
|
|
find $cpio_dir -printf "./%P\n" | LC_ALL=C sort | \
|
|
tar "${KBUILD_BUILD_TIMESTAMP:+--mtime=$KBUILD_BUILD_TIMESTAMP}" \
|
|
--owner=0 --group=0 --numeric-owner --no-recursion \
|
|
-Jcf $tarfile -C $cpio_dir/ -T - > /dev/null
|
|
|
|
echo $headers_md5 > kernel/kheaders.md5
|
|
echo "$this_file_md5" >> kernel/kheaders.md5
|
|
echo "$(md5sum $tarfile | cut -d ' ' -f1)" >> kernel/kheaders.md5
|
|
|
|
rm -rf $cpio_dir
|