Skip to content
Open
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
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ cscope*
tags
ktest-out
*.tags
cross.conf

lib/lwip-connect
lib/supervisor
Expand Down
49 changes: 24 additions & 25 deletions build-test-kernel
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ ktest_kernel_source=$(readlink -e "$ktest_kernel_source")
ktest_kernel_build="$ktest_out/kernel_build.$ktest_arch"
mkdir -p "$ktest_kernel_build"

if [[ -n $CROSS_COMPILE ]]; then
if [[ -n ${CROSS_COMPILE} ]]; then
checkdep "$ARCH_TRIPLE-gcc" "gcc-$ARCH_TRIPLE"
fi

Expand All @@ -121,10 +121,6 @@ run_ktest()

do_make()
{
if [[ -n $CROSS_COMPILE ]]; then
export ARCH="$KERNEL_ARCH"
export CROSS_COMPILE="$ARCH_TRIPLE-"
fi

make --jobs="$ktest_njobs" \
--directory="$ktest_kernel_source" \
Expand All @@ -141,7 +137,7 @@ new_config()
local config_tool="$ktest_kernel_source/scripts/config"

if [[ ! -f $kconfig ]]; then
do_make allnoconfig
do_make ARCH="$KERNEL_ARCH" CROSS_COMPILE="$ARCH_TRIPLE-" allnoconfig

# Really undefine everything:
sed -i -e 's/\(CONFIG_.*\)=.*/# \1 is not set/' "$kconfig"
Expand Down Expand Up @@ -188,17 +184,17 @@ build_kernel()
mv "$kconfig" "$kconfig".bak
fi

MAKEARGS+=("LOCALVERSION=-ktest" ARCH="$KERNEL_ARCH" CROSS_COMPILE="$ARCH_TRIPLE-")

new_config

log_verbose "kernel_config_require: ${ktest_kernel_config_require[@]}"

MAKEARGS+=("LOCALVERSION=-ktest")

for opt in "${ktest_kernel_config_require[@]}"; do
[[ -n $opt ]] && kernel_opt set "$opt"
done

do_make olddefconfig
do_make ARCH="$KERNEL_ARCH" CROSS_COMPILE="$ARCH_TRIPLE-" olddefconfig

for opt in "${ktest_kernel_config_require[@]}"; do
[[ -n $opt ]] && kernel_opt check "$opt"
Expand All @@ -209,31 +205,34 @@ build_kernel()
mv "$kconfig".bak "$kconfig"
fi

case $KERNEL_ARCH in
mips)
do_make -k vmlinuz
;;
*)
do_make -k
;;
esac
do_make $MAKEARGS -k

local BOOT=$ktest_kernel_build/arch/$KERNEL_ARCH/boot

case $ktest_arch in
x86*)
install -m0644 "$BOOT/bzImage" "$ktest_kernel_binary/vmlinuz"
;;
arm)
install -m0644 "$BOOT/zImage" "$ktest_kernel_binary/vmlinuz"
;;
aarch64)
install -m0644 "$BOOT/Image" "$ktest_kernel_binary/vmlinuz"
;;
mips)
install -m0644 "$BOOT/vmlinux.strip" "$ktest_kernel_binary/vmlinuz"
#install -m0644 "$ktest_kernel_build/vmlinux" "$ktest_kernel_binary/vmlinuz"
ppc64)
install -m0644 "$BOOT/zImage" "$ktest_kernel_binary/vmlinuz"
;;
default)
echo "Don't know how to install kernel"
exit 1
*)
if [ -f "$BOOT/Image" ]; then
install -m0644 "$BOOT/Image" "$ktest_kernel_binary/vmlinuz"
elif [ -f "$BOOT/zImage" ]; then
install -m0644 "$BOOT/zImage" "$ktest_kernel_binary/vmlinuz"
elif [ -f "$BOOT/bzImage" ]; then
install -m0644 "$BOOT/bzImage" "$ktest_kernel_binary/vmlinuz"
else
echo "Don't know how to install kernel"
exit 1
fi
;;
esac

