Skip to content

Commit c33a2c2

Browse files
jsun26intelwenlingz
authored andcommitted
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>
1 parent 571b30d commit c33a2c2

File tree

2 files changed

+71
-53
lines changed

2 files changed

+71
-53
lines changed

Makefile

Lines changed: 18 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -24,57 +24,43 @@ BUILD_VERSION ?=
2424
BUILD_TAG ?=
2525
BOARD_FILE ?=
2626
SCENARIO_FILE ?=
27+
CONFIG_XML_ENABLED ?= false
2728

2829
export TOOLS_OUT
2930

3031
.PHONY: all hypervisor devicemodel tools doc
3132
all: hypervisor devicemodel tools
3233

3334
ifneq ($(BOARD_FILE)$(SCENARIO_FILE),)
34-
BOARD := `sed -n '/board/p' $(BOARD_FILE) |head -1|awk -F'"' '{print $$2}'`
35-
SCENARIO := `sed -n '/scenario/p' $(SCENARIO_FILE) |head -1|awk -F'"' '{print $$4}'`
35+
override BOARD := $(shell echo `sed -n '/<acrn-config/p' $(BOARD_FILE) | sed -r 's/.*board="(.*)".*/\1/g'`)
36+
override SCENARIO := $(shell echo `sed -n '/<acrn-config/p' $(SCENARIO_FILE) | sed -r 's/.*scenario="(.*)".*/\1/g'`)
3637
37-
ifeq ($(BOARD), apl-nuc)
38-
override BOARD := nuc6cayh
39-
else ifeq ($(BOARD), kbl-nuc-i7)
40-
override BOARD := nuc7i7dnb
38+
ifneq ($(BOARD)$(SCENARIO),)
39+
CONFIG_XML_ENABLED := true
40+
endif
4141
endif
42-
43-
cfg_src:
44-
@if [ ! -f $(BOARD_FILE) ] ; then \
45-
echo "Board xml file $(BOARD_FILE) is not exist!"; exit 1; \
46-
fi
47-
@if [ ! -f "$(SCENARIO_FILE)" ]; then \
48-
echo "Scenario xml file $(SCENARIO_FILE) is not exist!"; exit 1; \
49-
fi
50-
@python3 misc/acrn-config/board_config/board_cfg_gen.py --board $(BOARD_FILE) --scenario $(SCENARIO_FILE) || exit $$?
51-
@python3 misc/acrn-config/scenario_config/scenario_cfg_gen.py --board $(BOARD_FILE) --scenario $(SCENARIO_FILE) || exit $$?
52-
@echo "Import hypervisor configurations from Config-xmls, configurations in source code are ignored!"
53-
54-
else
5542
5643
ifeq ($(BOARD), apl-nuc)
5744
override BOARD := nuc6cayh
5845
else ifeq ($(BOARD), kbl-nuc-i7)
5946
override BOARD := nuc7i7dnb
6047
endif
6148
62-
cfg_src:
63-
@echo "Use hypervisor configurations from source code directly."
64-
65-
endif
66-
67-
hypervisor: cfg_src
68-
$(MAKE) -C $(T)/hypervisor HV_OBJDIR=$(HV_OUT) BOARD=$(BOARD) FIRMWARE=$(FIRMWARE) RELEASE=$(RELEASE) clean
69-
$(MAKE) -C $(T)/hypervisor HV_OBJDIR=$(HV_OUT) BOARD=$(BOARD) FIRMWARE=$(FIRMWARE) RELEASE=$(RELEASE) defconfig
49+
hypervisor:
50+
$(MAKE) -C $(T)/hypervisor HV_OBJDIR=$(HV_OUT) BOARD=$(BOARD) FIRMWARE=$(FIRMWARE) RELEASE=$(RELEASE) \
51+
BOARD_FILE=$(BOARD_FILE) SCENARIO_FILE=$(SCENARIO_FILE) clean
52+
$(MAKE) -C $(T)/hypervisor HV_OBJDIR=$(HV_OUT) BOARD=$(BOARD) FIRMWARE=$(FIRMWARE) RELEASE=$(RELEASE) \
53+
BOARD_FILE=$(BOARD_FILE) SCENARIO_FILE=$(SCENARIO_FILE) defconfig
7054
@if [ "$(SCENARIO)" ]; then \
7155
echo "CONFIG_$(shell echo $(SCENARIO) | tr a-z A-Z)=y" >> $(HV_OUT)/.config; \
7256
fi
73-
@if [ -f "$(SCENARIO_FILE)" ]; then \
57+
@if [ "$(CONFIG_XML_ENABLED)" = "true" ]; then \
7458
echo "CONFIG_ENFORCE_VALIDATED_ACPI_INFO=y" >> $(HV_OUT)/.config; \
7559
fi
76-
$(MAKE) -C $(T)/hypervisor HV_OBJDIR=$(HV_OUT) BOARD=$(BOARD) FIRMWARE=$(FIRMWARE) RELEASE=$(RELEASE) oldconfig
77-
$(MAKE) -C $(T)/hypervisor HV_OBJDIR=$(HV_OUT) BOARD=$(BOARD) FIRMWARE=$(FIRMWARE) RELEASE=$(RELEASE)
60+
$(MAKE) -C $(T)/hypervisor HV_OBJDIR=$(HV_OUT) BOARD=$(BOARD) FIRMWARE=$(FIRMWARE) RELEASE=$(RELEASE) \
61+
BOARD_FILE=$(BOARD_FILE) SCENARIO_FILE=$(SCENARIO_FILE) oldconfig
62+
$(MAKE) -C $(T)/hypervisor HV_OBJDIR=$(HV_OUT) BOARD=$(BOARD) FIRMWARE=$(FIRMWARE) RELEASE=$(RELEASE) \
63+
BOARD_FILE=$(BOARD_FILE) SCENARIO_FILE=$(SCENARIO_FILE)
7864
ifeq ($(FIRMWARE),uefi)
7965
echo "building hypervisor as EFI executable..."
8066
$(MAKE) -C $(T)/misc/efi-stub HV_OBJDIR=$(HV_OUT) SCENARIO=$(SCENARIO) EFI_OBJDIR=$(EFI_OUT)
@@ -124,13 +110,13 @@ clean:
124110
.PHONY: install
125111
install: hypervisor-install devicemodel-install tools-install
126112
127-
hypervisor-install: cfg_src
113+
hypervisor-install:
128114
$(MAKE) -C $(T)/hypervisor HV_OBJDIR=$(HV_OUT) BOARD=$(BOARD) FIRMWARE=$(FIRMWARE) SCENARIO=$(SCENARIO) RELEASE=$(RELEASE) install
129115
ifeq ($(FIRMWARE),uefi)
130116
$(MAKE) -C $(T)/misc/efi-stub HV_OBJDIR=$(HV_OUT) BOARD=$(BOARD) FIRMWARE=$(FIRMWARE) SCENARIO=$(SCENARIO) EFI_OBJDIR=$(EFI_OUT) all install
131117
endif
132118
133-
hypervisor-install-debug: cfg_src
119+
hypervisor-install-debug:
134120
$(MAKE) -C $(T)/hypervisor HV_OBJDIR=$(HV_OUT) BOARD=$(BOARD) FIRMWARE=$(FIRMWARE) SCENARIO=$(SCENARIO) RELEASE=$(RELEASE) install-debug
135121
ifeq ($(FIRMWARE),uefi)
136122
$(MAKE) -C $(T)/misc/efi-stub HV_OBJDIR=$(HV_OUT) BOARD=$(BOARD) FIRMWARE=$(FIRMWARE) SCENARIO=$(SCENARIO) EFI_OBJDIR=$(EFI_OUT) all install-debug

