BuildToolChain/cleanup.sh

125 lines
4.9 KiB
Bash

#!/bin/bash
# cleanup.sh — post-build janitor for BTC.sh
#
# Removes the volatile cleanroom, unmounts the ramfs, and re-stages a fresh
# BTC.sh copy under /opt/BTC/BTC-<version>/ ready to be invoked.
#
# Usage:
# ./cleanup.sh # uses BTC_VERSION from BTC.sh auto-detect
# ./cleanup.sh <target_id> # e.g. ./cleanup.sh haswell
# ./cleanup.sh <target_id> <ver> # e.g. ./cleanup.sh haswell 0.4.2
#
# Defaults:
# target_id = haswell (matches the original cleanup.sh behavior)
# version = read from BTC.sh (falls back to 0.4.2)
#
# NOTE: this script must be run on the target machine AFTER the BTC.sh build
# host has produced the golden image. It does NOT rebuild anything — it
# just clears the working state and re-stages the next BTC.sh copy.
set -euo pipefail
BTC_ARCHIVE="/opt/BTC"
SOURCES_ACTIVE="/usr/src"
# --- Resolve target_id argument -----------------------------------------
# The original cleanup.sh hardcoded DCOSNET-HASWELL-AVX2-LTO. We default
# to the same target so behavior is unchanged for users who run the script
# with no arguments, but expose the full SYS_LABEL derivation so any of the
# 22 registered targets can be cleaned up by passing its target_id.
TARGET_ID="${1:-haswell}"
# --- Resolve BTC_VERSION -------------------------------------------------
# Prefer an explicit second arg, otherwise parse it out of the BTC.sh
# sitting next to this script so the cleanup tracks the deployed version
# automatically. Falls back to 0.4.2 if neither is available.
BTC_VERSION="${2:-}"
if [[ -z "${BTC_VERSION}" ]]; then
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BTC_SH="${SCRIPT_DIR}/BTC.sh"
if [[ -f "${BTC_SH}" ]]; then
BTC_VERSION="$(grep -m1 -E '^readonly BTC_VERSION=' "${BTC_SH}" \
| sed -E 's/^readonly BTC_VERSION="([^"]+)".*$/\1/' || true)"
fi
fi
BTC_VERSION="${BTC_VERSION:-0.4.2}"
# --- Derive SYS_LABEL the same way BTC.sh does ---------------------------
# For native x86_64 builds BTC.sh produces SYS_LABEL=DCOSNET-<ID>-<ISA>-LTO.
# For cross builds it produces SYS_LABEL=DCOSNET-<FAMILY>-<ID>-<ISA>-CROSS.
# The cleanup needs to match the build's actual label, so we use the same
# uppercase + family/ISA tags. ISA is read from BTC_TARGETS[] if BTC.sh
# is reachable; otherwise we conservatively probe by family.
FAMILY=""
case "${TARGET_ID}" in
# AVX512 Intel HEDT/Server (must come before the AVX2 catch-all)
skylake-x|skylake-server)
FAMILY="intel"; ISA_TAG="AVX512" ;;
# AVX2 Intel HEDT/Server
haswell|haswell-ep|broadwell|broadwell-ep|skylake)
FAMILY="intel"; ISA_TAG="AVX2" ;;
# AVX512 AMD
znver4)
FAMILY="amd"; ISA_TAG="AVX512" ;;
# AVX2 AMD
znver1|znver2|znver3)
FAMILY="amd"; ISA_TAG="AVX2" ;;
apu-zn1|apu-zn2|apu-zn3|apu-zn4)
FAMILY="amd-apu"; ISA_TAG="AVX2" ;;
# SSE4_2 Intel Atom
atom-silvermont|atom-goldmont|atom-tremont|atom-sierraforest)
FAMILY="atom"; ISA_TAG="SSE4_2" ;;
# Embedded
mipselr2)
FAMILY="mips"; ISA_TAG="MIPS32" ;;
armv7)
FAMILY="arm"; ISA_TAG="NEON" ;;
tilegx)
FAMILY="tile"; ISA_TAG="TILE" ;;
*)
echo ">> [ERROR] Unknown target_id: ${TARGET_ID}"
echo ">> Run 'BTC.sh --list' to see registered targets."
exit 1
;;
esac
# Mirror BTC.sh's native-vs-cross SYS_LABEL rule:
# native -> DCOSNET-<ID>-<ISA>-LTO
# cross -> DCOSNET-<FAMILY>-<ID>-<ISA>-CROSS
# x86_64 targets are typically run native; everything else is cross.
if [[ "${FAMILY}" == "intel" || "${FAMILY}" == "amd" || "${FAMILY}" == "amd-apu" || "${FAMILY}" == "atom" ]]; then
SYS_LABEL="DCOSNET-${TARGET_ID^^}-${ISA_TAG}-LTO"
else
SYS_LABEL="DCOSNET-${FAMILY^^}-${TARGET_ID^^}-${ISA_TAG}-CROSS"
fi
echo ">> [CLEANUP] target_id=${TARGET_ID} version=${BTC_VERSION} sys_label=${SYS_LABEL}"
# --- Tear down the previous build state ----------------------------------
cd "${BTC_ARCHIVE}"
rm -rf "BTC-${BTC_VERSION}"
# Lazy-unmount the ramfs cleanroom (in case a previous run crashed mid-build).
umount -l "${SOURCES_ACTIVE}" 2>/dev/null || true
# Remove the target-specific cleanroom directory and its logs.
rm -rf "${SOURCES_ACTIVE}/${SYS_LABEL}-cleanroom"
rm -rf "${BTC_ARCHIVE}/logs/${SYS_LABEL}"
# --- Re-stage the next BTC.sh copy ---------------------------------------
# Upload the fixed BTC.sh from download/, then:
mkdir -p "BTC-${BTC_VERSION}"
if [[ -f "${BTC_ARCHIVE}/BTC.sh" ]]; then
cp "${BTC_ARCHIVE}/BTC.sh" "BTC-${BTC_VERSION}/"
elif [[ -f "./BTC.sh" ]]; then
cp "./BTC.sh" "BTC-${BTC_VERSION}/"
else
echo ">> [WARN] No BTC.sh found to stage under BTC-${BTC_VERSION}/."
echo ">> Drop BTC.sh into ${BTC_ARCHIVE}/ or ${PWD}/ and re-run."
fi
cd "BTC-${BTC_VERSION}" && chmod +x BTC.sh
echo ">> [READY] btc staged at ${BTC_ARCHIVE}/BTC-${BTC_VERSION}/BTC.sh"
echo ">> Target label cleaned: ${SYS_LABEL}"
echo ">> Invoke with: ./BTC.sh ${TARGET_ID}"