Files
ShirokaneShizuku c9624fe808 script: Fix missing terminating character in compile.h
Refer to: https://github.com/LineageOS/android_kernel_sony_sm8250/blob/lineage-21/scripts/mkcompile_h#L76
Add "-m1" for grep to fix the following issues without hardcode compiler name (24b147d266):
- Warnings and errors about missing terminating '"' character and unknown type name '__s8'
  while compiling include/generated/compile.h

Before the fix, the error messages were as follows:
In file included from ../../../../../../kernel/sony/sm8150/init/version.c:9:
./include/generated/compile.h:7:24: warning: missing terminating '"' character [-Winvalid-pp-token]
    7 | #define LINUX_COMPILER "Android (11368308, +pgo, +bolt, +lto, +mlgo, based on r510928) clang version 18.0.0 (https://android.googlesource.com/toolchain/llvm-project 477610d4d0d988e69dbc3fae4fe86bff3f07f2b5)
      |                        ^
./include/generated/compile.h:8:1: error: unknown type name 'Found'
    8 | Found HIP installation: /dev/null, version 3.5.0, LLD 18.0.0"
      | ^
./include/generated/compile.h:8:10: error: expected ';' after top level declarator
    8 | Found HIP installation: /dev/null, version 3.5.0, LLD 18.0.0"
      |          ^
      |          ;
./include/generated/compile.h:8:61: warning: missing terminating '"' character [-Winvalid-pp-token]
    8 | Found HIP installation: /dev/null, version 3.5.0, LLD 18.0.0"
      |                                                             ^
In file included from ../../../../../../kernel/sony/sm8150/init/version.c:10:
In file included from ../../../../../../kernel/sony/sm8150/include/linux/module.h:9:
In file included from ../../../../../../kernel/sony/sm8150/include/linux/list.h:5:
../../../../../../kernel/sony/sm8150/include/linux/types.h:102:10: error: unknown type name '__s8'; did you mean '__u8'?
  102 | typedef         __s8            int8_t;
      |                 ^~~~
      |                 __u8
../../../../../../kernel/sony/sm8150/include/uapi/asm-generic/int-ll64.h:21:23: note: '__u8' declared here
   21 | typedef unsigned char __u8;
      |                       ^
../../../../../../kernel/sony/sm8150/init/version.c:46:26: error: expected ';' after top level declarator
   46 |         LINUX_COMPILE_HOST ") (" LINUX_COMPILER ") " UTS_VERSION "\n";
      |                                 ^
      |                                 ;
../../../../../../kernel/sony/sm8150/init/version.c:51:6: error: expected ';' after top level declarator
   51 |         " (" LINUX_COMPILER ") %s\n";
      |             ^
      |             ;
2 warnings and 5 errors generated.
2024-10-19 13:55:36 +02:00

111 lines
2.8 KiB
Bash
Executable File

#!/bin/sh
# SPDX-License-Identifier: GPL-2.0
TARGET=$1
ARCH=$2
SMP=$3
PREEMPT=$4
CC=$5
LD=$6
vecho() { [ "${quiet}" = "silent_" ] || echo "$@" ; }
# If compile.h exists already and we don't own autoconf.h
# (i.e. we're not the same user who did make *config), don't
# modify compile.h
# So "sudo make install" won't change the "compiled by <user>"
# do "compiled by root"
if [ -r $TARGET -a ! -O include/generated/autoconf.h ]; then
vecho " SKIPPED $TARGET"
exit 0
fi
# 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
if [ -r .version ]; then
VERSION=`cat .version`
else
VERSION=0
echo 0 > .version
fi
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="raystef66"
else
LINUX_COMPILE_BY=$KBUILD_BUILD_USER
fi
if test -z "$KBUILD_BUILD_HOST"; then
LINUX_COMPILE_HOST="Private-Server"
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
UTS_VERSION="$UTS_VERSION $CONFIG_FLAGS $TIMESTAMP"
# Truncate to maximum length
UTS_LEN=64
UTS_TRUNCATE="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 \"`echo $UTS_VERSION | $UTS_TRUNCATE`\"
echo \#define LINUX_COMPILE_BY \"`echo $LINUX_COMPILE_BY | $UTS_TRUNCATE`\"
echo \#define LINUX_COMPILE_HOST \"`echo $LINUX_COMPILE_HOST | $UTS_TRUNCATE`\"
echo \#define LINUX_COMPILER \"`$CC -v 2>&1 | grep -m1 ' version ' | sed 's/clang/Clang/g' | sed 's/(https..*)//g' | sed 's/[[:space:]]*$//'`\"
) > .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