Expand Down Expand Up @@ -283,13 +282,13 @@ cmd_boot()
cmd_oldconfig()
{
new_config
do_make oldconfig
do_make ARCH="$KERNEL_ARCH" CROSS_COMPILE="$ARCH_TRIPLE-" oldconfig
}

cmd_config()
{
new_config
do_make nconfig
do_make ARCH="$KERNEL_ARCH" CROSS_COMPILE="$ARCH_TRIPLE-" nconfig
}

cmd_faddr2line()
Expand Down
24 changes: 24 additions & 0 deletions cross.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# this file specifies target triplets for cross-compiling
# whenever these need to be changed (some distributions prefer ARCHITECTURE-VENDOR-OS-LIBC),
# change the triplet here

#32 bit architectures
ARCH_TRIPLE_X86=x86-linux-gnu
ARCH_TRIPLE_ARMV7=arm-linux-gnueabihf

#64 bit architectures
ARCH_TRIPLE_X86_64=x86_64-linux-gnu
ARCH_TRIPLE_ARM64=aarch64-linux-gnu
ARCH_TRIPLE_S390X=s390x-linux-gnu

#currently unsupported (but maintained) debian architectures
ARCH_TRIPLE_PPC64=powerpc-linux-gnu
ARCH_TRIPLE_SPARC64=sparc64-linux-gnu
ARCH_TRIPLE_RISCV64=riscv64-linux-gnu

#here you can specify up snapshots which are used to fix sid dependencies:
#debian SID is updated frequently, having a lot of broken packages due to dependencies
#view https://snapshot.debian.org/archive/debian-ports/ for a list
#as always: the older, the more dangerous ...

SID_SNAPSHOTS=("20220501T101242Z")
104 changes: 61 additions & 43 deletions lib/common.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@ set -o nounset
set -o errtrace
set -o pipefail

[[ -v ktest_dir ]] || ktest_dir=$(dirname ${BASH_SOURCE})/..

. "$ktest_dir/cross.conf"

trap 'echo "Error $? at $BASH_SOURCE $LINENO from: $BASH_COMMAND, exiting"' ERR

ktest_tmp=${ktest_tmp:-""}
Expand All @@ -15,6 +19,8 @@ ktest_exit()
fi

[[ -n $ktest_tmp ]] && rm -rf "$ktest_tmp"
#umount overlayfs of bcachefs-tools if needed
[[ -n $ktest_tmp && $(grep bcachefs-tools-$ktest_arch /proc/mounts) ]] && umount $(grep bcachefs-tools-$ktest_arch /proc/mounts | cut -d' ' -f 2)
true
}

Expand Down Expand Up @@ -76,27 +82,27 @@ join_by()
echo "$*"
}

ktest_arch=$(uname -m)
CROSS_COMPILE=""

parse_arch()
{
CROSS_COMPILE=
case $1 in
x86|i386)
x86|i386|i686)
ktest_arch=x86
DEBIAN_ARCH=i386
ARCH_TRIPLE=x86-linux-gnu
ARCH_TRIPLE=${ARCH_TRIPLE_X86}
RUST_TRIPLE=i686-unknown-linux-gnu

KERNEL_ARCH=x86
BITS=32

QEMU_PACKAGE=qemu-system-x86
QEMU_BIN=qemu-system-x86_64
QEMU_BIN=qemu-system-i386
;;
x86_64|amd64)
ktest_arch=x86_64
DEBIAN_ARCH=amd64
ARCH_TRIPLE=x86_64-linux-gnu
ARCH_TRIPLE=${ARCH_TRIPLE_X86_64}
RUST_TRIPLE=x86_64-unknown-linux-gnu

KERNEL_ARCH=x86
BITS=64
Expand All @@ -107,71 +113,69 @@ parse_arch()
aarch64|arm64)
ktest_arch=aarch64
DEBIAN_ARCH=arm64
ARCH_TRIPLE=aarch64-linux-gnu
ARCH_TRIPLE=${ARCH_TRIPLE_ARM64}
RUST_TRIPLE=aarch64-unknown-linux-gnu

KERNEL_ARCH=arm64
BITS=64

