blob: c55707c5c4c3e33681de9e761e7f5cfdc4faf2f2 [file] [log] [blame] [edit]
#!/usr/bin/env bash
# Copyright 2018 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
set -eo pipefail
usage() {
echo "usage: ${0} [options] {arm64, x64}"
echo
echo " -f [fuchsia-dir] Fuchsia directory (required)"
echo
exit 1
}
while getopts "f:" OPT; do
case $OPT in
f) FUCHSIA_DIR="${OPTARG}";;
esac
done
shift $((OPTIND - 1))
case "${1}" in
arm64)
ARCH="arm64"
TARGET="aarch64-unknown-linux-musl";;
x64)
ARCH="x64"
TARGET="x86_64-unknown-linux-musl";;
*)
usage;;
esac
# If building ARM, ensure we have the correct toolchain installed.
if [ $ARCH = "arm64" ]; then
type aarch64-linux-gnu-gcc >/dev/null 2>/dev/null || {
echo "Required package gcc-aarch64-linux-gnu is not installed. To install"
echo "on Debian-based systems, run:"
echo
echo " sudo apt install gcc-aarch64-linux-gnu"
exit 1
}
fi
declare -r OUT_DIR="out/${ARCH}"
declare -r IMAGE_FILE="out/linux-tests-${ARCH}.img"
if [ ! -d "rust_crates" ]; then
if [ ! -d "${FUCHSIA_DIR}" ]; then
echo "Must specifiy Fuchsia directory on first run."
usage
fi
ln -s ${FUCHSIA_DIR}/third_party/rust_crates/ rust_crates
fi
cargo build --target=${TARGET}
mkdir -p ${OUT_DIR}
cp target/${TARGET}/debug/virtio_block_test_util ${OUT_DIR}
cp target/${TARGET}/debug/virtio_input_test_util ${OUT_DIR}
cp target/${TARGET}/debug/virtio_net_test_util ${OUT_DIR}
cp target/${TARGET}/debug/virtio_rng_test_util ${OUT_DIR}
cp target/${TARGET}/debug/virtio_vsock_test_util ${OUT_DIR}
declare -r BLOCK_SIZE=4096
declare -r ADDITIONAL_BLOCKS=1024
declare -r SIZE=$(du -sb ${OUT_DIR} | grep -o '^[0-9]*')
declare -r BLOCKS=$(($((${SIZE}/${BLOCK_SIZE}))+${ADDITIONAL_BLOCKS}))
rm -f "${IMAGE_FILE}"
mke2fs -q -d "${OUT_DIR}" -t ext2 -b ${BLOCK_SIZE} "${IMAGE_FILE}" ${BLOCKS}