hypervisor/Makefile

Lines changed: 53 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
include ../VERSION
66
FULL_VERSION=$(MAJOR_VERSION).$(MINOR_VERSION)$(EXTRA_VERSION)
77

8+
SCENARIO_IN_XML :=
9+
810
API_MAJOR_VERSION=1
911
API_MINOR_VERSION=0
1012

@@ -41,6 +43,11 @@ ARCH_ASFLAGS :=
4143
ARCH_ARFLAGS :=
4244
ARCH_LDFLAGS :=
4345

46+
ifneq ($(BOARD_FILE)$(SCENARIO_FILE),)
47+
override BOARD := $(shell echo `sed -n '/<acrn-config/p' $(BOARD_FILE) | sed -r 's/.*board="(.*)".*/\1/g'`)
48+
SCENARIO_IN_XML := $(shell sed -n '/<acrn-config/p' $(SCENARIO_FILE) | sed -r 's/.*scenario="(.*)".*/\1/g')
49+
endif
50+
4451
.PHONY: default
4552
default: all
4653
@@ -327,36 +334,36 @@ BOARDTEMPLATE_ACPI_INFO_HEADER := arch/x86/configs/$(CONFIG_BOARD)/platform_acpi
327334
SOURCE_ACPI_INFO_HEADER := arch/x86/configs/$(CONFIG_BOARD)/$(CONFIG_BOARD)_acpi_info.h
328335
TARGET_ACPI_INFO_HEADER := $(HV_OBJDIR)/include/platform_acpi_info.h
329336
330-
$(TARGET_ACPI_INFO_HEADER): $(HV_OBJDIR)/$(HV_CONFIG)
331-
ifeq (,$(wildcard $(SOURCE_ACPI_INFO_HEADER)))
332-
@echo "******* No ACPI info found *******" && \
337+
$(TARGET_ACPI_INFO_HEADER): $(HV_OBJDIR)/$(HV_CONFIG) cfg_src
338+
ifeq ($(CONFIG_ENFORCE_VALIDATED_ACPI_INFO),y)
339+
@if [ ! -f $(SOURCE_ACPI_INFO_HEADER) ]; then \
340+
echo "******* No ACPI info found *******" && \
333341
echo "Expected ACPI info header at $(SOURCE_ACPI_INFO_HEADER)" && \
334342
echo "" && \
335343
echo "The ACPI info header for this board is not available. Please use" && \
336-
echo "an offline tool on the target board to generate a validated one." && \
337-
echo "More details will be available soon."
338-
ifdef CONFIG_ENFORCE_VALIDATED_ACPI_INFO
339-
@echo "" && \
344+
echo "acrn-config tool for the target board to generate a validated one." \
340345
echo "If you want to build the hypervisor with the template ACPI info," && \
341346
echo "unset ENFORCE_VALIDATED_ACPI_INFO using 'make menuconfig'." && \
342-
false
343-
else ifeq (,$(wildcard $(BOARDTEMPLATE_ACPI_INFO_HEADER)))
344-
@echo "" && \
345-
echo "Using the template at $(TEMPLATE_ACPI_INFO_HEADER) instead" && \
346-
echo "**********************************"
347-
@cp $(TEMPLATE_ACPI_INFO_HEADER) $(TARGET_ACPI_INFO_HEADER)
348-
else
349-
@echo "" && \
350-
echo "Using the template at $(BOARDTEMPLATE_ACPI_INFO_HEADER) instead" && \
351-
echo "**********************************"
352-
@cp $(BOARDTEMPLATE_ACPI_INFO_HEADER) $(TARGET_ACPI_INFO_HEADER)
353-
endif
347+
false; \
348+
else \
349+
echo "Found validated ACPI info file : $(SOURCE_ACPI_INFO_HEADER)"; \
350+
cp $(SOURCE_ACPI_INFO_HEADER) $(TARGET_ACPI_INFO_HEADER); \
351+
fi
354352
else
355-
@cp $(SOURCE_ACPI_INFO_HEADER) $(TARGET_ACPI_INFO_HEADER)
353+
@if [ -f $(SOURCE_ACPI_INFO_HEADER) ]; then \
354+
echo "Found validated ACPI info file : $(SOURCE_ACPI_INFO_HEADER)"; \
355+
cp $(SOURCE_ACPI_INFO_HEADER) $(TARGET_ACPI_INFO_HEADER); \
356+
elif [ -f $(BOARDTEMPLATE_ACPI_INFO_HEADER) ]; then \
357+
echo "No ACPI info found, using the template at $(BOARDTEMPLATE_ACPI_INFO_HEADER) instead"; \
358+
cp $(BOARDTEMPLATE_ACPI_INFO_HEADER) $(TARGET_ACPI_INFO_HEADER); \
359+
else \
360+
echo "No ACPI info found, using the template at $(TEMPLATE_ACPI_INFO_HEADER) instead"; \
361+
cp $(TEMPLATE_ACPI_INFO_HEADER) $(TARGET_ACPI_INFO_HEADER); \
362+
fi
356363
endif
357364
358365
.PHONY: all
359-
all: pre_build $(HV_OBJDIR)/$(HV_FILE).32.out $(HV_OBJDIR)/$(HV_FILE).bin
366+
all: cfg_src pre_build $(HV_OBJDIR)/$(HV_FILE).32.out $(HV_OBJDIR)/$(HV_FILE).bin
360367
361368
install: $(HV_OBJDIR)/$(HV_FILE).32.out
362369
install -D $(HV_OBJDIR)/$(HV_FILE).32.out $(DESTDIR)/usr/lib/acrn/$(HV_FILE).$(BOARD).$(FIRMWARE).$(SCENARIO_NAME).32.out
@@ -365,6 +372,31 @@ install-debug: $(HV_OBJDIR)/$(HV_FILE).map $(HV_OBJDIR)/$(HV_FILE).out
365372
install -D $(HV_OBJDIR)/$(HV_FILE).out $(DESTDIR)/usr/lib/acrn/$(HV_FILE).$(BOARD).$(FIRMWARE).$(SCENARIO_NAME).out
366373
install -D $(HV_OBJDIR)/$(HV_FILE).map $(DESTDIR)/usr/lib/acrn/$(HV_FILE).$(BOARD).$(FIRMWARE).$(SCENARIO_NAME).map
367374
375+
cfg_src: $(VERSION)
376+
ifneq ($(BOARD_FILE)$(SCENARIO_FILE),)
377+
@if [ ! -f $(BOARD_FILE) ]; then \
378+
echo "Board xml file $(BOARD_FILE) is not exist!"; exit 1; \
379+
fi
380+
@if [ ! -f "$(SCENARIO_FILE)" ]; then \
381+
echo "Scenario xml file $(SCENARIO_FILE) is not exist!"; exit 1; \
382+
fi
383+
@if [ "$(BOARD)" != "$(CONFIG_BOARD)" ]; then \
384+
echo "Board in xml file <$(BOARD)> does not match Kconfig <$(CONFIG_BOARD)>!"; exit 1; \
385+
fi
386+
@if [ "$(SCENARIO_IN_XML)" != "$(SCENARIO_NAME)" ]; then \
387+
echo "Scenario in xml file <$(SCENARIO_IN_XML)> does not match Kconfig <$(SCENARIO_NAME)>!"; exit 1; \
388+
fi
389+
@python3 ../misc/acrn-config/board_config/board_cfg_gen.py --board $(BOARD_FILE) --scenario $(SCENARIO_FILE) > $(HV_OBJDIR)/.cfg_src_result
390+
@cat $(HV_OBJDIR)/.cfg_src_result
391+
@if [ "`sed -n /successfully/p $(HV_OBJDIR)/.cfg_src_result`" = "" ]; then exit 1; fi
392+
@python3 ../misc/acrn-config/scenario_config/scenario_cfg_gen.py --board $(BOARD_FILE) --scenario $(SCENARIO_FILE) > $(HV_OBJDIR)/.cfg_src_result
393+
@cat $(HV_OBJDIR)/.cfg_src_result
394+
@if [ "`sed -n /successfully/p $(HV_OBJDIR)/.cfg_src_result`" = "" ]; then exit 1; fi
395+
@echo "Import hypervisor configurations from Config-xmls, configurations in source code are ignored!"
396+
else
397+
@echo "Use hypervisor configurations from source code directly."
398+
endif
399+
368400
.PHONY: pre_build
369401
pre_build: $(PRE_BUILD_OBJS)
370402

0 commit comments

Comments
 (0)