Various fixes from feedback and comments

Signed-off-by: Fuad Tabba <tabba@google.com>
diff --git a/Makefile b/Makefile
index 5680316..1ab4f9d 100644
--- a/Makefile
+++ b/Makefile
@@ -3,25 +3,29 @@
 ##
 ROOT_DIR := $(CURDIR)
 OUT_DIR := $(ROOT_DIR)/out
-CCACHE_DIR := $(ROOT_DIR)/.ccache
+CCACHE_DIR := $(OUT_DIR)/.ccache
 TEST_SCRIPTS_DIR := $(ROOT_DIR)/build/aarch64-unit-tests
 
 ##
 ## Common options
 ##
 VERBOSE ?= 0
-CROSS_PREFIX ?= "aarch64-linux-gnu-"
 CCACHE ?= ""
 
 # Find toolchain for current OS
 UNNAME_S := $(shell uname -s | tr '[:upper:]' '[:lower:]')
-TOOLCHAIN_CLANG := $(ROOT_DIR)/toolchains/clang/$(UNNAME_S)-x86/clang-r383902
-TOOLCHAIN_BINUTILS := $(ROOT_DIR)/toolchains/gcc/linux-x86/aarch64/aarch64-linux-androide-4.9/aarch64-linux-android
+TOOLCHAIN_CLANG := $(ROOT_DIR)/toolchains/$(UNNAME_S)-x86/clang/clang-r383902
+TOOLCHAIN_BINUTILS := $(ROOT_DIR)/toolchains/$(UNNAME_S)-x86/gcc/aarch64-linux-android
 
 ##
 ## Common targets
 ##
 
+.DEFAULT_GOAL := default
+
+.PHONY: default
+default: kvmunittests linux
+
 .PHONY: clean
 clean: buildroot_clean kvmunittests_clean linux_clean
 
@@ -35,7 +39,8 @@
 .PHONY: help
 help:
 	@echo 'Generic Targets:'
-	@echo '   all                  - builds alli generic targetst'
+	@echo '   default              - builds all generic targets except for buildroot'
+	@echo '   all                  - builds all generic targets'
 	@echo '   buildroot            - the buildroot rootfs image as well as the host qemu'
 	@echo '   kvmunittests         - the kvm-unit-tests'
 	@echo '   linux                - the linux kernel'
@@ -48,8 +53,8 @@
 	@echo '   linux_clean          - the linux kernel'
 	@echo ''
 	@echo 'Misc Targets:'
-	@echo '   unittests            - runs the kvm unit tests in the qemu-aarch64 simulated environment'
-	@echo '   update-prebuilts     - generates/update the prebuilt rootfs image (aarch64) and the qemu host utilities (aarch64)'
+	@echo '   test                 - runs the kvm unit tests in the qemu-aarch64 simulated environment'
+	@echo '   update-prebuilts     - generates/update the prebuilt rootfs image (aarch64) and the qemu host (aarch64)'
 
 
 ##
@@ -76,7 +81,7 @@
 ##
 ## kvmunittests
 ##
-KUT_CROSS_PREFIX ?= $(CROSS_PREFIX)
+KUT_CROSS_PREFIX ?= "aarch64-linux-android-"
 
 KUT_ARCH := "arm64"
 KUT_SRC := $(ROOT_DIR)/kvm-unit-tests
@@ -95,11 +100,11 @@
 		./configure --prefix=$(KUT_OUT) --arch=$(KUT_ARCH) \
 			--cc=$(KUT_CC) --ld=$(KUT_LD) \
 			--objcopy=$(KUT_OBJCOPY) --objdump=$(KUT_OBJDUMP)
-	+ cd $(KUT_SRC) && PATH=$(KUT_PATH) COMMON_CFLAGS=$(KUT_COMMON_CFLAGS) $(MAKE) install
+	PATH=$(KUT_PATH) COMMON_CFLAGS=$(KUT_COMMON_CFLAGS) $(MAKE) -C $(KUT_SRC) install
 
 .PHONY: kvmunittests_clean
 kvmunittests_clean:
