mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-06-24 22:42:53 +00:00
Makefile: generate config patch in hypervisor/Makefile
Previously we generate config patch based on config xml in toplevel Makefile, it brings two issues: 1. we could not generate xml configuration patch with hypervisor source only; 2. The github commit info of current code base which is defined in version.h will be overwritten by the new generated config patch, then the lost commit info would impact build identify and bug reproducing. This patch fixed these two issues. Besides, the patch also modify the logic of platform_acpi_info file existence judgement, which need to be depends on the acrn-config patch. Tracked-On: #3602 Signed-off-by: Victor Sun <victor.sun@intel.com>
This commit is contained in:
parent
5d7d7cf910
commit
3f3ec3865e
54
Makefile
54
Makefile
@ -24,6 +24,7 @@ BUILD_VERSION ?=
|
||||
BUILD_TAG ?=
|
||||
BOARD_FILE ?=
|
||||
SCENARIO_FILE ?=
|
||||
CONFIG_XML_ENABLED ?= false
|
||||
|
||||
export TOOLS_OUT
|
||||
|
||||
@ -31,8 +32,13 @@ export TOOLS_OUT
|
||||
all: hypervisor devicemodel tools
|
||||
|
||||
ifneq ($(BOARD_FILE)$(SCENARIO_FILE),)
|
||||
BOARD := `sed -n '/board/p' $(BOARD_FILE) |head -1|awk -F'"' '{print $$2}'`
|
||||
SCENARIO := `sed -n '/scenario/p' $(SCENARIO_FILE) |head -1|awk -F'"' '{print $$4}'`
|
||||
override BOARD := $(shell echo `sed -n '/<acrn-config/p' $(BOARD_FILE) | sed -r 's/.*board="(.*)".*/\1/g'`)
|
||||
override SCENARIO := $(shell echo `sed -n '/<acrn-config/p' $(SCENARIO_FILE) | sed -r 's/.*scenario="(.*)".*/\1/g'`)
|
||||
|
||||
ifneq ($(BOARD)$(SCENARIO),)
|
||||
CONFIG_XML_ENABLED := true
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(BOARD), apl-nuc)
|
||||
override BOARD := nuc6cayh
|
||||
@ -40,41 +46,21 @@ else ifeq ($(BOARD), kbl-nuc-i7)
|
||||
override BOARD := nuc7i7dnb
|
||||
endif
|
||||
|
||||
cfg_src:
|
||||
@if [ ! -f $(BOARD_FILE) ] ; then \
|
||||
echo "Board xml file $(BOARD_FILE) is not exist!"; exit 1; \
|
||||
fi
|
||||
@if [ ! -f "$(SCENARIO_FILE)" ]; then \
|
||||
echo "Scenario xml file $(SCENARIO_FILE) is not exist!"; exit 1; \
|
||||
fi
|
||||
@python3 misc/acrn-config/board_config/board_cfg_gen.py --board $(BOARD_FILE) --scenario $(SCENARIO_FILE) || exit $$?
|
||||
@python3 misc/acrn-config/scenario_config/scenario_cfg_gen.py --board $(BOARD_FILE) --scenario $(SCENARIO_FILE) || exit $$?
|
||||
@echo "Import hypervisor configurations from Config-xmls, configurations in source code are ignored!"
|
||||
|
||||
else
|
||||
|
||||
ifeq ($(BOARD), apl-nuc)
|
||||
override BOARD := nuc6cayh
|
||||
else ifeq ($(BOARD), kbl-nuc-i7)
|
||||
override BOARD := nuc7i7dnb
|
||||
endif
|
||||
|
||||
cfg_src:
|
||||
@echo "Use hypervisor configurations from source code directly."
|
||||
|
||||
endif
|
||||
|
||||
hypervisor: cfg_src
|
||||
$(MAKE) -C $(T)/hypervisor HV_OBJDIR=$(HV_OUT) BOARD=$(BOARD) FIRMWARE=$(FIRMWARE) RELEASE=$(RELEASE) clean
|
||||
$(MAKE) -C $(T)/hypervisor HV_OBJDIR=$(HV_OUT) BOARD=$(BOARD) FIRMWARE=$(FIRMWARE) RELEASE=$(RELEASE) defconfig
|
||||
hypervisor:
|
||||
$(MAKE) -C $(T)/hypervisor HV_OBJDIR=$(HV_OUT) BOARD=$(BOARD) FIRMWARE=$(FIRMWARE) RELEASE=$(RELEASE) \
|
||||
BOARD_FILE=$(BOARD_FILE) SCENARIO_FILE=$(SCENARIO_FILE) clean
|
||||
$(MAKE) -C $(T)/hypervisor HV_OBJDIR=$(HV_OUT) BOARD=$(BOARD) FIRMWARE=$(FIRMWARE) RELEASE=$(RELEASE) \
|
||||
BOARD_FILE=$(BOARD_FILE) SCENARIO_FILE=$(SCENARIO_FILE) defconfig
|
||||
@if [ "$(SCENARIO)" ]; then \
|
||||
echo "CONFIG_$(shell echo $(SCENARIO) | tr a-z A-Z)=y" >> $(HV_OUT)/.config; \
|
||||
fi
|
||||
@if [ -f "$(SCENARIO_FILE)" ]; then \
|
||||
@if [ "$(CONFIG_XML_ENABLED)" = "true" ]; then \
|
||||
echo "CONFIG_ENFORCE_VALIDATED_ACPI_INFO=y" >> $(HV_OUT)/.config; \
|
||||
fi
|
||||
$(MAKE) -C $(T)/hypervisor HV_OBJDIR=$(HV_OUT) BOARD=$(BOARD) FIRMWARE=$(FIRMWARE) RELEASE=$(RELEASE) oldconfig
|
||||
$(MAKE) -C $(T)/hypervisor HV_OBJDIR=$(HV_OUT) BOARD=$(BOARD) FIRMWARE=$(FIRMWARE) RELEASE=$(RELEASE)
|
||||
$(MAKE) -C $(T)/hypervisor HV_OBJDIR=$(HV_OUT) BOARD=$(BOARD) FIRMWARE=$(FIRMWARE) RELEASE=$(RELEASE) \
|
||||
BOARD_FILE=$(BOARD_FILE) SCENARIO_FILE=$(SCENARIO_FILE) oldconfig
|
||||
$(MAKE) -C $(T)/hypervisor HV_OBJDIR=$(HV_OUT) BOARD=$(BOARD) FIRMWARE=$(FIRMWARE) RELEASE=$(RELEASE) \
|
||||
BOARD_FILE=$(BOARD_FILE) SCENARIO_FILE=$(SCENARIO_FILE)
|
||||
ifeq ($(FIRMWARE),uefi)
|
||||
echo "building hypervisor as EFI executable..."
|
||||
$(MAKE) -C $(T)/misc/efi-stub HV_OBJDIR=$(HV_OUT) SCENARIO=$(SCENARIO) EFI_OBJDIR=$(EFI_OUT)
|
||||
@ -124,13 +110,13 @@ clean:
|
||||
.PHONY: install
|
||||
install: hypervisor-install devicemodel-install tools-install
|
||||
|
||||
hypervisor-install: cfg_src
|
||||
hypervisor-install:
|
||||
$(MAKE) -C $(T)/hypervisor HV_OBJDIR=$(HV_OUT) BOARD=$(BOARD) FIRMWARE=$(FIRMWARE) SCENARIO=$(SCENARIO) RELEASE=$(RELEASE) install
|
||||
ifeq ($(FIRMWARE),uefi)
|
||||
$(MAKE) -C $(T)/misc/efi-stub HV_OBJDIR=$(HV_OUT) BOARD=$(BOARD) FIRMWARE=$(FIRMWARE) SCENARIO=$(SCENARIO) EFI_OBJDIR=$(EFI_OUT) all install
|
||||
endif
|
||||
|
||||
hypervisor-install-debug: cfg_src
|
||||
hypervisor-install-debug:
|
||||
$(MAKE) -C $(T)/hypervisor HV_OBJDIR=$(HV_OUT) BOARD=$(BOARD) FIRMWARE=$(FIRMWARE) SCENARIO=$(SCENARIO) RELEASE=$(RELEASE) install-debug
|
||||
ifeq ($(FIRMWARE),uefi)
|
||||
$(MAKE) -C $(T)/misc/efi-stub HV_OBJDIR=$(HV_OUT) BOARD=$(BOARD) FIRMWARE=$(FIRMWARE) SCENARIO=$(SCENARIO) EFI_OBJDIR=$(EFI_OUT) all install-debug
|
||||
|
@ -5,6 +5,8 @@
|
||||
include ../VERSION
|
||||
FULL_VERSION=$(MAJOR_VERSION).$(MINOR_VERSION)$(EXTRA_VERSION)
|
||||
|
||||
SCENARIO_IN_XML :=
|
||||
|
||||
API_MAJOR_VERSION=1
|
||||
API_MINOR_VERSION=0
|
||||
|
||||
@ -41,6 +43,11 @@ ARCH_ASFLAGS :=
|
||||
ARCH_ARFLAGS :=
|
||||
ARCH_LDFLAGS :=
|
||||
|
||||
ifneq ($(BOARD_FILE)$(SCENARIO_FILE),)
|
||||
override BOARD := $(shell echo `sed -n '/<acrn-config/p' $(BOARD_FILE) | sed -r 's/.*board="(.*)".*/\1/g'`)
|
||||
SCENARIO_IN_XML := $(shell sed -n '/<acrn-config/p' $(SCENARIO_FILE) | sed -r 's/.*scenario="(.*)".*/\1/g')
|
||||
endif
|
||||
|
||||
.PHONY: default
|
||||
default: all
|
||||
|
||||
@ -328,36 +335,36 @@ BOARDTEMPLATE_ACPI_INFO_HEADER := arch/x86/configs/$(CONFIG_BOARD)/platform_acpi
|
||||
SOURCE_ACPI_INFO_HEADER := arch/x86/configs/$(CONFIG_BOARD)/$(CONFIG_BOARD)_acpi_info.h
|
||||
TARGET_ACPI_INFO_HEADER := $(HV_OBJDIR)/include/platform_acpi_info.h
|
||||
|
||||
$(TARGET_ACPI_INFO_HEADER): $(HV_OBJDIR)/$(HV_CONFIG)
|
||||
ifeq (,$(wildcard $(SOURCE_ACPI_INFO_HEADER)))
|
||||
@echo "******* No ACPI info found *******" && \
|
||||
$(TARGET_ACPI_INFO_HEADER): $(HV_OBJDIR)/$(HV_CONFIG) cfg_src
|
||||
ifeq ($(CONFIG_ENFORCE_VALIDATED_ACPI_INFO),y)
|
||||
@if [ ! -f $(SOURCE_ACPI_INFO_HEADER) ]; then \
|
||||
echo "******* No ACPI info found *******" && \
|
||||
echo "Expected ACPI info header at $(SOURCE_ACPI_INFO_HEADER)" && \
|
||||
echo "" && \
|
||||
echo "The ACPI info header for this board is not available. Please use" && \
|
||||
echo "an offline tool on the target board to generate a validated one." && \
|
||||
echo "More details will be available soon."
|
||||
ifdef CONFIG_ENFORCE_VALIDATED_ACPI_INFO
|
||||
@echo "" && \
|
||||
echo "acrn-config tool for the target board to generate a validated one." \
|
||||
echo "If you want to build the hypervisor with the template ACPI info," && \
|
||||
echo "unset ENFORCE_VALIDATED_ACPI_INFO using 'make menuconfig'." && \
|
||||
false
|
||||
else ifeq (,$(wildcard $(BOARDTEMPLATE_ACPI_INFO_HEADER)))
|
||||
@echo "" && \
|
||||
echo "Using the template at $(TEMPLATE_ACPI_INFO_HEADER) instead" && \
|
||||
echo "**********************************"
|
||||
@cp $(TEMPLATE_ACPI_INFO_HEADER) $(TARGET_ACPI_INFO_HEADER)
|
||||
false; \
|
||||
else \
|
||||
echo "Found validated ACPI info file : $(SOURCE_ACPI_INFO_HEADER)"; \
|
||||
cp $(SOURCE_ACPI_INFO_HEADER) $(TARGET_ACPI_INFO_HEADER); \
|
||||
fi
|
||||
else
|
||||
@echo "" && \
|
||||
echo "Using the template at $(BOARDTEMPLATE_ACPI_INFO_HEADER) instead" && \
|
||||
echo "**********************************"
|
||||
@cp $(BOARDTEMPLATE_ACPI_INFO_HEADER) $(TARGET_ACPI_INFO_HEADER)
|
||||
endif
|
||||
else
|
||||
@cp $(SOURCE_ACPI_INFO_HEADER) $(TARGET_ACPI_INFO_HEADER)
|
||||
@if [ -f $(SOURCE_ACPI_INFO_HEADER) ]; then \
|
||||
echo "Found validated ACPI info file : $(SOURCE_ACPI_INFO_HEADER)"; \
|
||||
cp $(SOURCE_ACPI_INFO_HEADER) $(TARGET_ACPI_INFO_HEADER); \
|
||||
elif [ -f $(BOARDTEMPLATE_ACPI_INFO_HEADER) ]; then \
|
||||
echo "No ACPI info found, using the template at $(BOARDTEMPLATE_ACPI_INFO_HEADER) instead"; \
|
||||
cp $(BOARDTEMPLATE_ACPI_INFO_HEADER) $(TARGET_ACPI_INFO_HEADER); \
|
||||
else \
|
||||
echo "No ACPI info found, using the template at $(TEMPLATE_ACPI_INFO_HEADER) instead"; \
|
||||
cp $(TEMPLATE_ACPI_INFO_HEADER) $(TARGET_ACPI_INFO_HEADER); \
|
||||
fi
|
||||
endif
|
||||
|
||||
.PHONY: all
|
||||
all: pre_build $(HV_OBJDIR)/$(HV_FILE).32.out $(HV_OBJDIR)/$(HV_FILE).bin
|
||||
all: cfg_src pre_build $(HV_OBJDIR)/$(HV_FILE).32.out $(HV_OBJDIR)/$(HV_FILE).bin
|
||||
|
||||
install: $(HV_OBJDIR)/$(HV_FILE).32.out
|
||||
install -D $(HV_OBJDIR)/$(HV_FILE).32.out $(DESTDIR)/usr/lib/acrn/$(HV_FILE).$(BOARD).$(FIRMWARE).$(SCENARIO_NAME).32.out
|
||||
@ -366,6 +373,31 @@ install-debug: $(HV_OBJDIR)/$(HV_FILE).map $(HV_OBJDIR)/$(HV_FILE).out
|
||||
install -D $(HV_OBJDIR)/$(HV_FILE).out $(DESTDIR)/usr/lib/acrn/$(HV_FILE).$(BOARD).$(FIRMWARE).$(SCENARIO_NAME).out
|
||||
install -D $(HV_OBJDIR)/$(HV_FILE).map $(DESTDIR)/usr/lib/acrn/$(HV_FILE).$(BOARD).$(FIRMWARE).$(SCENARIO_NAME).map
|
||||
|
||||
cfg_src: $(VERSION)
|
||||
ifneq ($(BOARD_FILE)$(SCENARIO_FILE),)
|
||||
@if [ ! -f $(BOARD_FILE) ]; then \
|
||||
echo "Board xml file $(BOARD_FILE) is not exist!"; exit 1; \
|
||||
fi
|
||||
@if [ ! -f "$(SCENARIO_FILE)" ]; then \
|
||||
echo "Scenario xml file $(SCENARIO_FILE) is not exist!"; exit 1; \
|
||||
fi
|
||||
@if [ "$(BOARD)" != "$(CONFIG_BOARD)" ]; then \
|
||||
echo "Board in xml file <$(BOARD)> does not match Kconfig <$(CONFIG_BOARD)>!"; exit 1; \
|
||||
fi
|
||||
@if [ "$(SCENARIO_IN_XML)" != "$(SCENARIO_NAME)" ]; then \
|
||||
echo "Scenario in xml file <$(SCENARIO_IN_XML)> does not match Kconfig <$(SCENARIO_NAME)>!"; exit 1; \
|
||||
fi
|
||||
@python3 ../misc/acrn-config/board_config/board_cfg_gen.py --board $(BOARD_FILE) --scenario $(SCENARIO_FILE) > $(HV_OBJDIR)/.cfg_src_result
|
||||
@cat $(HV_OBJDIR)/.cfg_src_result
|
||||
@if [ "`sed -n /successfully/p $(HV_OBJDIR)/.cfg_src_result`" = "" ]; then exit 1; fi
|
||||
@python3 ../misc/acrn-config/scenario_config/scenario_cfg_gen.py --board $(BOARD_FILE) --scenario $(SCENARIO_FILE) > $(HV_OBJDIR)/.cfg_src_result
|
||||
@cat $(HV_OBJDIR)/.cfg_src_result
|
||||
@if [ "`sed -n /successfully/p $(HV_OBJDIR)/.cfg_src_result`" = "" ]; then exit 1; fi
|
||||
@echo "Import hypervisor configurations from Config-xmls, configurations in source code are ignored!"
|
||||
else
|
||||
@echo "Use hypervisor configurations from source code directly."
|
||||
endif
|
||||
|
||||
.PHONY: pre_build
|
||||
pre_build: $(PRE_BUILD_OBJS)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user