Kconfig: change scenario variable type to string

Basicly ACRN scenario is a configuration name for specific usage. By giving
scenario name ACRN will load corresponding VM configurations to build the
hypervisor. But customer might have their own scenario name, change the
scenario type from choice to string is friendly to them since Kconfig source
file change will not be needed.

With this change, CONFIG_$(SCENARIO) will not exist in kconfig file and will
be instead of CONFIG_SCENARIO, so the Makefile need to be changed accordingly;

Tracked-On: #4616

Signed-off-by: Victor Sun <victor.sun@intel.com>
This commit is contained in:
Victor Sun 2020-04-13 09:47:26 +08:00 committed by wenlingz
parent 28bffa7756
commit 4388099c3a
4 changed files with 34 additions and 88 deletions

View File

@ -75,8 +75,7 @@ ifeq ($(KCONFIG_FILE), $(wildcard $(KCONFIG_FILE)))
$(error no BOARD info in KCONFIG_FILE: $(KCONFIG_FILE)) $(error no BOARD info in KCONFIG_FILE: $(KCONFIG_FILE))
endif endif
SCENARIO_IN_KCONFIG := $(shell grep -E "SDC=y|SDC2=y|INDUSTRY=y|LOGICAL_PARTITION=y|HYBRID=y" \ SCENARIO_IN_KCONFIG := $(shell grep CONFIG_SCENARIO= $(KCONFIG_FILE) | grep -v '\#' | awk -F '"' '{print $$2}')
$(KCONFIG_FILE) | grep -v '\#' | awk -F "=" '{print $$1}' | cut -d '_' -f 2- | tr A-Z a-z)
ifeq ($(SCENARIO_IN_KCONFIG),) ifeq ($(SCENARIO_IN_KCONFIG),)
$(error no SCENARIO info in KCONFIG_FILE: $(KCONFIG_FILE)) $(error no SCENARIO info in KCONFIG_FILE: $(KCONFIG_FILE))
endif endif
@ -131,14 +130,13 @@ include $(T)/hypervisor/scripts/makefile/cfg_update.mk
#help functions to build acrn and install acrn/acrn symbols #help functions to build acrn and install acrn/acrn symbols
define build_acrn define build_acrn
$(MAKE) -C $(T)/hypervisor HV_OBJDIR=$(HV_OUT)-$(1)/$(2) BOARD=$(2) FIRMWARE=$(1) SCENARIO=$(4) RELEASE=$(RELEASE) clean $(MAKE) -C $(T)/hypervisor HV_OBJDIR=$(HV_OUT)-$(1)/$(2) BOARD=$(2) FIRMWARE=$(1) SCENARIO=$(3) RELEASE=$(RELEASE) clean
$(MAKE) -C $(T)/hypervisor HV_OBJDIR=$(HV_OUT)-$(1)/$(2) BOARD=$(2) FIRMWARE=$(1) SCENARIO=$(4) RELEASE=$(RELEASE) defconfig $(MAKE) -C $(T)/hypervisor HV_OBJDIR=$(HV_OUT)-$(1)/$(2) BOARD=$(2) FIRMWARE=$(1) SCENARIO=$(3) RELEASE=$(RELEASE) defconfig
@echo "$(3)=y" >> $(HV_OUT)-$(1)/$(2)/.config $(MAKE) -C $(T)/hypervisor HV_OBJDIR=$(HV_OUT)-$(1)/$(2) BOARD=$(2) FIRMWARE=$(1) SCENARIO=$(3) RELEASE=$(RELEASE) oldconfig
$(MAKE) -C $(T)/hypervisor HV_OBJDIR=$(HV_OUT)-$(1)/$(2) BOARD=$(2) FIRMWARE=$(1) SCENARIO=$(4) RELEASE=$(RELEASE) oldconfig $(MAKE) -C $(T)/hypervisor HV_OBJDIR=$(HV_OUT)-$(1)/$(2) BOARD=$(2) FIRMWARE=$(1) SCENARIO=$(3) RELEASE=$(RELEASE)
$(MAKE) -C $(T)/hypervisor HV_OBJDIR=$(HV_OUT)-$(1)/$(2) BOARD=$(2) FIRMWARE=$(1) SCENARIO=$(4) RELEASE=$(RELEASE)
echo "building hypervisor as EFI executable..." echo "building hypervisor as EFI executable..."
@if [ "$(1)" = "uefi" ]; then \ @if [ "$(1)" = "uefi" ]; then \
$(MAKE) -C $(T)/misc/efi-stub HV_OBJDIR=$(HV_OUT)-$(1)/$(2) SCENARIO=$(4) EFI_OBJDIR=$(HV_OUT)-$(1)/$(2)/$(EFI_OUT); \ $(MAKE) -C $(T)/misc/efi-stub HV_OBJDIR=$(HV_OUT)-$(1)/$(2) SCENARIO=$(3) EFI_OBJDIR=$(HV_OUT)-$(1)/$(2)/$(EFI_OUT); \
fi fi
endef endef
@ -157,17 +155,12 @@ define install_acrn_debug
endef endef
hypervisor: hypervisor:
@if [ "$(SCENARIO)" != "sdc" ] && [ "$(SCENARIO)" != "sdc2" ] && [ "$(SCENARIO)" != "industry" ] \
&& [ "$(SCENARIO)" != "logical_partition" ] && [ "$(SCENARIO)" != "hybrid" ]; then \
echo "SCENARIO <$(SCENARIO)> is not supported. "; exit 1; \
fi
@if [ "$(BOARD_FILE)" != "" ] && [ -f $(BOARD_FILE) ] && [ "$(SCENARIO_FILE)" != "" ] && [ -f $(SCENARIO_FILE) ] && [ "$(TARGET_DIR)" = "" ]; then \ @if [ "$(BOARD_FILE)" != "" ] && [ -f $(BOARD_FILE) ] && [ "$(SCENARIO_FILE)" != "" ] && [ -f $(SCENARIO_FILE) ] && [ "$(TARGET_DIR)" = "" ]; then \
echo "No TARGET_DIR parameter is specified, the original configuration source is overwritten!";\ echo "No TARGET_DIR parameter is specified, the original configuration source is overwritten!";\
fi fi
$(MAKE) -C $(T)/hypervisor HV_OBJDIR=$(HV_OUT) BOARD_FILE=$(BOARD_FILE) SCENARIO_FILE=$(SCENARIO_FILE) clean; $(MAKE) -C $(T)/hypervisor HV_OBJDIR=$(HV_OUT) BOARD_FILE=$(BOARD_FILE) SCENARIO_FILE=$(SCENARIO_FILE) clean;
$(MAKE) -C $(T)/hypervisor HV_OBJDIR=$(HV_OUT) BOARD_FILE=$(BOARD_FILE) SCENARIO_FILE=$(SCENARIO_FILE) TARGET_DIR=$(abspath $(TARGET_DIR)) defconfig; $(MAKE) -C $(T)/hypervisor HV_OBJDIR=$(HV_OUT) BOARD_FILE=$(BOARD_FILE) SCENARIO_FILE=$(SCENARIO_FILE) TARGET_DIR=$(abspath $(TARGET_DIR)) defconfig;
@if [ "$(CONFIG_XML_ENABLED)" != "true" ] && [ ! -f $(KCONFIG_FILE) ]; then \ @if [ "$(CONFIG_XML_ENABLED)" != "true" ] && [ ! -f $(KCONFIG_FILE) ]; then \
echo "CONFIG_$(shell echo $(SCENARIO) | tr a-z A-Z)=y" >> $(HV_OUT)/.config; \
if [ "$(SCENARIO)" != "sdc" ]; then \ if [ "$(SCENARIO)" != "sdc" ]; then \
echo "CONFIG_MAX_KATA_VM_NUM=0" >> $(HV_OUT)/.config; \ echo "CONFIG_MAX_KATA_VM_NUM=0" >> $(HV_OUT)/.config; \
fi; \ fi; \
@ -239,13 +232,13 @@ ifeq ($(FIRMWARE),uefi)
endif endif
apl-mrb-sbl-sdc: apl-mrb-sbl-sdc:
$(call build_acrn,sbl,apl-mrb,CONFIG_SDC,sdc) $(call build_acrn,sbl,apl-mrb,sdc)
apl-up2-sbl-sdc: apl-up2-sbl-sdc:
$(call build_acrn,sbl,apl-up2,CONFIG_SDC,sdc) $(call build_acrn,sbl,apl-up2,sdc)
kbl-nuc-i7-uefi-industry: kbl-nuc-i7-uefi-industry:
$(call build_acrn,uefi,nuc7i7dnb,CONFIG_INDUSTRY,industry) $(call build_acrn,uefi,nuc7i7dnb,industry)
apl-up2-uefi-hybrid: apl-up2-uefi-hybrid:
$(call build_acrn,uefi,apl-up2,CONFIG_HYBRID,hybrid) $(call build_acrn,uefi,apl-up2,hybrid)
sbl-hypervisor: apl-mrb-sbl-sdc \ sbl-hypervisor: apl-mrb-sbl-sdc \
apl-up2-sbl-sdc \ apl-up2-sbl-sdc \

