Blame view

kernel/gen_kheaders.sh 3.05 KB
43d8ce9d6   Joel Fernandes (Google)   Provide in-kernel...
1
2
3
4
  #!/bin/bash
  # SPDX-License-Identifier: GPL-2.0
  
  # This script generates an archive consisting of kernel headers
f7b101d33   Joel Fernandes (Google)   kheaders: Move fr...
5
  # for CONFIG_IKHEADERS.
43d8ce9d6   Joel Fernandes (Google)   Provide in-kernel...
6
  set -e
7199ff7d7   Masahiro Yamada   kheaders: include...
7
  sfile="$(readlink -f "$0")"
43d8ce9d6   Joel Fernandes (Google)   Provide in-kernel...
8
9
10
  outdir="$(pwd)"
  tarfile=$1
  cpio_dir=$outdir/$tarfile.tmp
7199ff7d7   Masahiro Yamada   kheaders: include...
11
  dir_list="
43d8ce9d6   Joel Fernandes (Google)   Provide in-kernel...
12
13
14
15
16
17
18
19
20
  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.
1457dc9ed   Joel Fernandes (Google)   kheaders: Do not ...
21
22
  # if [ ! -f /tmp/iter ]; then iter=1; echo 1 > /tmp/iter;
  # else iter=$(($(cat /tmp/iter) + 1)); echo $iter > /tmp/iter; fi
7199ff7d7   Masahiro Yamada   kheaders: include...
23
24
  # find $src_file_list -name "*.h" | xargs ls -l > /tmp/src-ls-$iter
  # find $obj_file_list -name "*.h" | xargs ls -l > /tmp/obj-ls-$iter
43d8ce9d6   Joel Fernandes (Google)   Provide in-kernel...
25
26
27
28
  
  # 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.
7199ff7d7   Masahiro Yamada   kheaders: include...
29
30
  pushd $srctree > /dev/null
  src_files_md5="$(find $dir_list -name "*.h"			   |
43d8ce9d6   Joel Fernandes (Google)   Provide in-kernel...
31
  		grep -v "include/generated/compile.h"		   |
1457dc9ed   Joel Fernandes (Google)   kheaders: Do not ...
32
  		grep -v "include/generated/autoconf.h"		   |
b60b7c2ea   Masahiro Yamada   kheaders: remove ...
33
  		xargs ls -l | md5sum | cut -d ' ' -f1)"
43d8ce9d6   Joel Fernandes (Google)   Provide in-kernel...
34
  popd > /dev/null
7199ff7d7   Masahiro Yamada   kheaders: include...
35
  obj_files_md5="$(find $dir_list -name "*.h"			   |
43d8ce9d6   Joel Fernandes (Google)   Provide in-kernel...
36
  		grep -v "include/generated/compile.h"		   |
1457dc9ed   Joel Fernandes (Google)   kheaders: Do not ...
37
  		grep -v "include/generated/autoconf.h"		   |
b60b7c2ea   Masahiro Yamada   kheaders: remove ...
38
  		xargs ls -l | md5sum | cut -d ' ' -f1)"
7199ff7d7   Masahiro Yamada   kheaders: include...
39
40
  # Any changes to this script will also cause a rebuild of the archive.
  this_file_md5="$(ls -l $sfile | md5sum | cut -d ' ' -f1)"
43d8ce9d6   Joel Fernandes (Google)   Provide in-kernel...
41
42
43
44
  if [ -f $tarfile ]; then tarfile_md5="$(md5sum $tarfile | cut -d ' ' -f1)"; fi
  if [ -f kernel/kheaders.md5 ] &&
  	[ "$(cat kernel/kheaders.md5|head -1)" == "$src_files_md5" ] &&
  	[ "$(cat kernel/kheaders.md5|head -2|tail -1)" == "$obj_files_md5" ] &&
7199ff7d7   Masahiro Yamada   kheaders: include...
45
  	[ "$(cat kernel/kheaders.md5|head -3|tail -1)" == "$this_file_md5" ] &&
43d8ce9d6   Joel Fernandes (Google)   Provide in-kernel...
46
47
48
49
50
51
52
53
54
55
  	[ "$(cat kernel/kheaders.md5|tail -1)" == "$tarfile_md5" ]; then
  		exit
  fi
  
  if [ "${quiet}" != "silent_" ]; then
         echo "  GEN     $tarfile"
  fi
  
  rm -rf $cpio_dir
  mkdir $cpio_dir
7199ff7d7   Masahiro Yamada   kheaders: include...
56
57
58
  pushd $srctree > /dev/null
  for f in $dir_list;
  	do find "$f" -name "*.h";
43d8ce9d6   Joel Fernandes (Google)   Provide in-kernel...
59
60
61
62
63
  done | cpio --quiet -pd $cpio_dir
  popd > /dev/null
  
  # The second CPIO can complain if files already exist which can
  # happen with out of tree builds. Just silence CPIO for now.
7199ff7d7   Masahiro Yamada   kheaders: include...
64
65
  for f in $dir_list;
  	do find "$f" -name "*.h";
43d8ce9d6   Joel Fernandes (Google)   Provide in-kernel...
66
67
68
69
70
  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;'
700dea5a0   Dmitry Goldin   kheaders: substit...
71
72
73
74
75
76
77
78
  # 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
  " | 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
43d8ce9d6   Joel Fernandes (Google)   Provide in-kernel...
79

1457dc9ed   Joel Fernandes (Google)   kheaders: Do not ...
80
  echo "$src_files_md5" >  kernel/kheaders.md5
43d8ce9d6   Joel Fernandes (Google)   Provide in-kernel...
81
  echo "$obj_files_md5" >> kernel/kheaders.md5
7199ff7d7   Masahiro Yamada   kheaders: include...
82
  echo "$this_file_md5" >> kernel/kheaders.md5
43d8ce9d6   Joel Fernandes (Google)   Provide in-kernel...
83
84
85
  echo "$(md5sum $tarfile | cut -d ' ' -f1)" >> kernel/kheaders.md5
  
  rm -rf $cpio_dir