VirtualBox

source: vbox/trunk/src/VBox/HostDrivers/VBoxNetFlt/Makefile.kmk

最後變更 在這個檔案是 108381,由 vboxsync 提交於 3 週 前

Networking/Windows: Implemented minimal support for NDIS 6.3 to also support Windows/ARM hosts. This only does the bare minimum required to get NDIS 6.3 working, i.e. there are features we don't support (and not need so far). Also tested on this Win11/amd64 [SCM fix]. bugref:10846

  • 屬性 svn:eol-style 設為 native
  • 屬性 svn:keywords 設為 Author Date Id Revision
檔案大小: 12.2 KB
 
1# $Id: Makefile.kmk 108381 2025-02-25 15:55:57Z vboxsync $
2## @file
3# Sub-Makefile for the Network Filter Driver (VBoxNetFlt).
4#
5
6#
7# Copyright (C) 2008-2024 Oracle and/or its affiliates.
8#
9# This file is part of VirtualBox base platform packages, as
10# available from https://www.alldomusa.eu.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# The contents of this file may alternatively be used under the terms
26# of the Common Development and Distribution License Version 1.0
27# (CDDL), a copy of it is provided in the "COPYING.CDDL" file included
28# in the VirtualBox distribution, in which case the provisions of the
29# CDDL are applicable instead of those of the GPL.
30#
31# You may elect to license modified versions of this file under the
32# terms and conditions of either the GPL or the CDDL or both.
33#
34# SPDX-License-Identifier: GPL-3.0-only OR CDDL-1.0
35#
36
37SUB_DEPTH = ../../../..
38include $(KBUILD_PATH)/subheader.kmk
39
40
41if1of ($(KBUILD_TARGET), darwin win) # this ifeq must go, see @todo around elif
42 #
43 # The mixed case driver.
44 #
45 ifdef VBOX_WITH_VBOXDRV
46 SYSMODS.darwin += VBoxNetFlt
47 endif
48
49 # The driver.
50 VBoxNetFlt_TEMPLATE = VBoxR0Drv
51 VBoxNetFlt_INST = $(INST_VBOXNETFLT)$(if $(eq $(KBUILD_TARGET),darwin),Contents/MacOS/)
52 VBoxNetFlt_DEBUG_INST.darwin = $(patsubst %/,%,$(INST_VBOXNETFLT))
53 VBoxNetFlt_DEFS = IN_RT_R0 IN_SUP_STATIC
54 VBoxNetFlt_INCS = .
55 VBoxNetFlt_SOURCES = \
56 darwin/VBoxNetFlt-darwin.cpp
57 VBoxNetFlt_SOURCES = VBoxNetFlt.c
58 #VBoxNetFlt_LDFLAGS.darwin = -v -Wl,-whyload -Wl,-v -Wl,-whatsloaded
59 VBoxNetFlt_LIBS = \
60 $(PATH_STAGE_LIB)/SUPR0IdcClient$(VBOX_SUFF_LIB)
61
62 darwin/VBoxNetFlt-darwin.cpp_DEFS = VBOX_SVN_REV=$(VBOX_SVN_REV)
63
64 # Darwin extras.
65 if "$(KBUILD_TARGET)" == "darwin" && defined(VBOX_WITH_VBOXDRV)
66 INSTALLS += VBoxNetFlt.kext
67 VBoxNetFlt.kext_INST = $(INST_VBOXNETFLT)Contents/
68 VBoxNetFlt.kext_SOURCES = $(VBoxNetFlt.kext_0_OUTDIR)/Contents/Info.plist
69 VBoxNetFlt.kext_CLEAN = $(VBoxNetFlt.kext_0_OUTDIR)/Contents/Info.plist
70 VBoxNetFlt.kext_BLDDIRS = $(VBoxNetFlt.kext_0_OUTDIR)/Contents/
71
72 $$(VBoxNetFlt.kext_0_OUTDIR)/Contents/Info.plist: $(PATH_SUB_CURRENT)/darwin/Info.plist $(VBOX_VERSION_MK) | $$(dir $$@)
73 $(call MSG_GENERATE,VBoxNetFlt,$@,$<)
74 $(QUIET)$(RM) -f $@
75 $(QUIET)$(SED) \
76 -e 's+@VBOX_VERSION_STRING@+$(VBOX_VERSION_STRING)+g' \
77 -e 's+@VBOX_VERSION_MAJOR@+$(VBOX_VERSION_MAJOR)+g' \
78 -e 's+@VBOX_VERSION_MINOR@+$(VBOX_VERSION_MINOR)+g' \
79 -e 's+@VBOX_VERSION_BUILD@+$(VBOX_VERSION_BUILD)+g' \
80 -e 's+@VBOX_VENDOR@+$(VBOX_VENDOR)+g' \
81 -e 's+@VBOX_PRODUCT@+$(VBOX_PRODUCT)+g' \
82 -e 's+@VBOX_C_YEAR@+$(VBOX_C_YEAR)+g' \
83 --output $@ \
84 $<
85
86 $(evalcall2 VBOX_TEST_SIGN_KEXT,VBoxNetFlt)
87
88 INSTALLS.darwin += Scripts-darwin
89 Scripts-darwin_INST = $(INST_DIST)
90 Scripts-darwin_EXEC_SOURCES = \
91 darwin/loadnetflt.sh
92 endif # darwin && host-drivers
93
94 ifeq ($(KBUILD_TARGET),win)
95 #
96 # VBoxNetLwf.sys - The light-weight filter driver for NDIS6 (i.e. Windows only).
97 #
98 ifdef VBOX_WITH_VBOXDRV
99 SYSMODS.win += VBoxNetLwf
100 INSTALLS.win += VBoxNetLwf-inf
101 endif
102 # The driver.
103 VBoxNetLwf_TEMPLATE = VBoxR0Drv
104 VBoxNetLwf_INST = $(INST_VBOXNETFLT)
105 if defined(VBOX_SIGNING_MODE)
106 VBoxNetLwf_INSTTYPE = none
107 VBoxNetLwf_DEBUG_INSTTYPE = both
108 endif
109 VBoxNetLwf_DEFS = IN_RT_R0 IN_SUP_STATIC
110 VBoxNetLwf_DEFS.win = NDISLWF=1 DBG=1
111 # VBoxNetLwf_DEFS.win += VBOXNETFLT_STATIC_CONFIG
112 # VBoxNetLwf_DEFS.win += VBOXNETFLT_NO_PACKET_QUEUE
113 # VBoxNetLwf_DEFS.win += NDIS_MINIPORT_DRIVER NDIS_WDM=1 BINARY_COMPATIBLE=0
114 # ifdef VBOX_LOOPBACK_USEFLAGS
115 # VBoxNetLwf_DEFS.win += VBOX_LOOPBACK_USEFLAGS
116 # endif
117 VBoxNetLwf_DEFS.win = NDIS630=1
118 VBoxNetLwf_SDKS.win = ReorderCompilerIncs $(VBOX_WINDDK_WLH) $(VBOX_WINPSDK_INCS)
119 VBoxNetLwf_INCS = .
120 VBoxNetLwf_SOURCES = \
121 win/drv/VBoxNetLwf-win.cpp \
122 VBoxNetFlt.c \
123 VBoxNetFlt.rc
124 VBoxNetLwf_LDFLAGS.win.x86 := -Entry:DriverEntry@8
125 VBoxNetLwf_LDFLAGS.win.amd64 := -Entry:DriverEntry
126 VBoxNetLwf_LDFLAGS.win.arm64 := -Entry:DriverEntry
127 VBoxNetLwf_LIBS.win = \
128 $(PATH_SDK_$(VBOX_WINDDK_WLH)_LIB)/ntoskrnl.lib \
129 $(PATH_SDK_$(VBOX_WINDDK_WLH)_LIB)/hal.lib \
130 $(PATH_SDK_$(VBOX_WINDDK_WLH)_LIB)/ndis.lib \
131 $(PATH_SDK_$(VBOX_WINDDK_WLH)_LIB)/netio.lib \
132 $(PATH_STAGE_LIB)/RuntimeR0Drv$(VBOX_SUFF_LIB)
133 VBoxNetLwf_LIBS.win.arm64 = \
134 $(PATH_SDK_$(VBOX_WINDDK_WLH)_LIB)/BufferOverflowFastFailK.lib
135 VBoxNetLwf_LIBS = \
136 $(PATH_STAGE_LIB)/SUPR0IdcClient$(VBOX_SUFF_LIB)
137
138 # VBoxNetLwf INF & CAT files.
139 VBoxNetLwf-inf_TEMPLATE = VBoxR0DrvInfCat
140 VBoxNetLwf-inf_SOURCES = \
141 $(PATH_TARGET)/VBoxNetLwfCat.dir/VBoxNetLwf.inf
142 VBoxNetLwf-inf_CLEAN = $(VBoxNetLwf-inf_SOURCES)
143 VBoxNetLwf-inf_BLDDIRS = $(PATH_TARGET)/VBoxNetLwfCat.dir
144
145 $(PATH_TARGET)/VBoxNetLwfCat.dir/VBoxNetLwf.inf: $(PATH_SUB_CURRENT)/win/drv/VBoxNetLwf.inf $(MAKEFILE_CURRENT) | $$(dir $$@)
146 $(call MSG_GENERATE,VBoxNetLwf-inf,$@,$<)
147 $(call VBOX_EDIT_INF_FN,$<,$@)
148
149 ifdef VBOX_SIGNING_MODE
150 VBoxNetLwf-inf_SOURCES += \
151 $(PATH_TARGET)/VBoxNetLwfCat.dir/VBoxNetLwf.sys \
152 $(PATH_TARGET)/VBoxNetLwfCat.dir/VBoxNetLwf.cat
153 # $(PATH_TARGET)/VBoxNetLwfCat.dir/VBoxNetLwfNobj.dll
154
155 $(PATH_TARGET)/VBoxNetLwfCat.dir/VBoxNetLwf.sys: $$(VBoxNetLwf_1_TARGET) | $$(dir $$@)
156 $(INSTALL) -m 644 $< $(@D)
157
158 #$(PATH_TARGET)/VBoxNetLwfCat.dir/VBoxNetLwfNobj.dll: $$(VBoxNetLwfNobj_1_TARGET) | $$(dir $$@)
159 # $(INSTALL) -m 644 $< $(@D)
160
161 $(PATH_TARGET)/VBoxNetLwfCat.dir/VBoxNetLwf.cat: \
162 $(PATH_TARGET)/VBoxNetLwfCat.dir/VBoxNetLwf.sys \
163 $(PATH_TARGET)/VBoxNetLwfCat.dir/VBoxNetLwf.inf
164 $(call MSG_TOOL,Inf2Cat,VBoxNetLwf-inf,$@,$<)
165 $(call VBOX_MAKE_CAT_FN, $(@D),$@)
166 endif # VBOX_SIGNING_MODE
167
168
169 #
170 # WinNetConfig - static library with host network interface config API (for the installer)
171 #
172 LIBRARIES.win += WinNetConfigSharedStatic
173 WinNetConfigSharedStatic_TEMPLATE = VBoxR3StaticDllNoAsan
174 WinNetConfigSharedStatic_SDKS = ReorderCompilerIncs $(VBOX_WINPSDK) $(VBOX_WINDDK)
175 WinNetConfigSharedStatic_DEFS = _UNICODE UNICODE
176 WinNetConfigSharedStatic_SOURCES = \
177 win/cfg/VBoxNetCfg.cpp \
178 ../../Main/glue/string.cpp
179
180 # Version for DLLs:
181 LIBRARIES.win += WinNetConfigDll
182 WinNetConfigDll_TEMPLATE = VBoxR3Dll
183 WinNetConfigDll_EXTENDS = WinNetConfigSharedStatic
184
185 # Version for EXEs:
186 LIBRARIES.win += WinNetConfigExe
187 WinNetConfigExe_TEMPLATE = VBoxR3Exe
188 WinNetConfigExe_EXTENDS = WinNetConfigSharedStatic
189
190 #
191 # Template for NetFltInstall and friends.
192 #
193 TEMPLATE_VBoxNetFltR3 = Template for NetAdp6Install and NetAdp6Uninstall
194 TEMPLATE_VBoxNetFltR3_EXTENDS = VBoxR3Exe
195 TEMPLATE_VBoxNetFltR3_SDKS = $(TEMPLATE_VBoxR3Exe_SDKS) ReorderCompilerIncs $(VBOX_WINPSDK) $(VBOX_WINDDK) VBoxNtDll VBoxWinNewDevLib
196 TEMPLATE_VBoxNetFltR3_LATE_LIBS = $(TEMPLATE_VBoxR3Exe_LATE_LIBS) \
197 $(WinNetConfigExe_1_TARGET) \
198 $(PATH_STAGE_LIB)/VBoxDrvCfgExe$(VBOX_SUFF_LIB) \
199 $(LIB_RUNTIME) \
200 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/comsupp.lib \
201 $(PATH_SDK_$(VBOX_WINPSDK)_LIB)/WbemUuid.Lib
202
203 #
204 # NetAdp6Install
205 #
206 PROGRAMS.win += NetAdp6Install
207 NetAdp6Install_TEMPLATE = VBoxNetFltR3
208 NetAdp6Install_SOURCES = win/tools/VBoxNetAdpInstall.cpp
209 NetAdp6Install_DEFS = NDIS630=1
210
211 #
212 # NetAdp6Uninstall
213 #
214 PROGRAMS.win += NetAdp6Uninstall
215 NetAdp6Uninstall_TEMPLATE = VBoxNetFltR3
216 NetAdp6Uninstall_SOURCES = win/tools/VBoxNetAdpUninstall.cpp
217 NetAdp6Uninstall_DEFS = NDIS630=1
218
219 #
220 # NetLwfInstall
221 #
222 PROGRAMS.win += NetLwfInstall
223 NetLwfInstall_TEMPLATE = VBoxNetFltR3
224 NetLwfInstall_SOURCES = win/tools/VBoxNetLwfInstall.cpp
225
226 #
227 # NetLwfUninstall
228 #
229 PROGRAMS.win += NetLwfUninstall
230 NetLwfUninstall_TEMPLATE = VBoxNetFltR3
231 NetLwfUninstall_SOURCES = win/tools/VBoxNetLwfUninstall.cpp
232
233 endif # $(KBUILD_TARGET) == win
234else if1of ($(KBUILD_TARGET), solaris freebsd) ## @todo merge this with the mixed case stuff.
235 #
236 # vboxnetflt(.ko/.o/) - The lower case driver.
237 # Note! On Solaris the name has to be <= 8 chars long.
238 # The DEBUG_HASH* stuff is for CONFIG_DYNAMIC_DEBUG-enabled kernels
239 #
240 ifdef VBOX_WITH_VBOXDRV
241 SYSMODS += vboxnetflt
242 vboxnetflt_TEMPLATE = VBoxR0Drv
243 vboxnetflt_NAME.solaris = vboxflt
244 vboxnetflt_DEFS = IN_RT_R0
245 vboxnetflt_DEPS.solaris += $(VBOX_SVN_REV_KMK)
246 vboxnetflt_INCS := \
247 $(PATH_SUB_CURRENT)
248 vboxnetflt_LDFLAGS.solaris += -N drv/vboxdrv -N misc/ctf
249 vboxnetflt_LIBS = \
250 $(PATH_STAGE_LIB)/SUPR0IdcClient$(VBOX_SUFF_LIB)
251 ## @todo vboxflt should resolves all the IPRT bits from vboxdrv.
252 #vboxnetflt_LIBS += \
253 # $(PATH_STAGE_LIB)/RuntimeR0Drv$(VBOX_SUFF_LIB)
254 vboxnetflt_SOURCES.solaris = solaris/VBoxNetFlt-solaris.c
255 vboxnetflt_SOURCES.freebsd = freebsd/VBoxNetFlt-freebsd.c
256 vboxnetflt_SOURCES = VBoxNetFlt.c
257 solaris/VBoxNetFlt-solaris.c_DEFS = VBOX_SVN_REV=$(VBOX_SVN_REV)
258
259 ifdef VBOX_WITH_NETFLT_CROSSBOW
260 SYSMODS += vboxnetbow
261 vboxnetbow_TEMPLATE = VBoxR0Drv
262 vboxnetbow_NAME = vboxbow
263 vboxnetbow_DEFS = vboxnetflt_DEFS VBOX_WITH_NETFLT_CROSSBOW
264 vboxnetbow_INCS := $(PATH_SUB_CURRENT)
265 vboxnetbow_LDFLAGS += -N drv/vboxdrv -N drv/vnic -N misc/mac -N misc/dls
266 vboxnetbow_LIBS = \
267 $(PATH_STAGE_LIB)/SUPR0IdcClient$(VBOX_SUFF_LIB)
268 vboxnetbow_SOURCES.solaris = solaris/VBoxNetFltBow-solaris.c
269 vboxnetbow_SOURCES = VBoxNetFlt.c
270 solaris/VBoxNetFltBow-solaris.c_DEFS = VBOX_SVN_REV=$(VBOX_SVN_REV)
271 endif # VBOX_WITH_NETFLT_CROSSBOW
272 endif # VBOX_WITH_VBOXDRV
273endif # to be removed.
274
275
276ifeq ($(KBUILD_TARGET),linux)
277 #
278 # Install source files for compilation on Linux.
279 # files_vboxnetflt defines VBOX_VBOXNETFLT_SOURCES.
280 #
281 include $(PATH_SUB_CURRENT)/linux/files_vboxnetflt
282 INSTALLS += VBoxNetFlt-src VBoxNetFlt-sh
283 VBoxNetFlt-src_INST = bin/src/vboxnetflt/
284 VBoxNetFlt-src_SOURCES = \
285 $(subst $(DQUOTE),,$(VBOX_VBOXNETFLT_SOURCES)) \
286 $(VBoxNetFlt-src_0_OUTDIR)/Makefile
287 VBoxNetFlt-src_CLEAN = \
288 $(VBoxNetFlt-src_0_OUTDIR)/Makefile \
289 $(PATH_TARGET)/VBoxNetFlt-src-1.dep
290
291 # Scripts needed for building the kernel module.
292
293 includedep $(PATH_TARGET)/VBoxNetFlt-src-1.dep
294 $$(VBoxNetFlt-src_0_OUTDIR)/Makefile: \
295 $(PATH_SUB_CURRENT)/linux/Makefile \
296 $$(if $$(eq $$(VBoxNetFlt/linux/Makefile_VBOX_HARDENED),$$(VBOX_WITH_HARDENING)),,FORCE) \
297 | $$(dir $$@)
298 $(QUIET)$(RM) -f -- $@
299 ifndef VBOX_WITH_HARDENING
300 $(QUIET)$(SED) -e "s;VBOX_WITH_HARDENING;;g" --output $@ $<
301 else
302 $(QUIET)$(CP) -f $< $@
303 endif
304 %$(QUIET2)$(RM) -f -- $(PATH_TARGET)/VBoxNetFlt-src-1.dep
305 %$(QUIET2)$(APPEND) '$(PATH_TARGET)/VBoxNetFlt-src-1.dep' 'VBoxNetFlt/linux/Makefile_VBOX_HARDENED=$(VBOX_WITH_HARDENING)'
306
307 #
308 # Build test for the linux host kernel modules.
309 #
310 $(evalcall2 VBOX_LINUX_KMOD_TEST_BUILD_RULE_FN,VBoxNetFlt-src,vboxdrv-src,)
311endif # linux
312
313# Gross hack for FreeBSD 7, should figure this out properly
314## @todo Properly generate opt_netgraph.h
315ifeq ($(KBUILD_TARGET),freebsd)
316 vboxnetflt_DEPS.freebsd += $(PATH_OUT)/opt_netgraph.h
317 $(PATH_OUT)/opt_netgraph.h:
318 echo > $(PATH_OUT)/opt_netgraph.h
319
320 #
321 # Install source files for compilation on FreeBSD.
322 # files_vboxnetflt defines VBOX_VBOXNETFLT_SOURCES.
323 #
324 include $(PATH_SUB_CURRENT)/freebsd/files_vboxnetflt
325 INSTALLS += VBoxNetFlt-src
326 VBoxNetFlt-src_INST = bin/src/vboxnetflt/
327 VBoxNetFlt-src_SOURCES = \
328 $(subst $(DQUOTE),,$(VBOX_VBOXNETFLT_SOURCES)) \
329 $(VBoxNetFlt-src_0_OUTDIR)/Makefile
330 VBoxNetFlt-src_CLEAN = \
331 $(VBoxNetFlt-src_0_OUTDIR)/Makefile
332
333 $$(VBoxNetFlt-src_0_OUTDIR)/Makefile: \
334 $(PATH_SUB_CURRENT)/freebsd/Makefile \
335 $$(if $$(eq $$(VBoxNetFlt/freebsd/Makefile_VBOX_HARDENED),$$(VBOX_WITH_HARDENING)),,FORCE) \
336 | $$(dir $$@)
337 $(QUIET)$(RM) -f -- $@
338 $(QUIET)$(CP) -f $< $@
339 ifndef VBOX_WITH_HARDENING
340 $(QUIET)$(SED) -e "s;VBOX_WITH_HARDENING;;g" --output [email protected] $@
341 ${QUIET}$(MV) -f [email protected] $@
342 endif
343 ifndef VBOX_WITH_NETFLT_VIMAGE
344 $(QUIET)$(SED) -e "s;-DVIMAGE;;g" --output [email protected] $@
345 ${QUIET}$(MV) -f [email protected] $@
346 endif
347endif # freebsd
348
349include $(FILE_KBUILD_SUB_FOOTER)
注意: 瀏覽 TracBrowser 來幫助您使用儲存庫瀏覽器

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