View File

@ -50,31 +50,11 @@ include scripts/makefile/deps.mk
include scripts/makefile/kconfig.mk include scripts/makefile/kconfig.mk
#initialize BOARD if it is not specified #override BOARD from CONFIG_BOARD, which is specified in kconfig.mk
ifeq ($(BOARD),) override BOARD := $(shell echo $(CONFIG_BOARD) |sed 's/"//g')
override BOARD := $(CONFIG_BOARD)
endif
ifeq ($(CONFIG_SDC),y) #override SCENARIO from CONFIG_SCENARIO, which is specified in kconfig.mk
KCONFIG_SCENARIO := sdc override SCENARIO := $(shell echo $(CONFIG_SCENARIO) |sed 's/"//g')
else ifeq ($(CONFIG_SDC2),y)
KCONFIG_SCENARIO := sdc2
else ifeq ($(CONFIG_LOGICAL_PARTITION),y)
KCONFIG_SCENARIO := logical_partition
else ifeq ($(CONFIG_INDUSTRY),y)
KCONFIG_SCENARIO := industry
else ifeq ($(CONFIG_HYBRID),y)
KCONFIG_SCENARIO := hybrid
endif
#initialize SCENARIO if it is not specified
ifeq ($(SCENARIO),)
ifeq ($(KCONFIG_SCENARIO),)
override SCENARIO := sdc
else
override SCENARIO := $(KCONFIG_SCENARIO)
endif
endif
ifeq ($(TARGET_DIR),) ifeq ($(TARGET_DIR),)
BOARD_CFG_DIR := arch/x86/configs/$(BOARD) BOARD_CFG_DIR := arch/x86/configs/$(BOARD)
@ -510,6 +490,8 @@ distclean:
PHONY: (VERSION) PHONY: (VERSION)
$(VERSION): $(VERSION):
@if [ "$(SCENARIO)" = "" ]; then echo "Please specify SCENARIO for the build!"; exit 1; fi;
@if [ "$(BOARD)" = "" ]; then echo "Please specify BOARD for the build!"; exit 1; fi;
@echo "SCENARIO <$(SCENARIO)> for BOARD <$(BOARD)> is specified." @echo "SCENARIO <$(SCENARIO)> for BOARD <$(BOARD)> is specified."
@if [ ! -d $(BOARD_CFG_DIR) ]; then \ @if [ ! -d $(BOARD_CFG_DIR) ]; then \
echo "Configurations for BOARD $(BOARD) is not found."; exit 1; \ echo "Configurations for BOARD $(BOARD) is not found."; exit 1; \

