mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-06-03 04:39:50 +00:00
This patch adds code to support read-only RTC support for guests run by partition mode ACRN. It supports RW for CMOS address port 0x70 and RO for CMOS data port 0x71. Reads to CMOS RAM offsets are fetched by reading CMOS h/w directly and writes to CMOS offsets are discarded. Signed-off-by: Sainath Grandhi <sainath.grandhi@intel.com>
305 lines
8.5 KiB
Makefile
305 lines
8.5 KiB
Makefile
#
|
|
# ACRN Hypervisor
|
|
#
|
|
|
|
include ../VERSION
|
|
FULL_VERSION=$(MAJOR_VERSION).$(MINOR_VERSION)$(EXTRA_VERSION)
|
|
|
|
API_MAJOR_VERSION=1
|
|
API_MINOR_VERSION=0
|
|
|
|
GCC_MAJOR=$(shell echo __GNUC__ | $(CC) -E -x c - | tail -n 1)
|
|
GCC_MINOR=$(shell echo __GNUC_MINOR__ | $(CC) -E -x c - | tail -n 1)
|
|
|
|
#enable stack overflow check
|
|
STACK_PROTECTOR := 1
|
|
|
|
BASEDIR := $(shell pwd)
|
|
HV_OBJDIR ?= $(CURDIR)/build
|
|
HV_FILE := acrn
|
|
|
|
# initialize the flags we used
|
|
CFLAGS :=
|
|
ASFLAGS :=
|
|
LDFLAGS :=
|
|
ARCH_CFLAGS :=
|
|
ARCH_ASFLAGS :=
|
|
ARCH_ARFLAGS :=
|
|
ARCH_LDFLAGS :=
|
|
|
|
.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
|
|
CFLAGS += -m64 -mno-mmx -mno-sse -mno-sse2 -mno-80387 -mno-fp-ret-in-387
|
|
CFLAGS += -mno-red-zone
|
|
CFLAGS += -nostdinc -nostdlib -fno-common
|
|
CFLAGS += -O2 -D_FORTIFY_SOURCE=2
|
|
CFLAGS += -Wformat -Wformat-security
|
|
ifeq (y, $(CONFIG_RELOC))
|
|
CFLAGS += -fpie
|
|
else
|
|
CFLAGS += -static
|
|
endif
|
|
|
|
|
|
ifdef STACK_PROTECTOR
|
|
ifeq (true, $(shell [ $(GCC_MAJOR) -gt 4 ] && echo true))
|
|
CFLAGS += -fstack-protector-strong
|
|
else
|
|
ifeq (true, $(shell [ $(GCC_MAJOR) -eq 4 ] && [ $(GCC_MINOR) -ge 9 ] && echo true))
|
|
CFLAGS += -fstack-protector-strong
|
|
else
|
|
CFLAGS += -fstack-protector
|
|
endif
|
|
endif
|
|
CFLAGS += -DSTACK_PROTECTOR
|
|
endif
|
|
|
|
ASFLAGS += -m64 -nostdinc -nostdlib
|
|
|
|
LDFLAGS += -Wl,--gc-sections -nostartfiles -nostdlib
|
|
LDFLAGS += -Wl,-n,-z,max-page-size=0x1000
|
|
LDFLAGS += -Wl,-z,noexecstack
|
|
|
|
ifeq (y, $(CONFIG_RELOC))
|
|
# on X86_64, when build with "-pie", GCC fails on linking R_X86_64_32
|
|
# relocations with "recompile with fPIC" error, because it may cause
|
|
# run-time relocation overflow if it runs at address above 4GB.
|
|
# We know it's safe because Hypervisor runs under 4GB. "noreloc-overflow"
|
|
# is used to avoid the compile error
|
|
LDFLAGS += -pie -z noreloc-overflow
|
|
else
|
|
LDFLAGS += -static
|
|
endif
|
|
|
|
ARCH_CFLAGS += -gdwarf-2
|
|
ARCH_ASFLAGS += -gdwarf-2 -DASSEMBLER=1
|
|
ARCH_ARFLAGS +=
|
|
ARCH_LDFLAGS +=
|
|
|
|
ARCH_LDSCRIPT = $(HV_OBJDIR)/link_ram.ld
|
|
ARCH_LDSCRIPT_IN = bsp/ld/link_ram.ld.in
|
|
|
|
INCLUDE_PATH += include
|
|
INCLUDE_PATH += include/lib
|
|
INCLUDE_PATH += include/lib/crypto
|
|
INCLUDE_PATH += include/common
|
|
INCLUDE_PATH += include/arch/x86
|
|
INCLUDE_PATH += include/arch/x86/guest
|
|
INCLUDE_PATH += include/debug
|
|
INCLUDE_PATH += include/public
|
|
ifeq ($(CONFIG_PARTITION_MODE),y)
|
|
INCLUDE_PATH += include/dm/vpci
|
|
endif
|
|
INCLUDE_PATH += bsp/include
|
|
INCLUDE_PATH += bsp/$(CONFIG_PLATFORM)/include/bsp
|
|
INCLUDE_PATH += boot/include
|
|
INCLUDE_PATH += $(HV_OBJDIR)/include
|
|
|
|
CC ?= gcc
|
|
AS ?= as
|
|
AR ?= ar
|
|
LD ?= ld
|
|
OBJCOPY ?= objcopy
|
|
|
|
D_SRCS += $(wildcard debug/*.c)
|
|
C_SRCS += boot/acpi.c
|
|
C_SRCS += boot/dmar_parse.c
|
|
C_SRCS += boot/reloc.c
|
|
C_SRCS += arch/x86/ioapic.c
|
|
C_SRCS += arch/x86/lapic.c
|
|
S_SRCS += arch/x86/trampoline.S
|
|
C_SRCS += arch/x86/cpu.c
|
|
C_SRCS += arch/x86/cpuid.c
|
|
C_SRCS += arch/x86/mmu.c
|
|
C_SRCS += arch/x86/pagetable.c
|
|
C_SRCS += arch/x86/notify.c
|
|
C_SRCS += arch/x86/vtd.c
|
|
C_SRCS += arch/x86/gdt.c
|
|
S_SRCS += arch/x86/cpu_primary.S
|
|
S_SRCS += arch/x86/cpu_save_boot_ctx.S
|
|
S_SRCS += arch/x86/idt.S
|
|
C_SRCS += arch/x86/irq.c
|
|
C_SRCS += arch/x86/timer.c
|
|
C_SRCS += arch/x86/ept.c
|
|
S_SRCS += arch/x86/vmx_asm.S
|
|
C_SRCS += arch/x86/io.c
|
|
C_SRCS += arch/x86/virq.c
|
|
C_SRCS += arch/x86/vmexit.c
|
|
C_SRCS += arch/x86/vmx.c
|
|
C_SRCS += arch/x86/assign.c
|
|
C_SRCS += arch/x86/trusty.c
|
|
C_SRCS += arch/x86/cpu_state_tbl.c
|
|
C_SRCS += arch/x86/mtrr.c
|
|
C_SRCS += arch/x86/pm.c
|
|
S_SRCS += arch/x86/wakeup.S
|
|
C_SRCS += arch/x86/static_checks.c
|
|
C_SRCS += arch/x86/guest/vcpu.c
|
|
C_SRCS += arch/x86/guest/vm.c
|
|
C_SRCS += arch/x86/guest/vlapic.c
|
|
C_SRCS += arch/x86/guest/guest.c
|
|
C_SRCS += arch/x86/guest/vmcall.c
|
|
C_SRCS += arch/x86/guest/vmsr.c
|
|
C_SRCS += arch/x86/guest/instr_emul.c
|
|
C_SRCS += arch/x86/guest/ucode.c
|
|
C_SRCS += arch/x86/guest/pm.c
|
|
C_SRCS += lib/spinlock.c
|
|
C_SRCS += lib/udelay.c
|
|
C_SRCS += lib/mdelay.c
|
|
C_SRCS += lib/div.c
|
|
C_SRCS += lib/string.c
|
|
C_SRCS += lib/memory.c
|
|
C_SRCS += lib/crypto/hkdf.c
|
|
C_SRCS += lib/sprintf.c
|
|
C_SRCS += common/softirq.c
|
|
C_SRCS += common/hv_main.c
|
|
C_SRCS += common/hypercall.c
|
|
C_SRCS += common/trusty_hypercall.c
|
|
C_SRCS += common/schedule.c
|
|
C_SRCS += common/vm_load.c
|
|
C_SRCS += common/io_request.c
|
|
C_SRCS += common/ptdev.c
|
|
C_SRCS += common/static_checks.c
|
|
|
|
ifdef STACK_PROTECTOR
|
|
C_SRCS += common/stack_protector.c
|
|
endif
|
|
|
|
C_SRCS += dm/vpic.c
|
|
C_SRCS += dm/vioapic.c
|
|
ifeq ($(CONFIG_PARTITION_MODE),y)
|
|
C_SRCS += $(wildcard dm/vpci/*.c)
|
|
C_SRCS += $(wildcard partition/*.c)
|
|
C_SRCS += dm/vrtc.c
|
|
endif
|
|
|
|
C_SRCS += bsp/$(CONFIG_PLATFORM)/vm_description.c
|
|
C_SRCS += bsp/$(CONFIG_PLATFORM)/$(CONFIG_PLATFORM).c
|
|
C_SRCS += bsp/$(CONFIG_PLATFORM)/platform_acpi_info.c
|
|
|
|
ifeq ($(CONFIG_PLATFORM),uefi)
|
|
C_SRCS += bsp/$(CONFIG_PLATFORM)/cmdline.c
|
|
else
|
|
ifeq ($(CONFIG_PLATFORM), sbl)
|
|
C_SRCS += boot/sbl/multiboot.c
|
|
C_SRCS += boot/sbl/hob_parse.c
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(CONFIG_PARTITION_MODE), y)
|
|
C_SRCS += arch/x86/guest/mptable.c
|
|
endif
|
|
|
|
# retpoline support
|
|
ifeq (true, $(shell [ $(GCC_MAJOR) -eq 7 ] && [ $(GCC_MINOR) -ge 3 ] && echo true))
|
|
CFLAGS += -mindirect-branch=thunk-extern -mindirect-branch-register
|
|
CFLAGS += -DCONFIG_RETPOLINE
|
|
S_SRCS += arch/x86/retpoline-thunk.S
|
|
else
|
|
ifeq (true, $(shell [ $(GCC_MAJOR) -ge 8 ] && echo true))
|
|
CFLAGS += -mindirect-branch=thunk-extern -mindirect-branch-register
|
|
CFLAGS += -DCONFIG_RETPOLINE
|
|
S_SRCS += arch/x86/retpoline-thunk.S
|
|
endif
|
|
endif
|
|
|
|
C_OBJS := $(patsubst %.c,$(HV_OBJDIR)/%.o,$(C_SRCS))
|
|
ifneq ($(CONFIG_RELEASE),y)
|
|
C_OBJS += $(patsubst %.c,$(HV_OBJDIR)/%.o,$(D_SRCS))
|
|
CFLAGS += -DHV_DEBUG
|
|
endif
|
|
S_OBJS := $(patsubst %.S,$(HV_OBJDIR)/%.o,$(S_SRCS))
|
|
|
|
DISTCLEAN_OBJS := $(shell find $(BASEDIR) -name '*.o')
|
|
VERSION := $(HV_OBJDIR)/include/version.h
|
|
|
|
.PHONY: all
|
|
all: $(VERSION) $(HV_OBJDIR)/$(HV_FILE).32.out $(HV_OBJDIR)/$(HV_FILE).bin
|
|
rm -f $(VERSION)
|
|
|
|
ifeq ($(CONFIG_PLATFORM), uefi)
|
|
all: efi
|
|
.PHONY: efi
|
|
efi: $(HV_OBJDIR)/$(HV_FILE).bin
|
|
echo "building hypervisor as EFI executable..."
|
|
make -C bsp/uefi/efi HV_OBJDIR=$(HV_OBJDIR)
|
|
|
|
install: efi
|
|
make -C bsp/uefi/efi HV_OBJDIR=$(HV_OBJDIR) install
|
|
endif
|
|
|
|
ifeq ($(CONFIG_PLATFORM), sbl)
|
|
install: $(VERSION) $(HV_OBJDIR)/$(HV_FILE).32.out
|
|
install -D $(HV_OBJDIR)/$(HV_FILE).32.out $(DESTDIR)/usr/lib/acrn/$(HV_FILE).sbl
|
|
endif
|
|
|
|
$(HV_OBJDIR)/$(HV_FILE).32.out: $(HV_OBJDIR)/$(HV_FILE).out
|
|
$(OBJCOPY) -S --section-alignment=0x1000 -O elf32-i386 $< $@
|
|
|
|
$(HV_OBJDIR)/$(HV_FILE).bin: $(HV_OBJDIR)/$(HV_FILE).out
|
|
$(OBJCOPY) -O binary $< $(HV_OBJDIR)/$(HV_FILE).bin
|
|
|
|
$(HV_OBJDIR)/$(HV_FILE).out: $(C_OBJS) $(S_OBJS)
|
|
$(CC) -E -x c $(patsubst %, -I%, $(INCLUDE_PATH)) $(ARCH_LDSCRIPT_IN) | grep -v '^#' > $(ARCH_LDSCRIPT)
|
|
$(CC) -Wl,-Map=$(HV_OBJDIR)/$(HV_FILE).map -o $@ $(LDFLAGS) $(ARCH_LDFLAGS) -T$(ARCH_LDSCRIPT) $^
|
|
|
|
.PHONY: clean
|
|
clean:
|
|
rm -f $(C_OBJS)
|
|
rm -f $(S_OBJS)
|
|
rm -f $(VERSION)
|
|
rm -rf $(HV_OBJDIR)
|
|
|
|
.PHONY: distclean
|
|
distclean:
|
|
rm -f $(DISTCLEAN_OBJS)
|
|
rm -f $(C_OBJS)
|
|
rm -f $(S_OBJS)
|
|
rm -f $(VERSION)
|
|
rm -rf $(HV_OBJDIR)
|
|
rm -f tags TAGS cscope.files cscope.in.out cscope.out cscope.po.out GTAGS GPATH GRTAGS GSYMS
|
|
|
|
PHONY: (VERSION)
|
|
$(VERSION):
|
|
touch $(VERSION)
|
|
@COMMIT=`git rev-parse --verify --short HEAD 2>/dev/null`;\
|
|
DIRTY=`git diff-index --name-only HEAD`;\
|
|
if [ -n "$$DIRTY" ];then PATCH="$$COMMIT-dirty";else PATCH="$$COMMIT";fi;\
|
|
DAILY_TAG=`git tag --merged HEAD|grep "acrn"|tail -n 1`;\
|
|
TIME=`date "+%F %T"`;\
|
|
USER=`id -u -n`; \
|
|
if [ x$(CONFIG_RELEASE) = "xy" ];then BUILD_TYPE="REL";else BUILD_TYPE="DBG";fi;\
|
|
echo "/*" > $(VERSION); \
|
|
sed 's/^/ * /' ../LICENSE >> $(VERSION); \
|
|
echo " */" >> $(VERSION); \
|
|
echo "" >> $(VERSION); \
|
|
echo "#define HV_MAJOR_VERSION $(MAJOR_VERSION)" >> $(VERSION);\
|
|
echo "#define HV_MINOR_VERSION $(MINOR_VERSION)" >> $(VERSION);\
|
|
echo "#define HV_EXTRA_VERSION "\"$(EXTRA_VERSION)\""" >> $(VERSION);\
|
|
echo "#define HV_FULL_VERSION "\"$(FULL_VERSION)\""" >> $(VERSION);\
|
|
echo "#define HV_API_MAJOR_VERSION $(API_MAJOR_VERSION)U" >> $(VERSION);\
|
|
echo "#define HV_API_MINOR_VERSION $(API_MINOR_VERSION)U" >> $(VERSION);\
|
|
echo "#define HV_DAILY_TAG "\""$$DAILY_TAG"\""" >> $(VERSION);\
|
|
echo "#define HV_BUILD_VERSION "\""$$PATCH"\""" >> $(VERSION);\
|
|
echo "#define HV_BUILD_TYPE "\""$$BUILD_TYPE"\""" >> $(VERSION);\
|
|
echo "#define HV_BUILD_TIME "\""$$TIME"\""" >> $(VERSION);\
|
|
echo "#define HV_BUILD_USER "\""$$USER"\""" >> $(VERSION)
|
|
|
|
-include $(C_OBJS:.o=.d)
|
|
-include $(S_OBJS:.o=.d)
|
|
|
|
$(HV_OBJDIR)/%.o: %.c $(HV_OBJDIR)/$(HV_CONFIG_H)
|
|
[ ! -e $@ ] && mkdir -p $(dir $@); \
|
|
$(CC) $(patsubst %, -I%, $(INCLUDE_PATH)) -I. -c $(CFLAGS) $(ARCH_CFLAGS) $< -o $@ -MMD -MT $@
|
|
|
|
$(HV_OBJDIR)/%.o: %.S $(HV_OBJDIR)/$(HV_CONFIG_H)
|
|
[ ! -e $@ ] && mkdir -p $(dir $@); \
|
|
$(CC) $(patsubst %, -I%, $(INCLUDE_PATH)) -I. $(ASFLAGS) $(ARCH_ASFLAGS) -c $< -o $@ -MMD -MT $@
|