blob: 2cbd4acade0d8b379430ee5429d108deb735cb4a [file] [log] [blame]
#! /bin/bash
# Script for preparing a cpio archive of builtin applications and/or models.
# Usage: prepare_bundle_image [-n] -o target.cpio
# [-m input_model...] [-a input_app...]
# where
# -o target cpio archive filena,me
# -m identifies subsequent arguments as models
# -a identifies subsequent arguments as applications
# also
# -n do a dry-run where commands are just echo'd to the terminal
# TODO(sleffler): redo with getopt
if [[ -z "${ROOTDIR}" ]]; then
echo "No ROOTDIR, source build/setup.sh first"
exit 1
fi
if [[ -z "${KATA_RUST_VERSION}" ]]; then
echo "No KATA_RUST_VERSION, source build/setup.sh first"
exit 1
fi
if [[ -z "${CARGO_HOME}" ]]; then
echo "No CARGO_HOME, source build/setup.sh first"
exit 1
fi
TMP_DIR="${OUT}/tmp"
if [[ ! -d "${TMP_DIR}" ]]; then
echo "No tmp directory found at ${TMP_DIR}"
exit 2
fi
CARGO="${CARGO_HOME}/bin/cargo +${KATA_RUST_VERSION}"
CPIO_OPTS='-H newc -L --no-absolute-filenames --reproducible --owner=root:root'
function prepare_bundle_image {
cd "${ROOTDIR}/kata/tools/seL4/misc/prepare_bundle_image" && \
${CARGO} run -q --target-dir "${OUT}/host/prepare_bundle_image" -- "$@"
}
dry_run='false'
if [[ "$1" == '-n' ]]; then
dry_run='true'
shift
fi
if [[ "$1" != '-o' ]]; then
echo "Missing -o option to specify output cpio archive"
exit 3
fi
OUTPUT_CPIO="$2"
shift 2
APPS='-a'
MODELS='-m'
file_type=
for arg; do
case "${arg}" in
-a) file_type='app';;
-m) file_type='model';;
*) case "${file_type}" in
app)
ln -sf "${arg}" "${TMP_DIR}" && \
APPS="${APPS} ${TMP_DIR}/$(basename ${arg})"
;;
model)
ln -sf "${arg}" "${TMP_DIR}" && \
MODELS="${MODELS} ${TMP_DIR}/$(basename ${arg})"
;;
*) echo 'Missing -m or -a option to identify file type'; exit -1;;
esac
esac
done
if [[ "${dry_run}" == 'true' ]]; then
# TODO(sleffler): would be nice to print what prepare_bundle_image would do
echo "prepare_bundle_image ${MODELS} ${APPS} | cpio -o -D ${TMP_DIR} ${CPIO_OPTS} -O ${OUTPUT_CPIO}"
else
prepare_bundle_image ${MODELS} ${APPS} | cpio -o -D ${TMP_DIR} ${CPIO_OPTS} -O "${OUTPUT_CPIO}"
fi