VirtualBox

source: vbox/trunk/src/recompiler/Makefile.kmk@ 55771

Last change on this file since 55771 was 55771, checked in by vboxsync, 10 years ago

Use defines in the RC files and make those defines compatible with what we use in C/C++ code.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 11.9 KB
Line 
1# $Id: Makefile.kmk 55771 2015-05-08 20:17:50Z vboxsync $
2## @file
3# The Recompiler Sub-Makefile.
4#
5
6#
7# Copyright (C) 2006-2012 Oracle Corporation
8#
9# This file is part of VirtualBox Open Source Edition (OSE), as
10# available from http://www.virtualbox.org. This file is free software;
11# you can redistribute it and/or modify it under the terms of the GNU
12# General Public License (GPL) as published by the Free Software
13# Foundation, in version 2 as it comes in the "COPYING" file of the
14# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16#
17
18
19SUB_DEPTH = ../..
20include $(KBUILD_PATH)/subheader.kmk
21
22#
23# Globals
24#
25VBOX_PATH_RECOMPILER_SRC := $(PATH_SUB_CURRENT)
26# Workaround for darwin hell.
27ifeq ($(KBUILD_TARGET),darwin)
28 VBOX_WITHOUT_REM_LDR_CYCLE := 1
29endif
30ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),win.amd64)
31 VBOX_USE_MINGWW64 = 1
32endif
33
34
35#
36# The primary REM module definition.
37#
38# This is extended by one of the VBoxREM* modules below. Currently, this
39# isn't done by inheritance because of some obscure bug wrt inheriting from
40# unused targets that I'm not going to fix now.
41#
42ifneq ($(KBUILD_TARGET),win)
43 VBoxRemPrimary_TEMPLATE = VBOXR3NP
44 # workaround the regparm bug in gcc <= 3.3
45 VBoxRemPrimary_DEFS = $(if $(VBOX_GCC_BUGGY_REGPARM),GCC_WITH_BUGGY_REGPARM,)
46else
47 VBoxRemPrimary_TEMPLATE = DUMMY
48 VBoxRemPrimary_TOOL.win.x86 = MINGW32
49 ifdef VBOX_USE_MINGWW64
50 VBoxRemPrimary_TOOL.win.amd64 = MINGWW64
51 else
52 VBoxRemPrimary_TOOL.win.amd64 = XGCCAMD64LINUX
53 endif
54 VBoxRemPrimary_SDKS.win.x86 = W32API
55 VBoxRemPrimary_ASFLAGS = -x assembler-with-cpp
56 VBoxRemPrimary_CFLAGS = -Wall -g -fno-omit-frame-pointer -fno-strict-aliasing -Wno-shadow
57 VBoxRemPrimary_CFLAGS.debug = -O0
58 VBoxRemPrimary_CFLAGS.release += -fno-gcse -O2
59 VBoxRemPrimary_CFLAGS.profile = $(VBoxRemPrimary_CFLAGS.release)
60 VBoxRemPrimary_DEFS += IN_RING3 $(ARCH_BITS_DEFS)
61 # Workaround the regparm bug in gcc <= 3.3.
62 VBoxRemPrimary_DEFS.win.x86 += GCC_WITH_BUGGY_REGPARM
63 # Missing fpclassify. Is there a better define or flag for this?
64 VBoxRemPrimary_DEFS.solaris += __C99FEATURES__
65endif # win
66VBoxRemPrimary_DEFS += IN_REM_R3 REM_INCLUDE_CPU_H NEED_CPU_H
67#VBoxRemPrimary_DEFS += REM_PHYS_ADDR_IN_TLB
68#VBoxRemPrimary_DEFS += DEBUG_ALL_LOGGING DEBUG_DISAS DEBUG_PCALL CONFIG_DEBUG_EXEC DEBUG_FLUSH DEBUG_IOPORT DEBUG_SIGNAL DEBUG_TLB_CHECK DEBUG_TB_INVALIDATE DEBUG_TLB # Enables huge amounts of debug logging.
69#VBoxRemPrimary_DEFS += DEBUG_DISAS DEBUG_PCALL CONFIG_DEBUG_EXEC DEBUG_FLUSH DEBUG_IOPORT DEBUG_SIGNAL DEBUG_TLB_CHECK DEBUG_TB_INVALIDATE DEBUG_TLB # Enables huge amounts of debug logging.
70ifdef IEM_VERIFICATION_MODE
71 VBoxRemPrimary_DEFS += IEM_VERIFICATION_MODE
72endif
73ifdef VBOX_WITH_RAW_MODE
74 VBoxRemPrimary_DEFS += VBOX_WITH_RAW_MODE
75endif
76ifdef VBOX_WITH_RAW_RING1
77 VBoxRemPrimary_DEFS += VBOX_WITH_RAW_RING1
78endif
79VBoxRemPrimary_DEFS.linux = _GNU_SOURCE
80ifdef VBOX_SOLARIS_10
81 VBoxRemPrimary_DEFS.solaris = CONFIG_SOLARIS_VERSION=10
82else
83 VBoxRemPrimary_DEFS.solaris = CONFIG_SOLARIS_VERSION=11
84endif
85VBoxRemPrimary_DEFS.freebsd += _BSD
86VBoxRemPrimary_DEFS.amd64 += __x86_64__
87VBoxRemPrimary_DEFS.x86 += __i386__
88
89VBoxRemPrimary_INCS = \
90 Sun \
91 target-i386 \
92 tcg \
93 fpu \
94 $(VBoxRemPrimary_0_OUTDIR) \
95 $(PATH_ROOT)/src/VBox/VMM/include \
96 tcg/i386 \
97 .
98ifn1of ($(VBoxRemPrimary_DEFS),DEBUG_TMP_LOGGING)
99 VBoxRemPrimary_DEFS += LOG_USE_C99
100 VBoxRemPrimary_INCS <= \
101 Sun/crt
102endif
103
104VBoxRemPrimary_SOURCES = \
105 VBoxRecompiler.c \
106 cpu-exec.c \
107 exec.c \
108 translate-all.c \
109 host-utils.c \
110 cutils.c \
111 tcg-runtime.c \
112 tcg/tcg.c \
113 tcg/tcg-dyngen.c \
114 fpu/softfloat-native.c \
115 target-i386/op_helper.c \
116 target-i386/helper.c \
117 target-i386/translate.c
118VBoxRemPrimary_SOURCES.debug += \
119 Sun/testmath.c
120VBoxRemPrimary_SOURCES.win = $(VBoxREMImp_0_OUTDIR)/VBoxREMRes.o
121VBoxRemPrimary_SOURCES.win.x86 = $(VBoxREMImp_0_OUTDIR)/VBoxREMWin.def
122ifdef VBOX_USE_MINGWW64
123 if 0 # exporting all helps when windbg pops up on crashes
124 VBoxRemPrimary_SOURCES.win.amd64 = $(VBoxREMImp_0_OUTDIR)/VBoxREMWin.def
125 else
126 VBoxRemPrimary_LDFLAGS.win.amd64 = --export-all
127 endif
128endif
129
130ifndef VBOX_USE_MINGWW64
131VBoxRemPrimary_LIBS = \
132 $(LIB_VMM) \
133 $(LIB_RUNTIME)
134else
135VBoxRemPrimary_LIBS = \
136 $(VBoxRemPrimary_0_OUTDIR)/VBoxVMMImp.a \
137 $(VBoxRemPrimary_0_OUTDIR)/VBoxRTImp.a
138VBoxRemPrimary_CLEAN = \
139 $(VBoxRemPrimary_0_OUTDIR)/VBoxVMMImp.a \
140 $(VBoxRemPrimary_0_OUTDIR)/VBoxVMMImp.def \
141 $(VBoxRemPrimary_0_OUTDIR)/VBoxRTImp.a \
142 $(VBoxRemPrimary_0_OUTDIR)/VBoxRTImp.def
143endif
144
145VBoxRemPrimary_LDFLAGS.solaris = -mimpure-text
146if defined(VBOX_WITH_HARDENING) && "$(KBUILD_TARGET)" == "win"
147 VBoxRemPrimary_POST_CMDS = \
148 $(VBOX_VCC_EDITBIN) /LargeAddressAware /DynamicBase /NxCompat /Release /IntegrityCheck \
149 /Version:$(VBOX_VERSION_MAJOR)0$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) "$(out)" \
150 $$(NLTAB)$(VBOX_SIGN_IMAGE_CMDS)
151else
152 VBoxRemPrimary_POST_CMDS = $(VBOX_SIGN_IMAGE_CMDS)
153endif
154
155
156if "$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)" == "win.amd64" && !defined(VBOX_USE_MINGWW64)
157 #
158 # VBoxREM2/VBoxRemPrimary - Currently only used by 64-bit Windows.
159 # (e_powl-xxx.S doesn't fit in IPRT because it requires GAS and is LGPL.)
160 #
161 SYSMODS += VBoxRemPrimary
162 VBoxRemPrimary_TEMPLATE = VBOXNOCRTGAS
163 VBoxRemPrimary_NAME = VBoxREM2
164 VBoxRemPrimary_DEFS += LOG_USE_C99 $(ARCH_BITS_DEFS)
165 VBoxRemPrimary_SOURCES += \
166 Sun/e_powl-$(KBUILD_TARGET_ARCH).S
167 VBoxRemPrimary_INCS += \
168 Sun/crt
169 VBoxRemPrimary_SYSSUFF = .rel
170 VBoxRemPrimary_LIBS = \
171 $(PATH_STAGE_LIB)/RuntimeR3NoCRTGCC$(VBOX_SUFF_LIB)
172 VBoxRemPrimary_POST_CMDS = $(NO_SUCH_VARIABLE)
173 VBOX_REM_WRAPPER = 2
174
175else if "$(KBUILD_TARGET_ARCH)" == "x86" && defined(VBOX_WITH_64_BITS_GUESTS)
176 #
177 # For 32-bit targets when enabled 64-bit guests we build 2 REM DLLs:
178 # with 64-bit support (slow and buggy at the moment) VBOXREM64
179 # only 32-bit support (faster, stable, but not suitable for 64-bit guests) VBOXREM32
180 # During the runtime, we load appropriate library from VBOXREM, depending on guest settings.
181 # 64-bit targets have 64-bit enabled REM by default, so is not part of this mess
182 #
183
184 #
185 # VBoxREM32/VBoxRemPrimary
186 #
187 DLLS += VBoxRemPrimary
188 VBoxRemPrimary_NAME = VBoxREM32
189 VBoxRemPrimary_LDFLAGS.darwin = -install_name $(VBOX_DYLD_EXECUTABLE_PATH)/VBoxREM32.dylib
190 VBOX_REM_WRAPPER = 32
191
192 #
193 # VBoxREM64
194 #
195 DLLS += VBoxREM64
196 VBoxREM64_EXTENDS = VBoxRemPrimary
197 VBoxREM64_EXTENDS_BY = appending
198 VBoxREM64_NAME = VBoxREM64
199 VBoxREM64_DEFS = VBOX_ENABLE_VBOXREM64
200 VBoxREM64_LDFLAGS.darwin = -install_name $(VBOX_DYLD_EXECUTABLE_PATH)/VBoxREM64.dylib
201
202else
203 #
204 # VBoxREM/VBoxRemPrimary - Normal.
205 #
206 DLLS += VBoxRemPrimary
207 VBoxRemPrimary_NAME = VBoxREM
208 VBoxRemPrimary_LDFLAGS.darwin = -install_name $(VBOX_DYLD_EXECUTABLE_PATH)/VBoxREM3.dylib
209
210 ifdef VBOX_USE_MINGWW64
211 # GNU ld (rubenvb-4.5.4) 2.22.52.20120716 doesn't fix up rip relative
212 # addressing in the import libraries generated by microsoft link.exe. So, we
213 # have to regenerate these.
214 # Note! The chdir to the output directory is because dlltool writes temporary files to the current directory.
215 $$(VBoxRemPrimary_0_OUTDIR)/VBoxVMMImp.a \
216 $$(VBoxRemPrimary_0_OUTDIR)/VBoxRTImp.a : $$(VBoxRemPrimary_0_OUTDIR)/$$(notdir $$(basename $$@)).def
217 $(REDIRECT) -C "$(dir $@)" -- $(TOOL_MINGWW64_DLLTOOL) \
218 --output-lib "$@" \
219 --input-def "$<" \
220 --dllname "$(patsubst %Imp.a,%.dll,$(notdir $@))"
221
222 $$(VBoxRemPrimary_0_OUTDIR)/VBoxVMMImp.def \
223 $$(VBoxRemPrimary_0_OUTDIR)/VBoxRTImp.def : \
224 $(PATH_STAGE_BIN)/$$(patsubst %Imp.def,%.dll,$$(notdir $$@)) \
225 | $$(dir $$@)
226 $(APPEND) -nt $@ "LIBRARY $(notdir $<)" "EXPORTS"
227 $(TOOL_$(VBOX_VCC_TOOL)_DUMPBIN) /EXPORTS "$<" \
228 | $(SED) -e '/ = /!d' \
229 -e 's/^.* \([^ ][^ ]*\) = .*$(DOLLAR)/ \"\1\"/' \
230 --append $@
231 endif # VBOX_USE_MINGWW64
232
233endif
234
235
236ifdef VBOX_REM_WRAPPER
237 #
238 # VBoxREM - Wrapper for loading VBoxREM2, VBoxREM32 or VBoxREM64.
239 #
240 DLLS += VBoxREMWrapper
241 VBoxREMWrapper_TEMPLATE = VBoxR3DllWarnNoPic
242 VBoxREMWrapper_NAME = VBoxREM
243 VBoxREMWrapper_DEFS = IN_REM_R3
244 if "$(KBUILD_TARGET_ARCH)" == "x86" && defined(VBOX_WITH_64_BITS_GUESTS)
245 VBoxREMWrapper_DEFS += VBOX_USE_BITNESS_SELECTOR
246 endif
247 ifdef VBOX_WITHOUT_REM_LDR_CYCLE
248 VBoxREMWrapper_DEFS += VBOX_WITHOUT_REM_LDR_CYCLE
249 endif
250 VBoxREMWrapper_SOURCES = \
251 VBoxREMWrapper.cpp
252 VBoxREMWrapper_SOURCES.win = VBoxREM.rc
253 if "$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)" == "win.amd64" && !defined(VBOX_USE_MINGWW64)
254 VBoxREMWrapper_SOURCES += \
255 VBoxREMWrapperA.asm
256 endif
257 VBoxREMWrapper_LIBS = \
258 $(LIB_RUNTIME)
259 ifndef VBOX_WITHOUT_REM_LDR_CYCLE
260 VBoxREMWrapper_LIBS += \
261 $(LIB_VMM)
262 VBoxREMWrapper_LIBS.darwin += \
263 $(TARGET_VBoxREMImp)
264 endif
265 VBoxREMWrapper_LDFLAGS.darwin = -install_name $(VBOX_DYLD_EXECUTABLE_PATH)/VBoxREM.dylib
266endif
267
268
269#
270# The VBoxREM import library.
271#
272# This is a HACK to get around (a) the cyclic dependency between VBoxVMM and
273# VBoxREM during linking and (b) the recursive build ordering which means VBoxREM
274# won't be built until after all the other DLLs.
275#
276IMPORT_LIBS += VBoxREMImp
277VBoxREMImp_TEMPLATE = VBoxR3Dll
278 ifn1of ($(KBUILD_TARGET), os2 win)
279VBoxREMImp_NAME = VBoxREM
280 endif
281VBoxREMImp_INST = $(INST_LIB)
282VBoxREMImp_SOURCES.win = $(VBoxREMImp_0_OUTDIR)/VBoxREMWin.def
283VBoxREMImp_CLEAN.win = $(VBoxREMImp_0_OUTDIR)/VBoxREMWin.def
284VBoxREMImp_SOURCES.os2 = $(VBoxREMImp_0_OUTDIR)/VBoxREMOS2.def
285VBoxREMImp_CLEAN.os2 = $(VBoxREMImp_0_OUTDIR)/VBoxREMOS2.def
286 ifn1of ($(KBUILD_TARGET), os2 win)
287VBoxREMImp_SOURCES = $(VBoxREMImp_0_OUTDIR)/VBoxREMImp.c
288VBoxREMImp_CLEAN = $(VBoxREMImp_0_OUTDIR)/VBoxREMImp.c
289 endif
290 ifn1of ($(KBUILD_TARGET), darwin os2 win)
291VBoxREMImp_SONAME = VBoxREM$(SUFF_DLL)
292 endif
293ifdef VBOX_WITHOUT_REM_LDR_CYCLE
294 VBoxREMImp_LDFLAGS.darwin = -install_name $(VBOX_DYLD_EXECUTABLE_PATH)/VBoxREM.dylib
295else
296 VBoxREMImp_LDFLAGS.darwin = -install_name $(subst @rpath,@executable_path,$(VBOX_DYLD_EXECUTABLE_PATH))/VBoxREM.dylib
297endif
298VBoxREMImp_LDFLAGS.l4 = -T$(L4_LIBDIR)/../main_rel.ld -nostdlib
299
300$$(VBoxREMImp_0_OUTDIR)/VBoxREMImp.c: $(VBOX_PATH_RECOMPILER_SRC)/VBoxREM.def $(VBOX_PATH_RECOMPILER_SRC)/Sun/deftoimp.sed $(MAKEFILE_CURRENT) | $$(dir $$@)
301 $(call MSG_GENERATE,,$@)
302 $(QUIET)$(APPEND) -t $@ '#ifdef VBOX_HAVE_VISIBILITY_HIDDEN'
303 $(QUIET)$(APPEND) $@ '# define EXPORT __attribute__((visibility("default")))'
304 $(QUIET)$(APPEND) $@ '#else'
305 $(QUIET)$(APPEND) $@ '# define EXPORT'
306 $(QUIET)$(APPEND) $@ '#endif'
307 $(QUIET)$(APPEND) $@ ''
308 $(QUIET)$(SED) -f $(VBOX_PATH_RECOMPILER_SRC)/Sun/deftoimp.sed --append $@ $<
309
310$$(VBoxREMImp_0_OUTDIR)/VBoxREMOS2.def: $(VBOX_PATH_RECOMPILER_SRC)/VBoxREM.def $(MAKEFILE_CURRENT) | $$(dir $$@)
311 $(SED) \
312 -e 's/^[ \t][ \t]*REMR3/ _REMR3/' \
313 -e 's/\.[Dd][Ll][Ll]//' \
314 -e 's/^LIBRARY .*/LIBRARY VBoxREM INITINSTANCE TERMINSTANCE\nDATA MULTIPLE\n/' \
315 --output $@ \
316 $<
317
318$$(VBoxREMImp_0_OUTDIR)/VBoxREMWin.def: $(VBOX_PATH_RECOMPILER_SRC)/VBoxREM.def $(MAKEFILE_CURRENT) | $$(dir $$@)
319 $(CP) -f $< $@
320
321$$(VBoxREMImp_0_OUTDIR)/VBoxREMRes.o: $(VBOX_PATH_RECOMPILER_SRC)/VBoxREM.rc $(MAKEFILE_CURRENT) $(VBOX_VERSION_MK) | $$(dir $$@)
322 $(call MSG_GENERATE,,$@)
323 $(QUIET)$(REDIRECT) -E 'COMSPEC=$(VBOX_GOOD_COMSPEC_BS)' -- $(TOOL_MINGWW64_PREFIX)windres \
324 $(addprefix -I,$(INCS) $(PATH_SDK_$(VBOX_WINPSDK)_INC) $(PATH_TOOL_$(VBOX_VCC_TOOL)_INC)) \
325 -DVBOX_SVN_REV=$(VBOX_SVN_REV) -DIN_RING3 $< $@
326
327#
328# The math testcase as a standalone program for testing and debugging purposes.
329#
330## @todo This is a bit messy because of MINGW32.
331testmath_ASFLAGS.amd64 = -m amd64
332testmath_CFLAGS = -Wall -g
333testmath_CFLAGS.release = -O3
334testmath_LDFLAGS = -g
335testmath_DEFS = MATHTEST_STANDALONE
336testmath_SOURCES = Sun/testmath.c
337
338
339include $(FILE_KBUILD_SUB_FOOTER)
340
Note: See TracBrowser for help on using the repository browser.

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