-	+ cd $(KUT_SRC) && $(MAKE) clean
+	- $(MAKE) -C $(KUT_SRC) clean
 
 
 ##
@@ -107,25 +112,32 @@
 ##
 LINUX_DEFCONFIG ?= defconfig
 LINUX_VERBOSE ?= $(VERBOSE)
-LINUX_CROSS_PREFIX ?= $(CROSS_PREFIX)
+LINUX_CROSS_COMPILE ?= "aarch64-linux-gnu-"
+LINUX_SRC ?= $(ROOT_DIR)/linux
 
 LINUX_ARCH := arm64
-LINUX_SRC := $(ROOT_DIR)/linux
 LINUX_OUT := $(OUT_DIR)/linux
 LINUX_PATH := $(TOOLCHAIN_CLANG)/bin:$(PATH)
-LINUX_MAKE := PATH=$(LINUX_PATH) $(MAKE) \
+LINUX_MAKE := \
+	PATH=$(LINUX_PATH) \
 	ARCH=$(LINUX_ARCH) \
-	CROSS_COMPILE=$(LINUX_CROSS_PREFIX) \
+	CROSS_COMPILE=$(LINUX_CROSS_COMPILE) \
+	$(MAKE) \
 	LLVM=1 \
+	GCC_TOOLCHAIN_DIR=$(TOOLCHAIN_BINUTILS)/bin \
 	-C $(LINUX_SRC) \
 	V=$(LINUX_VERBOSE) \
 	O=$(LINUX_OUT)
 
 .PHONY: linux
 linux:
-	+ $(LINUX_MAKE) defconfig
+	+ $(LINUX_MAKE) $(LINUX_DEFCONFIG)
 	+ $(LINUX_MAKE)
 
+.PHONY: linux_image
+linux_image:
+	+ $(LINUX_MAKE) $(LINUX_DEFCONFIG)
+	+ $(LINUX_MAKE) Image.gz
 
 .PHONY: linux_clean
 linux_clean:
@@ -134,34 +146,22 @@
 
 
 ##
-## Run unit tests
-##
-
-MAKE_PID := $(shell echo $$PPID)
-JOB_FLAG := $(filter -j%, $(subst -j ,-j,$(shell ps T | grep "^\s*$(MAKE_PID).*$(MAKE)")))
-JOBS     := $(subst -j,,$(JOB_FLAG))
-ifeq ($(JOBS),)
-	JOBS := "1"
-endif
-
-
-##
 ## Generating/Updating prebuilts
 ##
 
 update-prebuilts: \
-	prebuilts/images/linux-aarch64 \
-	prebuilts/host_utils/linux-x86
+	prebuilts/linux-aarch64/images \
+	prebuilts/linux-x86/qemu
 
 # The rootfs and rom images for qemu
-prebuilts/images/linux-aarch64: buildroot
+prebuilts/linux-aarch64/images: buildroot
 	- rm -rf $@
 	mkdir -p $@
 	cp $(BR_OUT)/images/rootfs.ext4 $@
 	cp $(BR_OUT)/per-package/host-qemu/host/share/qemu/efi-virtio.rom $@
 
 # The qemu binary and the libraries it requires
-prebuilts/host_utils/linux-x86: buildroot
+prebuilts/linux-x86/qemu: buildroot
 	- rm -rf $@
 	mkdir -p $@/bin
 	cp $(BR_OUT)/host/bin/qemu-system-aarch64 $@/bin
@@ -180,15 +180,15 @@
 	JOBS := "1"
 endif
 
