Files
linux-kernel-module-cheat/build
Ciro Santilli f482f24f87 readme: explain how to run benchmarks with readfile straight out
gem5 cache automate benchmarks, and remove results that were scattered all over.

Move console fun under linux kernel section, since not important enough
for getting started.

Set arch x86_64 by default through common on all scripts.
2018-04-03 22:28:53 +01:00

189 lines
5.0 KiB
Bash
Executable File

#!/usr/bin/env bash
set -eu
. common
set -- ${cli_build:-} "$@"
rm -f br2_cli.gitignore
touch br2_cli.gitignore
configure=true
config_fragments='br2'
extra_make_args=
gem5=false
j="$(($(nproc) - 2))"
linux_reconfigure=false
linux_kernel_custom_config_file=
post_script_args=
qemu_sdl='--enable-sdl --with-sdlabi=2.0'
v=0
while getopts 'a:B:b:CGgj:hIiK:klp:qSv' OPT; do
case "$OPT" in
a)
arch="$OPTARG"
;;
b)
config_fragments="$config_fragments $OPTARG"
;;
B)
echo "$OPTARG" >> br2_cli.gitignore
;;
C)
configure=false
;;
G)
extra_make_args="$extra_make_args gem5-reconfigure"
gem5=true
;;
g)
gem5=true
;;
h)
cat build-usage.adoc 1>&2
exit
;;
I)
echo "
BR2_TARGET_ROOTFS_CPIO=n
BR2_TARGET_ROOTFS_EXT2=n
BR2_TARGET_ROOTFS_INITRAMFS=y
" >> br2_cli.gitignore
;;
i)
echo "
BR2_TARGET_ROOTFS_CPIO=y
BR2_TARGET_ROOTFS_EXT2=n
BR2_TARGET_ROOTFS_INITRAMFS=n
" >> br2_cli.gitignore
;;
j)
echo "$OPTARG" >> br2_cli.gitignore
;;
K)
linux_kernel_custom_config_file="$OPTARG"
;;
k)
extra_make_args="$extra_make_args kernel_module-reconfigure"
;;
l)
linux_reconfigure=true
extra_make_args="$extra_make_args linux-reconfigure"
;;
p)
post_script_args="$OPTARG"
;;
q)
extra_make_args="$extra_make_args host-qemu-reconfigure"
;;
S)
qemu_sdl=
;;
v)
v=1
;;
?)
exit 2
;;
esac
done
shift $(($OPTIND - 1))
extra_make_args="$extra_make_args $@"
set_common_vars "$arch" "$gem5"
config_file="${buildroot_out_dir}/.config"
case "$arch" in
x86_64)
defconfig=qemu_x86_64_defconfig
;;
arm)
defconfig=qemu_arm_versatile_defconfig
;;
aarch64)
defconfig=qemu_aarch64_virt_defconfig
;;
mips64)
defconfig=qemu_mips64r6_malta_defconfig
;;
esac
if ! "$gem5"; then
config_fragments="$config_fragments br2_qemu"
fi
config_fragments="$config_fragments br2_cli.gitignore"
# Configure.
if "$configure"; then
cd "${buildroot_dir}"
for p in $(find "${root_dir}/buildroot_patches/" -maxdepth 1 -name '*.patch' -print); do
patch -N -r - -p 1 <"$p" || :
done
make O="$buildroot_out_dir" BR2_EXTERNAL="../kernel_module:../gem5:../parsec-benchmark" "$defconfig"
# TODO Can't get rid of these for now.
# http://stackoverflow.com/questions/44078245/is-it-possible-to-use-config-fragments-with-buildroots-config
for config_fragment in $config_fragments; do
cat "../$config_fragment" >> "${config_file}"
done
printf "
BR2_JLEVEL=$j
BR2_DL_DIR=\"${common_dir}/dl\"
BR2_ROOTFS_POST_SCRIPT_ARGS=\"$post_script_args\"
" >> "${config_file}"
if "$gem5"; then
printf "BR2_PACKAGE_GEM5=y\n" >> "${config_file}"
if [ -z "$linux_kernel_custom_config_file" ] && [ ! "$arch" = aarch64 ]; then
f="../kernel_config_${arch_dir}"
if [ -f "$f" ]; then
printf "BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE=\"$f\"\n" >> "${config_file}"
fi
fi
fi
if [ -n "$linux_kernel_custom_config_file" ]; then
f="../${linux_kernel_custom_config_file}"
if [ -f "$f" ]; then
printf "BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE=\"${f}\"\n" >> "${config_file}"
if "${linux_reconfigure}"; then
touch "$f"
fi
else
echo "error: -K: file does not exist: ${linux_kernel_custom_config_file}" 1>&2
exit 1
fi
else
f=../kernel_config_fragment
printf "BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES=\"${f}\"\n" >> "${config_file}"
if "${linux_reconfigure}"; then
# https://stackoverflow.com/questions/49260466/why-when-i-change-br2-linux-kernel-custom-config-file-and-run-make-linux-reconfi
touch "$f"
fi
fi
if [ "$arch" = 'mips64' ]; then
# Workaround for:
# http://lists.busybox.net/pipermail/buildroot/2017-August/201053.html
sed -Ei 's/^BR2_PACKAGE_LINUX_TOOLS_GPIO/BR2_PACKAGE_LINUX_TOOLS_GPIO=n/' "${config_file}"
fi
make O="$buildroot_out_dir" olddefconfig
fi
# Build.
mkdir -p \
"${gem5_out_dir}" \
"${qemu_out_dir}" \
"${root_dir}/9p" \
;
cd "${buildroot_dir}"
# HOST_QEMU_OPTS is a hack that happens to work because the QEMU package luckly uses += at all times.
# It shouldn't be necessary in the first place: https://bugs.busybox.net/show_bug.cgi?id=9936
#
# Even if were an autotools package, there is no general way currently to pass extra configs to it:
# https://stackoverflow.com/questions/44341188/how-to-pass-extra-custom-configure-autotools-options-to-a-buildroot-package/44341225#44341225
#
# BR2_ options may be given on the command line here, and they do have direct "define" effects.
# But this is generally bad, as it skips the Kconfig mechanism, e.g. it does not set defaults properly.
cmd="time \
env \
-u LD_LIBRARY_PATH \
make \
O='${buildroot_out_dir}' \
HOST_QEMU_OPTS='--enable-debug --extra-cflags=-DDEBUG_PL061=1 --enable-trace-backends=simple ${qemu_sdl}' \
V='$v' \
${extra_make_args} \
all \
"
echo "$cmd" | tee "${root_dir}/build.log"
eval "$cmd"