Powered by Linux
[PATCH] kernel: Add support for cross-build kernels — Semantic Matching Tool

[PATCH] kernel: Add support for cross-build kernels

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The smatch scripts such as kchecker invoke the Linux kernel build
system, however it doesn't pass commonly used environment variables
which allow for cross-compilation.

Let's pass the ARCH and CROSS_COMPILE environment variables to the
kernel build system to support cross-built kernels. E.g.

ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- \
	~/smatch/smatch_scripts/build_kernel_data.sh

Signed-off-by: Andrew Murray <andrew.murray@xxxxxxx>
---
 Documentation/smatch.txt             |  4 ++++
 smatch_scripts/build_generic_data.sh |  9 ++++++++-
 smatch_scripts/kchecker              | 10 +++++++++-
 smatch_scripts/test_generic.sh       | 11 +++++++++--
 smatch_scripts/test_kernel.sh        | 11 +++++++++--
 5 files changed, 39 insertions(+), 6 deletions(-)

diff --git a/Documentation/smatch.txt b/Documentation/smatch.txt
index ae9a454dd023..b62e4507ee1d 100644
--- a/Documentation/smatch.txt
+++ b/Documentation/smatch.txt
@@ -55,6 +55,10 @@ You can also build a directory like this:
 
 The kchecker script prints its warnings to stdout.
 
+The above scripts will ensure that any ARCH or CROSS_COMPILE environment
+variables are passed to kernel build system - thus allowing for the use of
+Smatch with kernels that are normally built with cross-compilers.
+
 If you are building something else (which is not the Linux kernel) then use
 something like:
 
diff --git a/smatch_scripts/build_generic_data.sh b/smatch_scripts/build_generic_data.sh
index 27ad013bf55b..c8f98d9bdb62 100755
--- a/smatch_scripts/build_generic_data.sh
+++ b/smatch_scripts/build_generic_data.sh
@@ -52,7 +52,14 @@ if [ ! -e smatch_db.sqlite ] ; then
     fi
 fi
 
-make -j${NR_CPU} CHECK="$BIN_DIR/smatch --call-tree --info --param-mapper --spammy --file-output" $TARGET
+if [[ ! -z $ARCH ]]; then
+	KERNEL_ARCH="ARCH=$ARCH"
+fi
+if [[ ! -z $CROSS_COMPILE ]] ; then
+	KERNEL_CROSS_COMPILE="CROSS_COMPILE=$CROSS_COMPILE"
+fi
+
+make $KERNEL_ARCH $KERNEL_CROSS_COMPILE -j${NR_CPU} CHECK="$BIN_DIR/smatch --call-tree --info --param-mapper --spammy --file-output" $TARGET
 
 find -name \*.c.smatch -exec cat \{\} \; -exec rm \{\} \; > smatch_warns.txt
 
diff --git a/smatch_scripts/kchecker b/smatch_scripts/kchecker
index 9754b21f93d0..2ca9b0f00f49 100755
--- a/smatch_scripts/kchecker
+++ b/smatch_scripts/kchecker
@@ -70,4 +70,12 @@ if  echo $oname | grep -q .o$ ; then
     rm -f $oname
 fi
 
-make C=2 $ENDIAN CHECK="$PRE $CMD $POST" $oname
+if [[ ! -z $ARCH ]]; then
+	echo "yes"
+	KERNEL_ARCH="ARCH=$ARCH"
+fi
+if [[ ! -z $CROSS_COMPILE ]] ; then
+	KERNEL_CROSS_COMPILE="CROSS_COMPILE=$CROSS_COMPILE"
+fi
+
+make $KERNEL_CROSS_COMPILE $KERNEL_ARCH C=2 $ENDIAN CHECK="$PRE $CMD $POST" $oname
diff --git a/smatch_scripts/test_generic.sh b/smatch_scripts/test_generic.sh
index 4655ba74930a..5707d7c6ae70 100755
--- a/smatch_scripts/test_generic.sh
+++ b/smatch_scripts/test_generic.sh
@@ -52,9 +52,16 @@ else
     exit 1
 fi
 
-make clean
+if [[ ! -z $ARCH ]]; then
+	KERNEL_ARCH="ARCH=$ARCH"
+fi
+if [[ ! -z $CROSS_COMPILE ]] ; then
+	KERNEL_CROSS_COMPILE="CROSS_COMPILE=$CROSS_COMPILE"
+fi
+
+make $KERNEL_ARCH $KERNEL_CROSS_COMPILE clean
 find -name \*.c.smatch -exec rm \{\} \;
-make -j${NR_CPU} $ENDIAN -k CHECK="$CMD --file-output $*" \
+make $KERNEL_ARCH $KERNEL_CROSS_COMPILE -j${NR_CPU} $ENDIAN -k CHECK="$CMD --file-output $*" \
 	C=1 $TARGET 2>&1 | tee $LOG
 find -name \*.c.smatch -exec cat \{\} \; -exec rm \{\} \; > $WLOG
 
diff --git a/smatch_scripts/test_kernel.sh b/smatch_scripts/test_kernel.sh
index b31c61047cfe..d254c56a638c 100755
--- a/smatch_scripts/test_kernel.sh
+++ b/smatch_scripts/test_kernel.sh
@@ -56,9 +56,16 @@ else
     exit 1
 fi
 
-make clean
+if [[ ! -z $ARCH ]]; then
+	KERNEL_ARCH="ARCH=$ARCH"
+fi
+if [[ ! -z $CROSS_COMPILE ]] ; then
+	KERNEL_CROSS_COMPILE="CROSS_COMPILE=$CROSS_COMPILE"
+fi
+
+make $KERNEL_ARCH $KERNEL_CROSS_COMPILE clean
 find -name \*.c.smatch -exec rm \{\} \;
-make -j${NR_CPU} $ENDIAN -k CHECK="$CMD -p=kernel --file-output --succeed $*" \
+make $KERNEL_ARCH $KERNEL_CROSS_COMPILE -j${NR_CPU} $ENDIAN -k CHECK="$CMD -p=kernel --file-output --succeed $*" \
 	C=1 $BUILD_PARAM $TARGET 2>&1 | tee $LOG
 BUILD_STATUS=${PIPESTATUS[0]}
 find -name \*.c.smatch -exec cat \{\} \; -exec rm \{\} \; > $WLOG
-- 
2.21.0




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux