2852N/A# Top-level makefile for the VMM.
2852N/A# Copyright (C) 2006-2015 Oracle Corporation
2852N/A# This file is part of VirtualBox Open Source Edition (OSE), as
2852N/A# you can redistribute it
and/or modify it under the terms of the GNU
2852N/A# General Public License (GPL) as published by the Free Software
2852N/A# Foundation, in version 2 as it comes in the "COPYING" file of the
2852N/A# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
2852N/A# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
4865N/A## DEFS variable that is picked up by all three VMM targets.
4618N/AVMM_COMMON_DEFS ?= VBOX_IN_VMM
4618N/Aifdef VBOX_WITH_FIRST_IEM_STEP
4618N/A VMM_COMMON_DEFS += VBOX_WITH_FIRST_IEM_STEP
4618N/A# VMM_COMMON_DEFS += VBOX_WITH_IEM
4618N/A VMM_COMMON_DEFS += VBOX_WITH_REM
4618N/A VMM_COMMON_DEFS += VBOX_WITH_MULTI_CORE
4618N/A VMM_COMMON_DEFS += VBOX_WITH_R0_LOGGING
4618N/Aifdef VBOX_WITH_VMMR0_DISABLE_LAPIC_NMI
4618N/A VMM_COMMON_DEFS += VBOX_WITH_VMMR0_DISABLE_LAPIC_NMI
4618N/Aifdef VBOX_WITH_PCI_PASSTHROUGH
4618N/A VMM_COMMON_DEFS += VBOX_WITH_PCI_PASSTHROUGH
4618N/A VMM_COMMON_DEFS += VBOX_WITH_DTRACE_RC
4618N/A VMM_COMMON_DEFS += VBOX_WITH_SAFE_STR
4618N/A VMM_COMMON_DEFS += VBOX_WITH_RAW_RING1
4618N/A VMM_COMMON_DEFS += VBOX_WITH_64ON32_IDT
4618N/Aifdef VBOX_WITH_64ON32_CMOS_DEBUG
4618N/A VMM_COMMON_DEFS += VBOX_WITH_64ON32_CMOS_DEBUG
4618N/Aifeq ($(KBUILD_TARGET),amd64)
4618N/A VMM_COMMON_DEFS += VBOX_WITH_MORE_RING0_MEM_MAPPINGS
4865N/A# VMM_COMMON_DEFS += VBOX_WITH_NS_ACCOUNTING_STATS
4618N/A# Special IEM debug mode which compares the result with
HM/REM 4618N/A VMM_COMMON_DEFS += IEM_VERIFICATION_MODE IEM_VERIFICATION_MODE_FULL IEM_VERIFICATION_MODE_FULL_HM
4618N/Aifndef VBOX_ONLY_EXTPACKS_USE_IMPLIBS
4618N/AVBoxVMM_TEMPLATE = VBoxR3DllNoPic
4618N/AVBoxVMM_DEFS = IN_VMM_R3 IN_DIS IN_GMM_R3 IN_DBG $(VMM_COMMON_DEFS)
4618N/A## @todo eliminate IN_GMM_R3
4618N/Aifdef VBOX_WITH_PREALLOC_RAM_BY_DEFAULT
4618N/A VBoxVMM_DEFS += VBOX_WITH_PREALLOC_RAM_BY_DEFAULT
4618N/A VBoxVMM_DEFS += VBOX_WITH_USB
4618N/Aifdef VBOX_WITH_PDM_ASYNC_COMPLETION
4618N/A VBoxVMM_DEFS += VBOX_WITH_PDM_ASYNC_COMPLETION
4618N/A VBoxVMM_DEFS += VBOX_WITH_NETSHAPER
4618N/A VBoxVMM_DEFS += VBOX_WITH_RAW_MODE VBOX_WITH_RAW_MODE_NOT_R0
4618N/Aifdef VBOX_WITH_PDM_AUDIO_DRIVER
4618N/A VBoxVMM_DEFS += VBOX_WITH_PDM_AUDIO_DRIVER
4618N/Aifdef VBOX_WITH_VMM_R0_SWITCH_STACK
4618N/A VBoxVMM_DEFS += VMM_R0_SWITCH_STACK
4865N/Aif "$(KBUILD_TYPE)" == "debug" && "$(USERNAME)" == "bird"
4865N/A VBoxVMM_DEFS += RTMEM_WRAP_TO_EF_APIS
4865N/A VBOX_WITH_2X_4GB_ADDR_SPACE VBOX_WITH_2X_4GB_ADDR_SPACE_IN_R3 \
4865N/A VBOX_WITH_HYBRID_32BIT_KERNEL VBOX_WITH_HYBRID_32BIT_KERNEL_IN_R3
4618N/A $(if-expr defined(VBOX_WITH_RAW_MODE),PATM,)
4713N/A $(if-expr defined(VBOX_WITH_RAW_MODE), \
5942N/A $(if-expr defined(VBOX_WITH_RAW_MODE), \
4618N/Aifdef VBOX_WITH_PDM_ASYNC_COMPLETION
4618N/A $(PATH_STAGE_LIB)/DisasmR3$(VBOX_SUFF_LIB)
4618N/A $(PATH_STAGE_LIB)/Debugger$(VBOX_SUFF_LIB)
4618N/A# SSM wish to know the build type, host os and arch.
4618N/A KBUILD_TYPE=\"$(KBUILD_TYPE)\" \
4618N/A KBUILD_TARGET=\"$(KBUILD_TARGET)\" \
4618N/A KBUILD_TARGET_ARCH=\"$(KBUILD_TARGET_ARCH)\"
4618N/A#ifdef VBOX_WITH_PDM_ASYNC_COMPLETION
4865N/A# ifeq ($(KBUILD_HOST), linux)
5554N/Aif defined(VBOX_WITH_RAW_MODE) && $(intersects $(VBOX_LDR_FMT32), pe lx)
4618N/A VMMRCBuiltin_TEMPLATE = VBoxRc
4618N/A ifeq ($(VBOX_LDR_FMT32),pe)
4618N/A ifeq ($(VBOX_LDR_FMT32),lx)
4618N/A $(SED) -e '/not-os2/d' -e 's/^[ \t][ \t]*\([a-zA-Z]\)/ _\1/' -e 's/[ \t]DATA[ \t]*/ /' --output $@ $<
4618N/A ifeq ($(VBOX_LDR_FMT32),lx)
4618N/A -e 's/^[ \t][ \t]*\([a-zA-Z]\)/ _\1/' \
4618N/A -e 's/[ \t]DATA[ \t]*/ /' \
4618N/A $(APPEND) "$@" " ___ehInit"
4618N/A -e '/not-$(KBUILD_TARGET_ARCH)/d' \
4618N/Aif1of ($(VBOX_LDR_FMT), pe lx)
4618N/A -e 's/^[ \t][ \t]*\([a-zA-Z]\)/ _\1/' \
4618N/A -e 's/[ \t]DATA[ \t]*/ /' \
4618N/A $(APPEND) "$@" " ___ehInit"
4618N/A -e '/not-$(KBUILD_TARGET_ARCH)/d' \
4618N/Aifneq ($(VBOX_LIB_VMM_LAZY),$(LIB_VMM))
4618N/A VMMR3LazyImp_TEMPLATE = VBoxR3Dll
4618N/A VMMR3LazyImp_INST = $(INST_LIB)
4618N/A $(VBOX_DEF_2_LAZY_LOAD) --output $@ --library VBoxVMM $<
4618N/Aif defined(VBOX_WITH_RAW_MODE) && !defined(VBOX_ONLY_EXTPACKS)
4618N/A VMMRC_DEFS = IN_VMM_RC IN_RT_RC IN_DIS DIS_CORE_ONLY VBOX_WITH_RAW_MODE VBOX_WITH_RAW_MODE_NOT_R0 IN_SUP_RC \
4618N/A ifdef VBOX_WITH_VMM_R0_SWITCH_STACK
4865N/A VMMRC_DEFS += VMM_R0_SWITCH_STACK
4865N/A ifeq ($(KBUILD_TARGET_ARCH),x86)
4865N/A VBOX_WITH_2X_4GB_ADDR_SPACE VBOX_WITH_2X_4GB_ADDR_SPACE_IN_RC \
4865N/A VBOX_WITH_HYBRID_32BIT_KERNEL VBOX_WITH_HYBRID_32BIT_KERNEL_IN_RC
4618N/A $(if-expr defined(VBOX_WITH_RAW_MODE),PATM,)
2852N/A $(PATH_STAGE_LIB)/DisasmRC$(VBOX_SUFF_LIB) \
$(PATH_STAGE_LIB)/RuntimeRC$(VBOX_SUFF_LIB) \
$(PATH_STAGE_LIB)/SUPRC$(VBOX_SUFF_LIB)
ifneq ($(filter pe lx,$(VBOX_LDR_FMT32)),)
$(PATH_STAGE_LIB)/VMMRCBuiltin$(VBOX_SUFF_LIB)
$(if-expr defined(VBOX_WITH_RAW_MODE), \
$(if-expr defined(VBOX_WITH_RAW_MODE), \
ifeq ($(VBOX_LDR_FMT32),pe)
ifeq ($(VBOX_LDR_FMT32),lx)
VMMRC_SOURCES += $(VMMRCImp_0_OUTDIR)/
VMMRC.defendif # VBOX_WITH_RAW_MODE && !VBOX_ONLY_EXTPACKS
ifndef VBOX_ONLY_EXTPACKS
VMMR0_DEFS = IN_VMM_R0 IN_RT_R0 IN_DIS DIS_CORE_ONLY IN_GVMM_R0 IN_GMM_R0 IN_INTNET_R0 \
$(VMM_COMMON_DEFS) RTASSERT_HAVE_SHOULD_PANIC
## @todo eliminate IN_GVMM_R0 IN_GMM_R0
ifdef VBOX_WITH_PCI_PASSTHROUGH
VMMR0_DEFS += IN_PCIRAW_R0
ifdef VBOX_WITH_TRIPLE_FAULT_HACK
VMMR0_DEFS += VBOX_WITH_TRIPLE_FAULT_HACK
VMMR0_DEFS += VBOX_WITH_RAW_MODE
ifdef VBOX_WITH_VMM_R0_SWITCH_STACK
VMMR0_DEFS += VMM_R0_SWITCH_STACK
VBOX_WITH_2X_4GB_ADDR_SPACE VBOX_WITH_2X_4GB_ADDR_SPACE_IN_R0 \
VBOX_WITH_HYBRID_32BIT_KERNEL VBOX_WITH_HYBRID_32BIT_KERNEL_IN_R0
$(if-expr defined(VBOX_WITH_RAW_MODE),PATM,)
if1of ($(VBOX_LDR_FMT), pe lx)
VMMR0_SOURCES += $(VMMR0Imp_0_OUTDIR)/
VMMR0.def ifdef VBOX_WITH_TRIPLE_FAULT_HACK
ifdef VBOX_WITH_NETSHAPER
$(PATH_STAGE_LIB)/ServicesR0$(VBOX_SUFF_LIB) \
$(PATH_STAGE_LIB)/RuntimeR0$(VBOX_SUFF_LIB) \
$(PATH_STAGE_LIB)/DisasmR0$(VBOX_SUFF_LIB)
ifneq ($(filter pe lx,$(VBOX_LDR_FMT)),)
$(PATH_STAGE_LIB)/SUPR0$(VBOX_SUFF_LIB)
endif # !VBOX_ONLY_EXTPACKS
ifndef VBOX_ONLY_EXTPACKS
LIBRARIES += SSMStandalone
SSMStandalone_TEMPLATE = VBOXR3EXE
SSMStandalone_DEFS = IN_VMM_R3 IN_VMM_STATIC SSM_STANDALONE CPUM_DB_STANDALONE
SSMStandalone_INCS = include
SSMStandalone_SOURCES = \
endif # !VBOX_ONLY_EXTPACKS
if !defined(VBOX_ONLY_EXTPACKS) \
&& ( defined(VBOX_WITH_DTRACE_R3) \
|| defined(VBOX_WITH_DTRACE_R0) \
|| defined(VBOX_WITH_DTRACE_RC))
# Install the dtrace library files.
VMMLibDTrace_INST = $(VBOX_INST_DTRACE_LIB)$(KBUILD_TARGET_ARCH)/
$(VMMLibDTrace_0_OUTDIR)/
vm.d \
$(VMMLibDTrace_0_OUTDIR)/
x86.d \
# Turn the header $2 into the DTrace library script $1.
define def_vmm_lib_dtrace_preprocess
$$$$(VMMLibDTrace_0_OUTDIR)/$1: $2 $$(VBOX_VBOXCPP) | $$$$(dir $$$$@)
$$(QUIET)$$(call MSG_GENERATE,VMMLibDTrace,$$@,$$<)
$$(QUIET)$(VBOX_VBOXCPP) -d \
-D VBOX_FOR_DTRACE_LIB_$(toupper $(KBUILD_TARGET_ARCH)) \
-D 'RCPTRTYPE(a_Type)=RTRCPTR' \
-D 'R3PTRTYPE(a_Type)=RTR3PTR' \
-D 'R0PTRTYPE(a_Type)=a_Type' \
-D 'AssertCompile(a_Expr)=' \
-D 'AssertCompileSize(a_Stuct, a_Size)=' \
$$(DEFS.$$(KBUILD_TARGET)) \
$$(DEFS.$(KBUILD_TARGET_ARCH)) \
$$(QUIET)$$(CHMOD) 644 $$@
# Disable annoying warnings about array subscript above array bounds in aPages[]
ifneq ($(KBUILD_TARGET),win)
# Always optimize the interpreter.
ifn1of ($(USERNAME),bird)
if1of ($(KBUILD_TARGET), win)
# -noover is recognized despite the statement saying otherwise. It silences these warnings:
# cl : Command line warning D9025 : overriding '/Od' with '/O2'
# cl : Command line warning D9025 : overriding '/Oy-' with '/Oy'
VMMAll/IEMAll.cpp_CXXFLAGS += -fomit-frame-pointer # Omitting the frame pointer results in larger code, but it might be worth it. (esp addressing vs ebp?)
endif # bird wants good stacks
# Alias the CPU database entries.
$(foreach base,$(notdir $(basename $(wildcard $(PATH_SUB_CURRENT)
/VMMR3/cpus/*.h))), $(eval $(base).o $(base).obj:
CPUMR3Db.o))
include $(FILE_KBUILD_SUB_FOOTER)
# Alias the PGM templates to the object in which they are defined.
# Alias the IEM templates to the object in which they are instantiated.
# Alias the switcher templates.