Files
moslab-code/bin/setup.d/04-setup
2025-09-12 15:56:04 +02:00

1151 lines
46 KiB
Bash
Executable File

#! /usr/bin/env bash
# This scripts sets up a snapshot on the target build machine.
# TODO: Add question for compiler location :(
# TODO: do export CROSS_COMPILE before setting up the obj-dirs, so that we get the right prefix
# TODO: Use CROSS_COMPILE from environement as default (in case it is already set)
set -e
# check we're in the right directory
if [ ! -d src/l4 -o ! -d src/fiasco ]; then
echo "Call setup as ./$(basename $0) in the right directory"
exit 1
fi
if [ -n "$SYSTEM" ]; then
echo "SYSTEM environment variable set, not good"
exit 1
fi
CC=${CC:-${CROSS_COMPILE}gcc}
CXX=${CXX:-${CROSS_COMPILE}g++}
LD=${LD:-${CROSS_COMPILE}ld}
add_to_config()
{
echo "$@" >> obj/.config
}
write_config()
{
# write out config, fresh version
mkdir -p obj
echo '# snapshot build configuration' > obj/.config
for c in CONF_DO_X86_32 \
CONF_DO_UX \
CONF_DO_AMD64 \
CONF_DO_ARM \
CONF_DO_ARM_VIRT_PL2 \
CONF_DO_ARM_RPIZ \
CONF_DO_ARM_RPI3 \
CONF_DO_ARM_RPI4 \
CONF_DO_ARM_IMX6UL_PL1 \
CONF_DO_ARM_IMX6UL_PL2 \
CONF_DO_ARM64 \
CONF_DO_ARM64_VIRT \
CONF_DO_ARM64_RCAR3 \
CONF_DO_ARM64_RPI3 \
CONF_DO_ARM64_RPI4 \
CONF_DO_ARM64_RPI5 \
CONF_DO_ARM64_SBSA \
CONF_DO_ARM64_S32G \
CONF_DO_ARM64_ZYNQMP \
CONF_DO_MIPS32R2 \
CONF_DO_MIPS32R6 \
CONF_DO_MIPS64R2 \
CONF_DO_MIPS64R6 \
CONF_FAILED_ARM \
CONF_FAILED_ARM64 \
CONF_FAILED_UX \
CONF_FAILED_AMD64 \
CONF_FAILED_MIPS32R2 \
CONF_FAILED_MIPS32R6 \
CONF_FAILED_MIPS64R2 \
CONF_FAILED_MIPS64R6 \
CROSS_COMPILE_ARM \
CROSS_COMPILE_ARM64 \
CROSS_COMPILE_MIPS32R2 \
CROSS_COMPILE_MIPS32R6 \
CROSS_COMPILE_MIPS64R2 \
CROSS_COMPILE_MIPS64R6 \
; do
local v=$(eval echo \$$c)
[ -n "$v" ] && add_to_config $c="$v"
done
return 0
}
do_clean()
{
# same as in Makefile
rm -rf obj
}
do_config()
{
if [ -n "$SETUP_CONFIG_ALL" ]; then
CONF_DO_X86_32=1
CONF_DO_AMD64=1
#CONF_DO_MIPS=1
CONF_DO_ARM=1
CONF_DO_ARM64=1
CONF_DO_ARM_VIRT_PL2=1
CONF_DO_ARM_RPIZ=1
CONF_DO_ARM_RPI3=1
CONF_DO_ARM_RPI4=1
CONF_DO_ARM_IMX6UL_PL1=1
CONF_DO_ARM_IMX6UL_PL2=1
CONF_DO_ARM64_VIRT=1
CONF_DO_ARM64_RCAR3=1
CONF_DO_ARM64_RPI3=1
CONF_DO_ARM64_RPI4=1
CONF_DO_ARM64_RPI5=1
CONF_DO_ARM64_SBSA=1
CONF_DO_ARM64_S32G=1
CONF_DO_ARM64_ZYNQMP=1
#CONF_DO_MIPS32R2=1
#CONF_DO_MIPS32R6=1
#CONF_DO_MIPS64R2=1
#CONF_DO_MIPS64R6=1
CROSS_COMPILE_ARM=arm-linux-gnueabihf-
CROSS_COMPILE_ARM64=aarch64-linux-gnu-
CROSS_COMPILE_MIPS32R2=mips-linux-
CROSS_COMPILE_MIPS32R6=mips-linux-
CROSS_COMPILE_MIPS64R2=mips-linux-
CROSS_COMPILE_MIPS64R6=mips-linux-
write_config
return 0;
fi
if command -v dialog; then
tmpfile=`tempfile 2>/dev/null` || tmpfile=/tmp/test$$
trap "rm -f $tmpfile" 0 1 2 5 15
dialog \
--visit-items \
--begin 2 10 \
--infobox \
"The list of choices represents a popular set of target platforms. Many more are available." \
5 60 \
--and-widget --begin 9 10 \
--checklist "Select Targets to build:" 12 60 5 \
x86-32 "ia32" off \
amd64 "amd64/x86_64 " off \
arm "ARM (platform selection follows)" off \
arm64 "ARM64 / AARCH64" off \
mips "MIPS" off \
2> $tmpfile
#UX-32 " add Fiasco-UX-32 (selects x86-32)" off
result=$(cat $tmpfile)
if [ -z "$result" ]; then
echo
echo "ERROR: You did not select any platform."
echo "ERROR: Please do so by running 'make setup' again."
echo
exit 1
fi
for e in $result; do
# fixup for older dialogs
[ "${e#\"}" = "$e" ] && e="\"$e\""
case "$e" in
\"x86-32\") CONF_DO_X86_32=1 ;;
\"UX-32\") CONF_DO_UX=1; CONF_DO_X86_32=1 ;;
\"amd64\") CONF_DO_AMD64=1 ;;
\"mips\") CONF_DO_MIPS=1 ;;
\"arm\") CONF_DO_ARM=1 ;;
\"arm64\") CONF_DO_ARM64=1 ;;
esac
done
if [ -n "$CONF_DO_ARM" ]; then
dialog \
--visit-items \
--begin 2 10 \
--infobox \
"The list of choices represents a popular set of target platforms. Many more are available." \
5 60 \
--and-widget --begin 9 10 \
--checklist "Select ARM Targets to build:" 12 60 5 \
arm-virt-pl2 "QEMU Virt Platform" on \
arm-rpiz "Raspberry Pi Zero" off \
arm-rpi3 "Raspberry Pi 3" off \
arm-rpi5 "Raspberry Pi 5" off \
arm-imx6ul-pl1 "NXP i.MX6UL/ULL" off \
arm-imx6ul-pl2 "NXP i.MX6UL/ULL Virtualization" off \
2> $tmpfile
result=$(cat $tmpfile)
for e in $result; do
# fixup for older dialogs
[ "${e#\"}" = "$e" ] && e="\"$e\""
case "$e" in
\"arm-virt-pl2\") CONF_DO_ARM_VIRT_PL2=1 ;;
\"arm-rpiz\") CONF_DO_ARM_RPIZ=1 ;;
\"arm-rpi3\") CONF_DO_ARM_RPI3=1 ;;
\"arm-rpi4\") CONF_DO_ARM_RPI4=1 ;;
\"arm-imx6ul-pl1\") CONF_DO_ARM_IMX6UL_PL1=1 ;;
\"arm-imx6ul-pl2\") CONF_DO_ARM_IMX6UL_PL2=1 ;;
esac
done
fi
if [ -n "$CONF_DO_ARM64" ]; then
dialog \
--visit-items \
--begin 2 10 \
--infobox \
"The list of choices represents a popular set of target platforms. Many more are available." \
5 60 \
--and-widget --begin 9 10 \
--checklist "Select ARM Targets to build:" 11 60 4 \
arm64-virt "QEMU Virt Platform" on \
arm64-rpi3 "Raspberry Pi 3" off \
arm64-rpi4 "Raspberry Pi 4" off \
arm64-rpi5 "Raspberry Pi 5" off \
arm64-rcar3 "Renesas R-Car 3" off \
arm64-s32g "NXP S32G" off \
arm64-zynqmp "Xilinx ZynqMP" off \
2> $tmpfile
result=$(cat $tmpfile)
for e in $result; do
# fixup for older dialogs
[ "${e#\"}" = "$e" ] && e="\"$e\""
case "$e" in
\"arm64-virt\") CONF_DO_ARM64_VIRT=1 ;;
\"arm64-rcar3\") CONF_DO_ARM64_RCAR3=1 ;;
\"arm64-rpi3\") CONF_DO_ARM64_RPI3=1 ;;
\"arm64-rpi4\") CONF_DO_ARM64_RPI4=1 ;;
\"arm64-rpi5\") CONF_DO_ARM64_RPI5=1 ;;
\"arm64-sbsa\") CONF_DO_ARM64_SBSA=1 ;;
\"arm64-s32g\") CONF_DO_ARM64_S32G=1 ;;
\"arm64-zynqmp\") CONF_DO_ARM64_ZYNQMP=1 ;;
esac
done
fi
if [ -n "$CONF_DO_MIPS" ]; then
dialog \
--begin 2 10 \
--infobox \
"Please choose which MIPS little-endian variant to build." \
5 60 \
--and-widget --begin 9 10 \
--checklist "Select MIPS variant to build:" 11 60 4 \
mips32r2 "MIPS32r2" off \
mips32r6 "MIPS32r6" off \
mips64r2 "MIPS64r2" off \
mips64r6 "MIPS64r6" off \
2> $tmpfile
result=$(cat $tmpfile)
for e in $result; do
[ "${e#\"}" = "$e" ] && e="\"$e\""
case "$e" in
\"mips32r2\") CONF_DO_MIPS32R2=1 ;;
\"mips32r6\") CONF_DO_MIPS32R6=1 ;;
\"mips64r2\") CONF_DO_MIPS64R2=1 ;;
\"mips64r6\") CONF_DO_MIPS64R6=1 ;;
esac
done
fi
# query cross compiler prefix
#if [ -n "$CONF_DO_X86_32" -o -n "$CONF_DO_AMD64" ]; then
# dialog --no-mouse --visit-items \
# --inputbox "X86 (cross) compiler prefix (CROSS_COMPILE)" 8 70 "" \
# 2> $tmpfile
# CROSS_COMPILE_X86_32=$(cat $tmpfile)
# CROSS_COMPILE_AMD64=$(cat $tmpfile)
#fi
if [ -n "$CONF_DO_ARM" ]; then
dialog --no-mouse --visit-items \
--inputbox "ARM cross compiler prefix (CROSS_COMPILE)" 8 70 "arm-linux-gnueabihf-" \
2> $tmpfile
CROSS_COMPILE_ARM=$(cat $tmpfile)
fi
if [ -n "$CONF_DO_ARM64" ]; then
dialog --no-mouse --visit-items \
--inputbox "AARCH64 cross compiler prefix (CROSS_COMPILE)" 8 70 "aarch64-linux-gnu-" \
2> $tmpfile
CROSS_COMPILE_ARM64=$(cat $tmpfile)
fi
if [ -n "$CONF_DO_MIPS32R2" ]; then
dialog --no-mouse --visit-items \
--inputbox "MIPS el-32r2 cross compiler prefix (CROSS_COMPILE)" 8 70 "mips-linux-" \
2> $tmpfile
CROSS_COMPILE_MIPS32R2=$(cat $tmpfile)
fi
if [ -n "$CONF_DO_MIPS32R6" ]; then
dialog --no-mouse --visit-items \
--inputbox "MIPS el-32r6 cross compiler prefix (CROSS_COMPILE)" 8 70 "mips-linux-" \
2> $tmpfile
CROSS_COMPILE_MIPS32R6=$(cat $tmpfile)
fi
if [ -n "$CONF_DO_MIPS64R2" ]; then
dialog --no-mouse --visit-items \
--inputbox "MIPS el-64r2 cross compiler prefix (CROSS_COMPILE)" 8 70 "mips-linux-" \
2> $tmpfile
CROSS_COMPILE_MIPS64R2=$(cat $tmpfile)
fi
if [ -n "$CONF_DO_MIPS64R6" ]; then
dialog --no-mouse --visit-items \
--inputbox "MIPS el-64r6 cross compiler prefix (CROSS_COMPILE)" 8 70 "mips-linux-" \
2> $tmpfile
CROSS_COMPILE_MIPS64R6=$(cat $tmpfile)
fi
else
echo "'dialog' program not found,"
echo "press ENTER to continue and just build for x86-64"
echo "abort with Ctrl-C, install dialog and issue 'make setup' again."
read
CONF_DO_AMD64=1
fi
write_config
return 0;
}
###########################################################
check_build_tools()
{
if ! command -v make; then
echo "Please install the 'make' program."
exit 1;
fi
if [ ! -d src/l4 ]; then
echo "Not the right environment."
exit 1;
fi
cd src/l4 && make check_build_tools
}
load_config()
{
if [ ! -e obj/.config ]; then
echo "Configuration missing, not configured?!"
exit 1
fi
. obj/.config
}
redo_config()
{
if [ -n "$CONF_FAILED_ARM" ]; then
unset CONF_DO_ARM
add_to_config "unset CONF_DO_ARM"
unset CONF_DO_ARM_VIRT_PL2
unset CONF_DO_ARM_RPIZ
unset CONF_DO_ARM_RPI3
unset CONF_DO_ARM_RPI4
unset CONF_DO_ARM_IMX6UL_PL1
unset CONF_DO_ARM_IMX6UL_PL2
fi
if [ -n "$CONF_FAILED_UX" ]; then
unset CONF_DO_UX
add_to_config "unset CONF_DO_UX"
fi
if [ -n "$CONF_FAILED_AMD64" ]; then
unset CONF_DO_AMD64
add_to_config "unset CONF_DO_AMD64"
fi
if [ -n "$CONF_FAILED_MIPS32R2" ]; then
unset CONF_DO_MIPS32R2
add_to_config "unset CONF_DO_MIPS32R2"
fi
if [ -n "$CONF_FAILED_MIPS32R6" ]; then
unset CONF_DO_MIPS32R6
add_to_config "unset CONF_DO_MIPS32R6"
fi
if [ -n "$CONF_FAILED_MIPS64R2" ]; then
unset CONF_DO_MIPS64R2
add_to_config "unset CONF_DO_MIPS64R2"
fi
if [ -n "$CONF_FAILED_MIPS64R6" ]; then
unset CONF_DO_MIPS64R6
add_to_config "unset CONF_DO_MIPS64R6"
fi
}
check_cc()
{
if [ -n "$1" ]; then
if echo 'int main(void) { return 0; }' | $1 $2 -c -x c - -o /dev/null; then
return 0
fi
else
echo "Invalid compiler command given"
fi
return 1
}
check_eabi_gcc()
{
# probably half-hearted approach but well
[ -z "$1" ] && return 1
$1 -E -dD -x c /dev/null | grep -qw __ARM_EABI__
}
check_tool()
{
command -v $1 > /dev/null
if ! command -v $1 > /dev/null; then
return 1
fi
case "$1" in
*gcc|*g++)
check_cc "$1" "$2"
return $?
;;
make|*ld)
$1 -v > /dev/null 2>&1
return $?
;;
*cpp|*nm)
$1 --help > /dev/null 2>&1
return $?
;;
gawk)
$1 --help > /dev/null 2>&1
return $?
;;
perl)
$1 -V > /dev/null 2>&1
return $?
;;
doxygen)
doxygen | grep "Doxygen ver" > /dev/null 2>&1
return $?
;;
qemu-system-arm)
$1 -h > /dev/null 2>&1
return $?
;;
*)
echo "Unknown tool $1"
return 1
;;
esac
}
#exchange_kconfig_choice()
#{
# kconfigfile=$1
# disablesym=$2
# enablesym=$3
#
# perl -p -i \
# -e "s/$disablesym=y/# $disablesym is not set/; s/# $enablesym is not set/$enablesym=y/" \
# $kconfigfile
#}
#switch_to_kconfig_setup_arm()
#{
# exchange_kconfig_choice $1 CONFIG_PLATFORM_TYPE_rv $2
# exchange_kconfig_choice $1 CONFIG_CPU_ARM_ARMV5TE $3
#}
declare -A Makeconf_added_gen
declare -A Makeconf_added_qemu_std
add_gen()
{
if [ -z "${Makeconf_added_gen[$1]}" ]; then
#if [ -z "$REMOTE" ]; then
# echo "QEMU_OPTIONS += -vnc :4" >> $1
#fi
echo 'QEMU_OPTIONS += $(QEMU_OPTIONS-$(PLATFORM_TYPE))' >> $1
echo 'QEMU_OPTIONS += $(QEMU_OPTIONS-$(PLATFORM_TYPE)-$(PLATFORM_CFG))' >> $1
echo 'QEMU_OPTIONS += $(QEMU_OPTIONS-ENTRY-$(ENTRY))' >> $1
echo 'MODULE_SEARCH_PATH += $(MODULE_SEARCH_PATH-$(PLATFORM_TYPE))' >> $1
Makeconf_added_gen[$1]=1
fi
}
add_std_qemu_options()
{
if [ -z "${Makeconf_added_qemu_std[$1]}" ]; then
echo "QEMU_OPTIONS += -serial stdio" >> $1
Makeconf_added_qemu_std[$1]=1
fi
add_gen "$1"
}
add_nonx86_qemu_options()
{
add_gen "$1"
}
check_cross_tools()
{
name=$1
confvar=$2
confvarfailed=$3
cross_compile=$4
if [ -n "$confvar" ]; then
echo "Checking for needed cross programs and tools for $name"
tools_needed="${cross_compile}gcc ${cross_compile}cpp ${cross_compile}nm ${cross_compile}g++ ${cross_compile}ld"
unset failed
for t in $tools_needed; do
result="ok"
if ! check_tool $t; then
result="Not found or FAILED, disabling $name builds"
eval $confvarfailed=1
failed=1
fi
printf "%15s ... %s\n" $t "$result"
if [ -n "$failed" ]; then
break
fi
done
fi
}
check_tools()
{
# Generic tools
echo "Checking for needed programs and tools"
tools_needed="make ${CC} ${CXX} ld gawk perl"
for t in $tools_needed; do
result="ok"
if ! check_tool $t; then
result="NOT DETECTED"
command_missing="$command_missing $t"
fi
printf "%15s ... %s\n" $t "$result"
done
echo
if [ -n "$command_missing" ]; then
echo "Some command is missing on your system."
echo "Please install it before continuing with 'make setup':"
echo " $command_missing"
do_clean
exit 1
fi
if [ -n "$CONF_DO_AMD64" ]; then
if ! check_tool ${CC} -m64; then
echo "AMD64 build disabled as ${CC} does not support 64bit targets"
CONF_FAILED_AMD64=1
fi
fi
check_cross_tools "ARM" "$CONF_DO_ARM" CONF_FAILED_ARM "$CROSS_COMPILE_ARM"
check_cross_tools "ARM64" "$CONF_DO_ARM64" CONF_FAILED_ARM64 "$CROSS_COMPILE_ARM64"
check_cross_tools "MIPS32r2" "$CONF_DO_MIPS32R2" CONF_FAILED_MIPS32R2 "$CROSS_COMPILE_MIPS32R2"
check_cross_tools "MIPS32r6" "$CONF_DO_MIPS32R6" CONF_FAILED_MIPS32R6 "$CROSS_COMPILE_MIPS32R6"
check_cross_tools "MIPS64r2" "$CONF_DO_MIPS64R2" CONF_FAILED_MIPS64R2 "$CROSS_COMPILE_MIPS64R2"
check_cross_tools "MIPS64r6" "$CONF_DO_MIPS64R6" CONF_FAILED_MIPS64R6 "$CROSS_COMPILE_MIPS64R6"
if [ -n "$CONF_DO_UX" ]; then
echo "Checking some specific Fiasco-UX build thing on 64bit platforms"
if ! echo "#include <sys/cdefs.h>" | ${CC} -m32 -x c -c -o /dev/null - > /dev/null 2>&1; then
result="Failed, disabling Fiasco-UX builds"
CONF_FAILED_UX=1
else
result="ok"
fi
printf "%15s ... %s\n" "UX build" "$result"
fi
echo
# Optional tools
echo "Checking optional programs and tools"
tools_optional="doxygen"
[ "$CONF_DO_ARM" ] && tools_needed="$tools_needed qemu-system-arm"
for t in $tools_optional; do
result="ok"
if ! check_tool $t; then
result="NOT DETECTED but optional"
command_missing="$command_missing $t"
fi
printf "%15s ... %s\n" $t "$result"
done
echo
if [ -n "$command_missing" ]; then
echo "Some optional command is missing on your system, don't worry."
echo " $command_missing"
echo
fi
}
do_setup()
{
[ "$CONF_DO_X86_32" ] && fiasco_configs="$fiasco_configs ia32-1"
[ "$CONF_DO_X86_32" -a "$CONF_DO_UX" ] && fiasco_configs="$fiasco_configs ux-1"
[ "$CONF_DO_AMD64" ] && fiasco_configs="$fiasco_configs amd64-4"
[ "$CONF_DO_ARM_VIRT_PL2" ] && fiasco_configs="$fiasco_configs arm-virt-pl2"
[ "$CONF_DO_ARM_RPIZ" ] && fiasco_configs="$fiasco_configs arm-rpiz"
[ "$CONF_DO_ARM_RPI3" ] && fiasco_configs="$fiasco_configs arm-rpi3"
[ "$CONF_DO_ARM_RPI4" ] && fiasco_configs="$fiasco_configs arm-rpi4"
[ "$CONF_DO_ARM_IMX6UL_PL1" ] && fiasco_configs="$fiasco_configs arm-imx6ul"
[ "$CONF_DO_ARM_IMX6UL_PL2" ] && fiasco_configs="$fiasco_configs arm-imx6ul-pl2"
[ "$CONF_DO_ARM64_VIRT" ] && fiasco_configs="$fiasco_configs arm64-virt-el2 arm64-virt-el1-perf arm64-virt-el2-perf"
[ "$CONF_DO_ARM64_RCAR3" ] && fiasco_configs="$fiasco_configs arm64-rcar3"
[ "$CONF_DO_ARM64_RPI3" ] && fiasco_configs="$fiasco_configs arm64-rpi3 arm64-rpi3-perf"
[ "$CONF_DO_ARM64_RPI4" ] && fiasco_configs="$fiasco_configs arm64-rpi4 arm64-rpi4-el1-perf arm64-rpi4-el2-perf"
[ "$CONF_DO_ARM64_RPI5" ] && fiasco_configs="$fiasco_configs arm64-rpi5 arm64-rpi5-el1-perf arm64-rpi5-el2-perf"
[ "$CONF_DO_ARM64_SBSA" ] && fiasco_configs="$fiasco_configs arm64-sbsa"
[ "$CONF_DO_ARM64_S32G" ] && fiasco_configs="$fiasco_configs arm64-s32g arm64-s32g-el1-perf arm64-s32g-el2-perf"
[ "$CONF_DO_ARM64_ZYNQMP" ] && fiasco_configs="$fiasco_configs arm64-zynqmp"
[ "$CONF_DO_MIPS32R2" ] && fiasco_configs="$fiasco_configs mips-baikal-mp mips-malta-mp"
[ "$CONF_DO_MIPS32R6" ] && fiasco_configs="$fiasco_configs mips-malta-32r6-mp"
[ "$CONF_DO_MIPS64R2" ] && fiasco_configs="$fiasco_configs mips-malta-64r2-mp"
[ "$CONF_DO_MIPS64R6" ] && fiasco_configs="$fiasco_configs mips-malta-64r6-mp mips-boston-64r6-mp"
declare -A fiascodirs
fiascodirs[ia32-1]="ia32"
fiascodirs[ux-1]="ux"
fiascodirs[amd64-4]="amd64"
fiascodirs[arm64-virt-el1-perf]="arm64-virt-el1-perf"
fiascodirs[arm64-virt-el2]="arm64-virt-el2"
fiascodirs[arm64-virt-el2-perf]="arm64-virt-el2-perf"
fiascodirs[arm64-rcar3]="arm64-rcar3"
fiascodirs[arm64-rpi3]="arm64-rpi3"
fiascodirs[arm64-rpi3-perf]="arm64-rpi3-perf"
fiascodirs[arm64-rpi4]="arm64-rpi4"
fiascodirs[arm64-rpi4-el1-perf]="arm64-rpi4-el1-perf"
fiascodirs[arm64-rpi4-el2-perf]="arm64-rpi4-el2-perf"
fiascodirs[arm64-rpi5]="arm64-rpi5"
fiascodirs[arm64-rpi5-el1-perf]="arm64-rpi5-el1-perf"
fiascodirs[arm64-rpi5-el2-perf]="arm64-rpi5-el2-perf"
fiascodirs[arm64-sbsa]="arm64-sbsa"
fiascodirs[arm64-s32g]="arm64-s32g"
fiascodirs[arm64-s32g-el1-perf]="arm64-s32g-el1-perf"
fiascodirs[arm64-s32g-el2-perf]="arm64-s32g-el2-perf"
fiascodirs[arm64-zynqmp]="arm64-zynqmp"
fiascodirs[arm-virt-pl2]="arm-virt-pl2"
fiascodirs[arm-rpiz]="arm-rpiz"
fiascodirs[arm-rpi3]="arm-rpi3"
fiascodirs[arm-rpi4]="arm-rpi4"
fiascodirs[arm-imx6ul]="arm-imx6ul-pl1"
fiascodirs[arm-imx6ul-pl2]="arm-imx6ul-pl2"
fiascodirs[mips-malta-mp]="mips32-malta"
fiascodirs[mips-baikal-mp]="mips32-baikal-mp"
fiascodirs[mips-malta-32r6-mp]="mips-malta-32r6-mp"
fiascodirs[mips-malta-64r2-mp]="mips64r2-malta"
fiascodirs[mips-boston-64r6-mp]="mips-boston-64r6-mp"
fiascodirs[mips-malta-64r6-mp]="mips-malta-64r6-mp"
declare -A fiascocrosscomp
fiascocrosscomp[ia32-1]=$CROSS_COMPILE_X86_32
fiascocrosscomp[ux-1]=$CROSS_COMPILE_X86_32
fiascocrosscomp[amd64-4]=$CROSS_COMPILE_AMD64
fiascocrosscomp[arm64-virt-el1-perf]=$CROSS_COMPILE_ARM64
fiascocrosscomp[arm64-virt-el2]=$CROSS_COMPILE_ARM64
fiascocrosscomp[arm64-virt-el2-perf]=$CROSS_COMPILE_ARM64
fiascocrosscomp[arm64-rcar3]=$CROSS_COMPILE_ARM64
fiascocrosscomp[arm64-rpi3]=$CROSS_COMPILE_ARM64
fiascocrosscomp[arm64-rpi3-perf]=$CROSS_COMPILE_ARM64
fiascocrosscomp[arm64-rpi4]=$CROSS_COMPILE_ARM64
fiascocrosscomp[arm64-rpi4-el1-perf]=$CROSS_COMPILE_ARM64
fiascocrosscomp[arm64-rpi4-el2-perf]=$CROSS_COMPILE_ARM64
fiascocrosscomp[arm64-rpi5]=$CROSS_COMPILE_ARM64
fiascocrosscomp[arm64-rpi5-el1-perf]=$CROSS_COMPILE_ARM64
fiascocrosscomp[arm64-rpi5-el2-perf]=$CROSS_COMPILE_ARM64
fiascocrosscomp[arm64-sbsa]=$CROSS_COMPILE_ARM64
fiascocrosscomp[arm64-s32g]=$CROSS_COMPILE_ARM64
fiascocrosscomp[arm64-s32g-el1-perf]=$CROSS_COMPILE_ARM64
fiascocrosscomp[arm64-s32g-el2-perf]=$CROSS_COMPILE_ARM64
fiascocrosscomp[arm64-zynqmp]=$CROSS_COMPILE_ARM64
fiascocrosscomp[arm-virt-pl2]=$CROSS_COMPILE_ARM
fiascocrosscomp[arm-rpiz]=$CROSS_COMPILE_ARM
fiascocrosscomp[arm-rpi3]=$CROSS_COMPILE_ARM
fiascocrosscomp[arm-rpi4]=$CROSS_COMPILE_ARM
fiascocrosscomp[arm-imx6ul]=$CROSS_COMPILE_ARM
fiascocrosscomp[arm-imx6ul-pl2]=$CROSS_COMPILE_ARM
fiascocrosscomp[mips-malta-mp]=$CROSS_COMPILE_MIPS32R2
fiascocrosscomp[mips-baikal-mp]=$CROSS_COMPILE_MIPS32R2
fiascocrosscomp[mips-malta-32r6-mp]=$CROSS_COMPILE_MIPS32R6
fiascocrosscomp[mips-malta-64r2-mp]=$CROSS_COMPILE_MIPS64R2
fiascocrosscomp[mips-boston-64r6-mp]=$CROSS_COMPILE_MIPS64R6
fiascocrosscomp[mips-malta-64r6-mp]=$CROSS_COMPILE_MIPS64R6
echo "Creating build directories..."
mkdir -p obj/fiasco
mkdir -p obj/l4
mkdir -p obj/l4linux
[ -e src/l4linux ] && l4lx_avail=1
# Fiasco build dirs
for b in $fiasco_configs; do
echo ${fiascodirs[$b]} "->" $b
if [ -z "${fiascodirs[$b]}" ]; then
echo "Internal error: No directory given for config '$b'"
exit 1
fi
if [ -z "${fiascocrosscomp[$b]}" -a ! "$b" = ia32-1 -a ! "$b" = ux-1 -a ! "$b" = amd64-4 ]; then
echo "Internal error: No cross compiler given for config '$b'"
exit 1
fi
(cd src/fiasco && make CROSS_COMPILE=${fiascocrosscomp[$b]} B=../../obj/fiasco/${fiascodirs[$b]} T=$b)
echo CROSS_COMPILE=${fiascocrosscomp[$b]} >> obj/fiasco/${fiascodirs[$b]}/Makeconf.local
done
# some config tweaking
if [ "$CONF_DO_MIPS32R2" ]; then
echo '# CONFIG_MP is not set' >> obj/fiasco/mips32-malta/globalconfig.out
fi
# L4Re build dirs with default configs
[ "$CONF_DO_X86_32" ] \
&& make -C src/l4 DEFCONFIG=mk/defconfig/config.x86 B=../../obj/l4/x86
[ "$CONF_DO_AMD64" ] \
&& make -C src/l4 DEFCONFIG=mk/defconfig/config.amd64 B=../../obj/l4/amd64
if [ "$CONF_DO_ARM" ]; then
make -C src/l4 CROSS_COMPILE=$CROSS_COMPILE_ARM \
DEFCONFIG=mk/defconfig/config.arm-rv-v7a B=../../obj/l4/arm-v7
make -C obj/l4/arm-v7 CROSS_COMPILE=$CROSS_COMPILE_ARM oldconfig
ARM_L4_DIR_FOR_LX_MP=obj/l4/arm-v7
echo CROSS_COMPILE=$CROSS_COMPILE_ARM >> obj/l4/arm-v7/Makeconf.local
fi
if [ "$CONF_DO_ARM64" ]; then
make -C src/l4 CROSS_COMPILE=$CROSS_COMPILE_ARM64 DEFCONFIG=mk/defconfig/config.arm64-rv-v8a B=../../obj/l4/arm64
fi
if [ "$CONF_DO_MIPS32R2" ]; then
cp src/l4/mk/defconfig/config.mips .tmp1
echo CONFIG_PLATFORM_TYPE_malta=y >> .tmp1
echo CONFIG_CPU_MIPS_32R2=y >> .tmp1
make -C src/l4 DEFCONFIG=../../.tmp1 \
CROSS_COMPILE=$CROSS_COMPILE_MIPS32R2 B=../../obj/l4/mips32r2
rm .tmp1
echo CROSS_COMPILE=$CROSS_COMPILE_MIPS32R2 >> obj/l4/mips32r2/Makeconf.local
fi
if [ "$CONF_DO_MIPS32R6" ]; then
cp src/l4/mk/defconfig/config.mips .tmp1
echo CONFIG_PLATFORM_TYPE_malta=y >> .tmp1
echo CONFIG_CPU_MIPS_32R6=y >> .tmp1
make -C src/l4 DEFCONFIG=../../.tmp1 \
CROSS_COMPILE=$CROSS_COMPILE_MIPS32R6 B=../../obj/l4/mips32r6
rm .tmp1
echo CROSS_COMPILE=$CROSS_COMPILE_MIPS32R6 >> obj/l4/mips32r6/Makeconf.local
fi
if [ "$CONF_DO_MIPS64R2" ]; then
cp src/l4/mk/defconfig/config.mips .tmp1
echo CONFIG_PLATFORM_TYPE_malta=y >> .tmp1
echo CONFIG_CPU_MIPS_64R2=y >> .tmp1
make -C src/l4 DEFCONFIG=../../.tmp1 \
CROSS_COMPILE=$CROSS_COMPILE_MIPS64R2 B=../../obj/l4/mips64r2
rm .tmp1
echo CROSS_COMPILE=$CROSS_COMPILE_MIPS64R2 >> obj/l4/mips64r2/Makeconf.local
fi
if [ "$CONF_DO_MIPS64R6" ]; then
cp src/l4/mk/defconfig/config.mips .tmp1
echo CONFIG_PLATFORM_TYPE_boston=y >> .tmp1
echo CONFIG_CPU_MIPS_64R6=y >> .tmp1
make -C src/l4 DEFCONFIG=../../.tmp1 \
CROSS_COMPILE=$CROSS_COMPILE_MIPS64R6 B=../../obj/l4/mips64r6
rm .tmp1
echo CROSS_COMPILE=$CROSS_COMPILE_MIPS64R6 >> obj/l4/mips64r6/Makeconf.local
fi
# L4Linux build setup
if [ "$CONF_DO_X86_32" -a -n "$l4lx_avail" ]; then
mkdir -p obj/l4linux/ux
fi
if [ "$CONF_DO_AMD64" -a -n "$l4lx_avail" ]; then
mkdir -p obj/l4linux/amd64
fi
if [ "$CONF_DO_ARM64" -a -n "$l4lx_avail" ]; then
mkdir -p obj/l4linux/arm64
fi
[ -z "$ARM_L4_DIR_FOR_LX_UP" ] && ARM_L4_DIR_FOR_LX_UP=$ARM_L4_DIR_FOR_LX_MP
if [ -n "$ARM_L4_DIR_FOR_LX_UP" -a -n "$l4lx_avail" ]; then
mkdir -p obj/l4linux/arm-up
if [ "$ARM_L4_DIR_FOR_LX_MP" ]; then
mkdir -p obj/l4linux/arm-mp
fi
if ! check_eabi_gcc ${CROSS_COMPILE_ARM}gcc; then
echo "WARNING: L4Linux has been disabled due to a detected old OABI compiler"
echo "WARNING: Please update your compiler to an EABI version"
add_to_config SKIP_L4LINUX_ARM_BUILD=1
fi
fi
common_paths=$(pwd)/files:$(pwd)/files/cfg:$(pwd)/src/l4/conf:$(pwd)/src/l4/conf/examples
if [ "$CONF_DO_X86_32" ]; then
local odir=obj/l4/x86
local Mboot=$odir/conf/Makeconf.boot
mkdir -p $odir/conf
cat<<EOF >> obj/l4/x86/conf/Makeconf.boot
MODULE_SEARCH_PATH=$(pwd)/obj/fiasco/ia32:$(pwd)/obj/l4linux/ux:$common_paths
EOF
add_std_qemu_options obj/l4/x86/conf/Makeconf.boot
echo "ENTRY=hello" >> $odir/.imagebuilds
echo "ENTRY=hello-cfg" >> $odir/.imagebuilds
echo "ENTRY=hello-2" >> $odir/.imagebuilds
echo "ENTRY=hello-shared" >> $odir/.imagebuilds
echo "ENTRY=framebuffer-example" >> $odir/.imagebuilds
if [ -n "$l4lx_avail" ]; then
echo "ENTRY=L4Linux-basic" >> $odir/.imagebuilds
echo "ENTRY=L4Linux-mag" >> $odir/.imagebuilds
fi
fi
if [ "$CONF_DO_AMD64" ]; then
local odir=obj/l4/amd64
local Mboot=$odir/conf/Makeconf.boot
mkdir -p $odir/conf
cat<<EOF >> obj/l4/amd64/conf/Makeconf.boot
MODULE_SEARCH_PATH=$(pwd)/obj/fiasco/amd64:$(pwd)/obj/l4linux/amd64:$common_paths
QEMU_OPTIONS += -m 1024
QEMU_OPTIONS-ENTRY-vm-basic += -enable-kvm -M q35 -cpu host,vmx=on
QEMU_OPTIONS-ENTRY-vm-basic-pci += -enable-kvm -M q35 -cpu host,vmx=on -device intel-iommu,intremap=on -M kernel_irqchip=split
QEMU_OPTIONS-ENTRY-vm-multi += -enable-kvm -M q35 -cpu host,vmx=on
QEMU_OPTIONS-ENTRY-vm-multi-p2p += -enable-kvm -M q35 -cpu host,vmx=on
EOF
add_std_qemu_options obj/l4/amd64/conf/Makeconf.boot
echo "ENTRY=hello" >> $odir/.imagebuilds
echo "ENTRY=hello-cfg" >> $odir/.imagebuilds
echo "ENTRY=hello-2" >> $odir/.imagebuilds
echo "ENTRY=hello-shared" >> $odir/.imagebuilds
echo "ENTRY=ipcbench" >> $odir/.imagebuilds
echo "ENTRY=framebuffer-example" >> $odir/.imagebuilds
echo "ENTRY=vm-basic" >> $odir/.imagebuilds
echo "ENTRY=vm-basic-pci" >> $odir/.imagebuilds
echo "ENTRY=vm-multi" >> $odir/.imagebuilds
echo "ENTRY=vm-multi-p2p" >> $odir/.imagebuilds
if [ -n "$l4lx_avail" ]; then
echo "ENTRY=L4Linux-basic" >> $odir/.imagebuilds
echo "ENTRY=L4Linux-mag" >> $odir/.imagebuilds
fi
fi
if [ "$CONF_DO_ARM" ]; then
local odir=obj/l4/arm-v7
local Mboot=$odir/conf/Makeconf.boot
mkdir -p $odir/conf
echo "MODULE_SEARCH_PATH+=\$(PATH_FIASCO):$(pwd)/obj/l4linux/arm-mp:$common_paths" >> $Mboot
if [ "$CONF_DO_ARM_VIRT_PL2" ]; then
cat<<EOF >> $Mboot
QEMU_OPTIONS-arm_virt += -M virt,virtualization=true -m 1024 -cpu cortex-a15 -smp 3
EOF
echo "ENTRY=hello BOOTSTRAP_IMAGE_SUFFIX=arm_virt PT=arm_virt PATH_FIASCO=$(pwd)/obj/fiasco/arm-virt-pl2" >> $odir/.imagebuilds
echo "ENTRY=hello-shared BOOTSTRAP_IMAGE_SUFFIX=arm_virt PT=arm_virt PATH_FIASCO=$(pwd)/obj/fiasco/arm-virt-pl2" >> $odir/.imagebuilds
echo "ENTRY=hello-cfg BOOTSTRAP_IMAGE_SUFFIX=arm_virt PT=arm_virt PATH_FIASCO=$(pwd)/obj/fiasco/arm-virt-pl2" >> $odir/.imagebuilds
echo "ENTRY=hello-2 BOOTSTRAP_IMAGE_SUFFIX=arm_virt PT=arm_virt PATH_FIASCO=$(pwd)/obj/fiasco/arm-virt-pl2" >> $odir/.imagebuilds
echo "ENTRY=vm-basic BOOTSTRAP_IMAGE_SUFFIX=arm_virt PT=arm_virt PATH_FIASCO=$(pwd)/obj/fiasco/arm-virt-pl2" >> $odir/.imagebuilds
echo "ENTRY=vm-multi BOOTSTRAP_IMAGE_SUFFIX=arm_virt PT=arm_virt PATH_FIASCO=$(pwd)/obj/fiasco/arm-virt-pl2" >> $odir/.imagebuilds
echo "ENTRY=vm-multi-p2p BOOTSTRAP_IMAGE_SUFFIX=arm_virt PT=arm_virt PATH_FIASCO=$(pwd)/obj/fiasco/arm-virt-pl2" >> $odir/.imagebuilds
if [ -n "$l4lx_avail" ]; then
echo "ENTRY=L4Linux-basic BOOTSTRAP_IMAGE_SUFFIX=arm_virt PT=arm_virt PATH_FIASCO=$(pwd)/obj/fiasco/arm-virt-pl2" >> $odir/.imagebuilds
fi
fi
if [ "$CONF_DO_ARM_RPIZ" ]; then
echo "ENTRY=hello BOOTSTRAP_IMAGE_SUFFIX=rpiz PT=rpi PATH_FIASCO=$(pwd)/obj/fiasco/arm-rpiz" >> $odir/.imagebuilds
echo "ENTRY=hello-cfg BOOTSTRAP_IMAGE_SUFFIX=rpiz PT=rpi PATH_FIASCO=$(pwd)/obj/fiasco/arm-rpiz" >> $odir/.imagebuilds
echo "ENTRY=hello-2 BOOTSTRAP_IMAGE_SUFFIX=rpiz PT=rpi PATH_FIASCO=$(pwd)/obj/fiasco/arm-rpiz" >> $odir/.imagebuilds
echo "ENTRY=hello-shared BOOTSTRAP_IMAGE_SUFFIX=rpiz PT=rpi PATH_FIASCO=$(pwd)/obj/fiasco/arm-rpiz" >> $odir/.imagebuilds
if [ -n "$l4lx_avail" ]; then
echo "ENTRY=L4Linux-basic BOOTSTRAP_IMAGE_SUFFIX=rpi PT=rpi PATH_FIASCO=$(pwd)/obj/fiasco/arm-rpiz" >> $odir/.imagebuilds
fi
fi
if [ "$CONF_DO_ARM_RPI3" ]; then
echo "ENTRY=hello BOOTSTRAP_IMAGE_SUFFIX=rpi3 PT=rpi PATH_FIASCO=$(pwd)/obj/fiasco/arm-rpi3" >> $odir/.imagebuilds
echo "ENTRY=hello-cfg BOOTSTRAP_IMAGE_SUFFIX=rpi3 PT=rpi PATH_FIASCO=$(pwd)/obj/fiasco/arm-rpi3" >> $odir/.imagebuilds
echo "ENTRY=hello-2 BOOTSTRAP_IMAGE_SUFFIX=rpi3 PT=rpi PATH_FIASCO=$(pwd)/obj/fiasco/arm-rpi3" >> $odir/.imagebuilds
echo "ENTRY=hello-shared BOOTSTRAP_IMAGE_SUFFIX=rpi3 PT=rpi PATH_FIASCO=$(pwd)/obj/fiasco/arm-rpi3" >> $odir/.imagebuilds
if [ -n "$l4lx_avail" ]; then
echo "ENTRY=L4Linux-basic BOOTSTRAP_IMAGE_SUFFIX=rpi3 PT=rpi PATH_FIASCO=$(pwd)/obj/fiasco/arm-rpi3" >> $odir/.imagebuilds
fi
fi
if [ "$CONF_DO_ARM_RPI4" ]; then
echo "ENTRY=hello BOOTSTRAP_IMAGE_SUFFIX=rpi4 PT=rpi PATH_FIASCO=$(pwd)/obj/fiasco/arm-rpi4" >> $odir/.imagebuilds
echo "ENTRY=hello-cfg BOOTSTRAP_IMAGE_SUFFIX=rpi4 PT=rpi PATH_FIASCO=$(pwd)/obj/fiasco/arm-rpi4" >> $odir/.imagebuilds
echo "ENTRY=hello-2 BOOTSTRAP_IMAGE_SUFFIX=rpi4 PT=rpi PATH_FIASCO=$(pwd)/obj/fiasco/arm-rpi4" >> $odir/.imagebuilds
echo "ENTRY=hello-shared BOOTSTRAP_IMAGE_SUFFIX=rpi4 PT=rpi PATH_FIASCO=$(pwd)/obj/fiasco/arm-rpi4" >> $odir/.imagebuilds
echo "ENTRY=vm-basic BOOTSTRAP_IMAGE_SUFFIX=rpi4 PT=rpi PATH_FIASCO=$(pwd)/obj/fiasco/arm-rpi4" >> $odir/.imagebuilds
echo "ENTRY=vm-multi BOOTSTRAP_IMAGE_SUFFIX=rpi4 PT=rpi PATH_FIASCO=$(pwd)/obj/fiasco/arm-rpi4" >> $odir/.imagebuilds
echo "ENTRY=vm-multi-p2p BOOTSTRAP_IMAGE_SUFFIX=rpi4 PT=rpi PATH_FIASCO=$(pwd)/obj/fiasco/arm-rpi4" >> $odir/.imagebuilds
if [ -n "$l4lx_avail" ]; then
echo "ENTRY=L4Linux-basic BOOTSTRAP_IMAGE_SUFFIX=rpi4 PT=rpi PATH_FIASCO=$(pwd)/obj/fiasco/arm-rpi4" >> $odir/.imagebuilds
fi
fi
if [ "$CONF_DO_ARM_IMX6UL_PL1" ]; then
echo "ENTRY=hello BOOTSTRAP_IMAGE_SUFFIX=imx6ul-pl1 PT=imx6ul PATH_FIASCO=$(pwd)/obj/fiasco/arm-imx6ul-pl1" >> $odir/.imagebuilds
echo "ENTRY=hello-cfg BOOTSTRAP_IMAGE_SUFFIX=imx6ul-pl1 PT=imx6ul PATH_FIASCO=$(pwd)/obj/fiasco/arm-imx6ul-pl1" >> $odir/.imagebuilds
echo "ENTRY=hello-2 BOOTSTRAP_IMAGE_SUFFIX=imx6ul-pl1 PT=imx6ul PATH_FIASCO=$(pwd)/obj/fiasco/arm-imx6ul-pl1" >> $odir/.imagebuilds
echo "ENTRY=hello-shared BOOTSTRAP_IMAGE_SUFFIX=imx6ul-pl1 PT=imx6ul PATH_FIASCO=$(pwd)/obj/fiasco/arm-imx6ul-pl1" >> $odir/.imagebuilds
if [ -n "$l4lx_avail" ]; then
echo "ENTRY=L4Linux-basic BOOTSTRAP_IMAGE_SUFFIX=imx6ul-pl1 PT=imx6ul PATH_FIASCO=$(pwd)/obj/fiasco/arm-imx6ul-pl1" >> $odir/.imagebuilds
fi
fi
if [ "$CONF_DO_ARM_IMX6UL_PL2" ]; then
echo "ENTRY=hello BOOTSTRAP_IMAGE_SUFFIX=imx6ul-pl2 PT=imx6ul PATH_FIASCO=$(pwd)/obj/fiasco/arm-imx6ul-pl2" >> $odir/.imagebuilds
echo "ENTRY=hello-cfg BOOTSTRAP_IMAGE_SUFFIX=imx6ul-pl2 PT=imx6ul PATH_FIASCO=$(pwd)/obj/fiasco/arm-imx6ul-pl2" >> $odir/.imagebuilds
echo "ENTRY=hello-2 BOOTSTRAP_IMAGE_SUFFIX=imx6ul-pl2 PT=imx6ul PATH_FIASCO=$(pwd)/obj/fiasco/arm-imx6ul-pl2" >> $odir/.imagebuilds
echo "ENTRY=hello-shared BOOTSTRAP_IMAGE_SUFFIX=imx6ul-pl2 PT=imx6ul PATH_FIASCO=$(pwd)/obj/fiasco/arm-imx6ul-pl2" >> $odir/.imagebuilds
echo "ENTRY=vm-basic BOOTSTRAP_IMAGE_SUFFIX=imx6ul-pl2 PT=imx6ul PATH_FIASCO=$(pwd)/obj/fiasco/arm-imx6ul-pl2" >> $odir/.imagebuilds
echo "ENTRY=vm-multi BOOTSTRAP_IMAGE_SUFFIX=imx6ul-pl2 PT=imx6ul PATH_FIASCO=$(pwd)/obj/fiasco/arm-imx6ul-pl2" >> $odir/.imagebuilds
echo "ENTRY=vm-multi-p2p BOOTSTRAP_IMAGE_SUFFIX=imx6ul-pl2 PT=imx6ul PATH_FIASCO=$(pwd)/obj/fiasco/arm-imx6ul-pl2" >> $odir/.imagebuilds
if [ -n "$l4lx_avail" ]; then
echo "ENTRY=L4Linux-basic BOOTSTRAP_IMAGE_SUFFIX=imx6ul-pl2 PT=imx6ul PATH_FIASCO=$(pwd)/obj/fiasco/arm-imx6ul-pl2" >> $odir/.imagebuilds
fi
fi
add_std_qemu_options $Mboot
add_nonx86_qemu_options $Mboot
fi # ARM
if [ "$CONF_DO_ARM64" ]; then
local odir=obj/l4/arm64
local Mboot=$odir/conf/Makeconf.boot
mkdir -p $odir/conf
echo "MODULE_SEARCH_PATH+=\$(PATH_FIASCO):$(pwd)/obj/l4linux/arm64:$common_paths" >> $Mboot
if [ "$CONF_DO_ARM64_VIRT" ]; then
cat<<EOF >> $Mboot
QEMU_OPTIONS-arm_virt-el1 += -M virt,virtualization=false -m 1024 -cpu cortex-a57 -smp 3
QEMU_OPTIONS-arm_virt-el2 += -M virt,virtualization=true -m 1024 -cpu cortex-a57 -smp 3
EOF
echo "ENTRY=hello TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=arm_virt PT=arm_virt PLATFORM_CFG=el2 PATH_FIASCO=$(pwd)/obj/fiasco/arm64-virt-el2" >> $odir/.imagebuilds
echo "ENTRY=hello-cfg TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=arm_virt PT=arm_virt PLATFORM_CFG=el2 PATH_FIASCO=$(pwd)/obj/fiasco/arm64-virt-el2" >> $odir/.imagebuilds
echo "ENTRY=hello-2 TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=arm_virt PT=arm_virt PLATFORM_CFG=el2 PATH_FIASCO=$(pwd)/obj/fiasco/arm64-virt-el2" >> $odir/.imagebuilds
echo "ENTRY=hello-shared TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=arm_virt PT=arm_virt PLATFORM_CFG=el2 PATH_FIASCO=$(pwd)/obj/fiasco/arm64-virt-el2" >> $odir/.imagebuilds
echo "ENTRY=ipcbench TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=arm_virt-el1 PT=arm_virt PLATFORM_CFG=el1 PATH_FIASCO=$(pwd)/obj/fiasco/arm64-virt-el1-perf" >> $odir/.imagebuilds
echo "ENTRY=ipcbench TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=arm_virt-el2 PT=arm_virt PLATFORM_CFG=el2 PATH_FIASCO=$(pwd)/obj/fiasco/arm64-virt-el2-perf" >> $odir/.imagebuilds
echo "ENTRY=vm-basic TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=arm_virt PT=arm_virt PLATFORM_CFG=el2 PATH_FIASCO=$(pwd)/obj/fiasco/arm64-virt-el2" >> $odir/.imagebuilds
echo "ENTRY=vm-multi TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=arm_virt PT=arm_virt PLATFORM_CFG=el2 PATH_FIASCO=$(pwd)/obj/fiasco/arm64-virt-el2" >> $odir/.imagebuilds
echo "ENTRY=vm-multi-p2p TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=arm_virt PT=arm_virt PLATFORM_CFG=el2 PATH_FIASCO=$(pwd)/obj/fiasco/arm64-virt-el2" >> $odir/.imagebuilds
if [ -n "$l4lx_avail" ]; then
echo "ENTRY=L4Linux-basic TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=arm_virt PT=arm_virt PLATFORM_CFG=el2 PATH_FIASCO=$(pwd)/obj/fiasco/arm64-virt-el2" >> $odir/.imagebuilds
fi
fi
if [ "$CONF_DO_ARM64_RCAR3" ]; then
echo "ENTRY=hello TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=rcar3 PT=rcar3 PATH_FIASCO=$(pwd)/obj/fiasco/arm64-rcar3" >> $odir/.imagebuilds
echo "ENTRY=hello-cfg TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=rcar3 PT=rcar3 PATH_FIASCO=$(pwd)/obj/fiasco/arm64-rcar3" >> $odir/.imagebuilds
echo "ENTRY=hello-2 TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=rcar3 PT=rcar3 PATH_FIASCO=$(pwd)/obj/fiasco/arm64-rcar3" >> $odir/.imagebuilds
echo "ENTRY=hello-shared TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=rcar3 PT=rcar3 PATH_FIASCO=$(pwd)/obj/fiasco/arm64-rcar3" >> $odir/.imagebuilds
echo "ENTRY=vm-basic TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=rcar3 PT=rcar3 PATH_FIASCO=$(pwd)/obj/fiasco/arm64-rcar3" >> $odir/.imagebuilds
echo "ENTRY=vm-multi TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=rcar3 PT=rcar3 PATH_FIASCO=$(pwd)/obj/fiasco/arm64-rcar3" >> $odir/.imagebuilds
echo "ENTRY=vm-multi-p2p TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=rcar3 PT=rcar3 PATH_FIASCO=$(pwd)/obj/fiasco/arm64-rcar3" >> $odir/.imagebuilds
fi
if [ "$CONF_DO_ARM64_RPI3" ]; then
echo "ENTRY=hello TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=rpi3 PT=rpi PATH_FIASCO=$(pwd)/obj/fiasco/arm64-rpi3" >> $odir/.imagebuilds
echo "ENTRY=hello-cfg TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=rpi3 PT=rpi PATH_FIASCO=$(pwd)/obj/fiasco/arm64-rpi3" >> $odir/.imagebuilds
echo "ENTRY=hello-2 TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=rpi3 PT=rpi PATH_FIASCO=$(pwd)/obj/fiasco/arm64-rpi3" >> $odir/.imagebuilds
echo "ENTRY=hello-shared TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=rpi3 PT=rpi PATH_FIASCO=$(pwd)/obj/fiasco/arm64-rpi3" >> $odir/.imagebuilds
echo "ENTRY=ipcbench TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=rpi3 PT=rpi PATH_FIASCO=$(pwd)/obj/fiasco/arm64-rpi3-perf" >> $odir/.imagebuilds
fi
if [ "$CONF_DO_ARM64_RPI4" ]; then
echo "ENTRY=hello TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=rpi4 PT=rpi PATH_FIASCO=$(pwd)/obj/fiasco/arm64-rpi4" >> $odir/.imagebuilds
echo "ENTRY=hello-cfg TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=rpi4 PT=rpi PATH_FIASCO=$(pwd)/obj/fiasco/arm64-rpi4" >> $odir/.imagebuilds
echo "ENTRY=hello-2 TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=rpi4 PT=rpi PATH_FIASCO=$(pwd)/obj/fiasco/arm64-rpi4" >> $odir/.imagebuilds
echo "ENTRY=hello-shared TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=rpi4 PT=rpi PATH_FIASCO=$(pwd)/obj/fiasco/arm64-rpi4" >> $odir/.imagebuilds
echo "ENTRY=ipcbench TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=rpi4-el1 PT=rpi PATH_FIASCO=$(pwd)/obj/fiasco/arm64-rpi4-el1-perf" >> $odir/.imagebuilds
echo "ENTRY=ipcbench TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=rpi4-el2 PT=rpi PATH_FIASCO=$(pwd)/obj/fiasco/arm64-rpi4-el2-perf" >> $odir/.imagebuilds
echo "ENTRY=vm-basic TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=rpi4 PT=rpi PATH_FIASCO=$(pwd)/obj/fiasco/arm64-rpi4" >> $odir/.imagebuilds
echo "ENTRY=vm-multi TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=rpi4 PT=rpi PATH_FIASCO=$(pwd)/obj/fiasco/arm64-rpi4" >> $odir/.imagebuilds
echo "ENTRY=vm-multi-p2p TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=rpi4 PT=rpi PATH_FIASCO=$(pwd)/obj/fiasco/arm64-rpi4" >> $odir/.imagebuilds
fi
if [ "$CONF_DO_ARM64_RPI5" ]; then
echo "ENTRY=hello TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=rpi5 PT=rpi PATH_FIASCO=$(pwd)/obj/fiasco/arm64-rpi5" >> $odir/.imagebuilds
echo "ENTRY=hello-cfg TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=rpi5 PT=rpi PATH_FIASCO=$(pwd)/obj/fiasco/arm64-rpi5" >> $odir/.imagebuilds
echo "ENTRY=hello-2 TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=rpi5 PT=rpi PATH_FIASCO=$(pwd)/obj/fiasco/arm64-rpi5" >> $odir/.imagebuilds
echo "ENTRY=hello-shared TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=rpi5 PT=rpi PATH_FIASCO=$(pwd)/obj/fiasco/arm64-rpi5" >> $odir/.imagebuilds
echo "ENTRY=ipcbench TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=rpi5-el1 PT=rpi PATH_FIASCO=$(pwd)/obj/fiasco/arm64-rpi5-el1-perf" >> $odir/.imagebuilds
echo "ENTRY=ipcbench TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=rpi5-el2 PT=rpi PATH_FIASCO=$(pwd)/obj/fiasco/arm64-rpi5-el2-perf" >> $odir/.imagebuilds
echo "ENTRY=vm-basic TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=rpi5 PT=rpi PATH_FIASCO=$(pwd)/obj/fiasco/arm64-rpi5" >> $odir/.imagebuilds
echo "ENTRY=vm-multi TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=rpi5 PT=rpi PATH_FIASCO=$(pwd)/obj/fiasco/arm64-rpi5" >> $odir/.imagebuilds
echo "ENTRY=vm-multi-p2p TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=rpi5 PT=rpi PATH_FIASCO=$(pwd)/obj/fiasco/arm64-rpi5" >> $odir/.imagebuilds
fi
if [ "$CONF_DO_ARM64_SBSA" ]; then
cat<<EOF >> $Mboot
QEMU_OPTIONS-arm_sbsa += -M virt,virtualization=on,gic-version=3,iommu=smmuv3 -cpu neoverse-n2,pauth=off,sve=off -bios /usr/share/qemu-efi-aarch64/QEMU_EFI.fd -net nic,model=e1000e -net user
EOF
echo "ENTRY=hello TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=sbsa PT=arm_sbsa PATH_FIASCO=$(pwd)/obj/fiasco/arm64-sbsa" >> $odir/.imagebuilds
echo "ENTRY=hello-cfg TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=sbsa PT=arm_sbsa PATH_FIASCO=$(pwd)/obj/fiasco/arm64-sbsa" >> $odir/.imagebuilds
echo "ENTRY=hello-2 TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=sbsa PT=arm_sbsa PATH_FIASCO=$(pwd)/obj/fiasco/arm64-sbsa" >> $odir/.imagebuilds
echo "ENTRY=hello-shared TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=sbsa PT=arm_sbsa PATH_FIASCO=$(pwd)/obj/fiasco/arm64-sbsa" >> $odir/.imagebuilds
echo "ENTRY=ipcbench TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=sbsa PT=arm_sbsa PATH_FIASCO=$(pwd)/obj/fiasco/arm64-sbsa" >> $odir/.imagebuilds
echo "ENTRY=vm-basic TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=sbsa PT=arm_sbsa PATH_FIASCO=$(pwd)/obj/fiasco/arm64-sbsa" >> $odir/.imagebuilds
echo "ENTRY=vm-multi TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=sbsa PT=arm_sbsa PATH_FIASCO=$(pwd)/obj/fiasco/arm64-sbsa" >> $odir/.imagebuilds
echo "ENTRY=vm-multi-p2p TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=sbsa PT=arm_sbsa PATH_FIASCO=$(pwd)/obj/fiasco/arm64-sbsa" >> $odir/.imagebuilds
fi
if [ "$CONF_DO_ARM64_S32G" ]; then
echo "ENTRY=hello TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=s32g PT=s32g PATH_FIASCO=$(pwd)/obj/fiasco/arm64-s32g" >> $odir/.imagebuilds
echo "ENTRY=hello-cfg TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=s32g PT=s32g PATH_FIASCO=$(pwd)/obj/fiasco/arm64-s32g" >> $odir/.imagebuilds
echo "ENTRY=hello-2 TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=s32g PT=s32g PATH_FIASCO=$(pwd)/obj/fiasco/arm64-s32g" >> $odir/.imagebuilds
echo "ENTRY=hello-shared TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=s32g PT=s32g PATH_FIASCO=$(pwd)/obj/fiasco/arm64-s32g" >> $odir/.imagebuilds
echo "ENTRY=ipcbench TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=s32g-el1 PT=s32g PATH_FIASCO=$(pwd)/obj/fiasco/arm64-s32g-el1-perf" >> $odir/.imagebuilds
echo "ENTRY=ipcbench TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=s32g-el2 PT=s32g PATH_FIASCO=$(pwd)/obj/fiasco/arm64-s32g-el2-perf" >> $odir/.imagebuilds
echo "ENTRY=vm-basic TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=s32g PT=s32g PATH_FIASCO=$(pwd)/obj/fiasco/arm64-s32g" >> $odir/.imagebuilds
echo "ENTRY=vm-multi TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=s32g PT=s32g PATH_FIASCO=$(pwd)/obj/fiasco/arm64-s32g" >> $odir/.imagebuilds
echo "ENTRY=vm-multi-p2p TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=s32g PT=s32g PATH_FIASCO=$(pwd)/obj/fiasco/arm64-s32g" >> $odir/.imagebuilds
fi
if [ "$CONF_DO_ARM64_ZYNQMP" ]; then
cat<<EOF >> $Mboot
QEMU_OPTIONS-zynqmp += -M xlnx-zcu102,virtualization=true -m 2048
EOF
echo "ENTRY=hello TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=zynqmp PT=zynqmp PATH_FIASCO=$(pwd)/obj/fiasco/arm64-zynqmp" >> $odir/.imagebuilds
echo "ENTRY=hello-cfg TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=zynqmp PT=zynqmp PATH_FIASCO=$(pwd)/obj/fiasco/arm64-zynqmp" >> $odir/.imagebuilds
echo "ENTRY=hello-2 TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=zynqmp PT=zynqmp PATH_FIASCO=$(pwd)/obj/fiasco/arm64-zynqmp" >> $odir/.imagebuilds
echo "ENTRY=hello-shared TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=zynqmp PT=zynqmp PATH_FIASCO=$(pwd)/obj/fiasco/arm64-zynqmp" >> $odir/.imagebuilds
echo "ENTRY=vm-basic TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=zynqmp PT=zynqmp PATH_FIASCO=$(pwd)/obj/fiasco/arm64-zynqmp" >> $odir/.imagebuilds
echo "ENTRY=vm-multi TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=zynqmp PT=zynqmp PATH_FIASCO=$(pwd)/obj/fiasco/arm64-zynqmp" >> $odir/.imagebuilds
echo "ENTRY=vm-multi-p2p TARGET_IMAGE_FILENAME_PLATFORM_TYPE_INFIX=zynqmp PT=zynqmp PATH_FIASCO=$(pwd)/obj/fiasco/arm64-zynqmp" >> $odir/.imagebuilds
fi
add_std_qemu_options $Mboot
add_nonx86_qemu_options $Mboot
fi # ARM64
if [ "$CONF_DO_MIPS32R2" ]; then
mkdir -p obj/l4/mips32r2/conf
cat<<EOF >> obj/l4/mips32r2/conf/Makeconf.boot
#MODULE_SEARCH_PATH=$(pwd)/obj/fiasco/mips32-baikal-mp:$common_paths
MODULE_SEARCH_PATH=$(pwd)/obj/fiasco/mips32-malta:$common_paths
QEMU_OPTIONS += -M malta
EOF
add_std_qemu_options obj/l4/mips32r2/conf/Makeconf.boot
add_nonx86_qemu_options obj/l4/mips32r2/conf/Makeconf.boot
fi
if [ "$CONF_DO_MIPS32R6" ]; then
mkdir -p obj/l4/mips32r6/conf
cat<<EOF >> obj/l4/mips32r6/conf/Makeconf.boot
MODULE_SEARCH_PATH=$(pwd)/obj/fiasco/mips32-...:$common_paths
QEMU_OPTIONS += -M malta
EOF
add_std_qemu_options obj/l4/mips32r6/conf/Makeconf.boot
add_nonx86_qemu_options obj/l4/mips32r2/conf/Makeconf.boot
fi
if [ "$CONF_DO_MIPS64R2" ]; then
mkdir -p obj/l4/mips64r2/conf
cat<<EOF >> obj/l4/mips64r2/conf/Makeconf.boot
MODULE_SEARCH_PATH=$(pwd)/obj/fiasco/mips-malta-64r2-mp:$common_paths
QEMU_OPTIONS += -M malta
EOF
add_std_qemu_options obj/l4/mips64r2/conf/Makeconf.boot
add_nonx86_qemu_options obj/l4/mips64r2/conf/Makeconf.boot
fi
if [ "$CONF_DO_MIPS64R6" ]; then
mkdir -p obj/l4/mips64r6/conf
cat<<EOF >> obj/l4/mips64r6/conf/Makeconf.boot
MODULE_SEARCH_PATH=$(pwd)/obj/fiasco/mips-boston-64r6-mp:$common_paths
QEMU_OPTIONS += -M boston
QEMU_KERNEL_TYPE = itb
EOF
add_std_qemu_options obj/l4/mips64r6/conf/Makeconf.boot
add_nonx86_qemu_options obj/l4/mips64r6/conf/Makeconf.boot
fi
}
link_files()
{
mkdir -p files/cfg
(cd files/cfg && ln -sf ../../src/l4/pkg/io/io/config/x86-legacy.devs)
}
case "$1" in
config)
do_config
;;
setup)
load_config
check_tools
link_files
redo_config
do_setup
;;
*)
echo "Call $0 [config|setup]"
exit 1
;;
esac
exit 0