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