Files
artmetla 506ea1564b Update build_release.sh to add Mitigation v4-6.12 target (#271)
* Update build_release.sh

* Update build_release.sh
2025-10-29 16:00:52 +01:00

152 lines
4.4 KiB
Bash
Executable File

#!/bin/bash
set -ex
usage() {
echo "Usage: $0 (lts|cos|mitigation)-<version> [<branch-tag-or-commit>]";
exit 1;
}
RELEASE_NAME="$1"
BRANCH="$2"
if [[ ! "$RELEASE_NAME" =~ ^(lts|cos|mitigation)-(.*) ]]; then usage; fi
TARGET="${BASH_REMATCH[1]}"
VERSION="${BASH_REMATCH[2]}"
case $TARGET in
lts)
REPO="https://github.com/gregkh/linux"
DEFAULT_BRANCH="v${VERSION}"
case $VERSION in
6.12.*) CONFIG_FN="lts-6.12.config" ;;
6.6.*) CONFIG_FN="lts-6.6.config" ;;
6.1.*) CONFIG_FN="lts-6.1.config" ;;
esac
if [ -z "$CONFIG_FN" ]; then echo "Failed to select config (VERSION=$VERSION)"; exit 1; fi
;;
cos)
REPO="https://cos.googlesource.com/third_party/kernel"
;;
mitigation)
REPO="https://github.com/thejh/linux"
case $VERSION in
v4*)
case $VERSION in
v4-6.6*) DEFAULT_BRANCH="slub-virtual-v6.6" ;;
v4-6.12*) DEFAULT_BRANCH="mitigations-next" ;;
esac
CONFIG_FN="mitigation-v4.config"
;;
v3-* | v3b-*)
DEFAULT_BRANCH="mitigations-next"
case $VERSION in
v3-6.1.55) CONFIG_FN="mitigation-v3.config" ;;
v3b-6.1.55) CONFIG_FN="mitigation-v3b.config" ;;
esac
CONFIG_FULL_FN="mitigation-v3-full.config"
;;
6.1 | 6.1-v2)
DEFAULT_BRANCH="slub-virtual-v6.1"
CONFIG_FN="mitigation-v1.config"
;;
esac ;;
*)
usage ;;
esac
BRANCH="${BRANCH:-$DEFAULT_BRANCH}"
if [ -z "$BRANCH" ]; then usage; fi
echo "REPO=$REPO"
echo "BRANCH=$BRANCH"
echo "CONFIG_FN=$CONFIG_FN"
BASEDIR=`pwd`
BUILD_DIR="$BASEDIR/builds/$RELEASE_NAME"
RELEASE_DIR="$BASEDIR/releases/$RELEASE_NAME"
CONFIGS_DIR="$BASEDIR/kernel_configs"
if [ -d "$RELEASE_DIR" ]; then echo "Release directory already exists. Stopping."; exit 1; fi
echo "GCC version"
echo "================="
gcc --version || true
echo
echo "Clang version"
echo "================="
clang --version || true
echo "================="
echo
mkdir -p $BUILD_DIR 2>/dev/null || true
cd $BUILD_DIR
if [ ! -d ".git" ]; then git init && git remote add origin $REPO; fi
if ! git checkout $BRANCH; then
git fetch --depth 1 origin $BRANCH:$BRANCH || true # TODO: hack, solve it better
git checkout $BRANCH
fi
# not necessary for the build itself, but it can be useful for comparing the config changes
if [ "$TARGET" == "lts" ]; then
make defconfig
mv .config upstream_defconfig
fi
if [ "$TARGET" == "cos" ]; then
rm lakitu_defconfig || true
make lakitu_defconfig
cp .config lakitu_defconfig
else
if [[ $VERSION == "6.12"* ]]; then
curl 'https://cos.googlesource.com/third_party/kernel/+/refs/heads/cos-6.12/arch/x86/configs/lakitu_defconfig?format=text'|base64 -d > lakitu_defconfig
else
curl 'https://cos.googlesource.com/third_party/kernel/+/refs/heads/cos-6.1/arch/x86/configs/lakitu_defconfig?format=text'|base64 -d > lakitu_defconfig
fi
cp lakitu_defconfig .config
fi
# build everything into the kernel instead of modules
# note: this can increase the attack surface!
sed -i s/=m/=y/g .config
if [ ! -z "$CONFIG_FN" ]; then
cp $CONFIGS_DIR/$CONFIG_FN kernel/configs/
make $CONFIG_FN
fi
make olddefconfig
if [ ! -z "$CONFIG_FN" ]; then
if scripts/diffconfig $CONFIGS_DIR/$CONFIG_FN .config|grep "^[^+]"; then
echo "Config did not apply cleanly."
exit 1
fi
fi
if [ ! -z "$CONFIG_FULL_FN" ]; then
if scripts/diffconfig $CONFIGS_DIR/$CONFIG_FULL_FN .config|grep "^[^+]"; then
echo "The full config has differences compared to the applied config. Check if the base config changed since custom config was created."
exit 1
fi
fi
# since cos-109-17800-218-14, COS does not build due to __cold redefinition, quickfix this until its fixed in the COS repo
if [ "$TARGET" == "cos" ] && grep __cold include/linux/compiler_types.h; then
sed -i 's/.*#define.__cold.*//' include/linux/compiler_attributes.h
fi
make -j`nproc`
mkdir -p $RELEASE_DIR 2>/dev/null || true
echo "REPOSITORY_URL=$REPO" > $RELEASE_DIR/COMMIT_INFO
(echo -n "COMMIT_HASH="; git rev-parse HEAD) >> $RELEASE_DIR/COMMIT_INFO
cp $BUILD_DIR/arch/x86/boot/bzImage $RELEASE_DIR/
cp $BUILD_DIR/lakitu_defconfig $RELEASE_DIR/
cp $BUILD_DIR/.config $RELEASE_DIR/
if [ "$TARGET" == "lts" ]; then cp $BUILD_DIR/upstream_defconfig $RELEASE_DIR/; fi
gzip -c $BUILD_DIR/vmlinux > $RELEASE_DIR/vmlinux.gz