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