| #! /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 |