diff options
Diffstat (limited to 'scripts/mkcompile_h')
-rwxr-xr-x | scripts/mkcompile_h | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/scripts/mkcompile_h b/scripts/mkcompile_h new file mode 100755 index 000000000..a72b154de --- /dev/null +++ b/scripts/mkcompile_h @@ -0,0 +1,96 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-2.0 + +TARGET=$1 +ARCH=$2 +SMP=$3 +PREEMPT=$4 +PREEMPT_RT=$5 +CC_VERSION="$6" +LD=$7 + +vecho() { [ "${quiet}" = "silent_" ] || echo "$@" ; } + +# Do not expand names +set -f + +# Fix the language to get consistent output +LC_ALL=C +export LC_ALL + +if [ -z "$KBUILD_BUILD_VERSION" ]; then + VERSION=$(cat .version 2>/dev/null || echo 1) +else + VERSION=$KBUILD_BUILD_VERSION +fi + +if [ -z "$KBUILD_BUILD_TIMESTAMP" ]; then + TIMESTAMP=`date` +else + TIMESTAMP=$KBUILD_BUILD_TIMESTAMP +fi +if test -z "$KBUILD_BUILD_USER"; then + LINUX_COMPILE_BY=$(whoami | sed 's/\\/\\\\/') +else + LINUX_COMPILE_BY=$KBUILD_BUILD_USER +fi +if test -z "$KBUILD_BUILD_HOST"; then + LINUX_COMPILE_HOST=`uname -n` +else + LINUX_COMPILE_HOST=$KBUILD_BUILD_HOST +fi + +UTS_VERSION="#$VERSION" +CONFIG_FLAGS="" +if [ -n "$SMP" ] ; then CONFIG_FLAGS="SMP"; fi +if [ -n "$PREEMPT" ] ; then CONFIG_FLAGS="$CONFIG_FLAGS PREEMPT"; fi +if [ -n "$PREEMPT_RT" ] ; then CONFIG_FLAGS="$CONFIG_FLAGS PREEMPT_RT"; fi + +# Truncate to maximum length +UTS_LEN=64 +UTS_VERSION="$(echo $UTS_VERSION $CONFIG_FLAGS $TIMESTAMP | cut -b -$UTS_LEN)" + +# Generate a temporary compile.h + +{ echo /\* This file is auto generated, version $VERSION \*/ + if [ -n "$CONFIG_FLAGS" ] ; then echo "/* $CONFIG_FLAGS */"; fi + + echo \#define UTS_MACHINE \"$ARCH\" + + echo \#define UTS_VERSION \"$UTS_VERSION\" + + printf '#define LINUX_COMPILE_BY "%s"\n' "$LINUX_COMPILE_BY" + echo \#define LINUX_COMPILE_HOST \"$LINUX_COMPILE_HOST\" + + LD_VERSION=$($LD -v | head -n1 | sed 's/(compatible with [^)]*)//' \ + | sed 's/[[:space:]]*$//') + printf '#define LINUX_COMPILER "%s"\n' "$CC_VERSION, $LD_VERSION" +} > .tmpcompile + +# Only replace the real compile.h if the new one is different, +# in order to preserve the timestamp and avoid unnecessary +# recompilations. +# We don't consider the file changed if only the date/time changed, +# unless KBUILD_BUILD_TIMESTAMP was explicitly set (e.g. for +# reproducible builds with that value referring to a commit timestamp). +# A kernel config change will increase the generation number, thus +# causing compile.h to be updated (including date/time) due to the +# changed comment in the +# first line. + +if [ -z "$KBUILD_BUILD_TIMESTAMP" ]; then + IGNORE_PATTERN="UTS_VERSION" +else + IGNORE_PATTERN="NOT_A_PATTERN_TO_BE_MATCHED" +fi + +if [ -r $TARGET ] && \ + grep -v $IGNORE_PATTERN $TARGET > .tmpver.1 && \ + grep -v $IGNORE_PATTERN .tmpcompile > .tmpver.2 && \ + cmp -s .tmpver.1 .tmpver.2; then + rm -f .tmpcompile +else + vecho " UPD $TARGET" + mv -f .tmpcompile $TARGET +fi +rm -f .tmpver.1 .tmpver.2 |