VirtualBox

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

Last change on this file since 108104 was 108104, checked in by vboxsync, 3 months ago

Windows host drivers + installer: Removed _PreW10 support, as this is not supported anymore.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 12.3 KB
Line 
1# $Id: Makefile.kmk 108104 2025-02-06 16:59:10Z 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.215389.xyz.
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.x86 = NDIS60=1
118 VBoxNetLwf_DEFS.win.amd64 = NDIS60=1
119 VBoxNetLwf_DEFS.win.arm64 = NDIS630=1 # The minimum version for non-x86/amd64.
120 VBoxNetLwf_SDKS.win = ReorderCompilerIncs $(VBOX_WINDDK_WLH) $(VBOX_WINPSDK_INCS)
121 VBoxNetLwf_INCS = .
122 VBoxNetLwf_SOURCES = \
123 win/drv/VBoxNetLwf-win.cpp \
124 VBoxNetFlt.c \
125 VBoxNetFlt.rc
126 VBoxNetLwf_LDFLAGS.win.x86 := -Entry:DriverEntry@8
127 VBoxNetLwf_LDFLAGS.win.amd64 := -Entry:DriverEntry
128 VBoxNetLwf_LDFLAGS.win.arm64 := -Entry:DriverEntry
129 VBoxNetLwf_LIBS.win = \
130 $(PATH_SDK_$(VBOX_WINDDK_WLH)_LIB)/ntoskrnl.lib \
131 $(PATH_SDK_$(VBOX_WINDDK_WLH)_LIB)/hal.lib \
132 $(PATH_SDK_$(VBOX_WINDDK_WLH)_LIB)/ndis.lib \
133 $(PATH_SDK_$(VBOX_WINDDK_WLH)_LIB)/netio.lib \
134 $(PATH_STAGE_LIB)/RuntimeR0Drv$(VBOX_SUFF_LIB)
135 VBoxNetLwf_LIBS.win.arm64 = \
136 $(PATH_SDK_$(VBOX_WINDDK_WLH)_LIB)/BufferOverflowFastFailK.lib
137 VBoxNetLwf_LIBS = \
138 $(PATH_STAGE_LIB)/SUPR0IdcClient$(VBOX_SUFF_LIB)
139
140 # VBoxNetLwf INF & CAT files.
141 VBoxNetLwf-inf_TEMPLATE = VBoxR0DrvInfCat
142 VBoxNetLwf-inf_SOURCES = \
143 $(PATH_TARGET)/VBoxNetLwfCat.dir/VBoxNetLwf.inf
144 VBoxNetLwf-inf_CLEAN = $(VBoxNetLwf-inf_SOURCES)
145 VBoxNetLwf-inf_BLDDIRS = $(PATH_TARGET)/VBoxNetLwfCat.dir
146
147 $(PATH_TARGET)/VBoxNetLwfCat.dir/VBoxNetLwf.inf: $(PATH_SUB_CURRENT)/win/drv/VBoxNetLwf.inf $(MAKEFILE_CURRENT) | $$(dir $$@)
148 $(call MSG_GENERATE,VBoxNetLwf-inf,$@,$<)
149 $(call VBOX_EDIT_INF_FN,$<,$@)
150
151 ifdef VBOX_SIGNING_MODE
152 VBoxNetLwf-inf_SOURCES += \
153 $(PATH_TARGET)/VBoxNetLwfCat.dir/VBoxNetLwf.sys \
154 $(PATH_TARGET)/VBoxNetLwfCat.dir/VBoxNetLwf.cat
155 # $(PATH_TARGET)/VBoxNetLwfCat.dir/VBoxNetLwfNobj.dll
156
157 $(PATH_TARGET)/VBoxNetLwfCat.dir/VBoxNetLwf.sys: $$(VBoxNetLwf_1_TARGET) | $$(dir $$@)
158 $(INSTALL) -m 644 $< $(@D)
159
160 #$(PATH_TARGET)/VBoxNetLwfCat.dir/VBoxNetLwfNobj.dll: $$(VBoxNetLwfNobj_1_TARGET) | $$(dir $$@)
161 # $(INSTALL) -m 644 $< $(@D)
162
163 $(PATH_TARGET)/VBoxNetLwfCat.dir/VBoxNetLwf.cat: \
164 $(PATH_TARGET)/VBoxNetLwfCat.dir/VBoxNetLwf.sys \
165 $(PATH_TARGET)/VBoxNetLwfCat.dir/VBoxNetLwf.inf
166 $(call MSG_TOOL,Inf2Cat,VBoxNetLwf-inf,$@,$<)
167 $(call VBOX_MAKE_CAT_FN, $(@D),$@)
168 endif # VBOX_SIGNING_MODE
169
170
171 #
172 # WinNetConfig - static library with host network interface config API (for the installer)
173 #
174 LIBRARIES.win += WinNetConfigSharedStatic
175 WinNetConfigSharedStatic_TEMPLATE = VBoxR3StaticDllNoAsan
176 WinNetConfigSharedStatic_SDKS = ReorderCompilerIncs $(VBOX_WINPSDK) $(VBOX_WINDDK)
177 WinNetConfigSharedStatic_DEFS = _UNICODE UNICODE
178 WinNetConfigSharedStatic_SOURCES = \
179 win/cfg/VBoxNetCfg.cpp \
180 ../../Main/glue/string.cpp
181
182 # Version for DLLs:
183 LIBRARIES.win += WinNetConfigDll
184 WinNetConfigDll_TEMPLATE = VBoxR3Dll
185 WinNetConfigDll_EXTENDS = WinNetConfigSharedStatic
186
187 # Version for EXEs:
188 LIBRARIES.win += WinNetConfigExe
189 WinNetConfigExe_TEMPLATE = VBoxR3Exe
190 WinNetConfigExe_EXTENDS = WinNetConfigSharedStatic
191
192 #
193 # Template for NetFltInstall and friends.
194 #
195 TEMPLATE_VBoxNetFltR3 = Template for NetAdp6Install and NetAdp6Uninstall
196 TEMPLATE_VBoxNetFltR3_EXTENDS = VBoxR3Exe
197 TEMPLATE_VBoxNetFltR3_SDKS = $(TEMPLATE_VBoxR3Exe_SDKS) ReorderCompilerIncs $(VBOX_WINPSDK) $(VBOX_WINDDK) VBoxNtDll VBoxWinNewDevLib
198 TEMPLATE_VBoxNetFltR3_LATE_LIBS = $(TEMPLATE_VBoxR3Exe_LATE_LIBS) \
199 $(WinNetConfigExe_1_TARGET) \
200 $(PATH_STAGE_LIB)/VBoxDrvCfgExe$(VBOX_SUFF_LIB) \
201 $(LIB_RUNTIME) \
202 $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/comsupp.lib \
203 $(PATH_SDK_$(VBOX_WINPSDK)_LIB)/WbemUuid.Lib
204
205 #
206 # NetAdp6Install
207 #
208 PROGRAMS.win += NetAdp6Install
209 NetAdp6Install_TEMPLATE = VBoxNetFltR3
210 NetAdp6Install_SOURCES = win/tools/VBoxNetAdpInstall.cpp
211 NetAdp6Install_DEFS = NDIS60=1
212
213 #
214 # NetAdp6Uninstall
215 #
216 PROGRAMS.win += NetAdp6Uninstall
217 NetAdp6Uninstall_TEMPLATE = VBoxNetFltR3
218 NetAdp6Uninstall_SOURCES = win/tools/VBoxNetAdpUninstall.cpp
219 NetAdp6Uninstall_DEFS = NDIS60=1
220
221 #
222 # NetLwfInstall
223 #
224 PROGRAMS.win += NetLwfInstall
225 NetLwfInstall_TEMPLATE = VBoxNetFltR3
226 NetLwfInstall_SOURCES = win/tools/VBoxNetLwfInstall.cpp
227
228 #
229 # NetLwfUninstall
230 #
231 PROGRAMS.win += NetLwfUninstall
232 NetLwfUninstall_TEMPLATE = VBoxNetFltR3
233 NetLwfUninstall_SOURCES = win/tools/VBoxNetLwfUninstall.cpp
234
235 endif # $(KBUILD_TARGET) == win
236else if1of ($(KBUILD_TARGET), solaris freebsd) ## @todo merge this with the mixed case stuff.
237 #
238 # vboxnetflt(.ko/.o/) - The lower case driver.
239 # Note! On Solaris the name has to be <= 8 chars long.
240 # The DEBUG_HASH* stuff is for CONFIG_DYNAMIC_DEBUG-enabled kernels
241 #
242 ifdef VBOX_WITH_VBOXDRV
243 SYSMODS += vboxnetflt
244 vboxnetflt_TEMPLATE = VBoxR0Drv
245 vboxnetflt_NAME.solaris = vboxflt
246 vboxnetflt_DEFS = IN_RT_R0
247 vboxnetflt_DEPS.solaris += $(VBOX_SVN_REV_KMK)
248 vboxnetflt_INCS := \
249 $(PATH_SUB_CURRENT)
250 vboxnetflt_LDFLAGS.solaris += -N drv/vboxdrv -N misc/ctf
251 vboxnetflt_LIBS = \
252 $(PATH_STAGE_LIB)/SUPR0IdcClient$(VBOX_SUFF_LIB)
253 ## @todo vboxflt should resolves all the IPRT bits from vboxdrv.
254 #vboxnetflt_LIBS += \
255 # $(PATH_STAGE_LIB)/RuntimeR0Drv$(VBOX_SUFF_LIB)
256 vboxnetflt_SOURCES.solaris = solaris/VBoxNetFlt-solaris.c
257 vboxnetflt_SOURCES.freebsd = freebsd/VBoxNetFlt-freebsd.c
258 vboxnetflt_SOURCES = VBoxNetFlt.c
259 solaris/VBoxNetFlt-solaris.c_DEFS = VBOX_SVN_REV=$(VBOX_SVN_REV)
260
261 ifdef VBOX_WITH_NETFLT_CROSSBOW
262 SYSMODS += vboxnetbow
263 vboxnetbow_TEMPLATE = VBoxR0Drv
264 vboxnetbow_NAME = vboxbow
265 vboxnetbow_DEFS = vboxnetflt_DEFS VBOX_WITH_NETFLT_CROSSBOW
266 vboxnetbow_INCS := $(PATH_SUB_CURRENT)
267 vboxnetbow_LDFLAGS += -N drv/vboxdrv -N drv/vnic -N misc/mac -N misc/dls
268 vboxnetbow_LIBS = \
269 $(PATH_STAGE_LIB)/SUPR0IdcClient$(VBOX_SUFF_LIB)
270 vboxnetbow_SOURCES.solaris = solaris/VBoxNetFltBow-solaris.c
271 vboxnetbow_SOURCES = VBoxNetFlt.c
272 solaris/VBoxNetFltBow-solaris.c_DEFS = VBOX_SVN_REV=$(VBOX_SVN_REV)
273 endif # VBOX_WITH_NETFLT_CROSSBOW
274 endif # VBOX_WITH_VBOXDRV
275endif # to be removed.
276
277
278ifeq ($(KBUILD_TARGET),linux)
279 #
280 # Install source files for compilation on Linux.
281 # files_vboxnetflt defines VBOX_VBOXNETFLT_SOURCES.
282 #
283 include $(PATH_SUB_CURRENT)/linux/files_vboxnetflt
284 INSTALLS += VBoxNetFlt-src VBoxNetFlt-sh
285 VBoxNetFlt-src_INST = bin/src/vboxnetflt/
286 VBoxNetFlt-src_SOURCES = \
287 $(subst $(DQUOTE),,$(VBOX_VBOXNETFLT_SOURCES)) \
288 $(VBoxNetFlt-src_0_OUTDIR)/Makefile
289 VBoxNetFlt-src_CLEAN = \
290 $(VBoxNetFlt-src_0_OUTDIR)/Makefile \
291 $(PATH_TARGET)/VBoxNetFlt-src-1.dep
292
293 # Scripts needed for building the kernel module.
294
295 includedep $(PATH_TARGET)/VBoxNetFlt-src-1.dep
296 $$(VBoxNetFlt-src_0_OUTDIR)/Makefile: \
297 $(PATH_SUB_CURRENT)/linux/Makefile \
298 $$(if $$(eq $$(VBoxNetFlt/linux/Makefile_VBOX_HARDENED),$$(VBOX_WITH_HARDENING)),,FORCE) \
299 | $$(dir $$@)
300 $(QUIET)$(RM) -f -- $@
301 ifndef VBOX_WITH_HARDENING
302 $(QUIET)$(SED) -e "s;VBOX_WITH_HARDENING;;g" --output $@ $<
303 else
304 $(QUIET)$(CP) -f $< $@
305 endif
306 %$(QUIET2)$(RM) -f -- $(PATH_TARGET)/VBoxNetFlt-src-1.dep
307 %$(QUIET2)$(APPEND) '$(PATH_TARGET)/VBoxNetFlt-src-1.dep' 'VBoxNetFlt/linux/Makefile_VBOX_HARDENED=$(VBOX_WITH_HARDENING)'
308
309 #
310 # Build test for the linux host kernel modules.
311 #
312 $(evalcall2 VBOX_LINUX_KMOD_TEST_BUILD_RULE_FN,VBoxNetFlt-src,vboxdrv-src,)
313endif # linux
314
315# Gross hack for FreeBSD 7, should figure this out properly
316## @todo Properly generate opt_netgraph.h
317ifeq ($(KBUILD_TARGET),freebsd)
318 vboxnetflt_DEPS.freebsd += $(PATH_OUT)/opt_netgraph.h
319 $(PATH_OUT)/opt_netgraph.h:
320 echo > $(PATH_OUT)/opt_netgraph.h
321
322 #
323 # Install source files for compilation on FreeBSD.
324 # files_vboxnetflt defines VBOX_VBOXNETFLT_SOURCES.
325 #
326 include $(PATH_SUB_CURRENT)/freebsd/files_vboxnetflt
327 INSTALLS += VBoxNetFlt-src
328 VBoxNetFlt-src_INST = bin/src/vboxnetflt/
329 VBoxNetFlt-src_SOURCES = \
330 $(subst $(DQUOTE),,$(VBOX_VBOXNETFLT_SOURCES)) \
331 $(VBoxNetFlt-src_0_OUTDIR)/Makefile
332 VBoxNetFlt-src_CLEAN = \
333 $(VBoxNetFlt-src_0_OUTDIR)/Makefile
334
335 $$(VBoxNetFlt-src_0_OUTDIR)/Makefile: \
336 $(PATH_SUB_CURRENT)/freebsd/Makefile \
337 $$(if $$(eq $$(VBoxNetFlt/freebsd/Makefile_VBOX_HARDENED),$$(VBOX_WITH_HARDENING)),,FORCE) \
338 | $$(dir $$@)
339 $(QUIET)$(RM) -f -- $@
340 $(QUIET)$(CP) -f $< $@
341 ifndef VBOX_WITH_HARDENING
342 $(QUIET)$(SED) -e "s;VBOX_WITH_HARDENING;;g" --output $@.tmp $@
343 ${QUIET}$(MV) -f $@.tmp $@
344 endif
345 ifndef VBOX_WITH_NETFLT_VIMAGE
346 $(QUIET)$(SED) -e "s;-DVIMAGE;;g" --output $@.tmp $@
347 ${QUIET}$(MV) -f $@.tmp $@
348 endif
349endif # freebsd
350
351include $(FILE_KBUILD_SUB_FOOTER)
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