View File

@ -1,41 +1,18 @@
choice config SCENARIO
prompt "ACRN Scenario" string "ACRN scenario"
default SDC default "sdc"
help help
Select the scenario name to load corresponding VM configuration. By specifying SCENARIO name, ACRN will load corresponding VM configurations
to build the hypervisor. Currently ACRN provides below reference scenarios:
config SDC sdc: Typical scenario for automotive Software Defined Cockpit system.
bool "Software Defined Cockpit" sdc will have one pre-launched SOS VM and one post-launched VM;
help sdc2: Extended scenario for automotive Software Defined Cockpit system.
SDC (Software Defined Cockpit) is a typical scenario that ACRN supported. sdc2 will have one pre-launched SOS VM and up to three post-launched VMs;
SDC will have one pre-launched SOS VM and one post-launched VM. industry: Typical scenario for industry usage with 3 VMs: one pre-launched SOS VM,
one post-launched Standard VM for HMI, one post-launched RT VM for real-time control.
config SDC2 hybrid: Typical scenario for hybrid usage with 3 VMs: one pre-launched VM,
bool "Software Defined Cockpit 2" one pre-launched SOS VM and one post-launched Standard VM;
help logical_partition: Typical scenario that run two isolated pre-launched VMs;
SDC2 (Software Defined Cockpit 2) is an extended scenario for automotive SDC system.
SDC2 will have one pre-launched SOS VM and up to three post-launched VM.
config LOGICAL_PARTITION
bool "Logical Partition VMs"
help
This scenario will run two pre-launched VMs.
config INDUSTRY
bool "Industry VMs"
help
This scenario is a typical scenario for industry usage with 4 VMs:
one pre-launched SOS VM, one post-launched Standard VM for HMI, one or two
post-launched RT VM for real-time control.
config HYBRID
bool "Hybrid VMs"
help
This scenario is a typical scenario for hybrid usage with 3 VMs:
one pre-launched VM, one pre-launched SOS VM and one post-launched Standard
VM.
endchoice
config MULTIBOOT2 config MULTIBOOT2
bool "Multiboot2 support" bool "Multiboot2 support"