-KUT_QEMU_BIN := $(ROOT_DIR)/prebuilts/host_utils/linux-x86/bin/qemu-system-aarch64
-KUT_QEMU_LIB := $(ROOT_DIR)/prebuilts/host_utils/linux-x86/lib
-KUT_ROOTFS_IMAGE := $(ROOT_DIR)/prebuilts/images/linux-aarch64/rootfs.ext4
+KUT_QEMU_BIN := $(ROOT_DIR)/prebuilts/linux-x86/qemu/bin/qemu-system-aarch64
+KUT_QEMU_LIB := $(ROOT_DIR)/prebuilts/linux-x86/qemu/lib
+KUT_ROOTFS_IMAGE := $(ROOT_DIR)/prebuilts/linux-aarch64/images/rootfs.ext4
 
 # Exclude tests that require user interaction or are known to fail.
 KUT_EXCLUDE := "(.+migrat.+)|(pmu-event-introspection)"
 
-.PHONY: unittests
-unittests: kvmunittests linux
+.PHONY: test
+test: kvmunittests linux_image
 	@LD_LIBRARY_PATH=$(KUT_QEMU_LIB):$(LD_LIBRARY_PATH) VERBOSE=$(VERBOSE) \
 		$(TEST_SCRIPTS_DIR)/run_tests.sh \
 			-j $(JOBS) \
diff --git a/aarch64-unit-tests/run_emu.sh b/aarch64-unit-tests/run_emu.sh
index e44a0cd..73ed673 100755
--- a/aarch64-unit-tests/run_emu.sh
+++ b/aarch64-unit-tests/run_emu.sh
@@ -17,7 +17,7 @@
 TIMEOUT=180s
 
 # QEMU CPUs to use for VHE and nVHE runs
-VHE_CPU="max,sve=off"
+VHE_CPU="max"
 NVHE_CPU="cortex-a53"
 
 TEST_FILE=$1
@@ -28,38 +28,36 @@
 CPU=""
 
 # Assume that the roms are located with the disk image.
-ROM_PATH=$(dirname ${ROOTFS})
+ROM_PATH=$(dirname "${ROOTFS}")
 
-echo $ROM_PATH
-
-if [ ! -f ${TEST_FILE} ]; then
+if [ ! -f "${TEST_FILE}" ]; then
     echo "Standalone kvmunittest file not found"
     echo "Run make standalone first to generate the standalone test files."
     exit 1
 fi
 
-if [ ! -f ${LINUX_KERNEL} ]; then
+if [ ! -f "${LINUX_KERNEL}" ]; then
     echo "Linux kernel image file not found."
     exit 1
 fi
 
-if [ ! -f ${ROOTFS} ]; then
+if [ ! -f "${ROOTFS}" ]; then
     echo "Root filesystem image file not found."
     exit 1
 fi
 
-if [ ! -x ${QEMU} ]; then
+if [ ! -x "${QEMU}" ]; then
     echo "QEMU executable not found."
     exit 1
 fi
 
-if [ ${VHE} = 1 ]; then
+if [ "${VHE}" = 1 ]; then
     CPU=${VHE_CPU}
 else
     CPU=${NVHE_CPU}
 fi
 
-timeout -k 1s --foreground ${TIMEOUT} ${QEMU} \
+timeout -k 1s --foreground "${TIMEOUT}" "${QEMU}" \
    -M virt \
    -machine virtualization=true -machine virt,gic-version=3  \
    -cpu "${CPU}" \
@@ -67,7 +65,7 @@
    -smp 2 \
    -m 512 \
    -kernel "${LINUX_KERNEL}" \
-   -L ${ROM_PATH} \
+   -L "${ROM_PATH}" \
    -append "rootwait root=/dev/vda" \
    -drive file="${ROOTFS}",readonly,if=virtio,format=raw \
    -drive file="${TEST_FILE}",readonly,if=virtio,format=raw \
