1 | # $Id: Makefile.kmk 98103 2023-01-17 14:15:46Z vboxsync $
|
---|
2 | ## @file
|
---|
3 | # Some hacks to allow syntax and prerequisite include checking of headers.
|
---|
4 | # This makefile doesn't and shouldn't build successfully.
|
---|
5 | #
|
---|
6 |
|
---|
7 | #
|
---|
8 | # Copyright (C) 2006-2023 Oracle and/or its affiliates.
|
---|
9 | #
|
---|
10 | # This file is part of VirtualBox base platform packages, as
|
---|
11 | # available from https://www.virtualbox.org.
|
---|
12 | #
|
---|
13 | # This program is free software; you can redistribute it and/or
|
---|
14 | # modify it under the terms of the GNU General Public License
|
---|
15 | # as published by the Free Software Foundation, in version 3 of the
|
---|
16 | # License.
|
---|
17 | #
|
---|
18 | # This program is distributed in the hope that it will be useful, but
|
---|
19 | # WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
20 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
---|
21 | # General Public License for more details.
|
---|
22 | #
|
---|
23 | # You should have received a copy of the GNU General Public License
|
---|
24 | # along with this program; if not, see <https://www.gnu.org/licenses>.
|
---|
25 | #
|
---|
26 | # SPDX-License-Identifier: GPL-3.0-only
|
---|
27 | #
|
---|
28 |
|
---|
29 | SUB_DEPTH = ..
|
---|
30 | include $(KBUILD_PATH)/subheader.kmk
|
---|
31 |
|
---|
32 | LIBRARIES += SyntaxVBoxIncludeR3 SyntaxVBoxIncludeR0
|
---|
33 |
|
---|
34 | # Omit headers that are using C++ features and upsets gcc.
|
---|
35 | VBOX_HDRS_CPP_FEATURES := \
|
---|
36 | VBox/vmm/hm.h \
|
---|
37 | VBox/vmm/hm_vmx.h \
|
---|
38 | VBox/vmm/pdmaudioinline.h \
|
---|
39 | VBox/vmm/pdmaudiohostenuminline.h \
|
---|
40 | VBox/HostServices/GuestControlSvc.h \
|
---|
41 | VBox/HostServices/DragAndDropSvc.h \
|
---|
42 | VBox/HostServices/Service.h \
|
---|
43 | VBox/GuestHost/GuestControl.h \
|
---|
44 | VBox/GuestHost/DragAndDrop.h \
|
---|
45 | VBox/GuestHost/SharedClipboard-transfers.h \
|
---|
46 | VBox/dbus.h \
|
---|
47 | VBox/xrandr.h \
|
---|
48 | VBox/VBoxCrHgsmi.h \
|
---|
49 | VBox/VBoxGuestLibSharedFoldersInline.h \
|
---|
50 | VBox/VBoxPktDmp.h \
|
---|
51 | VBox/VBoxUhgsmi.h \
|
---|
52 | iprt/cpp/%
|
---|
53 |
|
---|
54 | # Omit headers that are C++ and ring-3.
|
---|
55 | VBOX_HDRS_R3_CPP := \
|
---|
56 | VBox/dbggui.h \
|
---|
57 | VBox/settings.h \
|
---|
58 | VBox/com/Guid.h \
|
---|
59 | VBox/vmm/vmmr3vtable.h \
|
---|
60 | iprt/cpp/% \
|
---|
61 | VBox/com/% \
|
---|
62 | $(subst $(PATH_SUB_CURRENT)/,,$(wildcard $(PATH_SUB_CURRENT)/iprt/*_cpp.h))
|
---|
63 |
|
---|
64 | # Ring-3 only headers.
|
---|
65 | VBOX_HDRS_R3_ONLY := \
|
---|
66 | VBox/vrdpapi.h \
|
---|
67 | VBox/vrdpusb.h \
|
---|
68 | VBox/VBoxHDD.h \
|
---|
69 | VBox/VBoxHDD-Plugin.h \
|
---|
70 | VBox/VBoxCrHgsmi.h \
|
---|
71 | VBox/VBoxUhgsmi.h \
|
---|
72 | VBox/VBoxNetCfg-win.h \
|
---|
73 | VBox/VBoxDrvCfg-win.h \
|
---|
74 | VBox/dbus.h \
|
---|
75 | VBox/xrandr.h \
|
---|
76 | $(if-expr "$(KBUILD_TARGET)" == "win",VBox/usblib.h,) \
|
---|
77 | VBox/usblib-win.h \
|
---|
78 | VBox/vd.h \
|
---|
79 | VBox/vd-cache-backend.h \
|
---|
80 | VBox/vd-ifs.h \
|
---|
81 | VBox/vd-ifs-internal.h \
|
---|
82 | VBox/vd-image-backend.h \
|
---|
83 | VBox/vd-plugin.h \
|
---|
84 | VBox/vd-filter-backend.h \
|
---|
85 | VBox/vddbg.h \
|
---|
86 | VBox/vmm/uvm.h \
|
---|
87 | VBox/vmm/dbgfflowtrace.h \
|
---|
88 | VBox/vscsi.h \
|
---|
89 | VBox/ExtPack/% \
|
---|
90 | VBox/GuestHost/SharedClipboard-transfers.h \
|
---|
91 | VBox/GuestHost/SharedClipboard-win.h \
|
---|
92 | VBox/GuestHost/SharedClipboard-x11.h \
|
---|
93 | VBox/GuestHost/DragAndDrop.h \
|
---|
94 | VBox/HostServices/Service.h \
|
---|
95 | iprt/win/% \
|
---|
96 | iprt/alloca.h \
|
---|
97 | iprt/tcp.h \
|
---|
98 | iprt/localipc.h \
|
---|
99 | iprt/linux/sysfs.h \
|
---|
100 | iprt/socket.h \
|
---|
101 | iprt/udp.h \
|
---|
102 | iprt/fuzz.h \
|
---|
103 | iprt/linux/symvers.h
|
---|
104 |
|
---|
105 | # Ring-0 driver only headers.
|
---|
106 | VBOX_HDRS_R0DRV_ONLY := \
|
---|
107 | VBox/VBoxGuestLibSharedFolders.h \
|
---|
108 | VBox/VBoxGuestLibSharedFoldersInline.h \
|
---|
109 | iprt/linux/version.h
|
---|
110 |
|
---|
111 | # GCC only headers.
|
---|
112 | VBOX_HDRS_GCC_ONLY := \
|
---|
113 | iprt/nocrt/fenv.h \
|
---|
114 | iprt/nocrt/math.h
|
---|
115 |
|
---|
116 | # Headers to omit all together.
|
---|
117 | VBOX_HDRS_OMIT := \
|
---|
118 | VBox/HostServices/glext.h \
|
---|
119 | VBox/HostServices/glxext.h \
|
---|
120 | VBox/HostServices/wglext.h \
|
---|
121 | VBox/VBoxGL2D.h \
|
---|
122 | $(if-expr "$(KBUILD_TARGET)" != "linux", \
|
---|
123 | VBox/GuestHost/SharedClipboard-x11.h \
|
---|
124 | ,)\
|
---|
125 | $(if-expr "$(KBUILD_TARGET)" != "solaris", \
|
---|
126 | VBox/usblib-solaris.h \
|
---|
127 | ,)\
|
---|
128 | VBox/VDEPlug.h \
|
---|
129 | VBox/VDEPlugSymDefs.h \
|
---|
130 | VBox/VBoxNetCmn-win.h \
|
---|
131 | $(if-expr "$(KBUILD_TARGET)" != "win", \
|
---|
132 | VBox/com/microatl.h \
|
---|
133 | VBox/GuestHost/SharedClipboard-win.h \
|
---|
134 | VBox/usblib-win.h \
|
---|
135 | VBox/VBoxDrvCfg-win.h \
|
---|
136 | VBox/VBoxNetCfg-win.h \
|
---|
137 | iprt/sanitized/intrin.h \
|
---|
138 | ,$(VBOX_HDRS_GCC_ONLY)) \
|
---|
139 | \
|
---|
140 | VBox/dbus-calls.h \
|
---|
141 | VBox/xrandr-calls.h \
|
---|
142 | VBox/VBoxKeyboard.h \
|
---|
143 | VBox/vmm/pdmpcidevint.h \
|
---|
144 | VBox/vmm/vmmr3vtable-def.h \
|
---|
145 | iprt/runtime-loader.h \
|
---|
146 | iprt/mangling.h \
|
---|
147 | $(subst $(PATH_SUB_CURRENT)/,,$(wildcard $(PATH_SUB_CURRENT)/iprt/asm*watcom*.h)) \
|
---|
148 | iprt/asn1-generator% \
|
---|
149 | iprt/win/% \
|
---|
150 | iprt/nt/% \
|
---|
151 | \
|
---|
152 | $(foreach os,$(filter-out $(KBUILD_TARGET),$(KBUILD_OSES)),iprt/$(os)/% VBox/$(os)/%) \
|
---|
153 | $(foreach arch,$(KBUILD_ARCHES),iprt/nocrt/$(arch)/%)
|
---|
154 |
|
---|
155 | # AMD64 only headers.
|
---|
156 | ifneq ($(KBUILD_TARGET_ARCH),amd64)
|
---|
157 | VBOX_HDRS_OMIT += \
|
---|
158 | VBox/vmm/cpumctx.h \
|
---|
159 | VBox/vmm/cpumctx-v1_6.h \
|
---|
160 | VBox/vmm/dbgfcorefmt.h
|
---|
161 | endif
|
---|
162 | # ARM only headers.
|
---|
163 | ifn1of ($(KBUILD_TARGET_ARCH), arm32 arm64)
|
---|
164 | VBOX_HDRS_OMIT += \
|
---|
165 | iprt/asm-arm.h
|
---|
166 | endif
|
---|
167 |
|
---|
168 |
|
---|
169 | # We omit a few headers which have platform specific issues or are templates.
|
---|
170 | VBOX_HDRS_ALL := $(filter-out $(VBOX_HDRS_OMIT), \
|
---|
171 | $(subst $(PATH_SUB_CURRENT)/,,$(wildcard \
|
---|
172 | $(PATH_SUB_CURRENT)/VBox/*.h \
|
---|
173 | $(PATH_SUB_CURRENT)/VBox/*/*.h \
|
---|
174 | $(PATH_SUB_CURRENT)/iprt/*.h \
|
---|
175 | $(PATH_SUB_CURRENT)/iprt/*/*.h \
|
---|
176 | )))
|
---|
177 |
|
---|
178 | # ring-3, ring-0 and raw-mode context specific exclusions.
|
---|
179 | VBOX_HDRS_ALL_R3 := $(filter-out $(VBOX_HDRS_R0DRV_ONLY), $(VBOX_HDRS_ALL))
|
---|
180 | if "$(intersects $(KBUILD_TARGET_ARCH),$(VBOX_SUPPORTED_HOST_ARCHS))" == ""
|
---|
181 | ifeq ($(KBUILD_TARGET),win)
|
---|
182 | VBOX_HDRS_ALL_R3 := $(filter-out VBox/com/VirtualBox.h VBox/com/listeners.h VBox/settings.h,$(VBOX_HDRS_ALL_R3))
|
---|
183 | else
|
---|
184 | VBOX_HDRS_ALL_R3 := $(filter-out VBox/com/% VBox/settings.h,$(VBOX_HDRS_ALL_R3))
|
---|
185 | endif
|
---|
186 | endif
|
---|
187 | VBOX_HDRS_ALL_R3_C := $(filter-out $(VBOX_HDRS_CPP_FEATURES) $(VBOX_HDRS_R3_CPP), $(VBOX_HDRS_ALL_R3))
|
---|
188 | VBOX_HDRS_ALL_R0 := $(filter-out $(VBOX_HDRS_R3_CPP) $(VBOX_HDRS_R3_ONLY) $(VBOX_HDRS_R0DRV_ONLY), $(VBOX_HDRS_ALL))
|
---|
189 | VBOX_HDRS_ALL_R0_C := $(filter-out $(VBOX_HDRS_CPP_FEATURES), $(VBOX_HDRS_ALL_R0))
|
---|
190 | VBOX_HDRS_ALL_R0DRV := $(filter-out $(VBOX_HDRS_R3_CPP) $(VBOX_HDRS_R3_ONLY), $(VBOX_HDRS_ALL))
|
---|
191 | VBOX_HDRS_ALL_R0DRV_C := $(filter-out $(VBOX_HDRS_CPP_FEATURES), $(VBOX_HDRS_ALL_R0DRV))
|
---|
192 | VBOX_HDRS_ALL_RC := $(filter-out \
|
---|
193 | VBox/VBoxGuestLib.h \
|
---|
194 | VBox/vmm/gvm.h \
|
---|
195 | iprt/thread.h \
|
---|
196 | iprt/mem.h \
|
---|
197 | iprt/memsafer.h \
|
---|
198 | iprt/alloc.h \
|
---|
199 | iprt/vector.h \
|
---|
200 | $(VBOX_HDRS_R3_CPP) \
|
---|
201 | $(VBOX_HDRS_R3_ONLY) \
|
---|
202 | $(VBOX_HDRS_R0DRV_ONLY) \
|
---|
203 | , $(VBOX_HDRS_ALL))
|
---|
204 | VBOX_HDRS_ALL_RC_C := $(filter-out $(VBOX_HDRS_CPP_FEATURES), $(VBOX_HDRS_ALL_RC))
|
---|
205 | #$(error $(subst $(SP),$(NLTAB),$(strip $(sort $(VBOX_HDRS_ALL_RC_C)))))
|
---|
206 |
|
---|
207 | if1of ($(KBUILD_TARGET_ARCH), $(VBOX_SUPPORTED_HOST_ARCHS))
|
---|
208 | SyntaxVBoxIncludeR3_TEMPLATE = VBOXMAINEXE
|
---|
209 | SyntaxVBoxIncludeR3_DEFS = VBOX_WITH_HGCM
|
---|
210 | else
|
---|
211 | SyntaxVBoxIncludeR3_TEMPLATE = VBOXR3EXE
|
---|
212 | SyntaxVBoxIncludeR3_SDKS.win = ReorderCompilerIncs $(VBOX_WINPSDK) $(VBOX_WINDDK)
|
---|
213 | endif
|
---|
214 | SyntaxVBoxIncludeR3_DEFS += USING_VMM_COMMON_DEFS
|
---|
215 | SyntaxVBoxIncludeR3_CDEFS = IPRT_WITHOUT_NAMED_UNIONS_AND_STRUCTS
|
---|
216 | SyntaxVBoxIncludeR3_SOURCES := \
|
---|
217 | $(addprefix $(PATH_OBJ)/include/c/, $(addsuffix .c, $(basename $(VBOX_HDRS_ALL_R3_C)))) \
|
---|
218 | $(addprefix $(PATH_OBJ)/include/cpp/,$(addsuffix .cpp,$(basename $(VBOX_HDRS_ALL_R3))))
|
---|
219 | SyntaxVBoxIncludeR3_CLEAN = $(SyntaxVBoxIncludeR3_SOURCES)
|
---|
220 | #$(error $(subst $(SP),$(NLTAB),$(strip $(sort $(SyntaxVBoxIncludeR3_SOURCES)))))
|
---|
221 |
|
---|
222 | SyntaxVBoxIncludeR0_TEMPLATE = VBoxR0
|
---|
223 | SyntaxVBoxIncludeR0_DEFS = VBOX_WITH_HGCM USING_VMM_COMMON_DEFS
|
---|
224 | SyntaxVBoxIncludeR0_CDEFS = IPRT_WITHOUT_NAMED_UNIONS_AND_STRUCTS
|
---|
225 | SyntaxVBoxIncludeR0_SOURCES := \
|
---|
226 | $(addprefix $(PATH_OBJ)/include/c/, $(addsuffix .c, $(basename $(VBOX_HDRS_ALL_R0_C)))) \
|
---|
227 | $(addprefix $(PATH_OBJ)/include/cpp/,$(addsuffix .cpp,$(basename $(VBOX_HDRS_ALL_R0))))
|
---|
228 | SyntaxVBoxIncludeR0_CLEAN = $(SyntaxVBoxIncludeR0_SOURCES)
|
---|
229 |
|
---|
230 | if1of ($(KBUILD_TARGET), darwin os2 solaris win)
|
---|
231 | LIBRARIES += SyntaxVBoxIncludeR0Drv
|
---|
232 | SyntaxVBoxIncludeR0Drv_TEMPLATE = VBoxR0DrvLib
|
---|
233 | SyntaxVBoxIncludeR0Drv_SDKS.win = ReorderCompilerIncs $(VBOX_WINDDK) $(VBOX_WINPSDK_INCS)
|
---|
234 | SyntaxVBoxIncludeR0Drv_DEFS = VBOX_WITH_HGCM USING_VMM_COMMON_DEFS
|
---|
235 | SyntaxVBoxIncludeR0Drv_CDEFS = IPRT_WITHOUT_NAMED_UNIONS_AND_STRUCTS
|
---|
236 | SyntaxVBoxIncludeR0Drv_SOURCES := \
|
---|
237 | $(addprefix $(PATH_OBJ)/include/c/, $(addsuffix .c, $(basename $(VBOX_HDRS_ALL_R0DRV_C)))) \
|
---|
238 | $(addprefix $(PATH_OBJ)/include/cpp/,$(addsuffix .cpp,$(basename $(VBOX_HDRS_ALL_R0DRV))))
|
---|
239 | SyntaxVBoxIncludeR0Drv_CLEAN = $(SyntaxVBoxIncludeR0Drv_SOURCES)
|
---|
240 | endif
|
---|
241 |
|
---|
242 | ifdef VBOX_WITH_RAW_MODE
|
---|
243 | LIBRARIES += SyntaxVBoxIncludeRC
|
---|
244 | SyntaxVBoxIncludeRC_TEMPLATE = VBoxRc
|
---|
245 | SyntaxVBoxIncludeRC_DEFS = VBOX_WITH_HGCM USING_VMM_COMMON_DEFS
|
---|
246 | SyntaxVBoxIncludeRC_CDEFS = IPRT_WITHOUT_NAMED_UNIONS_AND_STRUCTS
|
---|
247 | SyntaxVBoxIncludeRC_SOURCES := \
|
---|
248 | $(addprefix $(PATH_OBJ)/include/c/, $(addsuffix .c, $(basename $(VBOX_HDRS_ALL_RC_C)))) \
|
---|
249 | $(addprefix $(PATH_OBJ)/include/cpp/,$(addsuffix .cpp,$(basename $(VBOX_HDRS_ALL_RC))))
|
---|
250 | SyntaxVBoxIncludeRC_CLEAN = $(SyntaxVBoxIncludeRC_SOURCES)
|
---|
251 | endif
|
---|
252 |
|
---|
253 |
|
---|
254 | # Headers that must only be included once.
|
---|
255 | VBOX_HDRS_ONLY_ONCE := \
|
---|
256 | iprt/bldprog-strtab-template.cpp.h
|
---|
257 |
|
---|
258 |
|
---|
259 | # Generate the files we compile.
|
---|
260 | define def_hdr
|
---|
261 | $(eval functioname := $(translate $(basename $(hdr)),-./,___))
|
---|
262 |
|
---|
263 | $$(PATH_OBJ)/include/c/$(basename $(hdr)).c: | $$$$(dir $$$$@)
|
---|
264 | $(QUIET)$$(APPEND) -t -n $$@ \
|
---|
265 | '#include <$(hdr)>' \
|
---|
266 | $(if-expr $(intersects $(hdr),$(VBOX_HDRS_ONLY_ONCE)),, '#include <$(hdr)>') \
|
---|
267 | 'extern int $(functioname)_c(void);' \
|
---|
268 | 'int $(functioname)_c(void) { return 0;}'
|
---|
269 |
|
---|
270 | $$(PATH_OBJ)/include/cpp/$(basename $(hdr)).cpp: | $$$$(dir $$$$@)
|
---|
271 | $(QUIET)$$(APPEND) -t -n $$@ \
|
---|
272 | '#include <$(hdr)>' \
|
---|
273 | $(if-expr $(intersects $(hdr),$(VBOX_HDRS_ONLY_ONCE)),, '#include <$(hdr)>') \
|
---|
274 | 'extern int $(functioname)_cpp(void);' \
|
---|
275 | 'int $(functioname)_cpp(void) { return 0;}'
|
---|
276 |
|
---|
277 | endef
|
---|
278 |
|
---|
279 | $(foreach hdr,$(VBOX_HDRS_ALL), $(eval $(def_hdr)))
|
---|
280 |
|
---|
281 | # Tell kBuild to generate rules for making the directories for the generated files.
|
---|
282 | VBOX_HDR_DIRS := $(sort $(dir $(VBOX_HDRS_ALL)))
|
---|
283 | BLDDIRS += $(addprefix $(PATH_OBJ)/include/c/,$(VBOX_HDR_DIRS)) $(addprefix $(PATH_OBJ)/include/cpp/,$(VBOX_HDR_DIRS))
|
---|
284 |
|
---|
285 |
|
---|
286 | include $(FILE_KBUILD_SUB_FOOTER)
|
---|