#!/usr/bin/env bash

# Copyright 2020 The Android KVM Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
ROOT_DIR="$(dirname "${SCRIPT_DIR}")"

SCRIPT_RUN_QEMU="${SCRIPT_DIR}/aarch64/run_qemu.sh"

PREBUILTS_DIR="${ROOT_DIR}/prebuilts"
PREBUILTS_IMG_DIR="${PREBUILTS_DIR}/linux-aarch64/images"

PREBUILTS_QEMU_BIN="${PREBUILTS_DIR}/linux-x86/qemu/bin/qemu-system-aarch64.sh"
PREBUILTS_QEMU_ROM_DIR="${PREBUILTS_IMG_DIR}"

PREBUILTS_KUT_ROOTFS="${PREBUILTS_IMG_DIR}/rootfs.ext4"

OUT_DIR="${ROOT_DIR}/out"

LINUX_OUT="${OUT_DIR}/linux"
LINUX_OUT_IMAGE="${LINUX_OUT}/arch/arm64/boot/Image.gz"

KUT_OUT="${OUT_DIR}/kvm-unit-tests"
KUT_TEST_DIR="${KUT_OUT}/tests"

# Define a variable with a given default value. Also defines
# variable DEFAULT_<name> with the default value.
# Args:
#   1) variable name to be defined
#   2) default value of the variable
function default_var {
	local var_name="$1"
	local value="$2"
	local default_var_name="DEFAULT_${var_name}"
	declare -g ${var_name}="${value}"
	declare -g "${default_var_name}=${value}"
}