QEMU_PACKAGE=qemu-system-arm
QEMU_BIN=qemu-system-aarch64
;;
mips)
DEBIAN_ARCH=mips
ARCH_TRIPLE=mips-linux-gnu
armhf|armv7|armv7l|arm)
ktest_arch=arm
DEBIAN_ARCH=armhf
ARCH_TRIPLE=${ARCH_TRIPLE_ARMV7}
RUST_TRIPLE=armv7-unknown-linux-gnueabihf

KERNEL_ARCH=mips
KERNEL_ARCH=arm
BITS=32

QEMU_PACKAGE=qemu-system-mips
QEMU_BIN=qemu-system-mips
QEMU_PACKAGE=qemu-system-arm
QEMU_BIN=qemu-system-arm
;;
mips64)
DEBIAN_ARCH=mips
ARCH_TRIPLE=mips-linux-gnu
s390x)
DEBIAN_ARCH=s390x
ARCH_TRIPLE=${ARCH_TRIPLE_S390X}
RUST_TRIPLE=s390x-unknown-linux-gnu

KERNEL_ARCH=mips
KERNEL_ARCH=s390
BITS=64

QEMU_PACKAGE=qemu-system-mips
QEMU_BIN=qemu-system-mips64
QEMU_PACKAGE=qemu-system-s390x
QEMU_BIN=qemu-system-s390x
;;
sparc)
DEBIAN_ARCH=sparc
ARCH_TRIPLE=sparc64-linux-gnu
riscv64)
DEBIAN_ARCH=riscv64
ARCH_TRIPLE=${ARCH_TRIPLE_RISCV64}
MIRROR=http://deb.debian.org/debian-ports
RUST_TRIPLE=riscv64gc-unknown-linux-gnu

KERNEL_ARCH=sparc
BITS=32
KERNEL_ARCH=riscv
BITS=64

QEMU_PACKAGE=qemu-system-sparc
QEMU_BIN=qemu-system-sparc
QEMU_PACKAGE=qemu-system-riscv
QEMU_BIN=qemu-system-riscv64
;;
sparc64)
DEBIAN_ARCH=sparc
ARCH_TRIPLE=sparc64-linux-gnu
DEBIAN_ARCH=sparc64
ARCH_TRIPLE=${ARCH_TRIPLE_SPARC64}
MIRROR=http://deb.debian.org/debian-ports
RUST_TRIPLE=sparc64-unknown-linux-gnu

KERNEL_ARCH=sparc
BITS=64

QEMU_PACKAGE=qemu-system-sparc
QEMU_BIN=qemu-system-sparc64
;;
ppc|powerpc)
DEBIAN_ARCH=powerpc
MIRROR=http://deb.debian.org/debian-ports

ARCH_TRIPLE=powerpc-linux-gnu

KERNEL_ARCH=powerpc
BITS=32

QEMU_PACKAGE=qemu-system-ppc
QEMU_BIN=qemu-system-ppc
;;
ppc64)
ppc64|powerpc)
ktest_arch=ppc64
DEBIAN_ARCH=ppc64
MIRROR=http://deb.debian.org/debian-ports

ARCH_TRIPLE=powerpc-linux-gnu
ARCH_TRIPLE=${ARCH_TRIPLE_PPC64}
RUST_TRIPLE=powerpc64-unknown-linux-gnu

KERNEL_ARCH=powerpc
BITS=64
Expand All @@ -186,7 +190,21 @@ parse_arch()

if [[ $ktest_arch != $(uname -m) ]]; then
CROSS_COMPILE=1
else
CROSS_COMPILE=
fi
#special case: x86_64 is able to run i386 code. we can use KVM.
[[ $DEBIAN_ARCH == "i386" && "$(uname -m)" == "x86_64" ]] && CROSS_COMPILE=
export DEBIAN_ARCH
export MIRROR
export ARCH_TRIPLE
export KERNEL_ARCH
export QEMU_PACKAGE
export QEMU_BIN
export ktest_arch
export BITS
export RUST_TRIPLE
export CROSS_COMPILE
}

find_command() {
Expand Down
Loading