• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/bin/sh
2# SPDX-License-Identifier: GPL-2.0
3
4TARGET=$1
5ARCH=$2
6SMP=$3
7PREEMPT=$4
8PREEMPT_RT=$5
9CC_VERSION="$6"
10LD=$7
11
12vecho() { [ "${quiet}" = "silent_" ] || echo "$@" ; }
13
14# If compile.h exists already and we don't own autoconf.h
15# (i.e. we're not the same user who did make *config), don't
16# modify compile.h
17# So "sudo make install" won't change the "compiled by <user>"
18# do "compiled by root"
19
20if [ -r $TARGET -a ! -O include/generated/autoconf.h ]; then
21  vecho "  SKIPPED $TARGET"
22  exit 0
23fi
24
25# Do not expand names
26set -f
27
28# Fix the language to get consistent output
29LC_ALL=C
30export LC_ALL
31
32if [ -z "$KBUILD_BUILD_VERSION" ]; then
33	VERSION=$(cat .version 2>/dev/null || echo 1)
34else
35	VERSION=$KBUILD_BUILD_VERSION
36fi
37
38if [ -z "$KBUILD_BUILD_TIMESTAMP" ]; then
39	TIMESTAMP=`date`
40else
41	TIMESTAMP=$KBUILD_BUILD_TIMESTAMP
42fi
43if test -z "$KBUILD_BUILD_USER"; then
44	LINUX_COMPILE_BY=$(whoami | sed 's/\\/\\\\/')
45else
46	LINUX_COMPILE_BY=$KBUILD_BUILD_USER
47fi
48if test -z "$KBUILD_BUILD_HOST"; then
49	LINUX_COMPILE_HOST=`hostname`
50else
51	LINUX_COMPILE_HOST=$KBUILD_BUILD_HOST
52fi
53
54UTS_VERSION="#$VERSION"
55CONFIG_FLAGS=""
56if [ -n "$SMP" ] ; then CONFIG_FLAGS="SMP"; fi
57if [ -n "$PREEMPT" ] ; then CONFIG_FLAGS="$CONFIG_FLAGS PREEMPT"; fi
58if [ -n "$PREEMPT_RT" ] ; then CONFIG_FLAGS="$CONFIG_FLAGS PREEMPT_RT"; fi
59UTS_VERSION="$UTS_VERSION $CONFIG_FLAGS $TIMESTAMP"
60
61# Truncate to maximum length
62
63UTS_LEN=64
64UTS_TRUNCATE="cut -b -$UTS_LEN"
65
66# Generate a temporary compile.h
67
68{ echo /\* This file is auto generated, version $VERSION \*/
69  if [ -n "$CONFIG_FLAGS" ] ; then echo "/* $CONFIG_FLAGS */"; fi
70
71  echo \#define UTS_MACHINE \"$ARCH\"
72
73  echo \#define UTS_VERSION \"`echo $UTS_VERSION | $UTS_TRUNCATE`\"
74
75  echo \#define LINUX_COMPILE_BY \"`echo $LINUX_COMPILE_BY | $UTS_TRUNCATE`\"
76  echo \#define LINUX_COMPILE_HOST \"`echo $LINUX_COMPILE_HOST | $UTS_TRUNCATE`\"
77
78  LD_VERSION=$($LD -v | head -n1 | sed 's/(compatible with [^)]*)//' \
79		      | sed 's/[[:space:]]*$//')
80  printf '#define LINUX_COMPILER "%s"\n' "$CC_VERSION, $LD_VERSION"
81} > .tmpcompile
82
83# Only replace the real compile.h if the new one is different,
84# in order to preserve the timestamp and avoid unnecessary
85# recompilations.
86# We don't consider the file changed if only the date/time changed,
87# unless KBUILD_BUILD_TIMESTAMP was explicitly set (e.g. for
88# reproducible builds with that value referring to a commit timestamp).
89# A kernel config change will increase the generation number, thus
90# causing compile.h to be updated (including date/time) due to the
91# changed comment in the
92# first line.
93
94if [ -z "$KBUILD_BUILD_TIMESTAMP" ]; then
95   IGNORE_PATTERN="UTS_VERSION"
96else
97   IGNORE_PATTERN="NOT_A_PATTERN_TO_BE_MATCHED"
98fi
99
100if [ -r $TARGET ] && \
101      grep -v $IGNORE_PATTERN $TARGET > .tmpver.1 && \
102      grep -v $IGNORE_PATTERN .tmpcompile > .tmpver.2 && \
103      cmp -s .tmpver.1 .tmpver.2; then
104   rm -f .tmpcompile
105else
106   vecho "  UPD     $TARGET"
107   mv -f .tmpcompile $TARGET
108fi
109rm -f .tmpver.1 .tmpver.2
110