diff --git a/aarch64-unit-tests/run_tests.sh b/aarch64-unit-tests/run_tests.sh
index 2633451..19e4a53 100755
--- a/aarch64-unit-tests/run_tests.sh
+++ b/aarch64-unit-tests/run_tests.sh
@@ -14,25 +14,18 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+
 # Variables to represent VHE and nVHE emulation parameter
 VHE=1
 NVHE=0
 
 function get_qemu_binary()
 {
-    local qemucmd
-    local qemu
+    local qemu=${QEMU:-qemu-system-aarch64}
 
-    qemucmd=${QEMU:-qemu-system-aarch64}
-    if $qemucmd --help 2>/dev/null | grep -q 'QEMU'; then
-        qemu="$qemucmd"
+    if $qemu --help 2>/dev/null | grep -q 'QEMU'; then
+        command -v "${qemu}"
     fi
-
-    if [ -z "${qemu}" ]; then
-        return
-    fi
-
-    command -v "${qemu}"
 }
 
 function get_outcome()
@@ -70,12 +63,12 @@
 		return
 	fi
 
-	while (( $(jobs | wc -l) == $j )); do
+	while (( $(jobs | wc -l) == j )); do
 		# Wait for background jobs
 		wait -n 2>/dev/null
 	done
 
-	if [ $j = 1 ]; then
+	if [ "$j" = 1 ]; then
 		bash -c "$@"
 	else
 		bash -c "$@" &
@@ -84,6 +77,7 @@
 
 script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
 test_dir=""
+log_dir=${LOG_DIR:-out/test/kvm-unit-tests}
 exclude_regex=""
 j=1
 linux=""
@@ -98,7 +92,7 @@
             ;;
         x)
             # OR with the previous regex if specified
-            if [ ! -z $exclude_regex ]; then
+            if [ -n "${exclude_regex}" ]; then
               exclude_regex+="|"
             fi
             exclude_regex+="(^${OPTARG}$)"
@@ -152,17 +146,17 @@
 	usage_abort
 fi
 
-rm -rf logs.old
-if [ -d logs ]; then
-    mv logs logs.old
+rm -rf "$log_dir"/logs.old
+if [ -d "$log_dir"/logs ]; then
+    mv "$log_dir"/logs "$log_dir"/logs.old
 fi
-mkdir -p logs/vhe || exit 2
-mkdir -p logs/nvhe || exit 2
+mkdir -p "$log_dir"/logs/vhe || exit 2
+mkdir -p "$log_dir"/logs/nvhe || exit 2
 
-for test in ${test_dir}/*; do
-    test_name="$(basename ${test})"
+for test in "${test_dir}"/*; do
+    test_name=$(basename "${test}")
 
-    if [[ ! -z $exclude_regex && "${test_name}" =~ ${exclude_regex} ]]; then
+    if [[ -n "${exclude_regex}" && "${test_name}" =~ ${exclude_regex} ]]; then
         if [ "$verbose" != "0" ]; then
             echo "Excluding ${test_name}"
         fi
@@ -174,7 +168,7 @@
     fi
 
     # Redirect output instead of pipe to preserve exit status.
-    run_job "${script_dir}/run_emu.sh ${test} ${linux} ${rootfs} ${qemu} ${VHE} &> >(tee logs/vhe/${test_name}.log | grep -E -h --color=never \"[^ ](PASS|FAIL|SKIP)[^:]\")"
-    run_job "${script_dir}/run_emu.sh ${test} ${linux} ${rootfs} ${qemu} ${NVHE} &> >(tee logs/nvhe/${test_name}.log | grep -E -h --color=never \"[^ ](PASS|FAIL|SKIP)[^:]\")"
+    run_job "${script_dir}/run_emu.sh ${test} ${linux} ${rootfs} ${qemu} ${VHE} &> >(tee $log_dir/logs/vhe/${test_name}.log | grep -E -h --color=never \"[^ ](PASS|FAIL|SKIP)[^:]\")"
+    run_job "${script_dir}/run_emu.sh ${test} ${linux} ${rootfs} ${qemu} ${NVHE} &> >(tee $log_dir/logs/nvhe/${test_name}.log | grep -E -h --color=never \"[^ ](PASS|FAIL|SKIP)[^:]\")"
 done
 wait