VirtualBox

source: vbox/trunk/include/Makefile.kmk@ 73768

Last change on this file since 73768 was 70062, checked in by vboxsync, 6 years ago

GuestPropertySvc.h: Working on making it usable from C (VBoxGuest, ++)

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 6.8 KB
Line 
1# $Id: Makefile.kmk 70062 2017-12-11 15:27:48Z 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-2017 Oracle Corporation
9#
10# This file is part of VirtualBox Open Source Edition (OSE), as
11# available from http://www.virtualbox.org. This file is free software;
12# you can redistribute it and/or modify it under the terms of the GNU
13# General Public License (GPL) as published by the Free Software
14# Foundation, in version 2 as it comes in the "COPYING" file of the
15# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
16# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
17#
18
19SUB_DEPTH = ..
20include $(KBUILD_PATH)/subheader.kmk
21
22LIBRARIES += SyntaxVBoxIncludeR3 SyntaxVBoxIncludeR0
23
24# Omit headers that are using C++ features and upsets gcc.
25VBOX_HDRS_CPP_FEATURES := \
26 VBox/vmm/hm.h \
27 VBox/vmm/hm_vmx.h \
28 VBox/HostServices/GuestControlSvc.h \
29 VBox/HostServices/DragAndDropSvc.h \
30 VBox/HostServices/Service.h \
31 VBox/GuestHost/GuestControl.h \
32 VBox/GuestHost/DragAndDrop.h \
33 VBox/VBoxCrHgsmi.h \
34 VBox/VBoxUhgsmi.h \
35 VBox/dbus.h \
36 VBox/VBoxPktDmp.h \
37 iprt/cpp/%
38
39# Omit headers that are C++ and ring-3.
40VBOX_HDRS_R3_CPP := \
41 VBox/dbggui.h \
42 VBox/settings.h \
43 VBox/com/Guid.h \
44 iprt/cpp/% \
45 VBox/com/% \
46 $(subst $(PATH_SUB_CURRENT)/,,$(wildcard $(PATH_SUB_CURRENT)/iprt/*_cpp.h))
47
48# Ring-3 only headers.
49VBOX_HDRS_R3_ONLY := \
50 VBox/vrdpapi.h \
51 VBox/vrdpusb.h \
52 VBox/VBoxHDD.h \
53 VBox/VBoxHDD-Plugin.h \
54 VBox/VBoxCrHgsmi.h \
55 VBox/VBoxUhgsmi.h \
56 VBox/VBoxNetCfg-win.h \
57 VBox/VBoxDrvCfg-win.h \
58 VBox/dbus.h \
59 $(if-expr "$(KBUILD_TARGET)" == "win",VBox/usblib.h,) \
60 VBox/usblib-win.h \
61 VBox/vd.h \
62 VBox/vd-cache-backend.h \
63 VBox/vd-ifs.h \
64 VBox/vd-ifs-internal.h \
65 VBox/vd-image-backend.h \
66 VBox/vd-plugin.h \
67 VBox/vd-filter-backend.h \
68 VBox/vddbg.h \
69 VBox/vmm/uvm.h \
70 VBox/vscsi.h \
71 VBox/ExtPack/% \
72 VBox/GuestHost/DragAndDrop.h \
73 VBox/HostServices/Service.h \
74 iprt/win/% \
75 iprt/alloca.h \
76 iprt/tcp.h \
77 iprt/localipc.h \
78 iprt/linux/sysfs.h \
79 iprt/socket.h \
80 iprt/udp.h
81
82# Ring-0 only headers.
83VBOX_HDRS_R0_ONLY := \
84 VBox/VBoxGuestLibSharedFolders.h
85
86# GCC only headers.
87VBOX_HDRS_GCC_ONLY := \
88 iprt/nocrt/fenv.h \
89 iprt/nocrt/math.h
90
91# Headers to omit all together.
92VBOX_HDRS_OMIT := \
93 VBox/HostServices/glext.h \
94 VBox/HostServices/glxext.h \
95 VBox/HostServices/wglext.h \
96 VBox/VBoxGL2D.h \
97 $(if-expr "$(KBUILD_TARGET)" != "solaris", \
98 VBox/usblib-solaris.h \
99 ,)\
100 VBox/VDEPlug.h \
101 VBox/VDEPlugSymDefs.h \
102 VBox/VBoxNetCmn-win.h \
103 $(if-expr "$(KBUILD_TARGET)" != "win", \
104 VBox/VBoxDrvCfg-win.h \
105 VBox/VBoxNetCfg-win.h \
106 VBox/usblib-win.h \
107 VBox/com/microatl.h \
108 ,$(VBOX_HDRS_GCC_ONLY)) \
109 \
110 VBox/dbus-calls.h \
111 VBox/VBoxKeyboard.h \
112 VBox/vmm/pdmpcidevint.h \
113 iprt/runtime-loader.h \
114 iprt/mangling.h \
115 $(subst $(PATH_SUB_CURRENT)/,,$(wildcard $(PATH_SUB_CURRENT)/iprt/asm*watcom*.h)) \
116 iprt/asn1-generator% \
117 iprt/win/% \
118 iprt/nt/% \
119 \
120 $(foreach os,$(filter-out $(KBUILD_TARGET),$(KBUILD_OSES)),iprt/$(os)/% VBox/$(os)/%) \
121 $(foreach arch,$(KBUILD_ARCHES),iprt/nocrt/$(arch)/%)
122
123# We omit a few headers which have platform specific issues or are templates.
124VBOX_HDRS_ALL := $(filter-out $(VBOX_HDRS_OMIT), \
125 $(subst $(PATH_SUB_CURRENT)/,,$(wildcard \
126 $(PATH_SUB_CURRENT)/VBox/*.h \
127 $(PATH_SUB_CURRENT)/VBox/*/*.h \
128 $(PATH_SUB_CURRENT)/iprt/*.h \
129 $(PATH_SUB_CURRENT)/iprt/*/*.h \
130)))
131
132# ring-3, ring-0 and raw-mode context specific exclusions.
133VBOX_HDRS_ALL_R3 := $(filter-out $(VBOX_HDRS_R0_ONLY), $(VBOX_HDRS_ALL))
134VBOX_HDRS_ALL_R3_C := $(filter-out $(VBOX_HDRS_CPP_FEATURES) $(VBOX_HDRS_R3_CPP) $(VBOX_HDRS_R0_ONLY), $(VBOX_HDRS_ALL_R3))
135VBOX_HDRS_ALL_R0 := $(filter-out $(VBOX_HDRS_R3_CPP) $(VBOX_HDRS_R3_ONLY), $(VBOX_HDRS_ALL))
136VBOX_HDRS_ALL_R0_C := $(filter-out $(VBOX_HDRS_CPP_FEATURES), $(VBOX_HDRS_ALL_R0))
137VBOX_HDRS_ALL_RC := $(filter-out \
138 VBox/VBoxGuestLib.h \
139 VBox/vmm/gvm.h \
140 iprt/thread.h \
141 iprt/mem.h \
142 iprt/memsafer.h \
143 iprt/alloc.h \
144 iprt/vector.h \
145 $(VBOX_HDRS_R3_CPP) \
146 $(VBOX_HDRS_R3_ONLY) \
147 $(VBOX_HDRS_R0_ONLY) \
148 , $(VBOX_HDRS_ALL))
149VBOX_HDRS_ALL_RC_C := $(filter-out $(VBOX_HDRS_CPP_FEATURES), $(VBOX_HDRS_ALL_RC))
150#$(error $(subst $(SP),$(NLTAB),$(strip $(sort $(VBOX_HDRS_ALL_RC_C)))))
151
152SyntaxVBoxIncludeR3_TEMPLATE = VBOXMAINEXE
153SyntaxVBoxIncludeR3_DEFS = VBOX_WITH_HGCM
154SyntaxVBoxIncludeR3_CDEFS = IPRT_WITHOUT_NAMED_UNIONS_AND_STRUCTS
155SyntaxVBoxIncludeR3_SOURCES := \
156 $(addprefix $(PATH_OBJ)/include/c/, $(addsuffix .c, $(basename $(VBOX_HDRS_ALL_R3_C)))) \
157 $(addprefix $(PATH_OBJ)/include/cpp/,$(addsuffix .cpp,$(basename $(VBOX_HDRS_ALL_R3))))
158SyntaxVBoxIncludeR3_CLEAN = $(SyntaxVBoxIncludeR3_SOURCES)
159#$(error $(subst $(SP),$(NLTAB),$(strip $(sort $(SyntaxVBoxIncludeR3_SOURCES)))))
160
161SyntaxVBoxIncludeR0_TEMPLATE = VBoxR0
162SyntaxVBoxIncludeR0_DEFS = VBOX_WITH_HGCM
163SyntaxVBoxIncludeR0_CDEFS = IPRT_WITHOUT_NAMED_UNIONS_AND_STRUCTS
164SyntaxVBoxIncludeR0_SOURCES := \
165 $(addprefix $(PATH_OBJ)/include/c/, $(addsuffix .c, $(basename $(VBOX_HDRS_ALL_R0_C)))) \
166 $(addprefix $(PATH_OBJ)/include/cpp/,$(addsuffix .cpp,$(basename $(VBOX_HDRS_ALL_R0))))
167SyntaxVBoxIncludeR0_CLEAN = $(SyntaxVBoxIncludeR0_SOURCES)
168
169ifdef VBOX_WITH_RAW_MODE
170 LIBRARIES += SyntaxVBoxIncludeRC
171 SyntaxVBoxIncludeRC_TEMPLATE = VBoxRc
172 SyntaxVBoxIncludeRC_DEFS = VBOX_WITH_HGCM
173 SyntaxVBoxIncludeRC_CDEFS = IPRT_WITHOUT_NAMED_UNIONS_AND_STRUCTS
174 SyntaxVBoxIncludeRC_SOURCES := \
175 $(addprefix $(PATH_OBJ)/include/c/, $(addsuffix .c, $(basename $(VBOX_HDRS_ALL_RC_C)))) \
176 $(addprefix $(PATH_OBJ)/include/cpp/,$(addsuffix .cpp,$(basename $(VBOX_HDRS_ALL_RC))))
177 SyntaxVBoxIncludeRC_CLEAN = $(SyntaxVBoxIncludeRC_SOURCES)
178endif
179
180
181# Headers that must only be included once.
182VBOX_HDRS_ONLY_ONCE := \
183 iprt/bldprog-strtab-template.cpp.h
184
185
186# Generate the files we compile.
187define def_hdr
188 $(eval functioname := $(translate $(basename $(hdr)),-./,___))
189
190 $$(PATH_OBJ)/include/c/$(basename $(hdr)).c: | $$$$(dir $$$$@)
191 $(QUIET)$$(APPEND) -t -n $$@ \
192 '#include <$(hdr)>' \
193 $(if-expr $(intersects $(hdr),$(VBOX_HDRS_ONLY_ONCE)),, '#include <$(hdr)>') \
194 'extern int $(functioname)_c(void);' \
195 'int $(functioname)_c(void) { return 0;}'
196
197 $$(PATH_OBJ)/include/cpp/$(basename $(hdr)).cpp: | $$$$(dir $$$$@)
198 $(QUIET)$$(APPEND) -t -n $$@ \
199 '#include <$(hdr)>' \
200 $(if-expr $(intersects $(hdr),$(VBOX_HDRS_ONLY_ONCE)),, '#include <$(hdr)>') \
201 'extern int $(functioname)_cpp(void);' \
202 'int $(functioname)_cpp(void) { return 0;}'
203
204endef
205
206$(foreach hdr,$(VBOX_HDRS_ALL), $(eval $(def_hdr)))
207
208# Tell kBuild to generate rules for making the directories for the generated files.
209VBOX_HDR_DIRS := $(sort $(dir $(VBOX_HDRS_ALL)))
210BLDDIRS += $(addprefix $(PATH_OBJ)/include/c/,$(VBOX_HDR_DIRS)) $(addprefix $(PATH_OBJ)/include/cpp/,$(VBOX_HDR_DIRS))
211
212
213include $(FILE_KBUILD_SUB_FOOTER)
214
Note: See TracBrowser for help on using the repository browser.

© 2023 Oracle
ContactPrivacy policyTerms of Use