linux-yocto/scripts/mkcompile_h
Frederic Weisbecker a0a7e453b5 sched/preempt: Tell about PREEMPT_DYNAMIC on kernel headers
Displaying "PREEMPT" on kernel headers when CONFIG_PREEMPT_DYNAMIC=y
can be misleading for anybody involved in remote debugging because it
is then not guaranteed that there is an actual preemption behaviour. It
depends on default Kconfig or boot defined choices.

Therefore, tell about PREEMPT_DYNAMIC on static kernel headers and leave
the search for the actual preemption behaviour to browsing dmesg.

Reviewed-by: Valentin Schneider <valentin.schneider@arm.com>
Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lkml.kernel.org/r/20220217111240.GA742892@lothringen
2022-03-11 15:36:35 +01:00

2.6 KiB
Executable File

#!/bin/sh

SPDX-License-Identifier: GPL-2.0

TARGET=$1 ARCH=$2 SMP=$3 PREEMPT=$4 PREEMPT_DYNAMIC=$5 PREEMPT_RT=$6 CC_VERSION="$7" LD=$8

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_RT" ] ; then CONFIG_FLAGS="$CONFIG_FLAGS PREEMPT_RT" elif [ -n "$PREEMPT_DYNAMIC" ] ; then CONFIG_FLAGS="$CONFIG_FLAGS PREEMPT_DYNAMIC" elif [ -n "$PREEMPT" ] ; then CONFIG_FLAGS="$CONFIG_FLAGS PREEMPT" 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 echo " UPD $TARGET" mv -f .tmpcompile $TARGET fi rm -f .tmpver.1 .tmpver.2