diff --git a/hypervisor/Makefile b/hypervisor/Makefile index 2aadfcce9..0ea9a59f5 100644 --- a/hypervisor/Makefile +++ b/hypervisor/Makefile @@ -22,6 +22,13 @@ PLATFORM ?= sbl HV_OBJDIR ?= $(CURDIR)/build HV_FILE := acrn +.PHONY: default +default: all + +include $(BASEDIR)/../scripts/deps.mk + +include scripts/kconfig/kconfig.mk + CFLAGS += -Wall -W CFLAGS += -ffunction-sections -fdata-sections CFLAGS += -fshort-wchar -ffreestanding @@ -173,7 +180,7 @@ DISTCLEAN_OBJS := $(shell find $(BASEDIR) -name '*.o') VERSION := bsp/$(PLATFORM)/include/bsp/version.h .PHONY: all -all: $(VERSION) $(HV_OBJDIR)/$(HV_FILE).32.out $(HV_OBJDIR)/$(HV_FILE).bin +all: $(BUILD_DEPS) $(VERSION) $(HV_OBJDIR)/$(HV_FILE).32.out $(HV_OBJDIR)/$(HV_FILE).bin rm -f $(VERSION) ifeq ($(PLATFORM), uefi) diff --git a/hypervisor/scripts/kconfig/kconfig.mk b/hypervisor/scripts/kconfig/kconfig.mk new file mode 100644 index 000000000..392db2e39 --- /dev/null +++ b/hypervisor/scripts/kconfig/kconfig.mk @@ -0,0 +1,48 @@ +HV_CONFIG := .config +HV_DEFCONFIG := defconfig +HV_CONFIG_H := include/config.h +HV_CONFIG_MK := include/config.mk + +KCONFIG_DIR := $(BASEDIR)/../scripts/kconfig + +$(eval $(call check_dep_exec,python)) +$(eval $(call check_dep_exec,pip)) +$(eval $(call check_dep_pylib,kconfiglib)) + +# This target invoke silentoldconfig to generate a .config only if a .config +# does not exist. Useful as a dependency for source compilation. +$(HV_OBJDIR)/$(HV_CONFIG): + @mkdir -p $(HV_OBJDIR) + @python $(KCONFIG_DIR)/silentoldconfig.py Kconfig $(HV_OBJDIR)/$(HV_CONFIG) PLATFORM_$(shell echo $(PLATFORM) | tr a-z A-Z)=y + +$(HV_OBJDIR)/$(HV_CONFIG_MK): $(HV_OBJDIR)/$(HV_CONFIG) + @mkdir -p $(dir $@) + @cp $< $@ + +$(HV_OBJDIR)/$(HV_CONFIG_H): $(HV_OBJDIR)/$(HV_CONFIG) + @mkdir -p $(dir $@) + @python $(KCONFIG_DIR)/generate_header.py Kconfig $< $@ + +# This target forcefully generate a .config based on a given default +# one. Overwrite the current .config if it exists. +.PHONY: defconfig +defconfig: + @mkdir -p $(HV_OBJDIR) + @python $(KCONFIG_DIR)/defconfig.py Kconfig arch/x86/configs/$(PLATFORM).config $(HV_OBJDIR)/$(HV_CONFIG) + +# Use silentoldconfig to forcefully update the current .config, or generate a +# new one if no previous .config exists. This target can be used as a +# prerequisite of all the others to make sure that the .config is consistent +# even it has been modified manually before. +.PHONY: oldconfig +oldconfig: + @mkdir -p $(HV_OBJDIR) + @python $(KCONFIG_DIR)/silentoldconfig.py Kconfig $(HV_OBJDIR)/$(HV_CONFIG) PLATFORM_$(shell echo $(PLATFORM) | tr a-z A-Z)=y + +# Minimize the current .config. This target can be used to generate a defconfig +# for future use. +.PHONY: minimalconfig +minimalconfig: $(HV_OBJDIR)/$(HV_CONFIG) + @python $(KCONFIG_DIR)/minimalconfig.py Kconfig $(HV_OBJDIR)/$(HV_CONFIG) $(HV_OBJDIR)/$(HV_DEFCONFIG) + +-include $(HV_OBJDIR)/$(HV_CONFIG_MK)