Skip to content

Commit 2884037

Browse files
committed
kpatch-build: add cross-compilation support
This patch introduces ability to pick a CROSS_COMPILE environment variable which can be used for specifying toolchain prefix for all gcc utils (gcc, ld, objcopy etc). DISTRO checks are disabled if VMLINUX and USERSRCDIR are specified.
1 parent 71fe6c5 commit 2884037

File tree

1 file changed

+19
-9
lines changed

1 file changed

+19
-9
lines changed

kpatch-build/kpatch-build

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ gcc_version_check() {
278278
# gcc --version varies between distributions therefore extract version
279279
# by compiling a test file and compare it to vmlinux's version.
280280
echo 'void main(void) {}' > "$c"
281-
out="$(gcc -c -pg -ffunction-sections -o "$o" "$c" 2>&1)"
281+
out="$("${CROSS_COMPILE}"gcc -c -pg -ffunction-sections -o "$o" "$c" 2>&1)"
282282
gccver="$(gcc_version_from_file "$o")"
283283
kgccver="$(gcc_version_from_file "$target")"
284284

@@ -656,6 +656,14 @@ mkdir -p "$TEMPDIR" || die "Couldn't create $TEMPDIR"
656656
rm -rf "${TEMPDIR:?}"/*
657657
rm -f "$LOGFILE"
658658

659+
660+
if [[ -n "$USERSRCDIR" ]] && [[ -n "$VMLINUX" ]]; then
661+
DISTRO="dummy" # I think some of the DISTRO checks could be skipped, given the user provides source dir and vmlinux files.
662+
else
663+
DISTRO="$ID"
664+
fi
665+
666+
659667
if [[ -n "$USERSRCDIR" ]]; then
660668
if [[ -n "$ARCHVERSION" ]]; then
661669
warn "--archversion is incompatible with --sourcedir"
@@ -699,7 +707,8 @@ fi
699707
# Don't check external file.
700708
# shellcheck disable=SC1090
701709
[[ -f "$RELEASE_FILE" ]] && source "$RELEASE_FILE"
702-
DISTRO="$ID"
710+
711+
703712
if [[ "$DISTRO" = fedora ]] || [[ "$DISTRO" = rhel ]] || [[ "$DISTRO" = ol ]] || [[ "$DISTRO" = centos ]] || [[ "$DISTRO" = openEuler ]]; then
704713
[[ -z "$VMLINUX" ]] && VMLINUX="/usr/lib/debug/lib/modules/$ARCHVERSION/vmlinux"
705714
[[ -e "$VMLINUX" ]] || die "kernel-debuginfo-$ARCHVERSION not installed"
@@ -929,17 +938,17 @@ unset KPATCH_GCC_TEMPDIR
929938
KPATCH_CC_PREFIX="$TOOLSDIR/kpatch-cc "
930939
declare -a MAKEVARS
931940
if [[ -n "$CONFIG_CC_IS_CLANG" ]]; then
932-
MAKEVARS+=("CC=${KPATCH_CC_PREFIX}clang")
941+
MAKEVARS+=("CC=${KPATCH_CC_PREFIX}${CROSS_COMPILE}clang")
933942
MAKEVARS+=("HOSTCC=clang")
934943
else
935-
MAKEVARS+=("CC=${KPATCH_CC_PREFIX}gcc")
944+
MAKEVARS+=("CC=${KPATCH_CC_PREFIX}${CROSS_COMPILE}gcc")
936945
fi
937946

938947
if [[ -n "$CONFIG_LD_IS_LLD" ]]; then
939-
MAKEVARS+=("LD=${KPATCH_CC_PREFIX}ld.lld")
948+
MAKEVARS+=("LD=${KPATCH_CC_PREFIX}${CROSS_COMPILE}ld.lld")
940949
MAKEVARS+=("HOSTLD=ld.lld")
941950
else
942-
MAKEVARS+=("LD=${KPATCH_CC_PREFIX}ld")
951+
MAKEVARS+=("LD=${KPATCH_CC_PREFIX}${CROSS_COMPILE}ld")
943952
fi
944953

945954

@@ -1129,7 +1138,7 @@ fi
11291138
cd "$TEMPDIR/output" || die
11301139
# $KPATCH_LDFLAGS and result of find used as list, no quotes.
11311140
# shellcheck disable=SC2086,SC2046
1132-
ld -r $KPATCH_LDFLAGS -o ../patch/tmp_output.o $(find . -name "*.o") 2>&1 | logger || die
1141+
"$CROSS_COMPILE"ld -r $KPATCH_LDFLAGS -o ../patch/tmp_output.o $(find . -name "*.o") 2>&1 | logger || die
11331142

11341143
if [[ "$USE_KLP" -eq 1 ]]; then
11351144
cp -f "$TEMPDIR"/patch/tmp_output.o "$TEMPDIR"/patch/output.o || die
@@ -1138,7 +1147,7 @@ if [[ "$USE_KLP" -eq 1 ]]; then
11381147
else
11391148
# Add .kpatch.checksum for kpatch script
11401149
md5sum ../patch/tmp_output.o | awk '{printf "%s\0", $1}' > checksum.tmp || die
1141-
objcopy --add-section .kpatch.checksum=checksum.tmp --set-section-flags .kpatch.checksum=alloc,load,contents,readonly ../patch/tmp_output.o || die
1150+
"$CROSS_COMPILE"objcopy --add-section .kpatch.checksum=checksum.tmp --set-section-flags .kpatch.checksum=alloc,load,contents,readonly ../patch/tmp_output.o || die
11421151
rm -f checksum.tmp
11431152
"$TOOLSDIR"/create-kpatch-module "$TEMPDIR"/patch/tmp_output.o "$TEMPDIR"/patch/output.o 2>&1 | logger 1
11441153
check_pipe_status create-kpatch-module
@@ -1154,7 +1163,8 @@ done
11541163

11551164
export KPATCH_BUILD="$KERNEL_SRCDIR" KPATCH_NAME="$MODNAME" \
11561165
KBUILD_EXTRA_SYMBOLS="$KBUILD_EXTRA_SYMBOLS" \
1157-
KPATCH_LDFLAGS="$KPATCH_LDFLAGS"
1166+
KPATCH_LDFLAGS="$KPATCH_LDFLAGS" \
1167+
CROSS_COMPILE="$CROSS_COMPILE"
11581168
save_env
11591169

11601170
make "${MAKEVARS[@]}" 2>&1 | logger || die

0 commit comments

Comments
 (0)