mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-05-03 22:17:03 +00:00
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>
108 lines
4.0 KiB
Makefile
108 lines
4.0 KiB
Makefile
# usage: override_config <symbol> <default>
|
|
#
|
|
# Given a configuration symbol (without the CONFIG_ prefix), this macro
|
|
# overrides its value as follows.
|
|
# 1. If a value is specified from command line, that value is used.
|
|
# 2. If neither config.mk nor the command line specifies a value, the given
|
|
# default is used.
|
|
define override_config =
|
|
ifdef $(1)
|
|
CONFIG_$(1) := $($(1))
|
|
else ifndef CONFIG_$(1)
|
|
CONFIG_$(1) := $(2)
|
|
endif
|
|
endef
|
|
|
|
HV_CONFIG := .config
|
|
HV_DEFCONFIG := defconfig
|
|
HV_CONFIG_H := include/config.h
|
|
HV_CONFIG_MK := include/config.mk
|
|
|
|
KCONFIG_DIR := $(BASEDIR)/../misc/acrn-config/kconfig
|
|
|
|
# Backward-compatibility for RELEASE=(0|1)
|
|
ifdef RELEASE
|
|
ifeq ($(RELEASE),1)
|
|
override RELEASE := y
|
|
else
|
|
override RELEASE := n
|
|
endif
|
|
endif
|
|
|
|
-include $(HV_OBJDIR)/$(HV_CONFIG_MK)
|
|
ifeq ($(shell [ $(HV_OBJDIR)/$(HV_CONFIG) -nt $(HV_OBJDIR)/$(HV_CONFIG_MK) ] && echo 1),1)
|
|
# config.mk may be outdated if .config has been overwritten. To update config.mk
|
|
# in such cases, we include .config again to get the new configurations. This
|
|
# only happens when GNU make checks the prerequisites.
|
|
-include $(HV_OBJDIR)/$(HV_CONFIG)
|
|
endif
|
|
$(eval $(call override_config,BOARD,apl-mrb))
|
|
$(eval $(call override_config,SCENARIO,))
|
|
$(eval $(call override_config,RELEASE,n))
|
|
|
|
$(eval $(call check_dep_exec,python3,KCONFIG_DEPS))
|
|
$(eval $(call check_dep_py3lib,kconfiglib,KCONFIG_DEPS))
|
|
|
|
# This target invoke silentoldconfig to generate or update a .config. Useful as
|
|
# a prerequisite of other targets depending on .config.
|
|
#
|
|
# A dummy command is necessary to trigger the remaking of config.mk right after
|
|
# oldconfig changes HV_CONFIG in the same execution of make.
|
|
$(HV_OBJDIR)/$(HV_CONFIG): update_config oldconfig
|
|
@true
|
|
|
|
# Note: This target must not depend on a phony target (e.g. oldconfig) because
|
|
# it'll trigger endless re-execution of make.
|
|
$(HV_OBJDIR)/$(HV_CONFIG_MK): $(HV_OBJDIR)/$(HV_CONFIG)
|
|
@mkdir -p $(dir $@)
|
|
@sed 's/="\(.*\)"$$/=\1/g' $(HV_OBJDIR)/$(HV_CONFIG) > $@
|
|
|
|
$(HV_OBJDIR)/$(HV_CONFIG_H): $(HV_OBJDIR)/$(HV_CONFIG)
|
|
@mkdir -p $(dir $@)
|
|
@python3 $(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: $(KCONFIG_DEPS)
|
|
@mkdir -p $(HV_OBJDIR)
|
|
@if [ ! -f $(KCONFIG_FILE) ] && [ "$(CONFIG_XML_ENABLED)" != "true" ]; then \
|
|
BOARD=$(CONFIG_BOARD) python3 $(KCONFIG_DIR)/defconfig.py Kconfig $(HV_OBJDIR)/$(HV_CONFIG); \
|
|
else \
|
|
if [ "$(KCONFIG_FILE)" != "" ] && [ -f $(KCONFIG_FILE) ]; then \
|
|
echo "Writing $(HV_OBJDIR)/$(HV_CONFIG) with $(KCONFIG_FILE)"; \
|
|
cp $(KCONFIG_FILE) $(HV_OBJDIR)/$(HV_CONFIG); \
|
|
elif [ "$(CONFIG_XML_ENABLED)" = "true" ] && [ "$(TARGET_DIR)" != "" ] && [ -d $(TARGET_DIR) ]; then \
|
|
echo "Writing $(HV_OBJDIR)/$(HV_CONFIG) with $(TARGET_DIR)/$(BOARD).config"; \
|
|
cp $(TARGET_DIR)/$(BOARD).config $(HV_OBJDIR)/$(HV_CONFIG); \
|
|
fi; \
|
|
python3 $(KCONFIG_DIR)/silentoldconfig.py Kconfig $(HV_OBJDIR)/$(HV_CONFIG) RELEASE=$(RELEASE); \
|
|
fi
|
|
|
|
# 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: $(KCONFIG_DEPS)
|
|
@mkdir -p $(HV_OBJDIR)
|
|
@BOARD=$(CONFIG_BOARD) \
|
|
python3 $(KCONFIG_DIR)/silentoldconfig.py Kconfig \
|
|
$(HV_OBJDIR)/$(HV_CONFIG) \
|
|
SCENARIO=$(CONFIG_SCENARIO) RELEASE=$(RELEASE)
|
|
|
|
# Minimize the current .config. This target can be used to generate a defconfig
|
|
# for future use.
|
|
.PHONY: savedefconfig
|
|
savedefconfig: $(HV_OBJDIR)/$(HV_CONFIG)
|
|
@python3 $(KCONFIG_DIR)/savedefconfig.py Kconfig \
|
|
$(HV_OBJDIR)/$(HV_CONFIG) \
|
|
$(HV_OBJDIR)/$(HV_DEFCONFIG)
|
|
|
|
$(eval $(call check_dep_exec,menuconfig,MENUCONFIG_DEPS))
|
|
export KCONFIG_CONFIG := $(HV_OBJDIR)/$(HV_CONFIG)
|
|
menuconfig: $(MENUCONFIG_DEPS) defconfig
|
|
@python3 $(shell which menuconfig) Kconfig
|
|
|
|
CFLAGS += -include $(HV_OBJDIR)/$(HV_CONFIG_H)
|