1HV_OBJDIR ?= $(CURDIR)/build
2HV_CONFIG_H := $(HV_OBJDIR)/include/config.h
3HV_SRC_DIR := ../../hypervisor
4
5ifneq ($(HV_CONFIG_H), $(wildcard $(HV_CONFIG_H)))
6    $(error $(HV_CONFIG_H) does not exist)
7endif
8
9ifeq ($(BOARD),)
10    $(error please specify BOARD for the build!)
11endif
12
13ifeq ($(SCENARIO),)
14    $(error please specify SCENARIO for the build!)
15endif
16
17ifeq ($(CHECKER_OUT),)
18    $(error please specify the path to the generated checker! )
19endif
20
21BOARD_INFO_DIR := $(HV_OBJDIR)/configs/boards
22SCENARIO_CFG_DIR := $(HV_OBJDIR)/configs/scenarios/$(SCENARIO)
23BOARD_CFG_DIR := $(SCENARIO_CFG_DIR)
24
25PRE_BUILD_SRCS += main.c
26PRE_BUILD_SRCS += static_checks.c
27PRE_BUILD_SRCS += vm_cfg_checks.c
28PRE_BUILD_SRCS += $(HV_SRC_DIR)/arch/x86/configs/vm_config.c
29PRE_BUILD_SRCS += $(SCENARIO_CFG_DIR)/vm_configurations.c
30PRE_BUILD_SRCS += $(BOARD_CFG_DIR)/pt_intx.c
31ifneq (,$(wildcard $(BOARD_CFG_DIR)/pci_dev.c))
32PRE_BUILD_SRCS += $(BOARD_CFG_DIR)/pci_dev.c
33endif
34PRE_BUILD_CFLAGS += -fno-stack-protector -fno-builtin -W -Wall
35PRE_BUILD_INCLUDE := $(patsubst %, -I %, $(INCLUDE_PATH)) -include $(HV_CONFIG_H) -I .
36
37.PHONY: default
38default: $(PRE_BUILD_SRCS)
39	@echo "SCENARIO <$(SCENARIO)> for BOARD <$(BOARD)> is specified."
40	@if [ ! -d $(BOARD_INFO_DIR) ]; then \
41		echo "Information of BOARD $(BOARD) is not found."; exit 1; \
42	else \
43		echo "Found BOARD $(BOARD) information under $(BOARD_INFO_DIR)"; \
44	fi;
45	@if [ ! -d $(SCENARIO_CFG_DIR) ]; then \
46		echo "Configurations for SCENARIO $(SCENARIO) is not found."; exit 1; \
47	else \
48		echo "Found SCENARIO $(SCENARIO) configurations under $(SCENARIO_CFG_DIR)"; \
49	fi;
50	@if [ ! -d $(BOARD_CFG_DIR) ]; then \
51		echo "$(BOARD) configuration for SCENARIO $(SCENARIO) is not found."; exit 1; \
52	else \
53		echo "Found $(BOARD) configuration for SCENARIO $(SCENARIO) under $(BOARD_CFG_DIR)"; \
54	fi;
55	$(CC) $(PRE_BUILD_SRCS) $(PRE_BUILD_INCLUDE) $(PRE_BUILD_CFLAGS) -o $(CHECKER_OUT)
56