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