2024-03-07 09:04:05 +00:00
#!/bin/sh
set -e
REAL_SCRIPT = " $( realpath " ${ 0 } " ) "
cd " $( dirname " ${ REAL_SCRIPT } " ) /../.. "
2024-04-29 10:02:20 -07:00
KRATA_DIR = " $( realpath " ${ PWD } " ) "
2024-03-07 09:04:05 +00:00
KERNEL_DIR = " ${ KRATA_DIR } /kernel "
cd " ${ KRATA_DIR } "
2024-03-21 21:31:10 +00:00
TARGET_ARCH_STANDARD = " $( KRATA_ARCH_KERNEL_NAME = 0 ./hack/build/arch.sh) "
TARGET_ARCH_KERNEL = " $( KRATA_ARCH_KERNEL_NAME = 1 ./hack/build/arch.sh) "
C_TARGET = " $( KRATA_TARGET_C_MODE = 1 KRATA_TARGET_IGNORE_LIBC = 1 ./hack/build/target.sh) "
IS_CROSS_COMPILE = " $( ./hack/build/cross-compile.sh) "
if [ " ${ IS_CROSS_COMPILE } " = "1" ]
then
CROSS_COMPILE_MAKE = " CROSS_COMPILE= ${ C_TARGET } - "
else
CROSS_COMPILE_MAKE = "CROSS_COMPILE="
fi
2024-03-07 16:40:06 +00:00
# shellcheck source-path=SCRIPTDIR source=../../kernel/config.sh
2024-03-07 09:04:05 +00:00
. " ${ KERNEL_DIR } /config.sh "
2024-03-21 21:31:10 +00:00
KERNEL_SRC = " ${ KERNEL_DIR } /linux- ${ KERNEL_VERSION } - ${ TARGET_ARCH_STANDARD } "
2024-03-07 09:04:05 +00:00
2024-03-10 00:22:24 +00:00
if [ -z " ${ KRATA_KERNEL_BUILD_JOBS } " ]
then
2024-04-14 17:19:38 -07:00
KRATA_KERNEL_BUILD_JOBS = " $( nproc) "
2024-03-10 00:22:24 +00:00
fi
2024-03-07 09:04:05 +00:00
if [ ! -f " ${ KERNEL_SRC } /Makefile " ]
then
rm -rf " ${ KERNEL_SRC } "
2024-03-21 21:31:10 +00:00
mkdir -p " ${ KERNEL_SRC } "
2024-03-07 09:04:05 +00:00
curl --progress-bar -L -o " ${ KERNEL_SRC } .txz " " ${ KERNEL_SRC_URL } "
2024-03-21 21:31:10 +00:00
tar xf " ${ KERNEL_SRC } .txz " --strip-components 1 -C " ${ KERNEL_SRC } "
2024-03-07 09:04:05 +00:00
rm " ${ KERNEL_SRC } .txz "
fi
OUTPUT_DIR = " ${ KRATA_DIR } /target/kernel "
mkdir -p " ${ OUTPUT_DIR } "
2024-03-21 21:31:10 +00:00
KERNEL_CONFIG_FILE = " ${ KERNEL_DIR } /krata- ${ TARGET_ARCH_STANDARD } .config "
2024-03-07 09:04:05 +00:00
if [ ! -f " ${ KERNEL_CONFIG_FILE } " ]
then
2024-03-21 21:31:10 +00:00
echo " ERROR: kernel config file not found for ${ TARGET_ARCH_STANDARD } " > /dev/stderr
2024-03-07 09:04:05 +00:00
exit 1
fi
cp " ${ KERNEL_CONFIG_FILE } " " ${ KERNEL_SRC } /.config "
2024-03-21 21:31:10 +00:00
make -C " ${ KERNEL_SRC } " ARCH = " ${ TARGET_ARCH_KERNEL } " " ${ CROSS_COMPILE_MAKE } " olddefconfig
2024-03-07 09:04:05 +00:00
2024-03-21 21:31:10 +00:00
IMAGE_TARGET = "bzImage"
if [ " ${ TARGET_ARCH_STANDARD } " = "x86_64" ]
2024-03-07 09:04:05 +00:00
then
2024-03-21 21:31:10 +00:00
IMAGE_TARGET = "bzImage"
elif [ " ${ TARGET_ARCH_STANDARD } " = "aarch64" ]
2024-03-07 09:04:05 +00:00
then
2024-03-21 21:31:10 +00:00
IMAGE_TARGET = "Image.gz"
2024-03-07 09:04:05 +00:00
fi
2024-04-29 10:02:20 -07:00
make -C " ${ KERNEL_SRC } " ARCH = " ${ TARGET_ARCH_KERNEL } " -j" ${ KRATA_KERNEL_BUILD_JOBS } " " ${ CROSS_COMPILE_MAKE } " " ${ IMAGE_TARGET } " modules
MODULES_INSTALL_PATH = " ${ OUTPUT_DIR } /modules-install- ${ TARGET_ARCH_STANDARD } "
ADDONS_OUTPUT_PATH = " ${ OUTPUT_DIR } /addons- ${ TARGET_ARCH_STANDARD } "
MODULES_OUTPUT_PATH = " ${ ADDONS_OUTPUT_PATH } /modules "
ADDONS_SQUASHFS_PATH = " ${ OUTPUT_DIR } /addons- ${ TARGET_ARCH_STANDARD } .squashfs "
rm -rf " ${ MODULES_INSTALL_PATH } "
rm -rf " ${ ADDONS_OUTPUT_PATH } "
rm -rf " ${ ADDONS_SQUASHFS_PATH } "
make -C " ${ KERNEL_SRC } " ARCH = " ${ TARGET_ARCH_KERNEL } " -j" ${ KRATA_KERNEL_BUILD_JOBS } " " ${ CROSS_COMPILE_MAKE } " INSTALL_MOD_PATH = " ${ MODULES_INSTALL_PATH } " modules_install
KERNEL_MODULES_VER = " $( ls " ${ MODULES_INSTALL_PATH } /lib/modules " ) "
mkdir -p " ${ ADDONS_OUTPUT_PATH } "
mv " ${ MODULES_INSTALL_PATH } /lib/modules/ ${ KERNEL_MODULES_VER } " " ${ MODULES_OUTPUT_PATH } "
rm -rf " ${ MODULES_INSTALL_PATH } "
[ -L " ${ MODULES_OUTPUT_PATH } /build " ] && unlink " ${ MODULES_OUTPUT_PATH } /build "
mksquashfs " ${ ADDONS_OUTPUT_PATH } " " ${ ADDONS_SQUASHFS_PATH } " -all-root
2024-03-21 21:31:10 +00:00
if [ " ${ TARGET_ARCH_STANDARD } " = "x86_64" ]
2024-03-07 09:04:05 +00:00
then
2024-03-21 21:31:10 +00:00
cp " ${ KERNEL_SRC } /arch/x86/boot/bzImage " " ${ OUTPUT_DIR } /kernel- ${ TARGET_ARCH_STANDARD } "
elif [ " ${ TARGET_ARCH_STANDARD } " = "aarch64" ]
2024-03-07 09:04:05 +00:00
then
2024-03-21 21:31:10 +00:00
cp " ${ KERNEL_SRC } /arch/arm64/boot/Image.gz " " ${ OUTPUT_DIR } /kernel- ${ TARGET_ARCH_STANDARD } "
2024-03-07 09:04:05 +00:00
else
2024-03-21 21:31:10 +00:00
echo " ERROR: unable to determine what file is the vmlinuz for ${ TARGET_ARCH_STANDARD } " > /dev/stderr
2024-03-07 09:04:05 +00:00
exit 1
fi