Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 17 additions & 3 deletions kpatch-build/kpatch-build
Original file line number Diff line number Diff line change
Expand Up @@ -198,7 +198,7 @@ gcc_version_check() {
# gcc --version varies between distributions therefore extract version
# by compiling a test file and compare it to vmlinux's version.
echo 'void main(void) {}' > "$c"
out="$(gcc -c -pg -ffunction-sections -o "$o" "$c" 2>&1)"
out="$(${KPATCH_CROSS_COMPILE}gcc -c -pg -ffunction-sections -o "$o" "$c" 2>&1)"
gccver="$(gcc_version_from_file "$o")"
kgccver="$(gcc_version_from_file "$VMLINUX")"
rm -f "$c" "$o"
Expand Down Expand Up @@ -385,12 +385,15 @@ usage() {
echo " -d, --debug Enable 'xtrace' and keep scratch files" >&2
echo " in <CACHEDIR>/tmp" >&2
echo " (can be specified multiple times)" >&2
echo " --cross-compile Specify the prefix used for all executables" >&2
echo " used during compilation" >&2
echo " --distro Override distro name" >&2
echo " --skip-cleanup Skip post-build cleanup" >&2
echo " --skip-gcc-check Skip gcc version matching check" >&2
echo " (not recommended)" >&2
}

options="$(getopt -o ha:r:s:c:v:j:t:n:o:d -l "help,archversion:,sourcerpm:,sourcedir:,config:,vmlinux:,jobs:,target:,name:,output:,debug,skip-gcc-check,skip-cleanup" -- "$@")" || die "getopt failed"
options="$(getopt -o ha:r:s:c:v:j:t:n:o:d -l "help,archversion:,sourcerpm:,sourcedir:,config:,vmlinux:,jobs:,target:,name:,output:,debug,cross-compile:,distro:,skip-gcc-check,skip-cleanup" -- "$@")" || die "getopt failed"

eval set -- "$options"

Expand Down Expand Up @@ -448,6 +451,14 @@ while [[ $# -gt 0 ]]; do
echo "DEBUG mode enabled"
fi
;;
--cross-compile)
KPATCH_CROSS_COMPILE="$2"
shift
;;
--distro)
DISTRO="$2"
shift
;;
--skip-cleanup)
echo "Skipping cleanup"
SKIPCLEANUP=1
Expand Down Expand Up @@ -524,7 +535,7 @@ fi
# Don't check external file.
# shellcheck disable=SC1091
source /etc/os-release
DISTRO="$ID"
DISTRO="${DISTRO:-${ID}}"
if [[ "$DISTRO" = fedora ]] || [[ "$DISTRO" = rhel ]] || [[ "$DISTRO" = ol ]] || [[ "$DISTRO" = centos ]]; then
[[ -z "$VMLINUX" ]] && VMLINUX="/usr/lib/debug/lib/modules/$ARCHVERSION/vmlinux"
[[ -e "$VMLINUX" ]] || die "kernel-debuginfo-$ARCHVERSION not installed"
Expand Down Expand Up @@ -694,6 +705,8 @@ if [[ $DEBUG -ge 4 ]]; then
export KPATCH_GCC_DEBUG=1
fi

export KPATCH_CROSS_COMPILE

echo "Building original kernel"
./scripts/setlocalversion --save-scmversion || die
make mrproper 2>&1 | logger || die
Expand Down Expand Up @@ -848,6 +861,7 @@ cd "$TEMPDIR/patch" || die
KPATCH_BUILD="$SRCDIR" KPATCH_NAME="$MODNAME" \
KBUILD_EXTRA_SYMBOLS="$KBUILD_EXTRA_SYMBOLS" \
KPATCH_LDFLAGS="$KPATCH_LDFLAGS" \
CROSS_COMPILE="$KPATCH_CROSS_COMPILE" \
make 2>&1 | logger || die

if ! "$KPATCH_MODULE"; then
Expand Down
4 changes: 2 additions & 2 deletions kpatch-build/kpatch-gcc
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ TOOLCHAINCMD="$1"
shift

if [[ -z "$KPATCH_GCC_TEMPDIR" ]]; then
exec "$TOOLCHAINCMD" "$@"
exec ${KPATCH_CROSS_COMPILE}${TOOLCHAINCMD} "$@"
fi

declare -a args=("$@")
Expand Down Expand Up @@ -81,4 +81,4 @@ elif [[ "$TOOLCHAINCMD" = "ld" ]] ; then
done
fi

exec "$TOOLCHAINCMD" "${args[@]}"
exec ${KPATCH_CROSS_COMPILE}${TOOLCHAINCMD} "${args[@]}"