View File

@ -36,16 +36,10 @@ ifeq ($(shell [ $(HV_OBJDIR)/$(HV_CONFIG) -nt $(HV_OBJDIR)/$(HV_CONFIG_MK) ] &&
# only happens when GNU make checks the prerequisites. # only happens when GNU make checks the prerequisites.
-include $(HV_OBJDIR)/$(HV_CONFIG) -include $(HV_OBJDIR)/$(HV_CONFIG)
endif endif
$(eval $(call override_config,BOARD,apl-mrb)) $(eval $(call override_config,BOARD,apl-mrb))
$(eval $(call override_config,SCENARIO,))
$(eval $(call override_config,RELEASE,n)) $(eval $(call override_config,RELEASE,n))
ifdef BOARD
TARGET_BOARD=$(BOARD)
else
TARGET_BOARD=$(CONFIG_BOARD)
endif
$(eval $(call check_dep_exec,python3,KCONFIG_DEPS)) $(eval $(call check_dep_exec,python3,KCONFIG_DEPS))
$(eval $(call check_dep_py3lib,kconfiglib,KCONFIG_DEPS)) $(eval $(call check_dep_py3lib,kconfiglib,KCONFIG_DEPS))
@ -73,7 +67,7 @@ $(HV_OBJDIR)/$(HV_CONFIG_H): $(HV_OBJDIR)/$(HV_CONFIG)
defconfig: $(KCONFIG_DEPS) defconfig: $(KCONFIG_DEPS)
@mkdir -p $(HV_OBJDIR) @mkdir -p $(HV_OBJDIR)
@if [ ! -f $(KCONFIG_FILE) ] && [ "$(CONFIG_XML_ENABLED)" != "true" ]; then \ @if [ ! -f $(KCONFIG_FILE) ] && [ "$(CONFIG_XML_ENABLED)" != "true" ]; then \
BOARD=$(TARGET_BOARD) python3 $(KCONFIG_DIR)/defconfig.py Kconfig $(HV_OBJDIR)/$(HV_CONFIG); \ BOARD=$(CONFIG_BOARD) python3 $(KCONFIG_DIR)/defconfig.py Kconfig $(HV_OBJDIR)/$(HV_CONFIG); \
else \ else \
if [ "$(KCONFIG_FILE)" != "" ] && [ -f $(KCONFIG_FILE) ]; then \ if [ "$(KCONFIG_FILE)" != "" ] && [ -f $(KCONFIG_FILE) ]; then \
echo "Writing $(HV_OBJDIR)/$(HV_CONFIG) with $(KCONFIG_FILE)"; \ echo "Writing $(HV_OBJDIR)/$(HV_CONFIG) with $(KCONFIG_FILE)"; \
@ -92,10 +86,10 @@ defconfig: $(KCONFIG_DEPS)
.PHONY: oldconfig .PHONY: oldconfig
oldconfig: $(KCONFIG_DEPS) oldconfig: $(KCONFIG_DEPS)
@mkdir -p $(HV_OBJDIR) @mkdir -p $(HV_OBJDIR)
@BOARD=$(TARGET_BOARD) \ @BOARD=$(CONFIG_BOARD) \
python3 $(KCONFIG_DIR)/silentoldconfig.py Kconfig \ python3 $(KCONFIG_DIR)/silentoldconfig.py Kconfig \
$(HV_OBJDIR)/$(HV_CONFIG) \ $(HV_OBJDIR)/$(HV_CONFIG) \
RELEASE=$(RELEASE) SCENARIO=$(CONFIG_SCENARIO) RELEASE=$(RELEASE)
# Minimize the current .config. This target can be used to generate a defconfig # Minimize the current .config. This target can be used to generate a defconfig
# for future use. # for future use.