blob: 383fd43ac6122247310720afc391ab2610bd9847 [file] [log] [blame]
Masahiro Yamada1463f742019-10-08 21:05:55 +09001#!/bin/sh
Joel Fernandes (Google)43d8ce92019-04-26 15:04:29 -04002# SPDX-License-Identifier: GPL-2.0
3
4# This script generates an archive consisting of kernel headers
Joel Fernandes (Google)f7b101d2019-05-15 17:35:51 -04005# for CONFIG_IKHEADERS.
Joel Fernandes (Google)43d8ce92019-04-26 15:04:29 -04006set -e
Masahiro Yamada7199ff72019-07-01 09:58:44 +09007sfile="$(readlink -f "$0")"
Joel Fernandes (Google)43d8ce92019-04-26 15:04:29 -04008outdir="$(pwd)"
9tarfile=$1
Thomas Weißschuh837962c2023-01-18 05:05:35 +000010cpio_dir=$outdir/${tarfile%/*}/.tmp_cpio_dir
Joel Fernandes (Google)43d8ce92019-04-26 15:04:29 -040011
Masahiro Yamada7199ff72019-07-01 09:58:44 +090012dir_list="
Joel Fernandes (Google)43d8ce92019-04-26 15:04:29 -040013include/
14arch/$SRCARCH/include/
15"
16
Miguel Ojeda6e58e012024-05-28 18:31:50 +020017if ! command -v cpio >/dev/null; then
18 echo >&2 "***"
19 echo >&2 "*** 'cpio' could not be found."
20 echo >&2 "***"
21 exit 1
22fi
Thomas Weißschuh13e1df02023-01-17 05:30:43 +000023
Joel Fernandes (Google)43d8ce92019-04-26 15:04:29 -040024# Support incremental builds by skipping archive generation
25# if timestamps of files being archived are not changed.
26
27# This block is useful for debugging the incremental builds.
28# Uncomment it for debugging.
Joel Fernandes (Google)1457dc92019-05-15 17:35:52 -040029# if [ ! -f /tmp/iter ]; then iter=1; echo 1 > /tmp/iter;
30# else iter=$(($(cat /tmp/iter) + 1)); echo $iter > /tmp/iter; fi
Masahiro Yamada0e117732019-10-08 21:05:53 +090031# find $all_dirs -name "*.h" | xargs ls -l > /tmp/ls-$iter
32
33all_dirs=
34if [ "$building_out_of_srctree" ]; then
35 for d in $dir_list; do
36 all_dirs="$all_dirs $srctree/$d"
37 done
38fi
39all_dirs="$all_dirs $dir_list"
Joel Fernandes (Google)43d8ce92019-04-26 15:04:29 -040040
Masahiro Yamada2df8220c2022-08-28 11:39:53 +090041# include/generated/utsversion.h is ignored because it is generated after this
42# script is executed. (utsversion.h is unneeded for kheaders)
Masahiro Yamadaf2760312019-10-08 21:05:56 +090043#
44# When Kconfig regenerates include/generated/autoconf.h, its timestamp is
45# updated, but the contents might be still the same. When any CONFIG option is
Alexey Dobriyan0e0345b2021-04-15 20:36:07 +030046# changed, Kconfig touches the corresponding timestamp file include/config/*.
Masahiro Yamadaf2760312019-10-08 21:05:56 +090047# Hence, the md5sum detects the configuration change anyway. We do not need to
48# check include/generated/autoconf.h explicitly.
49#
50# Ignore them for md5 calculation to avoid pointless regeneration.
Masahiro Yamada0e117732019-10-08 21:05:53 +090051headers_md5="$(find $all_dirs -name "*.h" |
Masahiro Yamada2df8220c2022-08-28 11:39:53 +090052 grep -v "include/generated/utsversion.h" |
Masahiro Yamada0e117732019-10-08 21:05:53 +090053 grep -v "include/generated/autoconf.h" |
Masahiro Yamadab60b7c22019-07-01 09:58:43 +090054 xargs ls -l | md5sum | cut -d ' ' -f1)"
Masahiro Yamada0e117732019-10-08 21:05:53 +090055
Masahiro Yamada7199ff72019-07-01 09:58:44 +090056# Any changes to this script will also cause a rebuild of the archive.
57this_file_md5="$(ls -l $sfile | md5sum | cut -d ' ' -f1)"
Joel Fernandes (Google)43d8ce92019-04-26 15:04:29 -040058if [ -f $tarfile ]; then tarfile_md5="$(md5sum $tarfile | cut -d ' ' -f1)"; fi
59if [ -f kernel/kheaders.md5 ] &&
Masahiro Yamada0e117732019-10-08 21:05:53 +090060 [ "$(head -n 1 kernel/kheaders.md5)" = "$headers_md5" ] &&
61 [ "$(head -n 2 kernel/kheaders.md5 | tail -n 1)" = "$this_file_md5" ] &&
Masahiro Yamada9a0663572019-10-08 21:05:52 +090062 [ "$(tail -n 1 kernel/kheaders.md5)" = "$tarfile_md5" ]; then
Joel Fernandes (Google)43d8ce92019-04-26 15:04:29 -040063 exit
64fi
65
Masahiro Yamadac39013e2021-05-17 16:03:14 +090066echo " GEN $tarfile"
Joel Fernandes (Google)43d8ce92019-04-26 15:04:29 -040067
68rm -rf $cpio_dir
69mkdir $cpio_dir
70
Masahiro Yamadaea79e512019-10-08 21:05:54 +090071if [ "$building_out_of_srctree" ]; then
Masahiro Yamada1463f742019-10-08 21:05:55 +090072 (
73 cd $srctree
74 for f in $dir_list
75 do find "$f" -name "*.h";
76 done | cpio --quiet -pd $cpio_dir
77 )
Masahiro Yamadaea79e512019-10-08 21:05:54 +090078fi
Joel Fernandes (Google)43d8ce92019-04-26 15:04:29 -040079
Masahiro Yamadaea79e512019-10-08 21:05:54 +090080# The second CPIO can complain if files already exist which can happen with out
81# of tree builds having stale headers in srctree. Just silence CPIO for now.
Masahiro Yamada7199ff72019-07-01 09:58:44 +090082for f in $dir_list;
83 do find "$f" -name "*.h";
Daniel Mentz1e8ca622022-04-13 16:36:49 -070084done | cpio --quiet -pdu $cpio_dir >/dev/null 2>&1
Joel Fernandes (Google)43d8ce92019-04-26 15:04:29 -040085
86# Remove comments except SDPX lines
87find $cpio_dir -type f -print0 |
88 xargs -0 -P8 -n1 perl -pi -e 'BEGIN {undef $/;}; s/\/\*((?!SPDX).)*?\*\///smg;'
89
Dmitry Goldin700dea52019-10-09 13:42:14 +000090# Create archive and try to normalize metadata for reproducibility.
Masahiro Yamada49c386e2023-05-21 22:23:35 +090091tar "${KBUILD_BUILD_TIMESTAMP:+--mtime=$KBUILD_BUILD_TIMESTAMP}" \
Matthias Maennich3bd27a82024-05-28 11:32:43 +000092 --owner=0 --group=0 --sort=name --numeric-owner --mode=u=rw,go=r,a+X \
Masahiro Yamada49c386e2023-05-21 22:23:35 +090093 -I $XZ -cf $tarfile -C $cpio_dir/ . > /dev/null
Joel Fernandes (Google)43d8ce92019-04-26 15:04:29 -040094
Masahiro Yamada0e117732019-10-08 21:05:53 +090095echo $headers_md5 > kernel/kheaders.md5
Masahiro Yamada7199ff72019-07-01 09:58:44 +090096echo "$this_file_md5" >> kernel/kheaders.md5
Joel Fernandes (Google)43d8ce92019-04-26 15:04:29 -040097echo "$(md5sum $tarfile | cut -d ' ' -f1)" >> kernel/kheaders.md5
98
99rm -rf $cpio_dir