| ## |
| ## Folders |
| ## |
| ROOT_DIR := $(CURDIR) |
| OUT_DIR := $(ROOT_DIR)/out |
| CCACHE_DIR := $(ROOT_DIR)/.ccache |
| TEST_SCRIPTS_DIR := $(ROOT_DIR)/build/aarch64-unit-tests |
| |
| ## |
| ## Common options |
| ## |
| VERBOSE ?= 0 |
| CROSS_PREFIX ?= "aarch64-linux-gnu-" |
| CCACHE ?= "" |
| |
| |
| ## |
| ## Common targets |
| ## |
| |
| .PHONY: clean |
| clean: buildroot_clean kvmunittests_clean linux_clean |
| |
| .PHONY: distclean |
| distclean: kvmunittests_clean |
| - rm -rf $(OUT_DIR) |
| |
| .PHONY: all |
| all: buildroot kvmunittests linux |
| |
| .PHONY: help |
| help: |
| @echo 'Generic Targets:' |
| @echo ' all - builds alli generic targetst' |
| @echo ' buildroot - the buildroot rootfs image as well as the host qemu' |
| @echo ' kvmunittests - the kvm-unit-tests' |
| @echo ' linux - the linux kernel' |
| @echo '' |
| @echo 'Clean Targets:' |
| @echo ' clean - cleans all, but keeps the prebuilts' |
| @echo ' distclean - distclean for all targets' |
| @echo ' buildroot_clean - the buildroot rootfs image as well as the host qemu' |
| @echo ' kvmunittests_clean - the kvm-unit-tests' |
| @echo ' linux_clean - the linux kernel' |
| @echo '' |
| @echo 'Misc Targets:' |
| @echo ' unittests - runs the kvm unit tests in the qemu-aarch64 simulated environment' |
| |
| |
| ## |
| ## Buildroot |
| ## |
| |
| BR_DEFCONFIG ?= qemu_aarch64_virt_kvmunittests_defconfig |
| BR_VERBOSE ?= $(VERBOSE) |
| |
| BR_SRC := $(ROOT_DIR)/buildroot |
| BR_OUT := $(OUT_DIR)/buildroot |
| BR_MAKE := $(MAKE) -C $(BR_SRC) V=$(BR_VERBOSE) O=$(BR_OUT) |
| |
| .PHONY: buildroot |
| buildroot: |
| + $(BR_MAKE) $(BR_DEFCONFIG) |
| + $(BR_MAKE) all |
| |
| .PHONY: buildroot_clean |
| buildroot_clean: |
| + $(BR_MAKE) clean |
| |
| |
| ## |
| ## kvmunittests |
| ## |
| KUT_CROSS_PREFIX ?= $(CROSS_PREFIX) |
| |
| KUT_ARCH := "arm64" |
| KUT_SRC := $(ROOT_DIR)/kvm-unit-tests |
| KUT_OUT := $(OUT_DIR)/kvm-unit-tests |
| |
| .PHONY: kvmunittests |
| kvmunittests: |
| cd $(KUT_SRC) && \ |
| ./configure --prefix=$(KUT_OUT) --arch=$(KUT_ARCH) \ |
| --cross-prefix=$(KUT_CROSS_PREFIX) |
| + cd $(KUT_SRC) && $(MAKE) install |
| |
| .PHONY: kvmunittests_clean |
| kvmunittests_clean: |
| + cd $(KUT_SRC) && $(MAKE) clean |
| |
| |
| ## |
| ## Linux kernel |
| ## |
| LINUX_DEFCONFIG ?= defconfig |
| LINUX_VERBOSE ?= $(VERBOSE) |
| LINUX_CROSS_PREFIX ?= $(CROSS_PREFIX) |
| |
| LINUX_ARCH := arm64 |
| LINUX_SRC := $(ROOT_DIR)/linux |
| LINUX_OUT := $(OUT_DIR)/linux |
| LINUX_MAKE := $(MAKE) ARCH=$(LINUX_ARCH) CROSS_COMPILE=$(LINUX_CROSS_PREFIX) \ |
| -C $(LINUX_SRC) V=$(LINUX_VERBOSE) O=$(LINUX_OUT) |
| |
| .PHONY: linux |
| linux: |
| + $(LINUX_MAKE) defconfig && $(LINUX_MAKE) |
| |
| |
| .PHONY: linux_clean |
| linux_clean: |
| + $(LINUX_MAKE) clean |
| + $(LINUX_MAKE) mrproper |
| |
| |
| ## |
| ## 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 |
| |
| # Exclude tests that require user interaction or are known to fail. |
| KUT_EXCLUDE := "(.+migrat.+)|(pmu-event-introspection)" |
| |
| .PHONY: unittests |
| unittests: buildroot kvmunittests linux |
| @ VERBOSE=$(VERBOSE) $(TEST_SCRIPTS_DIR)/run_tests.sh -j $(JOBS) -t $(KUT_OUT)/share/kvm-unit-tests/ -x $(KUT_EXCLUDE) -l $(LINUX_OUT)/arch/arm64/boot/Image -r $(BR_OUT)/images/rootfs.ext4 -e $(BR_OUT)/host/bin/qemu-system-aarch64 |
| |
| |