VirtualBox

source: vbox/trunk/src/VBox/VMM/Makefile.kmk

Last change on this file was 109008, checked in by vboxsync, 3 days ago

VMM,Main: Working on ARM CPU profile support, which is neede/useful for getting info about the host CPU as well. The CPUDBENTRY typedef is used externally by Main, so we can't have two definitions of it, so left the bits that are common to both x86 and ARM in CPUDBENTRY and created sub-structures for each of the two targets/platforms. Also started reworking the VBoxCpuReport tool so we can use it on arm as well (much left to do there, though). jiraref:VBP-1598

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 50.6 KB
Line 
1# $Id: Makefile.kmk 109008 2025-04-16 20:59:36Z vboxsync $
2## @file
3# Top-level makefile for the VMM.
4#
5
6#
7# Copyright (C) 2006-2024 Oracle and/or its affiliates.
8#
9# This file is part of VirtualBox base platform packages, as
10# available from https://www.virtualbox.org.
11#
12# This program is free software; you can redistribute it and/or
13# modify it under the terms of the GNU General Public License
14# as published by the Free Software Foundation, in version 3 of the
15# License.
16#
17# This program is distributed in the hope that it will be useful, but
18# WITHOUT ANY WARRANTY; without even the implied warranty of
19# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20# General Public License for more details.
21#
22# You should have received a copy of the GNU General Public License
23# along with this program; if not, see <https://www.gnu.org/licenses>.
24#
25# SPDX-License-Identifier: GPL-3.0-only
26#
27
28SUB_DEPTH = ../../..
29include $(KBUILD_PATH)/subheader.kmk
30
31# Include our Config.kmk if kmk is invoked from a parent directory.
32ifndef VBOX_VMM_CONFIG_KMK_INCLUDED
33 include $(PATH_SUB_CURRENT)/Config.kmk
34endif
35
36# Include sub-makefiles.
37ifndef VBOX_ONLY_BUILD
38 include $(PATH_SUB_CURRENT)/tools/Makefile.kmk
39 include $(PATH_SUB_CURRENT)/testcase/Makefile.kmk
40endif
41
42
43# Fail on unsupported hosts.
44ifeq ($(KBUILD_TARGET_ARCH),x86)
45 ifeq ($(KBUILD_TARGET),darwin)
46 $(error 32-bit darwin is no longer a supported VirtualBox host. Go back to 4.3 or older for 32-bit host support.)
47 else ifeq ($(KBUILD_TARGET),solaris)
48 $(error 32-bit solaris is no longer a supported VirtualBox host. Go back to 4.2 or older for 32-bit host support.)
49 else ifn1of ($(KBUILD_TARGET_ARCH), $(VBOX_SUPPORTED_HOST_ARCHS))
50 $(error 32-bit builds of the VirtualBox host are no longer supported. Go back to 6.0 or older for 32-bit host support.)
51 endif
52endif
53
54
55#
56# The VMM DLL.
57#
58ifndef VBOX_ONLY_BUILD
59 DLLS += VBoxVMM
60endif
61VBoxVMM_TEMPLATE = VBoxR3DllNoPic
62VBoxVMM_SONAME.linux = VBoxVMM.so
63
64VBoxVMM_DEFS = VBOX_VMM_TARGET_X86 VBOX_IN_VMM IN_VMM_R3 IN_DIS IN_DBG $(VMM_COMMON_DEFS)
65ifdef VBOX_WITH_PREALLOC_RAM_BY_DEFAULT
66 VBoxVMM_DEFS += VBOX_WITH_PREALLOC_RAM_BY_DEFAULT
67endif
68ifdef VBOX_WITH_VUSB
69 VBoxVMM_DEFS += VBOX_WITH_USB
70endif
71ifdef VBOX_WITH_PDM_ASYNC_COMPLETION
72 VBoxVMM_DEFS += VBOX_WITH_PDM_ASYNC_COMPLETION
73endif
74ifdef VBOX_WITH_NETSHAPER
75 VBoxVMM_DEFS += VBOX_WITH_NETSHAPER
76endif
77ifdef VBOX_WITH_IOMMU_AMD
78 VBoxVMM_DEFS += VBOX_WITH_IOMMU_AMD
79endif
80ifdef VBOX_WITH_IOMMU_INTEL
81 VBoxVMM_DEFS += VBOX_WITH_IOMMU_INTEL
82endif
83ifdef VBOX_WITH_DBGF_TRACING
84 VBoxVMM_DEFS += VBOX_WITH_DBGF_TRACING
85endif
86ifdef VBOX_WITH_DBGF_FLOW_TRACING
87 VBoxVMM_DEFS += VBOX_WITH_DBGF_FLOW_TRACING
88endif
89if "$(KBUILD_TYPE)" == "debug" && "$(USERNAME)" == "bird" && 0
90 VBoxVMM_DEFS += RTMEM_WRAP_TO_EF_APIS
91endif
92if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), linux.arm64)
93 VBoxVMM_DEFS += VMM_HOST_PAGE_SIZE_DYNAMIC
94endif
95
96VBoxVMM_SDKS = VBoxSoftFloatR3Shared
97
98VBoxVMM_INCS = \
99 include \
100 $(VBoxVMM_0_OUTDIR)/CommonGenIncs \
101 .
102VBoxVMM_ASINCS = .
103VBoxVMM_ASFLAGS.amd64 = -Werror
104VBoxVMM_ASFLAGS.x86 = -Werror
105if "$(VBOX_VCC_TOOL_STEM)" >= "VCC142" && "$(KBUILD_TYPE)" != "debug" # Agressive inlining for IEM performance. Adds ~2.6 MB.
106 VBoxVMM_CXXFLAGS.win = -Ob3
107endif
108
109VBoxVMM_SOURCES = \
110 VBoxVMM.d \
111 VMMR3/VMMR3VTable.cpp \
112 VMMR3/APIC.cpp \
113 VMMR3/CFGM.cpp \
114 VMMR3/CPUM.cpp \
115 VMMR3/CPUMR3CpuId.cpp \
116 VMMR3/CPUMR3Db.cpp \
117 VMMR3/CPUMR3Msr-x86.cpp \
118 VMMR3/CPUMDbg.cpp \
119 VMMR3/DBGF.cpp \
120 VMMR3/DBGFAddr.cpp \
121 VMMR3/DBGFAddrSpace.cpp \
122 VMMR3/DBGFR3Bp.cpp \
123 VMMR3/DBGFR3BugCheck.cpp \
124 VMMR3/DBGFCoreWrite.cpp \
125 VMMR3/DBGFCpu.cpp \
126 VMMR3/DBGFDisas.cpp \
127 VMMR3/DBGFInfo.cpp \
128 VMMR3/DBGFLog.cpp \
129 VMMR3/DBGFMem.cpp \
130 VMMR3/DBGFR3ModInMem.cpp \
131 VMMR3/DBGFOS.cpp \
132 VMMR3/DBGFR3PlugIn.cpp \
133 VMMR3/DBGFReg.cpp \
134 VMMR3/DBGFStack.cpp \
135 VMMR3/DBGFR3Flow.cpp \
136 $(if-expr defined(VBOX_WITH_DBGF_FLOW_TRACING), VMMR3/DBGFR3FlowTrace.cpp,) \
137 VMMR3/DBGFR3Trace.cpp \
138 $(if-expr defined(VBOX_WITH_DBGF_TRACING), VMMR3/DBGFR3Tracer.cpp,) \
139 VMMR3/DBGFR3SampleReport.cpp \
140 VMMR3/DBGFR3Type.cpp \
141 VMMR3/EM.cpp \
142 VMMR3/EMR3Dbg.cpp \
143 $(if-expr defined(VBOX_WITH_HWVIRT),VMMR3/EMHM.cpp,) \
144 VMMR3/EMR3Nem.cpp \
145 VMMR3/GCM.cpp \
146 VMMR3/GIM.cpp \
147 VMMR3/GIMHv.cpp \
148 VMMR3/GIMKvm.cpp \
149 VMMR3/GIMMinimal.cpp \
150 VMMR3/IEMR3.cpp \
151 VMMR3/IOM.cpp \
152 VMMR3/IOMR3IoPort.cpp \
153 VMMR3/IOMR3Mmio.cpp \
154 VMMR3/GMM.cpp \
155 VMMR3/GVMMR3.cpp \
156 VMMR3/MM.cpp \
157 VMMR3/MMHeap.cpp \
158 VMMR3/NEMR3.cpp \
159 VMMR3/PDM.cpp \
160 VMMR3/PDMBlkCache.cpp \
161 VMMR3/PDMDevice.cpp \
162 VMMR3/PDMDevHlp.cpp \
163 $(if-expr defined(VBOX_WITH_DBGF_TRACING), VMMR3/PDMDevHlpTracing.cpp,) \
164 VMMR3/PDMDevMiscHlp.cpp \
165 VMMR3/PDMDriver.cpp \
166 VMMR3/PDMLdr.cpp \
167 VMMR3/PDMCritSect.cpp \
168 VMMR3/PDMQueue.cpp \
169 VMMR3/PDMR3Task.cpp \
170 VMMR3/PDMThread.cpp \
171 VMMR3/PGM.cpp \
172 VMMR3/PGMDbg.cpp \
173 VMMR3/PGMHandler.cpp \
174 VMMR3/PGMPhys.cpp \
175 VMMR3/PGMSavedState.cpp \
176 VMMR3/PGMSharedPage.cpp \
177 VMMR3/SELM.cpp \
178 VMMR3/SSM.cpp \
179 VMMR3/STAM.cpp \
180 VMMR3/TM.cpp \
181 VMMR3/TRPM.cpp \
182 VMMR3/VM.cpp \
183 VMMR3/VMEmt.cpp \
184 VMMR3/VMReq.cpp \
185 VMMR3/VMM.cpp \
186 VMMR3/VMMGuruMeditation.cpp \
187 VMMR3/VMMTests.cpp \
188 VMMR3/HM.cpp \
189 VMMAll/APICAll.cpp \
190 VMMAll/CPUMAllCpuId.cpp \
191 VMMAll/CPUMAllRegs.cpp \
192 VMMAll/CPUMAllMsrs.cpp \
193 VMMAll/DBGFAll.cpp \
194 VMMAll/DBGFAllBp.cpp \
195 $(if-expr defined(VBOX_WITH_DBGF_TRACING), VMMAll/DBGFAllTracer.cpp,) \
196 VMMAll/HMAll.cpp \
197 VMMAll/HMSVMAll.cpp \
198 VMMAll/HMVMXAll.cpp \
199 VMMAll/IEMAll.cpp \
200 VMMAll/IEMAllMem.cpp \
201 VMMAll/IEMAllTlb.cpp \
202 VMMAll/target-x86/IEMAll-x86.cpp \
203 VMMAll/target-x86/IEMAllExec-x86.cpp \
204 VMMAll/target-x86/IEMAllOpcodeFetch-x86.cpp \
205 VMMAll/target-x86/IEMAllOpHlp-x86.cpp \
206 VMMAll/target-x86/IEMAllMem-x86.cpp \
207 VMMAll/target-x86/IEMAllXcpt-x86.cpp \
208 VMMAll/target-x86/IEMAllHlpFpu-x86.cpp \
209 VMMAll/target-x86/IEMAllIntprTables1-x86.cpp \
210 VMMAll/target-x86/IEMAllIntprTables2-x86.cpp \
211 VMMAll/target-x86/IEMAllIntprTables3-x86.cpp \
212 VMMAll/target-x86/IEMAllIntprTables4-x86.cpp \
213 VMMAll/target-x86/IEMAllAImplC-x86.cpp \
214 VMMAll/target-x86/IEMAllCImpl-x86.cpp \
215 VMMAll/target-x86/IEMAllCImplSvmInstr-x86.cpp \
216 VMMAll/target-x86/IEMAllCImplVmxInstr-x86.cpp \
217 VMMAll/target-x86/IEMAllDbg-x86.cpp \
218 VMMAll/IOMAll.cpp \
219 VMMAll/IOMAllMmioNew.cpp \
220 VMMAll/MMAll.cpp \
221 VMMAll/NEMAll.cpp \
222 VMMAll/PDMAll.cpp \
223 VMMAll/PDMAllApic.cpp \
224 VMMAll/PDMAllCritSect.cpp \
225 VMMAll/PDMAllCritSectRw.cpp \
226 VMMAll/PDMAllCritSectBoth.cpp \
227 $(if-expr defined(VBOX_WITH_IOMMU_AMD) || defined(VBOX_WITH_IOMMU_INTEL), VMMAll/PDMAllIommu.cpp,) \
228 VMMAll/PDMAllQueue.cpp \
229 VMMAll/PDMAllTask.cpp \
230 VMMAll/PGMAll.cpp \
231 VMMAll/PGMAllHandler.cpp \
232 VMMAll/PGMAllPhys.cpp \
233 VMMAll/SELMAll.cpp \
234 VMMAll/EMAll.cpp \
235 VMMAll/GCMAll.cpp \
236 VMMAll/GIMAll.cpp \
237 VMMAll/GIMAllHv.cpp \
238 VMMAll/GIMAllKvm.cpp \
239 VMMAll/TMAll.cpp \
240 VMMAll/TMAllCpu.cpp \
241 VMMAll/TMAllReal.cpp \
242 VMMAll/TMAllVirtual.cpp \
243 VMMAll/TRPMAll.cpp \
244 VMMAll/VMAll.cpp \
245 VMMAll/VMMAll.cpp
246ifn1of (VBOX_WITH_ONLY_PGM_NEM_MODE, $(VBoxVMM_DEFS))
247 VBoxVMM_SOURCES += \
248 VMMR3/PGMPool.cpp \
249 VMMAll/PGMAllPool.cpp
250endif
251VBoxVMM_SOURCES.amd64 += \
252 VMMR3/PGMR3DbgA.asm \
253 $(if-expr !defined(IEM_WITHOUT_ASSEMBLY),VMMAll/target-x86/IEMAllAImpl-x86-amd64.asm,) \
254 VMMAll/VMMAllA.asm
255VBoxVMM_SOURCES.arm64 += \
256 VMMAll/target-x86/IEMAllAImpl-x86-arm64.S
257ifdef VBOX_WITH_VUSB
258 VBoxVMM_SOURCES += VMMR3/PDMUsb.cpp
259endif
260ifdef VBOX_WITH_PDM_ASYNC_COMPLETION
261 VBoxVMM_SOURCES += \
262 VMMR3/PDMAsyncCompletion.cpp \
263 VMMR3/PDMAsyncCompletionFile.cpp \
264 VMMR3/PDMAsyncCompletionFileFailsafe.cpp \
265 VMMR3/PDMAsyncCompletionFileNormal.cpp
266endif
267ifdef VBOX_WITH_NETSHAPER
268 VBoxVMM_SOURCES += \
269 VMMR3/PDMNetShaper.cpp \
270 VMMAll/PDMAllNetShaper.cpp
271endif
272
273ifdef VBOX_WITH_IEM_RECOMPILER
274 VBoxVMM_SOURCES += \
275 VMMAll/IEMAllThrdRecompiler.cpp \
276 VMMAll/target-x86/IEMAllThrdTables1-x86.cpp \
277 VMMAll/target-x86/IEMAllThrdTables2-x86.cpp \
278 VMMAll/target-x86/IEMAllThrdTables3-x86.cpp \
279 VMMAll/target-x86/IEMAllThrdTables4-x86.cpp \
280 VMMAll/target-x86/IEMAllThrdFuncs-x86.cpp \
281 VMMAll/IEMAllThrdFuncsBltIn.cpp
282 ifdef VBOX_WITH_IEM_NATIVE_RECOMPILER
283 VBoxVMM_SOURCES += \
284 VMMAll/IEMAllN8veExecMem.cpp \
285 VMMAll/IEMAllN8veRecompiler.cpp \
286 VMMAll/target-x86/IEMAllN8veRecompFuncs1-x86.cpp \
287 VMMAll/target-x86/IEMAllN8veRecompFuncs2-x86.cpp \
288 VMMAll/target-x86/IEMAllN8veRecompFuncs3-x86.cpp \
289 VMMAll/target-x86/IEMAllN8veRecompFuncs4-x86.cpp \
290 VMMAll/target-x86/IEMAllN8veRecompFuncs5-x86.cpp \
291 VMMAll/target-x86/IEMAllN8veRecompFuncs6-x86.cpp \
292 VMMAll/IEMAllN8veRecompBltIn.cpp \
293 VMMAll/target-x86/IEMAllN8veLiveness1-x86.cpp \
294 VMMAll/target-x86/IEMAllN8veLiveness2-x86.cpp \
295 VMMAll/target-x86/IEMAllN8veLiveness3-x86.cpp \
296 VMMAll/target-x86/IEMAllN8veLiveness4-x86.cpp \
297 VMMAll/target-x86/IEMAllN8veLiveness5-x86.cpp \
298 VMMAll/target-x86/IEMAllN8veLiveness6-x86.cpp
299 VBoxVMM_SOURCES.amd64 += \
300 VMMAll/IEMAllN8veHlpA.asm
301 VBoxVMM_SOURCES.arm64 += \
302 VMMAll/IEMAllN8veHlpA-arm64.S
303 if "$(KBUILD_TARGET_ARCH)" == "arm64" && defined(VBOX_WITH_IEM_USING_CAPSTONE_DISASSEMBLER) # temp hack
304 VBoxVMM_DEFS += VBOX_WITH_IEM_USING_CAPSTONE_DISASSEMBLER
305 VBoxVMM_LIBS.darwin += /opt/local/lib/libcapstone.dylib
306 VBoxVMM_LIBS.linux += capstone
307 endif
308 VMMAll/IEMAllN8veRecompiler.cpp_CXXFLAGS.win := -bigobj
309 endif
310 VMMAll/target-x86/IEMAllThrdFuncs-x86.cpp_CXXFLAGS.win := -bigobj
311endif
312
313ifdef VBOX_WITH_NATIVE_NEM
314 VBoxVMM_SOURCES.linux.amd64 += VMMR3/NEMR3Native-linux.cpp
315
316 VBoxVMM_SOURCES.win.amd64 += \
317 VMMR3/NEMR3Native-win.cpp \
318 VMMR3/APICR3Nem-win.cpp
319
320 VBoxVMM_DEFS.win.amd64 += VBOX_WITH_NATIVE_NEM
321 VBoxVMM_SDKS.win += VBoxNtDll
322 VMMR3/NEMR3Native-win.cpp_DEFS.amd64 = _AMD64_
323 VMMR3/NEMR3Native-win.cpp_INCS = \
324 $(KBUILD_DEVTOOLS)/win.x86/sdk/v10.0.17134.0/include/10.0.17134.0/um \
325 $(KBUILD_DEVTOOLS)/win.x86/sdk/v10.0.17134.0/include/10.0.17134.0/shared
326
327 VBoxVMM_SOURCES.darwin.amd64 += \
328 VMMR3/NEMR3Native-darwin.cpp
329 VBoxVMM_DEFS.darwin.amd64 += VBOX_WITH_NATIVE_NEM
330endif
331
332VBoxVMM_LIBS = \
333 $(PATH_STAGE_LIB)/DisasmR3$(VBOX_SUFF_LIB)
334ifdef VBOX_WITH_DEBUGGER
335 VBoxVMM_LIBS += \
336 $(PATH_STAGE_LIB)/Debugger$(VBOX_SUFF_LIB)
337endif
338VBoxVMM_LIBS += \
339 $(LIB_REM) \
340 $(LIB_RUNTIME)
341
342VBoxVMM_LIBS.win = $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/delayimp.lib
343VBoxVMM_LDFLAGS.linux = $(VBOX_GCC_NO_UNDEFINED)
344VBoxVMM_LDFLAGS.darwin = -install_name $(VBOX_DYLD_EXECUTABLE_PATH)/VBoxVMM.dylib
345VBoxVMM_LDFLAGS.solaris = -mimpure-text
346
347# SSM wish to know the build type, host os and arch.
348ifdef VBOX_WITH_AUTOMATIC_DEFS_QUOTING
349 VMMR3/SSM.cpp_DEFS += \
350 KBUILD_TYPE="$(KBUILD_TYPE)" \
351 KBUILD_TARGET="$(KBUILD_TARGET)" \
352 KBUILD_TARGET_ARCH="$(KBUILD_TARGET_ARCH)"
353else
354 VMMR3/SSM.cpp_DEFS += \
355 KBUILD_TYPE=\"$(KBUILD_TYPE)\" \
356 KBUILD_TARGET=\"$(KBUILD_TARGET)\" \
357 KBUILD_TARGET_ARCH=\"$(KBUILD_TARGET_ARCH)\"
358endif
359
360ifdef VBOX_WITH_GCC_SANITIZER
361 VMMR3/PGMPool.cpp_CXXFLAGS.linux += -fno-sanitize=address
362endif
363
364#ifdef VBOX_WITH_PDM_ASYNC_COMPLETION
365# ifeq ($(KBUILD_HOST), linux)
366#VBoxVMM_LIBS += aio
367# endif
368#endif
369
370if "$(USERNAME)" == "bird" && "$(KBUILD_TARGET)" == "win"
371 VBoxVMM_VMMAll/IEMAll.cpp_CXXFLAGS = /FAcs /Fa$(subst /,\\,$(outbase).cod)
372 VBoxVMM_VMMAll/IEMAllMem.cpp_CXXFLAGS = /FAcs /Fa$(subst /,\\,$(outbase).cod)
373 VBoxVMM_VMMAll/IEMAllTlb.cpp_CXXFLAGS = /FAcs /Fa$(subst /,\\,$(outbase).cod)
374 VBoxVMM_VMMAll/target-x86/IEMAllIntprTables1-x86.cpp_CXXFLAGS = /FAcs /Fa$(subst /,\\,$(outbase).cod)
375 VBoxVMM_VMMAll/target-x86/IEMAllIntprTables2-x86.cpp_CXXFLAGS = /FAcs /Fa$(subst /,\\,$(outbase).cod)
376 #VBoxVMM_VMMAll/target-x86/IEMAllIntprTables3-x86.cpp_CXXFLAGS = /FAcs /Fa$(subst /,\\,$(outbase).cod)
377 #VBoxVMM_VMMAll/target-x86/IEMAllIntprTables4-x86.cpp_CXXFLAGS = /FAcs /Fa$(subst /,\\,$(outbase).cod)
378 VBoxVMM_VMMAll/target-x86/IEMAllAImplC-x86.cpp_CXXFLAGS = /FAcs /Fa$(subst /,\\,$(outbase).cod)
379 VBoxVMM_VMMAll/IEMAllN8veExecMem.cpp_CXXFLAGS = /FAcs /Fa$(subst /,\\,$(outbase).cod)
380 VBoxVMM_VMMAll/IEMAllN8veRecompiler.cpp_CXXFLAGS = /FAcs /Fa$(subst /,\\,$(outbase).cod)
381 VBoxVMM_VMMAll/target-x86/IEMAllN8veRecompFuncs1-x86.cpp_CXXFLAGS = /FAcs /Fa$(subst /,\\,$(outbase).cod)
382 #VBoxVMM_VMMAll/target-x86/IEMAllN8veRecompFuncs2-x86.cpp_CXXFLAGS = /FAcs /Fa$(subst /,\\,$(outbase).cod)
383 VBoxVMM_VMMAll/IEMAllN8veRecompBltIn.cpp_CXXFLAGS = /FAcs /Fa$(subst /,\\,$(outbase).cod)
384 VBoxVMM_VMMAll/target-x86/IEMAllN8veLiveness1-x86.cpp_CXXFLAGS = /FAcs /Fa$(subst /,\\,$(outbase).cod)
385 #VBoxVMM_VMMAll/target-x86/IEMAllN8veLiveness2-x86.cpp_CXXFLAGS = /FAcs /Fa$(subst /,\\,$(outbase).cod)
386 VBoxVMM_VMMAll/IEMAllThrdRecompiler.cpp_CXXFLAGS = /FAcs /Fa$(subst /,\\,$(outbase).cod)
387 VBoxVMM_VMMAll/IEMAllThrdFuncsBltIn.cpp_CXXFLAGS = /FAcs /Fa$(subst /,\\,$(outbase).cod)
388 VBoxVMM_VMMAll/target-x86/IEMAllThrdTables1-x86.cpp_CXXFLAGS = /FAcs /Fa$(subst /,\\,$(outbase).cod)
389 #VBoxVMM_VMMAll/target-x86/IEMAllThrdFuncs-x86.cpp_CXXFLAGS = /FAcs /Fa$(subst /,\\,$(outbase).cod)
390 VBoxVMM_VMMAll/PGMAll.cpp_CXXFLAGS = /FAcs /Fa$(subst /,\\,$(outbase).cod)
391 VBoxVMM_VMMAll/PDMAllCritSect.cpp_CXXFLAGS = /FAcs /Fa$(subst /,\\,$(outbase).cod)
392
393 VBoxVMM_CLEAN += $(addprefix $(VBoxVMM_0_OUTDIR)/VMMAll/, \
394 IEMAll.cod IEMAllIntprTables1-x86.cod IEMAllIntprTables2-x86.cod IEMAllIntprTables3-x86.cod \
395 IEMAllIntprTables4-x86.cod IEMAllAImplC-x86.cod \
396 IEMAllN8veExecMem.cod IEMAllN8veRecompiler.cod IEMAllN8veRecompFuncs1-x86.cod IEMAllN8veRecompFuncs2-x86.cod \
397 IEMAllThrdRecompiler.cod IEMAllThrdFuncsBltIn.cod IEMAllThrdTables1-x86.cod IEMAllThrdFuncs-x86.cod \
398 IEMAllN8veRecompBltIn.cod IEMAllN8veLiveness1-x86.cod IEMAllN8veLiveness2-x86.cod PGMAll.cod PDMAllCritSect.cod)
399endif
400
401$(call VBOX_SET_VER_INFO_DLL,VBoxVMM,VirtualBox VMM) # Version info / description.
402
403ifdef VBOX_WITH_VIRT_ARMV8
404 #
405 # The VMM DLL - ARMv8 variant.
406 #
407 ifndef VBOX_ONLY_BUILD
408 DLLS += VBoxVMMArm
409 endif
410 VBoxVMMArm_TEMPLATE = VBoxR3DllNoPic
411 VBoxVMMArm_SONAME.linux = VBoxVMMArm.so
412
413 VBoxVMMArm_DEFS = VBOX_VMM_TARGET_ARMV8 VBOX_DIS_WITH_ARMV8 VBOX_IN_VMM IN_VMM_R3 IN_DIS IN_DBG \
414 $(filter-out \
415 VBOX_WITH_HWVIRT \
416 VBOX_WITH_PAGE_SHARING \
417 $(if-expr "$(KBUILD_TARGET_ARCH)" != "arm64",VBOX_WITH_NATIVE_NEM,) \
418 VBOX_WITH_IEM_RECOMPILER \
419 VBOX_WITH_IEM_NATIVE_RECOMPILER \
420 VBOX_WITH_NESTED_HWVIRT_SVM \
421 VBOX_WITH_NESTED_HWVIRT_VMX \
422 VBOX_WITH_NESTED_HWVIRT_VMX_EPT \
423 IEM_WITH_3DNOW \
424 IEM_WITH_THREE_0F_38 \
425 IEM_WITH_THREE_0F_3A \
426 IEM_WITH_VEX \
427 ,$(VMM_COMMON_DEFS))
428 ifdef VBOX_WITH_VUSB
429 VBoxVMMArm_DEFS += VBOX_WITH_USB
430 endif
431 ifdef VBOX_WITH_PDM_ASYNC_COMPLETION
432 VBoxVMMArm_DEFS += VBOX_WITH_PDM_ASYNC_COMPLETION
433 endif
434 ifdef VBOX_WITH_NETSHAPER
435 VBoxVMMArm_DEFS += VBOX_WITH_NETSHAPER
436 endif
437 #ifdef VBOX_WITH_DBGF_TRACING
438 # VBoxVMMArm_DEFS += VBOX_WITH_DBGF_TRACING
439 #endif
440 #ifdef VBOX_WITH_DBGF_FLOW_TRACING @todo Later
441 # VBoxVMMArm_DEFS += VBOX_WITH_DBGF_FLOW_TRACING
442 #endif
443 if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), linux.arm64)
444 VBoxVMMArm_DEFS += VMM_HOST_PAGE_SIZE_DYNAMIC
445 endif
446 VBoxVMMArm_DEFS.amd64 = VBOX_WITH_ONLY_PGM_NEM_MODE VBOX_WITH_MINIMAL_R0 # Quick hacks to get the code working...
447
448 VBoxVMMArm_INCS = \
449 include \
450 $(VBoxVMM_0_OUTDIR)/CommonGenIncs \
451 .
452 VBoxVMMArm_SOURCES = \
453 VBoxVMM.d \
454 VMMR3/VMMR3VTable.cpp \
455 VMMR3/CFGM.cpp \
456 VMMR3/CPUM-armv8.cpp \
457 VMMR3/CPUMDbg-armv8.cpp \
458 VMMAll/CPUMAllCpuId.cpp \
459 VMMR3/CPUMR3CpuId-armv8.cpp \
460 VMMR3/CPUMR3Db.cpp \
461 VMMR3/CPUMR3SysReg-armv8.cpp \
462 VMMR3/DBGF.cpp \
463 VMMR3/DBGFAddr.cpp \
464 VMMR3/DBGFAddrSpace.cpp \
465 VMMR3/DBGFR3Bp.cpp \
466 VMMR3/DBGFR3BugCheck.cpp \
467 VMMR3/DBGFCoreWrite.cpp \
468 VMMR3/DBGFCpu.cpp \
469 VMMR3/DBGFDisas.cpp \
470 VMMR3/DBGFInfo.cpp \
471 VMMR3/DBGFLog.cpp \
472 VMMR3/DBGFMem.cpp \
473 VMMR3/DBGFR3ModInMem.cpp \
474 VMMR3/DBGFOS.cpp \
475 VMMR3/DBGFR3PlugIn.cpp \
476 VMMR3/DBGFReg.cpp \
477 VMMR3/DBGFStack.cpp \
478 VMMR3/DBGFR3Flow.cpp \
479 VMMR3/DBGFR3FlowTrace.cpp \
480 VMMR3/DBGFR3Trace.cpp \
481 VMMR3/DBGFR3SampleReport.cpp \
482 VMMR3/DBGFR3Type.cpp \
483 VMMR3/EM.cpp \
484 VMMR3/EMR3Dbg.cpp \
485 VMMR3/EMR3Nem.cpp \
486 VMMR3/GICR3.cpp \
487 VMMR3/GIM.cpp \
488 VMMR3/IEMR3.cpp \
489 VMMR3/IOM.cpp \
490 VMMR3/IOMR3IoPort.cpp \
491 VMMR3/IOMR3Mmio.cpp \
492 VMMR3/GMM.cpp \
493 VMMR3/GVMMR3.cpp \
494 VMMR3/MM.cpp \
495 VMMR3/MMHeap.cpp \
496 VMMR3/NEMR3.cpp \
497 VMMR3/PDM.cpp \
498 VMMR3/PDMBlkCache.cpp \
499 VMMR3/PDMDevice.cpp \
500 VMMR3/PDMDevHlp.cpp \
501 VMMR3/PDMDevMiscHlp.cpp \
502 VMMR3/PDMDriver.cpp \
503 VMMR3/PDMLdr.cpp \
504 VMMR3/PDMCritSect.cpp \
505 VMMR3/PDMQueue.cpp \
506 VMMR3/PDMR3Task.cpp \
507 VMMR3/PDMThread.cpp \
508 VMMR3/PGM.cpp \
509 VMMR3/PGMDbg.cpp \
510 VMMR3/PGMHandler.cpp \
511 VMMR3/PGMPhys.cpp \
512 VMMR3/PGMSavedState.cpp \
513 VMMR3/PGMSharedPage.cpp \
514 VMMR3/PMUR3.cpp \
515 VMMR3/SSM.cpp \
516 VMMR3/STAM.cpp \
517 VMMR3/TM.cpp \
518 VMMR3/TRPM.cpp \
519 VMMR3/VM.cpp \
520 VMMR3/VMEmt.cpp \
521 VMMR3/VMReq.cpp \
522 VMMR3/VMM.cpp \
523 VMMR3/VMMGuruMeditation.cpp \
524 VMMR3/VMMTests.cpp \
525 VMMR3/HM-armv8.cpp \
526 VMMAll/CPUMAllRegs-armv8.cpp \
527 VMMAll/CPUMAllSysRegs-armv8.cpp \
528 VMMAll/DBGFAll.cpp \
529 VMMAll/DBGFAllBp.cpp \
530 $(if-expr defined(VBOX_WITH_DBGF_TRACING), VMMAll/DBGFAllTracer.cpp,) \
531 VMMAll/IOMAll.cpp \
532 VMMAll/IOMAllMmioNew.cpp \
533 VMMAll/MMAll.cpp \
534 VMMAll/NEMAll.cpp \
535 VMMAll/PDMAll.cpp \
536 VMMAll/PDMAllCritSect.cpp \
537 VMMAll/PDMAllCritSectRw.cpp \
538 VMMAll/PDMAllCritSectBoth.cpp \
539 VMMAll/PDMAllGic.cpp \
540 VMMAll/PDMAllQueue.cpp \
541 VMMAll/PDMAllTask.cpp \
542 VMMAll/PGMAll.cpp \
543 VMMAll/PGMAllHandler.cpp \
544 VMMAll/PGMAllPhys.cpp \
545 VMMAll/EMAll.cpp \
546 VMMAll/GICAll.cpp \
547 VMMAll/GITSAll.cpp \
548 VMMAll/GIMAll.cpp \
549 VMMAll/PMUAll.cpp \
550 VMMAll/TMAll.cpp \
551 VMMAll/TMAllCpu.cpp \
552 VMMAll/TMAllReal.cpp \
553 VMMAll/TMAllVirtual.cpp \
554 VMMAll/TRPMAll.cpp \
555 VMMAll/VMAll.cpp \
556 VMMAll/VMMAll.cpp
557 ifdef VBOX_WITH_VUSB
558 VBoxVMMArm_SOURCES += VMMR3/PDMUsb.cpp
559 endif
560 ifdef VBOX_WITH_PDM_ASYNC_COMPLETION
561 VBoxVMMArm_SOURCES += \
562 VMMR3/PDMAsyncCompletion.cpp \
563 VMMR3/PDMAsyncCompletionFile.cpp \
564 VMMR3/PDMAsyncCompletionFileFailsafe.cpp \
565 VMMR3/PDMAsyncCompletionFileNormal.cpp
566 endif
567 ifdef VBOX_WITH_NETSHAPER
568 VBoxVMMArm_SOURCES += \
569 VMMR3/PDMNetShaper.cpp \
570 VMMAll/PDMAllNetShaper.cpp
571 endif
572 ifdef VBOX_WITH_IEM_TARGETING_ARM
573 VBoxVMMArm_SOURCES += \
574 VMMAll/IEMAll.cpp \
575 VMMAll/IEMAllMem.cpp \
576 VMMAll/IEMAllTlb.cpp \
577 VMMAll/target-armv8/IEMAll-armv8.cpp \
578 VMMAll/target-armv8/IEMAllMem-armv8.cpp \
579 VMMAll/target-armv8/IEMAllXcpt-armv8.cpp \
580 VMMAll/target-armv8/IEMAllIntprA64Tables-armv8.cpp
581 else
582 VBoxVMMArm_SOURCES += VMMAll/IEMAllStub.cpp
583 endif
584
585 VBoxVMMArm_SOURCES.amd64 += \
586 VMMR3/PGMR3DbgA.asm
587
588 VBoxVMMArm_SOURCES.darwin.arm64 += \
589 VMMR3/NEMR3Native-darwin-armv8.cpp \
590 VMMR3/GICR3Nem-darwin.cpp
591 VBoxVMMArm_DEFS.darwin.arm64 += VBOX_WITH_NATIVE_NEM
592 VBoxVMMArm_LDFLAGS.darwin.arm64 = -framework Hypervisor
593
594 VBoxVMMArm_SOURCES.linux.arm64 += \
595 VMMR3/NEMR3Native-linux-armv8.cpp \
596 VMMR3/GICR3Nem-linux.cpp
597 VBoxVMMArm_DEFS.linux.arm64 += VBOX_WITH_NATIVE_NEM
598
599 VBoxVMMArm_SOURCES.win.arm64 += \
600 VMMR3/NEMR3Native-win-armv8.cpp \
601 VMMR3/GICR3Nem-win.cpp
602 VBoxVMMArm_DEFS.win.arm64 += VBOX_WITH_NATIVE_NEM
603
604 VBoxVMMArm_LIBS = \
605 $(PATH_STAGE_LIB)/DisasmR3$(VBOX_SUFF_LIB)
606 ifdef VBOX_WITH_DEBUGGER
607 VBoxVMMArm_LIBS += \
608 $(PATH_STAGE_LIB)/Debugger-armv8$(VBOX_SUFF_LIB)
609 endif
610 VBoxVMMArm_LIBS += \
611 $(LIB_RUNTIME)
612
613 VBoxVMMArm_LDFLAGS.darwin = -install_name $(VBOX_DYLD_EXECUTABLE_PATH)/VBoxVMMArm.dylib
614endif
615
616$(call KB_FN_DO_PASS0_ON_TARGET,VBoxVMM)
617$(evalcall2 def_VBoxGenIEMInstructionStatisticsTmpl_Header,VBoxVMM,$(VBoxVMM_0_OUTDIR)/CommonGenIncs)
618foobar: $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMInstructionStatisticsTmpl.h
619
620
621ifdef VBOX_WITH_IEM_RECOMPILER
622 #
623 # Generate functions for the threaded recompiler and a modified instruction decoded.
624 # Note! Dependency order matters!
625 #
626 VBOX_IEM_NATIVE_GEN_SRC_PARTS := 1 2 3 4 5 6
627 VBoxVMM_INTERMEDIATES += \
628 $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMThreadedFunctions.h \
629 $(foreach x, 1 2 3 4, $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMThreadedInstructions${x}.cpp.h)
630 ifdef VBOX_WITH_IEM_NATIVE_RECOMPILER
631 VBoxVMM_INTERMEDIATES += \
632 $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMNativeFunctions.h \
633 $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMNativeLiveness.h \
634 $(foreach x, $(VBOX_IEM_NATIVE_GEN_SRC_PARTS), $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMNativeFunctions${x}.cpp.h) \
635 $(foreach x, $(VBOX_IEM_NATIVE_GEN_SRC_PARTS), $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMNativeLiveness${x}.cpp.h)
636 endif
637 VBoxVMM_CLEAN += \
638 $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMThreadedFunctions.h.ts \
639 $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMThreadedFunctions.h \
640 $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMThreadedFunctions.cpp.h \
641 $(foreach x, 1 2 3 4, $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMThreadedInstructions${x}.cpp.h) \
642 $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMNativeFunctions.h \
643 $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMNativeLiveness.h \
644 $(foreach x, $(VBOX_IEM_NATIVE_GEN_SRC_PARTS), $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMNativeFunctions${x}.cpp.h) \
645 $(foreach x, $(VBOX_IEM_NATIVE_GEN_SRC_PARTS), $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMNativeLiveness${x}.cpp.h)
646 $(call KB_FN_AUTO_CMD_DEPS,$(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMThreadedFunctions.h.ts)
647 $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMThreadedFunctions.h.ts \
648 +| $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMThreadedFunctions.h \
649 +| $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMThreadedFunctions.cpp.h \
650 +| $(if-expr defined(VBOX_WITH_IEM_NATIVE_RECOMPILER), $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMNativeLiveness.h,) \
651 +| $(if-expr defined(VBOX_WITH_IEM_NATIVE_RECOMPILER), $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMNativeFunctions.h,) \
652 +| $(if-expr defined(VBOX_WITH_IEM_NATIVE_RECOMPILER), $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMNativeFunctions1.cpp.h,) \
653 +| $(if-expr defined(VBOX_WITH_IEM_NATIVE_RECOMPILER), $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMNativeFunctions2.cpp.h,) \
654 +| $(if-expr defined(VBOX_WITH_IEM_NATIVE_RECOMPILER), $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMNativeFunctions3.cpp.h,) \
655 +| $(if-expr defined(VBOX_WITH_IEM_NATIVE_RECOMPILER), $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMNativeFunctions4.cpp.h,) \
656 +| $(if-expr defined(VBOX_WITH_IEM_NATIVE_RECOMPILER), $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMNativeFunctions5.cpp.h,) \
657 +| $(if-expr defined(VBOX_WITH_IEM_NATIVE_RECOMPILER), $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMNativeFunctions6.cpp.h,) \
658 +| $(if-expr defined(VBOX_WITH_IEM_NATIVE_RECOMPILER), $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMNativeLiveness1.cpp.h,) \
659 +| $(if-expr defined(VBOX_WITH_IEM_NATIVE_RECOMPILER), $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMNativeLiveness2.cpp.h,) \
660 +| $(if-expr defined(VBOX_WITH_IEM_NATIVE_RECOMPILER), $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMNativeLiveness3.cpp.h,) \
661 +| $(if-expr defined(VBOX_WITH_IEM_NATIVE_RECOMPILER), $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMNativeLiveness4.cpp.h,) \
662 +| $(if-expr defined(VBOX_WITH_IEM_NATIVE_RECOMPILER), $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMNativeLiveness5.cpp.h,) \
663 +| $(if-expr defined(VBOX_WITH_IEM_NATIVE_RECOMPILER), $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMNativeLiveness6.cpp.h,) \
664 +| $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMThreadedInstructions1.cpp.h \
665 +| $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMThreadedInstructions2.cpp.h \
666 +| $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMThreadedInstructions3.cpp.h \
667 +| $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMThreadedInstructions4.cpp.h: \
668 $(PATH_SUB_CURRENT)/VMMAll/IEMAllThrdPython.py \
669 $(PATH_SUB_CURRENT)/VMMAll/IEMAllInstPython.py \
670 $(PATH_SUB_CURRENT)/VMMAll/IEMAllN8vePython.py \
671 $(PATH_SUB_CURRENT)/VMMAll/target-x86/IEMAllInstCommon-x86.cpp.h \
672 $(PATH_SUB_CURRENT)/VMMAll/target-x86/IEMAllInstCommonBodyMacros-x86.h \
673 $(if-expr !defined(IEM_WITHOUT_3DNOW) ,$(PATH_SUB_CURRENT)/VMMAll/target-x86/IEMAllInst3DNow-x86.cpp.h,) \
674 $(if-expr !defined(IEM_WITHOUT_THREE_0F_38),$(PATH_SUB_CURRENT)/VMMAll/target-x86/IEMAllInstThree0f38-x86.cpp.h,) \
675 $(if-expr !defined(IEM_WITHOUT_THREE_0F_3A),$(PATH_SUB_CURRENT)/VMMAll/target-x86/IEMAllInstThree0f3a-x86.cpp.h,) \
676 $(PATH_SUB_CURRENT)/VMMAll/target-x86/IEMAllInstTwoByte0f-x86.cpp.h \
677 $(if-expr !defined(IEM_WITHOUT_VEX), \
678 $(PATH_SUB_CURRENT)/VMMAll/target-x86/IEMAllInstVexMap1-x86.cpp.h \
679 $(PATH_SUB_CURRENT)/VMMAll/target-x86/IEMAllInstVexMap2-x86.cpp.h \
680 $(PATH_SUB_CURRENT)/VMMAll/target-x86/IEMAllInstVexMap3-x86.cpp.h,) \
681 $(PATH_SUB_CURRENT)/VMMAll/target-x86/IEMAllInstOneByte-x86.cpp.h
682 $(QUIET)$(call MSG_GENERATE,VBoxVMM,$@,VMMAll/target-x86/IEMAllInst*.cpp.h)
683 $(QUIET)$(RM) -f -- \
684 $(foreach x, 1 2 3 4,"$(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMThreadedInstructions${x}.cpp.h.ts") \
685 "$(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMThreadedFunctions.cpp.h.ts" \
686 "$(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMNativeFunctions.h.ts" \
687 "$(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMNativeLiveness.h.ts" \
688 $(foreach x, $(VBOX_IEM_NATIVE_GEN_SRC_PARTS),"$(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMNativeFunctions${x}.cpp.h.ts") \
689 $(foreach x, $(VBOX_IEM_NATIVE_GEN_SRC_PARTS),"$(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMNativeLiveness${x}.cpp.h.ts")
690 $(QUIET)$(MKDIR) -p -- "$(dir $@)"
691 $(call KB_FN_AUTO_CMD_DEPS_COMMANDS)
692 $(REDIRECT) -0 /dev/null -- $(VBOX_BLD_PYTHON) $< $(filter %.cpp.h,$^) \
693 --host-arch "$(KBUILD_TARGET_ARCH)" \
694 --out-thrd-funcs-hdr "$(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMThreadedFunctions.h.ts" \
695 --out-thrd-funcs-cpp "$(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMThreadedFunctions.cpp.h.ts" \
696 --out-mod-input1 "$(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMThreadedInstructions1.cpp.h.ts" \
697 --out-mod-input2 "$(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMThreadedInstructions2.cpp.h.ts" \
698 --out-mod-input3 "$(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMThreadedInstructions3.cpp.h.ts" \
699 --out-mod-input4 "$(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMThreadedInstructions4.cpp.h.ts" \
700 $(if-expr defined(VBOX_WITH_IEM_NATIVE_RECOMPILER), \
701 --native \
702 --out-n8ve-funcs-hdr "$(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMNativeFunctions.h.ts" \
703 --out-n8ve-liveness-hdr "$(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMNativeLiveness.h.ts" \
704 $(foreach x, $(VBOX_IEM_NATIVE_GEN_SRC_PARTS) \
705 ,--out-n8ve-funcs-cpp${x} "$(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMNativeFunctions${x}.cpp.h.ts") \
706 $(foreach x, $(VBOX_IEM_NATIVE_GEN_SRC_PARTS) \
707 ,--out-n8ve-liveness-cpp${x} "$(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMNativeLiveness${x}.cpp.h.ts") \
708 ,)
709 $(foreach x, 1 2 3 4, $(NLTAB)$(QUIET)$(CP) -v -f --changed -- \
710 "$(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMThreadedInstructions${x}.cpp.h.ts" \
711 "$(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMThreadedInstructions${x}.cpp.h")
712 $(QUIET)$(CP) -v -f --changed -- \
713 "$(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMThreadedFunctions.cpp.h.ts" \
714 "$(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMThreadedFunctions.cpp.h"
715 $(QUIET)$(CP) -v -f --changed -- \
716 "$(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMThreadedFunctions.h.ts" \
717 "$(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMThreadedFunctions.h"
718 ifdef VBOX_WITH_IEM_NATIVE_RECOMPILER
719 $(QUIET)$(CP) -v -f --changed -- \
720 "$(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMNativeFunctions.h.ts" \
721 "$(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMNativeFunctions.h"
722 $(QUIET)$(CP) -v -f --changed -- \
723 "$(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMNativeLiveness.h.ts" \
724 "$(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMNativeLiveness.h"
725 $(foreach x, $(VBOX_IEM_NATIVE_GEN_SRC_PARTS), $(NLTAB)$(QUIET)$(CP) -v -f --changed -- \
726 "$(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMNativeFunctions${x}.cpp.h.ts" \
727 "$(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMNativeFunctions${x}.cpp.h")
728 $(foreach x, $(VBOX_IEM_NATIVE_GEN_SRC_PARTS), $(NLTAB)$(QUIET)$(CP) -v -f --changed -- \
729 "$(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMNativeLiveness${x}.cpp.h.ts" \
730 "$(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMNativeLiveness${x}.cpp.h")
731 endif
732 $(QUIET)$(RM) -f -- \
733 "$(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMThreadedInstructions1.cpp.h.ts" \
734 "$(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMThreadedInstructions2.cpp.h.ts" \
735 "$(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMThreadedInstructions3.cpp.h.ts" \
736 "$(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMThreadedInstructions4.cpp.h.ts" \
737 "$(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMThreadedFunctions.cpp.h.ts" \
738 "$(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMNativeFunctions.h.ts" \
739 "$(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMNativeLiveness.h.ts" \
740 $(foreach x, $(VBOX_IEM_NATIVE_GEN_SRC_PARTS),"$(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMNativeFunctions${x}.cpp.h.ts") \
741 $(foreach x, $(VBOX_IEM_NATIVE_GEN_SRC_PARTS),"$(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMNativeLiveness${x}.cpp.h.ts") \
742
743 foobared: $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMThreadedFunctions.h.ts
744
745 #
746 # Generate member offsets for selected structures for use from ARM64 assembly.
747 #
748 # Note! The windows rule is using the .obj rather than the -obj.pdb file as
749 # dependency, as the latter isn't listed as an output file for some reason.
750 #
751 if1of ($(KBUILD_TARGET_ARCH), arm64)
752 VBoxVMM_CLEAN += \
753 $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMAssemblyOffsets.h.ts \
754 $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMAssemblyOffsets.h
755 $(call KB_FN_AUTO_CMD_DEPS,$(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMAssemblyOffsets.h.ts)
756 ifeq ($(KBUILD_TARGET),win)
757 $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMAssemblyOffsets.h.ts \
758 +| $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMAssemblyOffsets.h: \
759 $(VBoxVMM_0_OUTDIR)/VMMAll/IEMAllN8veRecompiler.obj \
760 $(PATH_SUB_CURRENT)/pdbutil-to-offsets.sed
761 $(QUIET)$(call MSG_GENERATE,VBoxVMM,$@,IEMAllN8veRecompiler-obj.pdb)
762 $(QUIET)$(RM) -f -- "$@" "[email protected]"
763 $(QUIET)$(MKDIR) -p -- "$(dir $@)"
764 $(call KB_FN_AUTO_CMD_DEPS_COMMANDS)
765 $(QUIET)$(REDIRECT) -0 /dev/null -o "[email protected]" -- \
766 $(TOOL_VCC143-CLANGXX_PREFIX2)pdbutil$(TOOL_VCC143-CLANGXX_SUFFIX2) \
767 pretty --with-name=VMCPU --with-name=IEMCPU "$(VBoxVMM_0_OUTDIR)/VMMAll/IEMAllN8veRecompiler-obj.pdb"
768 $(QUIET)$(SED) -n -f "$(filter %.sed,$^)" --output "$@" "[email protected]"
769 $(QUIET)$(RM) -f "[email protected]"
770 $(QUIET)$(CP) -v -f --changed -- "$@" "$(basename $@)"
771 else
772 $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMAssemblyOffsets.h.ts \
773 +| $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMAssemblyOffsets.h: \
774 $(VBoxVMM_0_OUTDIR)/VMMAll/IEMAllN8veRecompiler.o \
775 $(PATH_SUB_CURRENT)/dwarfdump-to-offsets.sed
776 $(QUIET)$(call MSG_GENERATE,VBoxVMM,$@,IEMAllN8veRecompiler.o)
777 $(QUIET)$(RM) -f -- "$@" "[email protected]"
778 $(QUIET)$(MKDIR) -p -- "$(dir $@)"
779 $(call KB_FN_AUTO_CMD_DEPS_COMMANDS)
780 ifeq ($(KBUILD_HOST),linux)
781 $(QUIET)$(REDIRECT) -0 /dev/null -o "[email protected]" -- \
782 dwarfdump --search-regex='^(VMCPU|IEMCPU)$(DOLLAR)' --search-print-children --recurse-depth=1 "$<"
783 else
784 $(QUIET)$(REDIRECT) -0 /dev/null -o "[email protected]" -- \
785 dwarfdump --regex --name='^(VMCPU|IEMCPU)$(DOLLAR)' --show-children --recurse-depth=1 "$<"
786 endif
787 $(QUIET)$(SED) -n -f "$(filter %.sed,$^)" --output "$@" "[email protected]"
788 $(QUIET)$(RM) -f "[email protected]"
789 $(QUIET)$(CP) -v -f --changed -- "$@" "$(basename $@)"
790 endif
791
792 # Set up the dependencies.
793 $(VBoxVMM_0_OUTDIR)/VMMAll/IEMAllN8veHlpA-arm64.o: $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMAssemblyOffsets.h
794 $(VBoxVMM_0_OUTDIR)/VMMAll/IEMAllN8veHlpA-arm64.obj: $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMAssemblyOffsets.h
795 endif
796
797 #
798 # Generate member offsets for selected structures for use from ARM64 assembly.
799 #
800 if1of ($(KBUILD_TARGET_ARCH), amd64)
801 VBoxVMM_CLEAN += \
802 $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMInternal.mac.ts \
803 $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMInternal.mac \
804 $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMN8veRecompiler.mac.ts \
805 $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMN8veRecompiler.mac
806
807 VBoxVMM_INTERMEDIATES.amd64 += $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMInternal.mac
808 $(call KB_FN_AUTO_CMD_DEPS,$(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMInternal.mac.ts)
809 $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMInternal.mac.ts \
810 +| $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMInternal.mac: \
811 $(PATH_SUB_CURRENT)/include/IEMInternal.h \
812 $(PATH_ROOT)/include/VBox/various.sed
813 $(QUIET)$(call MSG_GENERATE,VBoxVMM,$@,$<)
814 $(QUIET)$(MKDIR) -p -- "$(dir $@)"
815 $(call KB_FN_AUTO_CMD_DEPS_COMMANDS)
816 $(QUIET)$(SED) -f "$(filter %.sed,$^)" --output "$@" "$<"
817 $(QUIET)$(CP) -v -f --changed -- "$@" "$(basename $@)"
818
819 VBoxVMM_INTERMEDIATES.amd64 += $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMN8veRecompiler.mac
820 $(call KB_FN_AUTO_CMD_DEPS,$(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMN8veRecompiler.mac.ts)
821 $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMN8veRecompiler.mac.ts \
822 +| $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMN8veRecompiler.mac: \
823 $(PATH_SUB_CURRENT)/include/IEMN8veRecompiler.h \
824 $(PATH_ROOT)/include/VBox/various.sed
825 $(QUIET)$(call MSG_GENERATE,VBoxVMM,$@,$<)
826 $(QUIET)$(MKDIR) -p -- "$(dir $@)"
827 $(call KB_FN_AUTO_CMD_DEPS_COMMANDS)
828 $(QUIET)$(SED) -f "$(filter %.sed,$^)" --output "$@" "$<"
829 $(QUIET)$(CP) -v -f --changed -- "$@" "$(basename $@)"
830 endif
831
832endif # VBOX_WITH_IEM_RECOMPILER
833
834if "$(KBUILD_TARGET)" == "win" && !defined(VBOX_ONLY_BUILD)
835 #
836 # Debug type info hack for VMCPU, VM and similar.
837 #
838 # The microsoft linker seems to be using the last occurence of the structures
839 # when writing the module PDB file. So, we put the fully complete structures
840 # in a library which is at the end of the library list.
841 #
842 VBoxVMM_LIBS += $(VBoxVMMPdbTypeHack_1_TARGET)
843 VBoxVMM_LDFLAGS += /Export:PdbTypeHack
844
845 LIBRARIES += VBoxVMMPdbTypeHack
846 VBoxVMMPdbTypeHack_TEMPLATE = $(VBoxVMM_TEMPLATE)
847 VBoxVMMPdbTypeHack_SOURCES = VMMAll/AllPdbTypeHack.cpp
848 VBoxVMMPdbTypeHack_DEFS = $(VBoxVMM_DEFS)
849 VBoxVMMPdbTypeHack_DEFS.win = $(VBoxVMM_DEFS.win)
850 VBoxVMMPdbTypeHack_DEFS.win.x86 = $(VBoxVMM_DEFS.win.x86)
851 VBoxVMMPdbTypeHack_DEFS.win.amd64 = $(VBoxVMM_DEFS.win.amd64)
852 VBoxVMMPdbTypeHack_INCS = $(VBoxVMM_INCS)
853 VBoxVMMPdbTypeHack_INTERMEDIATES = $(VBoxVMM_INTERMEDIATES)
854endif
855
856
857if1of ($(VBOX_LDR_FMT), pe lx)
858 #
859 # VMMR0Imp.lib
860 #
861 LIBRARIES += VMMR0Imp
862 VMMR0Imp_TEMPLATE = VBoxR0
863 VMMR0Imp_SOURCES = $(VMMR0Imp_0_OUTDIR)/VMMR0.def
864 VMMR0Imp_CLEAN = $(VMMR0Imp_0_OUTDIR)/VMMR0.def
865 ifeq ($(KBUILD_TARGET),win) # Experiment: Let's see how blunt the ones messing our NULL_THUNK_DATA entries on W10 are.
866 VMMR0Imp_POST_CMDS = $(KLIBTWEAKER_EXT) --clear-timestamps --fill-null_thunk_data $(out)
867 endif
868 $(call KB_FN_DO_PASS0_ON_TARGET,VMMR0Imp)
869
870 $(call KB_FN_AUTO_CMD_DEPS,$(VMMR0Imp_0_OUTDIR)/VMMR0.def)
871 $(VMMR0Imp_0_OUTDIR)/VMMR0.def: $(VMMR0Imp_DEFPATH)/VMMR0/VMMR0.def | $$(dir $$@)
872 $(call KB_FN_AUTO_CMD_DEPS_COMMANDS)
873 $(SED) \
874 -e '/not-win/d' \
875 -e '/not-$(KBUILD_TARGET_ARCH)/d' \
876 --output $@ $(VMMR0Imp_DEFPATH)/VMMR0/VMMR0.def
877endif # R0: pe + lx
878
879
880##
881## VMMR3Imp.lib - obsolete.
882##
883#IMPORT_LIBS += VMMR3Imp
884#$(call VBOX_GENERATE_IMPORT_TARGET_FN,VMMR3Imp,VBoxVMM,VMMR3/VMMR3.def)
885
886
887#
888# VMMR0.r0
889#
890if defined(VBOX_WITH_R0_MODULES) && !defined(VBOX_ONLY_BUILD)
891 ifdef VBOX_WITH_VBOXR0_AS_DLL
892 DLLS += VMMR0
893 else
894 SYSMODS += VMMR0
895 endif
896 VMMR0_TEMPLATE = VBoxR0
897 VMMR0_SYSSUFF = .r0
898
899 VMMR0_DEFS = VBOX_VMM_TARGET_AGNOSTIC VBOX_IN_VMM IN_VMM_R0 IN_RT_R0 IN_DIS DIS_CORE_ONLY IN_INTNET_R0 \
900 $(VMM_COMMON_DEFS) RTASSERT_HAVE_SHOULD_PANIC
901 ifdef VBOX_WITH_PCI_PASSTHROUGH
902 VMMR0_DEFS += IN_PCIRAW_R0
903 endif
904 ifdef VBOX_WITH_TRIPLE_FAULT_HACK
905 VMMR0_DEFS += VBOX_WITH_TRIPLE_FAULT_HACK
906 endif
907 ifdef VBOX_WITH_IOMMU_AMD
908 VMMR0_DEFS += VBOX_WITH_IOMMU_AMD
909 endif
910 ifdef VBOX_WITH_DBGF_TRACING
911 VMMR0_DEFS += VBOX_WITH_DBGF_TRACING
912 endif
913 if1of ($(KBUILD_TARGET), darwin linux win)
914 VMMR0_DEFS += VMM_R0_TOUCH_FPU
915 endif
916 ifdef VBOX_WITH_VIRT_ARMV8
917 VMMR0_DEFS += VBOX_WITH_VIRT_ARMV8
918 endif
919 VMMR0_DEFS.win.amd64 = VBOX_WITH_KERNEL_USING_XMM
920
921 ifeq ($(VBOX_LDR_FMT),elf)
922 VMMR0_CXXFLAGS += -Wunused -Wunused-variable -Wno-unused-parameter
923 endif
924
925 # yasm versions not knowing about -Wno-segreg-in-64bit (including vanilla 1.3.0) would cause build failure.
926 if "$(VBOX_ASTOOL)" != "YASM" || defined("VBOX_YASM_Wno-segreg-in-64bit")
927 VMMR0_ASFLAGS.amd64 := -Werror
928 endif
929 VMMR0_ASFLAGS.x86 := -Werror
930
931 VMMR0_SDKS.amd64 = VBoxSoftFloatR0
932
933 VMMR0_INCS = \
934 include \
935 $(VBoxVMM_0_OUTDIR)/CommonGenIncs \
936 .
937
938 VMMR0_SOURCES = \
939 VBoxVMM.d \
940 VMMR0/GVMMR0.cpp \
941 VMMR0/VMMR0.cpp \
942 VMMAll/VMMAll.cpp \
943 VMMRZ/VMMRZ.cpp
944
945 VMMR0_SOURCES.amd64 = \
946 VMMR0/VMMR0JmpA-amd64.asm
947 VMMR0_SOURCES.x86 = \
948 VMMR0/VMMR0JmpA-x86.asm
949
950 VMMR0_SOURCES.win = \
951 $(VMMR0Imp_0_OUTDIR)/VMMR0.def
952
953 ifndef VBOX_WITH_MINIMAL_R0
954 VMMR0_SOURCES += \
955 VMMR0/CPUMR0.cpp \
956 VMMR0/DBGFR0.cpp \
957 VMMR0/DBGFR0Bp.cpp \
958 $(if-expr defined(VBOX_WITH_DBGF_TRACING), VMMR0/DBGFR0Tracer.cpp,) \
959 VMMR0/GIMR0.cpp \
960 VMMR0/GIMR0Hv.cpp \
961 VMMR0/GMMR0.cpp \
962 VMMR0/EMR0.cpp \
963 VMMR0/HMR0.cpp \
964 VMMR0/HMVMXR0.cpp \
965 VMMR0/HMSVMR0.cpp \
966 VMMR0/IEMR0.cpp \
967 VMMR0/IOMR0.cpp \
968 VMMR0/IOMR0IoPort.cpp \
969 VMMR0/IOMR0Mmio.cpp \
970 VMMR0/PDMR0Device.cpp \
971 VMMR0/PDMR0DevHlp.cpp \
972 $(if-expr defined(VBOX_WITH_DBGF_TRACING), VMMR0/PDMR0DevHlpTracing.cpp,) \
973 VMMR0/PDMR0Driver.cpp \
974 VMMR0/PDMR0Queue.cpp \
975 VMMR0/PGMR0.cpp \
976 VMMR0/PGMR0Pool.cpp \
977 VMMR0/PGMR0SharedPage.cpp \
978 VMMR0/TMR0.cpp \
979 VMMRZ/CPUMRZ.cpp \
980 VMMAll/APICAll.cpp \
981 VMMAll/CPUMAllCpuId.cpp \
982 VMMAll/CPUMAllRegs.cpp \
983 VMMAll/CPUMAllMsrs.cpp \
984 VMMAll/DBGFAll.cpp \
985 VMMAll/DBGFAllBp.cpp \
986 $(if-expr defined(VBOX_WITH_DBGF_TRACING), VMMAll/DBGFAllTracer.cpp,) \
987 VMMAll/EMAll.cpp \
988 VMMAll/GCMAll.cpp \
989 VMMAll/GIMAll.cpp \
990 VMMAll/GIMAllHv.cpp \
991 VMMAll/GIMAllKvm.cpp \
992 VMMAll/HMAll.cpp \
993 VMMAll/HMSVMAll.cpp \
994 VMMAll/HMVMXAll.cpp \
995 VMMAll/IEMAll.cpp \
996 VMMAll/IEMAllMem.cpp \
997 VMMAll/IEMAllTlb.cpp \
998 VMMAll/target-x86/IEMAll-x86.cpp \
999 VMMAll/target-x86/IEMAllExec-x86.cpp \
1000 VMMAll/target-x86/IEMAllOpcodeFetch-x86.cpp \
1001 VMMAll/target-x86/IEMAllOpHlp-x86.cpp \
1002 VMMAll/target-x86/IEMAllMem-x86.cpp \
1003 VMMAll/target-x86/IEMAllXcpt-x86.cpp \
1004 VMMAll/target-x86/IEMAllHlpFpu-x86.cpp \
1005 VMMAll/target-x86/IEMAllIntprTables1-x86.cpp \
1006 VMMAll/target-x86/IEMAllIntprTables2-x86.cpp \
1007 VMMAll/target-x86/IEMAllIntprTables3-x86.cpp \
1008 VMMAll/target-x86/IEMAllIntprTables4-x86.cpp \
1009 VMMAll/target-x86/IEMAllAImplC-x86.cpp \
1010 VMMAll/target-x86/IEMAllCImpl-x86.cpp \
1011 VMMAll/target-x86/IEMAllCImplSvmInstr-x86.cpp \
1012 VMMAll/target-x86/IEMAllCImplVmxInstr-x86.cpp \
1013 VMMAll/target-x86/IEMAllDbg-x86.cpp \
1014 VMMAll/IOMAll.cpp \
1015 VMMAll/IOMAllMmioNew.cpp \
1016 VMMAll/MMAll.cpp \
1017 VMMAll/NEMAll.cpp \
1018 VMMAll/PDMAll.cpp \
1019 VMMAll/PDMAllApic.cpp \
1020 VMMAll/PDMAllCritSect.cpp \
1021 VMMAll/PDMAllCritSectRw.cpp \
1022 VMMAll/PDMAllCritSectBoth.cpp \
1023 $(if-expr defined(VBOX_WITH_IOMMU_AMD) || defined(VBOX_WITH_IOMMU_INTEL), VMMAll/PDMAllIommu.cpp,) \
1024 VMMAll/PDMAllQueue.cpp \
1025 VMMAll/PDMAllTask.cpp \
1026 VMMAll/PGMAll.cpp \
1027 VMMAll/PGMAllHandler.cpp \
1028 VMMAll/PGMAllPhys.cpp \
1029 VMMAll/PGMAllPool.cpp \
1030 VMMAll/SELMAll.cpp \
1031 VMMAll/TMAll.cpp \
1032 VMMAll/TMAllCpu.cpp \
1033 VMMAll/TMAllReal.cpp \
1034 VMMAll/TMAllVirtual.cpp \
1035 VMMAll/TRPMAll.cpp \
1036 VMMAll/VMAll.cpp
1037
1038 VMMR0_SOURCES.amd64 += \
1039 VMMR0/CPUMR0A.asm \
1040 VMMRZ/CPUMRZA.asm \
1041 VMMR0/HMR0A.asm \
1042 VMMR0/HMR0UtilA.asm \
1043 $(if-expr !defined(IEM_WITHOUT_ASSEMBLY),VMMAll/target-x86/IEMAllAImpl-x86-amd64.asm,) \
1044 VMMAll/VMMAllA.asm
1045
1046 ifdef VBOX_WITH_TRIPLE_FAULT_HACK
1047 VMMR0_SOURCES.amd64 += \
1048 VMMR0/VMMR0TripleFaultHack.cpp \
1049 VMMR0/VMMR0TripleFaultHackA.asm
1050 endif
1051 ifdef VBOX_WITH_NETSHAPER
1052 VMMR0_SOURCES += \
1053 VMMAll/PDMAllNetShaper.cpp
1054 endif
1055 endif # !VBOX_WITH_MINIMAL_R0
1056
1057 VMMR0_LIBS = \
1058 $(PATH_STAGE_LIB)/ServicesR0$(VBOX_SUFF_LIB) \
1059 $(PATH_STAGE_LIB)/RuntimeR0$(VBOX_SUFF_LIB) \
1060 $(PATH_STAGE_LIB)/DisasmR0$(VBOX_SUFF_LIB) \
1061 $(VBOX_LIB_SUPR0)
1062 ifdef VBOX_WITH_NATIVE_NEM
1063 VMMR0_SOURCES.linux.amd64 += VMMR0/NEMR0Native-stubs.cpp
1064 VMMR0_SOURCES.win.amd64 += VMMR0/NEMR0Native-stubs.cpp
1065 VMMR0_SOURCES.darwin.amd64 += VMMR0/NEMR0Native-stubs.cpp
1066 VMMR0_DEFS.darwin.amd64 += VBOX_WITH_NATIVE_NEM VBOX_WITH_NEM_R0
1067 endif
1068
1069 $(call VBOX_SET_VER_INFO_R0,VMMR0,VirtualBox VMM - ring-0 context parts) # Version info / description.
1070
1071 if "$(USERNAME)" == "bird" && "$(KBUILD_TARGET)" == "win"
1072 VMMR0_VMMAll/IEMAll.cpp_CXXFLAGS = /FAcs /Fa$(subst /,\\,$(outbase).cod)
1073 VMMR0_VMMAll/IEMAllMem.cpp_CXXFLAGS = /FAcs /Fa$(subst /,\\,$(outbase).cod)
1074 VMMR0_VMMAll/IEMAllTlb.cpp_CXXFLAGS = /FAcs /Fa$(subst /,\\,$(outbase).cod)
1075 VMMR0_VMMAll/target-x86/IEMAllAImplC-x86.cpp_CXXFLAGS = /FAcs /Fa$(subst /,\\,$(outbase).cod)
1076 VMMR0_VMMAll/PGMAll.cpp_CXXFLAGS = /FAcs /Fa$(subst /,\\,$(outbase).cod)
1077 VMMR0_CLEAN += $(addprefix $(VMMR0_0_OUTDIR)/VMMAll/, IEMAll.cod IEMAllAImplC-x86.cod PGMAll.cod)
1078 endif
1079
1080 VMMR0_INTERMEDIATES += $(VBoxVMM_0_OUTDIR)/CommonGenIncs/IEMInstructionStatisticsTmpl.h
1081
1082 if "$(KBUILD_TARGET)" == "win"
1083 # Debug type info hack for VMCPU, VM and similar. See VBoxVMM for details.
1084 VMMR0_LIBS += $(VMMR0PdbTypeHack_1_TARGET)
1085 VMMR0_LDFLAGS += /Export:PdbTypeHack
1086
1087 LIBRARIES += VMMR0PdbTypeHack
1088 VMMR0PdbTypeHack_TEMPLATE = $(VMMR0_TEMPLATE)
1089 VMMR0PdbTypeHack_SOURCES = VMMAll/AllPdbTypeHack.cpp
1090 VMMR0PdbTypeHack_DEFS = $(VMMR0_DEFS)
1091 VMMR0PdbTypeHack_DEFS.win = $(VMMR0_DEFS.win)
1092 VMMR0PdbTypeHack_DEFS.win.x86 = $(VMMR0_DEFS.win.x86)
1093 VMMR0PdbTypeHack_DEFS.win.amd64 = $(VMMR0_DEFS.win.amd64)
1094 VMMR0PdbTypeHack_INCS = $(VMMR0_INCS)
1095 VMMR0PdbTypeHack_INTERMEDIATES = $(VMMR0_INTERMEDIATES)
1096 endif
1097
1098 ifdef VBOX_WITH_KMOD_WRAPPED_R0_MODS
1099 # Wrapper kmod for VMMR0.r0
1100 INSTALLS.linux += vbox_vmmr0-src
1101 vbox_vmmr0-src_INST = bin/src/vbox_vmmr0/
1102 vbox_vmmr0-src_SYMLINKS = \
1103 SUPWrapperMod-linux.c=>../common/SUPWrapperMod-linux.c \
1104 Makefile-wrapper.gmk=>../common/Makefile-wrapper.gmk
1105 vbox_vmmr0-src_SOURCES = \
1106 $(PATH_ROOT)/src/VBox/HostDrivers/Support/linux/Makefile-vbox_vmmr0.gmk=>Makefile \
1107 $(VMMR0_0_OUTDIR)/VMMR0.r0=>VMMR0.r0 \
1108 $(VMMR0_0_OUTDIR)/VMMR0.debug=>VMMR0.debug
1109 endif
1110
1111endif # defined(VBOX_WITH_R0_MODULES) && !defined(VBOX_ONLY_BUILD)
1112
1113
1114
1115ifndef VBOX_ONLY_BUILD
1116 #
1117 # SSMStandalone.lib/a for linking with VBoxSVC and other executables.
1118 #
1119 LIBRARIES += SSMStandalone
1120 SSMStandalone_TEMPLATE = VBoxR3Exe
1121 SSMStandalone_DEFS = VBOX_VMM_TARGET_AGNOSTIC VBOX_IN_VMM IN_VMM_R3 IN_VMM_STATIC SSM_STANDALONE CPUM_DB_STANDALONE $(VMM_COMMON_DEFS)
1122 SSMStandalone_INCS = include
1123 SSMStandalone_SOURCES = \
1124 VMMR3/SSM.cpp
1125endif # !VBOX_ONLY_BUILD
1126
1127
1128if !defined(VBOX_ONLY_BUILD) \
1129 && ( defined(VBOX_WITH_DTRACE_R3) \
1130 || defined(VBOX_WITH_DTRACE_R0) \
1131 || defined(VBOX_WITH_DTRACE_RC))
1132 #
1133 # Install the dtrace library files.
1134 #
1135 INSTALLS += VMMLibDTrace
1136 VMMLibDTrace_INST = $(VBOX_INST_DTRACE_LIB)$(KBUILD_TARGET_ARCH)/
1137 VMMLibDTrace_SOURCES = \
1138 dtrace/lib/vbox-types.d \
1139 dtrace/lib/$(KBUILD_TARGET_ARCH)/vbox-arch-types.d \
1140 $(VMMLibDTrace_0_OUTDIR)/vm.d \
1141 $(VMMLibDTrace_0_OUTDIR)/cpumctx.d \
1142 $(VMMLibDTrace_0_OUTDIR)/cpum.d \
1143 $(VMMLibDTrace_0_OUTDIR)/CPUMInternal.d \
1144 $(VMMLibDTrace_0_OUTDIR)/x86.d
1145 $(call KB_FN_DO_PASS0_ON_TARGET,VMMLibDTrace)
1146
1147
1148 ##
1149 # Turn the header $2 into the DTrace library script $1.
1150 # @todo ARM: this needs adjusting for the non-native VBoxVMM variant!
1151 #
1152 define def_vmm_lib_dtrace_preprocess
1153 $$(call KB_FN_AUTO_CMD_DEPS,$$(VMMLibDTrace_0_OUTDIR)/$1)
1154 $$(VMMLibDTrace_0_OUTDIR)/$1: $2 $$(VBOX_VBOXCPP) | $$$$(dir $$$$@)
1155 $$(call KB_FN_AUTO_CMD_DEPS_COMMANDS)
1156 $$(QUIET)$$(call MSG_GENERATE,VMMLibDTrace,$$@,$2)
1157 $$(QUIET)$(VBOX_VBOXCPP) -d \
1158 -D VBOX_FOR_DTRACE_LIB \
1159 -D VBOX_FOR_DTRACE_LIB_$(toupper $(KBUILD_TARGET_ARCH)) \
1160 -D $(if-expr "$(KBUILD_TARGET_ARCH)" == "amd64",VBOX_VMM_TARGET_X86,VBOX_VMM_TARGET_ARMV8) \
1161 -D IN_RING0 \
1162 -D RT_C_DECLS_BEGIN= \
1163 -D RT_C_DECLS_END= \
1164 -D RT_GCC_EXTENSION= \
1165 -D 'RCPTRTYPE(a_Type)=RTRCPTR' \
1166 -D 'R3PTRTYPE(a_Type)=RTR3PTR' \
1167 -D 'R0PTRTYPE(a_Type)=a_Type' \
1168 -D 'AssertCompile(a_Expr)=' \
1169 -D 'AssertCompileSize(a_Stuct, a_Size)=' \
1170 -D 'bool=uint8_t' \
1171 $$(foreach def,\
1172 $$(DEFS) \
1173 $$(DEFS.$$(KBUILD_TARGET)) \
1174 $$(DEFS.$(KBUILD_TARGET_ARCH)) \
1175 $$(VMM_COMMON_DEFS) \
1176 $$(ARCH_BITS_DEFS)\
1177 ,-D '$$(def)') \
1178 $2 \
1179 $$@
1180 $$(QUIET)$$(CHMOD) 644 $$@
1181
1182 VMMLibDTrace_CLEAN += $(VMMLibDTrace_0_OUTDIR)/$1
1183 endef
1184 $(evalcall2 def_vmm_lib_dtrace_preprocess,vm.d,$(PATH_ROOT)/include/VBox/vmm/vm.h)
1185 $(evalcall2 def_vmm_lib_dtrace_preprocess,cpumctx.d,$(PATH_ROOT)/include/VBox/vmm/cpumctx.h)
1186 $(evalcall2 def_vmm_lib_dtrace_preprocess,cpum.d,$(PATH_ROOT)/include/VBox/vmm/cpum.h)
1187 $(evalcall2 def_vmm_lib_dtrace_preprocess,CPUMInternal.d,$(PATH_SUB_CURRENT)/include/CPUMInternal.h)
1188 $(evalcall2 def_vmm_lib_dtrace_preprocess,x86.d,$(PATH_ROOT)/include/iprt/x86.h)
1189
1190endif
1191
1192
1193
1194#
1195# For VMMGetSvnRev.
1196#
1197VMMAll/VMMAll.cpp_DEFS = VBOX_SVN_REV=$(VBOX_SVN_REV)
1198
1199#
1200# Disable annoying warnings about array subscript above array bounds in aPages[]
1201#
1202ifneq ($(KBUILD_TARGET),win)
1203 VMMR3/PGMPool.cpp_CXXFLAGS = $(VBOX_GCC_Wno-array_bounds)
1204 VMMAll/PGMAllPool.cpp_CXXFLAGS = $(VBOX_GCC_Wno-array_bounds)
1205 VMMAll/PGMAll.cpp_CXXFLAGS = -Wno-unused-function
1206 VMMAll/IEMAll.cpp_CXXFLAGS = -Wno-unused-function
1207 VMMR0/GMMR0.cpp_CXXFLAGS = -Wno-unused-value
1208endif
1209
1210#
1211# Always optimize the interpreter.
1212#
1213#if "$(KBUILD_TYPE)" == "release" || ($(USERNAME) != "bird" && $(USERNAME) != "aeichner")
1214if "$(KBUILD_TYPE)" == "release" || ($(USERNAME) != "aeichner")
1215 if1of ($(KBUILD_TARGET), win)
1216 # -noover is recognized despite the statement saying otherwise. It silences these warnings:
1217 # cl : Command line warning D9025 : overriding '/Od' with '/O2'
1218 # cl : Command line warning D9025 : overriding '/Oy-' with '/Oy'
1219 VMMAll/IEMAll.cpp_CXXFLAGS += -noover -O2xy
1220 VMMAll/IEMAllMem.cpp_CXXFLAGS += -noover -O2xy
1221 VMMAll/IEMAllTlb.cpp_CXXFLAGS += -noover -O2xy
1222 VMMAll/target-x86/IEMAllExec-x86.cpp_CXXFLAGS += -noover -O2xy
1223 VMMAll/target-x86/IEMAllHlpFpu-x86.cpp_CXXFLAGS += -noover -O2xy
1224 VMMAll/target-x86/IEMAllMem-x86.cpp_CXXFLAGS += -noover -O2xy
1225 VMMAll/target-x86/IEMAllOpHlp-x86.cpp_CXXFLAGS += -noover -O2xy
1226 VMMAll/target-x86/IEMAllOpcodeFetch-x86.cpp_CXXFLAGS += -noover -O2xy
1227 VMMAll/target-x86/IEMAllXcpt-x86.cpp_CXXFLAGS += -noover -O2xy
1228 VMMAll/target-x86/IEMAllAImplC-x86.cpp_CXXFLAGS += -noover -O2xy
1229 VMMAll/target-x86/IEMAllCImpl-x86.cpp_CXXFLAGS += -noover -O2xy
1230 VMMAll/target-x86/IEMAllCImplSvmInstr-x86.cpp_CXXFLAGS += -noover -O2xy
1231 VMMAll/target-x86/IEMAllCImplVmxInstr-x86.cpp_CXXFLAGS += -noover -O2xy
1232 VMMAll/target-x86/IEMAllIntprTables1-x86.cpp_CXXFLAGS += -noover -O2xy
1233 VMMAll/target-x86/IEMAllIntprTables2-x86.cpp_CXXFLAGS += -noover -O2xy
1234 VMMAll/target-x86/IEMAllIntprTables3-x86.cpp_CXXFLAGS += -noover -O2xy
1235 VMMAll/target-x86/IEMAllIntprTables4-x86.cpp_CXXFLAGS += -noover -O2xy
1236 else
1237 # Omitting the frame pointer results in larger code, but it might be worth it. (esp addressing vs ebp?)
1238 VMMAll/IEMAll.cpp_CXXFLAGS += -O2 -fomit-frame-pointer
1239 VMMAll/IEMAllMem.cpp_CXXFLAGS += -O2 -fomit-frame-pointer
1240 VMMAll/IEMAllTlb.cpp_CXXFLAGS += -O2 -fomit-frame-pointer
1241 VMMAll/target-x86/IEMAll-x86.cpp_CXXFLAGS += -O2 -fomit-frame-pointer
1242 VMMAll/target-x86/IEMAllExec-x86.cpp_CXXFLAGS += -O2 -fomit-frame-pointer
1243 VMMAll/target-x86/IEMAllHlpFpu-x86.cpp_CXXFLAGS += -O2 -fomit-frame-pointer
1244 VMMAll/target-x86/IEMAllMem-x86.cpp_CXXFLAGS += -O2 -fomit-frame-pointer
1245 VMMAll/target-x86/IEMAllOpHlp-x86.cpp_CXXFLAGS += -O2 -fomit-frame-pointer
1246 VMMAll/target-x86/IEMAllOpcodeFetch-x86.cpp_CXXFLAGS += -O2 -fomit-frame-pointer
1247 VMMAll/target-x86/IEMAllXcpt-x86.cpp_CXXFLAGS += -O2 -fomit-frame-pointer
1248 VMMAll/target-x86/IEMAllCImpl-x86.cpp_CXXFLAGS += -O2 -fomit-frame-pointer
1249 VMMAll/target-x86/IEMAllCImplSvmInstr-x86.cpp_CXXFLAGS += -O2 -fomit-frame-pointer
1250 VMMAll/target-x86/IEMAllCImplVmxInstr-x86.cpp_CXXFLAGS += -O2 -fomit-frame-pointer
1251 VMMAll/target-x86/IEMAllIntprTables1-x86.cpp_CXXFLAGS += -O2 -fomit-frame-pointer
1252 VMMAll/target-x86/IEMAllIntprTables2-x86.cpp_CXXFLAGS += -O2 -fomit-frame-pointer
1253 VMMAll/target-x86/IEMAllIntprTables3-x86.cpp_CXXFLAGS += -O2 -fomit-frame-pointer
1254 VMMAll/target-x86/IEMAllIntprTables4-x86.cpp_CXXFLAGS += -O2 -fomit-frame-pointer
1255 endif
1256endif # bird wants good stacks (aeichner as well)
1257
1258
1259# Alias the CPU database entries.
1260$(foreach base,$(notdir $(basename $(wildcard $(PATH_SUB_CURRENT)/VMMR3/cpus/*.h))), $(eval $(base).o $(base).obj: CPUMR3Db.o))
1261
1262
1263#
1264# Process python source(s).
1265#
1266# The code generator for ARM requires python 3.10 (int.bit_count(), ++). So,
1267# we ASSUME that VBOX_BLD_PYTHON or something even more recent is used for
1268# running pylint below.
1269#
1270BLDDIRS += $(PATH_TARGET)/pylint
1271
1272define def_vbox_vmm_py_check
1273 $(eval name:=$(basename $(notdir $(py))))
1274
1275 pylint: $(name)-py-phony.o
1276 $(name).o: $(name)-py-phony.o
1277 $(PATH_TARGET)/pylint/$(name).o $(name)-py-phony.o:: $(py) | $(PATH_TARGET)/pylint/
1278 ifdef VBOX_WITH_PYLINT
1279 $(QUIET2)$(call MSG_L1,Subjecting $(py) to pylint...)
1280 $(QUIET)$(REDIRECT) -C "$(dir $(py))" -E LC_ALL=C -- \
1281 $(VBOX_PYLINT) --rcfile=$(PATH_TARGET)/no-such-pylintrc \
1282 $$(VBOX_PYLINT_FLAGS) $$($(py)_VBOX_PYLINT_FLAGS) ./$(notdir $(py))
1283 endif
1284 $(QUIET)$(APPEND) -t "$(PATH_TARGET)/pylint/$(name).o"
1285
1286 TESTING += $(name)-py-phony.o
1287endef # def_vbox_vmm_py_check
1288
1289$(foreach py, \
1290 $(addprefix $(PATH_SUB_CURRENT)/VMMAll/, IEMAllInstPython.py IEMAllThrdPython.py IEMAllN8vePython.py ) \
1291 $(if-expr "$(VBOX_BLD_PYTHON_VERSION)" vge "3.8.0" && "$(VBOX_PYLINT_VERSION)" >= 20000 \
1292 ,$(PATH_SUB_CURRENT)/VMMAll/target-armv8/bsd-spec-analyze.py,) \
1293, $(eval $(def_vbox_vmm_py_check)))
1294
1295
1296include $(FILE_KBUILD_SUB_FOOTER)
1297
1298
1299# Alias the PGM templates to the object in which they are defined.
1300PGMInternal.o: PGM.o
1301
1302PGMAllGst-x86.cpp.o PGMAllShw-x86.cpp.o PGMAllBth-x86.cpp.o \
1303PGMAllGst-armv8.cpp.o: PGMAll.o
1304
1305PGMPhysRWTmpl.o PGMPhysRWTmpl.obj: PGMPhys.o
1306
1307PGMInline.o PGMInline.obj: PGMDbg.o
1308
1309# Alias the IEM templates to the object in which they are instantiated.
1310IEMAllInst.cpp.o IEMAllInst.cpp.obj \
1311IEMAllInstCommon.cpp.o IEMAllInstCommon.cpp.obj \
1312IEMAllInstOneByte.cpp.o IEMAllInstOneByte.cpp.obj \
1313IEMAllInstTwoByte0f.cpp.o IEMAllInstTwoByte0f.cpp.obj \
1314IEMAllInstThree0f38.cpp.o IEMAllInstThree0f38.cpp.obj \
1315IEMAllInstThree0f3a.cpp.o IEMAllInstThree0f3a.cpp.obj \
1316IEMAllInstVexMap1.cpp.o IEMAllInstVexMap1.cpp.obj \
1317IEMAllInstVexMap2.cpp.o IEMAllInstVexMap2.cpp.obj \
1318IEMAllInstVexMap3.cpp.o IEMAllInstVexMap3.cpp.obj \
1319IEMAllInst3DNow.cpp.o IEMAllInst3DNow.cpp.obj: IEMAllInstInterpretOnly.o
1320
1321IEMInternal.o IEMInternal.obj: IEMAll.o
1322
1323IEMAllCImplStrInstr-x86.cpp.o IEMAllCImplStrInstr-x86.cpp.obj: IEMAllCImpl-x86.o
1324
1325# Alias the NEM template to the objects where it is used:
1326NEMAllNativeTemplate-win.cpp.o: NEMR3Native-win.o
1327
1328# Alias the VMX template onto HMVMXR0 or darwin specific NEM object:
1329ifeq ($(KBUILD_TARGET),darwin)
1330 VMXAllTemplate.cpp.o: NEMR3Native-darwin.o
1331else
1332 VMXAllTemplate.cpp.o: HMVMXR0.o
1333endif
1334
Note: See TracBrowser for help on using the repository browser.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette