--- Config.kmk.orig 2020-07-10 02:49:46.000000000 +1000 +++ Config.kmk 2020-08-17 22:33:00.725068000 +1000 @@ -277,7 +277,7 @@ VBOX_PACKAGE_OS = OS2 else ifeq ($(KBUILD_TARGET),haiku) VBOX_PACKAGE_OS = HAIKU -else if1of ($(KBUILD_TARGET), dragonfly freebsd netbsd openbsd) +else if1of ($(KBUILD_TARGET), dragonfly bsdsunix freebsd netbsd openbsd) VBOX_PACKAGE_OS = BSD else $(error Cannot determine VBOX_PACKAGE_OS) @@ -320,7 +320,7 @@ VBOX_WITH_ADDITION_DRIVERS = 1 endif # Build X11 additions. Can be disabled separately. -if1of ($(KBUILD_TARGET), dragonfly freebsd linux netbsd openbsd solaris) +if1of ($(KBUILD_TARGET), dragonfly bsdsunix freebsd linux netbsd openbsd solaris) VBOX_WITH_X11_ADDITIONS = 1 endif # Enable the building of shared folders in the windows additions. @@ -445,11 +445,11 @@ # Enable OSS audio support. VBOX_WITH_AUDIO_OSS = 1 endif -if1of ($(KBUILD_TARGET), linux) +if1of ($(KBUILD_TARGET), bsdsunix freebsd linux) # Enable ALSA audio support. VBOX_WITH_AUDIO_ALSA = 1 endif -if1of ($(KBUILD_TARGET), linux) +if1of ($(KBUILD_TARGET), bsdsunix freebsd linux) # Enable PulseAudio audio support. VBOX_WITH_AUDIO_PULSE = 1 endif @@ -464,11 +464,11 @@ # Enable PCI passthrough support. VBOX_WITH_PCI_PASSTHROUGH = 1 # Enable statically linked dbus support. -if1of ($(KBUILD_TARGET), linux solaris) +if1of ($(KBUILD_TARGET), bsdsunix freebsd linux solaris) VBOX_WITH_DBUS = 1 endif # Enable building PAM modules. -if1of ($(KBUILD_TARGET), linux solaris) +if1of ($(KBUILD_TARGET), bsdsunix freebsd linux solaris) VBOX_WITH_PAM = 1 endif # Enable internal networking. @@ -482,7 +482,7 @@ # Enable Host Guest Shared Memory Interface. VBOX_WITH_HGSMI = 1 # Enable Video 2D Acceleration. -if1of ($(KBUILD_TARGET), darwin linux win freebsd) +if1of ($(KBUILD_TARGET), darwin linux win bsdsunix freebsd) VBOX_WITH_VIDEOHWACCEL = 1 endif # Enable Wddm Video driver for Vista+ guests. @@ -552,7 +552,7 @@ # Enable MSI support in devices VBOX_WITH_MSI_DEVICES = 1 # Enable host network interface API. -if1of ($(KBUILD_TARGET), darwin freebsd linux solaris win) +if1of ($(KBUILD_TARGET), darwin bsdsunix freebsd linux solaris win) VBOX_WITH_HOSTNETIF_API = 1 endif # Emulated USB smart card reader @@ -664,7 +664,7 @@ VBOX_WITH_VDITOOL = # Enable this to build vbox-img even if VBOX_WITH_TESTCASES is disabled VBOX_WITH_VBOX_IMG = -if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), darwin.x86 darwin.amd64 linux.x86 linux.amd64 solaris.amd64 win.x86 win.amd64) +if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), darwin.x86 darwin.amd64 freebsd.x86 freebsd.amd64 bsdsunix.x86 bsdsunix.amd64 linux.x86 linux.amd64 solaris.amd64 win.x86 win.amd64) # Enables the video capturing support. VBOX_WITH_VIDEOREC = 1 # Enable VPX (VP8 / VP9 codec), used for video capturing. @@ -689,13 +689,13 @@ # Compile the host channel VBOX_WITH_HOST_CHANNEL = 1 # Enable the guest control service. -if1of ($(KBUILD_TARGET), darwin freebsd linux solaris win) +if1of ($(KBUILD_TARGET), darwin bsdsunix freebsd linux solaris win) VBOX_WITH_GUEST_CONTROL = 1 endif # Enable ballooning VBOX_WITH_MEMBALLOON = 1 # Enable crOpenGL service -if1of ($(KBUILD_TARGET), darwin freebsd linux solaris win) +if1of ($(KBUILD_TARGET), darwin bsdsunix freebsd linux solaris win) VBOX_WITH_CROGL = 1 endif # Enable cURL (required for the network part of the GUI) @@ -731,14 +731,14 @@ ## @name Networking ## @{ # Use VBoxNetFlt for host interface networking. -if1of ($(KBUILD_TARGET), darwin freebsd linux solaris win) +if1of ($(KBUILD_TARGET), darwin bsdsunix freebsd linux solaris win) VBOX_WITH_NETFLT = 1 ifeq ($(KBUILD_TARGET),solaris) # requires snv_159+. VBOX_WITH_NETFLT_CROSSBOW = 1 endif # Use VBoxNetAdp for host only networking. - if1of ($(KBUILD_TARGET), darwin freebsd linux solaris win) + if1of ($(KBUILD_TARGET), darwin bsdsunix freebsd linux solaris win) VBOX_WITH_NETADP = 1 endif endif @@ -747,7 +747,7 @@ # Enable the netshaper support VBOX_WITH_NETSHAPER = 1 # Enable Virtual Distributed Ethernet or not. -if1of ($(KBUILD_TARGET), freebsd linux) +if1of ($(KBUILD_TARGET), bsdsunix freebsd linux) VBOX_WITH_VDE = 1 endif ## @} @@ -834,6 +834,8 @@ VBOX_PATH_APP_PRIVATE = /opt/VirtualBox else ifeq ($(KBUILD_TARGET),darwin) VBOX_PATH_APP_PRIVATE = /Applications/VirtualBox.app/Contents/MacOS + else ifeq ($(KBUILD_TARGET),bsdsunix) + VBOX_PATH_APP_PRIVATE = /usr/local/lib/virtualbox else ifeq ($(KBUILD_TARGET),freebsd) VBOX_PATH_APP_PRIVATE = /usr/local/lib/virtualbox else ifeq ($(KBUILD_TARGET),haiku) @@ -873,7 +875,7 @@ ifdef VBOX_WITH_HARDENING if1of ($(KBUILD_TARGET), solaris) VBOX_WITH_RUNPATH = $(VBOX_PATH_APP_PRIVATE)/$(if-expr $(KBUILD_TARGET_ARCH) == "amd64",amd64,i386) - else if1of ($(KBUILD_TARGET), freebsd linux) + else if1of ($(KBUILD_TARGET), bsdsunix freebsd linux) VBOX_WITH_RUNPATH = $(VBOX_PATH_APP_PRIVATE) endif endif @@ -992,10 +994,6 @@ VBOX_WITH_VBOXSDL= endif -ifeq ($(KBUILD_TARGET),freebsd) - VBOX_WITH_DOCS= -endif - ifeq ($(KBUILD_TARGET),haiku) # Don't bother with SDL ttf for now. VBOX_WITH_SECURELABEL= @@ -1155,7 +1153,7 @@ VBOX_WITH_KCHMVIEWER= VBOX_WITH_PLUGIN_CRYPT= VBOX_WITH_DRAG_AND_DROP_PROMISES= - ifn1of ($(KBUILD_TARGET), linux) + ifn1of ($(KBUILD_TARGET), bsdsunix freebsd linux) VBOX_WITH_DOCS= VBOX_WITH_DOCS_PACKING= endif @@ -1176,14 +1174,14 @@ ifn1of ($(KBUILD_TARGET), darwin linux solaris win) VBOX_WITH_INSTALLER= endif - if1of ($(KBUILD_TARGET), win) + # if1of ($(KBUILD_TARGET), win) # Undefine codec libraries which are not needed. VBOX_WITH_LIBVPX= VBOX_WITH_LIBOPUS= # Disable video recording (with audio support). VBOX_WITH_VIDEOREC= VBOX_WITH_AUDIO_VIDEOREC= - endif + # endif # branding VBOX_BRAND_LICENSE_HTML := $(PATH_ROOT)/doc/License-gpl-2.0.html VBOX_BRAND_LICENSE_RTF := $(PATH_ROOT)/doc/License-gpl-2.0.rtf @@ -1371,7 +1369,7 @@ # # Image and object format config. # -if1of ($(KBUILD_TARGET), freebsd haiku linux netbsd openbsd solaris) +if1of ($(KBUILD_TARGET), bsdsunix freebsd haiku linux netbsd openbsd solaris) VBOX_LDR_FMT = elf endif ifeq ($(KBUILD_TARGET),darwin) @@ -1578,6 +1576,7 @@ DEFS.x86 = RT_ARCH_X86 __X86__ DEFS.amd64 = RT_ARCH_AMD64 __AMD64__ DEFS.darwin = RT_OS_DARWIN __DARWIN__ +DEFS.bsdsunix = RT_OS_BSDSUNIX __BSDSUNIX__ DEFS.freebsd = RT_OS_FREEBSD __FREEBSD__ DEFS.haiku = RT_OS_HAIKU DEFS.linux = RT_OS_LINUX _FILE_OFFSET_BITS=64 @@ -1720,7 +1719,7 @@ # # Add the output dir(s) to the dynamic loader search path. # -if1of ($(KBUILD_HOST), freebsd linux netbsd openbsd solaris) +if1of ($(KBUILD_HOST), bsdsunix freebsd linux netbsd openbsd solaris) export LD_LIBRARY_PATH:=$(PATH_STAGE_BIN):$(PATH_STAGE_LIB):$(LD_LIBRARY_PATH) endif ifeq ($(KBUILD_HOST),haiku) @@ -1753,7 +1752,7 @@ VBOX_LIB_XPCOM_X86 = $(PATH_STAGE_BIN)/VBoxXPCOM-x86.dylib LIB_DDU = $(PATH_STAGE_BIN)/VBoxDDU.dylib endif -if1of ($(KBUILD_TARGET), freebsd haiku linux netbsd openbsd solaris) +if1of ($(KBUILD_TARGET), bsdsunix freebsd haiku linux netbsd openbsd solaris) LIB_RUNTIME = $(PATH_STAGE_BIN)/VBoxRT.so LIB_RUNTIME_EF = $(PATH_STAGE_LIB)/RuntimeEFCPP.a VBOX_LIB_RUNTIME_X86 = $(PATH_STAGE_BIN)/VBoxRT-x86.so @@ -1810,6 +1809,7 @@ else VBOX_BLD_PYTHON := $(firstword $(which python2.7$(HOSTSUFF_EXE)) $(which python2.6$(HOSTSUFF_EXE)) \ $(which python$(HOSTSUFF_EXE)) $(which python3$(HOSTSUFF_EXE)) \ + $(which %%PYTHON_VERSION%%) \ python-not-found) endif endif @@ -2007,7 +2007,7 @@ # GNU tar if present. if1of ($(KBUILD_TARGET), linux os2 win) VBOX_GTAR ?= tar -else if1of ($(KBUILD_TARGET), freebsd netbsd solaris) +else if1of ($(KBUILD_TARGET), bsdsunix freebsd netbsd solaris) VBOX_GTAR ?= gtar endif @@ -2450,7 +2450,7 @@ VBOX_LIB_OGL = $(VBOX_PATH_ADDITIONS)/VBoxOGL$(VBOX_SUFF_DLL) endif - if1of ($(KBUILD_TARGET), freebsd linux solaris) + if1of ($(KBUILD_TARGET), bsdsunix freebsd linux solaris) ifndef VBOX_USE_SYSTEM_GL_HEADERS VBOX_GL_INCS = \ $(VBOX_PATH_X11_ROOT)/glproto-1.4.10 \ @@ -2550,6 +2550,14 @@ # This isn't important (yet) on windows, so cook the result until # cygwin is feeling better. VBOX_GCC_VERSION := $(int-add $(int-mul 10000, 3), $(int-mul 100, 3), 3) +else ifeq ($(KBUILD_HOST),bsdsunix) + # At a minimum, we'll be building with GCC 4.2 on BSDSUniX. LLVM will always + # pose as GCC 4.2 anyways, so this seems safe. + VBOX_GCC_VERSION := $(int-add $(int-mul 10000, 4), $(int-mul 100, 2), 0) +else ifeq ($(KBUILD_HOST),freebsd) + # At a minimum, we'll be building with GCC 4.2 on FreeBSD. LLVM will always + # pose as GCC 4.2 anyways, so this seems safe. + VBOX_GCC_VERSION := $(int-add $(int-mul 10000, 4), $(int-mul 100, 2), 0) else # This is kind of bad, the returned string needs to be re-evaluated before use. # The reason for this hack is that the windows kmk_ash cannot deal with $((1+1)). @@ -4218,6 +4226,8 @@ TEMPLATE_VBoxRc_TOOL = $(VBOX_GCC32_TOOL) TEMPLATE_VBoxRc_CXXFLAGS = -fno-pie -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_CXX) $(VBOX_GCC32_Wno-variadic-macros) -fno-exceptions $(VBOX_GCC_GC_OPT) $(VBOX_GCC_GC_FP) -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -fno-strict-aliasing $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_fvisibility-hidden) $(VBOX_GCC_fvisibility-inlines-hidden) -fno-rtti $(VBOX_GCC_IPRT_FMT_CHECK) TEMPLATE_VBoxRc_CFLAGS = -fno-pie -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_C) $(VBOX_GCC32_Wno-variadic-macros) -fno-exceptions $(VBOX_GCC_GC_OPT) $(VBOX_GCC_GC_FP) -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -fno-strict-aliasing $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_fvisibility-hidden) $(VBOX_GCC_IPRT_FMT_CHECK) + TEMPLATE_VBoxRc_CXXFLAGS.bsdsunix = -fno-builtin + TEMPLATE_VBoxRc_CXXFLAGS.freebsd = -fno-builtin ifeq ($(KBUILD_TARGET),solaris) TEMPLATE_VBoxRc_LDFLAGS = -r else @@ -4225,7 +4235,7 @@ ## @todo WTF doesn't the globals work? Debug info is supposed to be split everywhere. GRR TEMPLATE_VBoxRc_LD_DEBUG = split endif - ifn1of ($(KBUILD_TARGET), solaris freebsd) + ifn1of ($(KBUILD_TARGET), solaris bsdsunix freebsd) TEMPLATE_VBoxRc_LIBS = \ $(VBOX_GCC32_LIBGCC) # intrinsics endif @@ -4282,7 +4292,7 @@ TEMPLATE_VBoxRcExe_LDFLAGS.dbgopt = -g TEMPLATE_VBoxRcExe_LDFLAGS.strict = -g TEMPLATE_VBoxRcExe_LDFLAGS.release = -g - if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), freebsd.amd64) + if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), freebsd.amd64 bsdsunix.amd64) # The FreeBSD port of gcc isn't picking up -m32 where it should. TEMPLATE_VBoxRcExe_DEFS.$(KBUILD_TARGET) = $(TEMPLATE_VBoxRc_DEFS.$(KBUILD_TARGET)) IPRT_DONT_USE_SYSTEM_STDINT_H TEMPLATE_VBoxRcExe_LDFLAGS.$(KBUILD_TARGET) = /usr/lib32/crt1.o /usr/lib32/crti.o /usr/lib32/crtbegin.o $(TEMPLATE_VBoxRc_LDFLAGS.$(KBUILD_TARGET)) -nostdlib -v @@ -4359,6 +4369,8 @@ TEMPLATE_VBoxR0_TOOL = $(VBOX_GCC_TOOL) TEMPLATE_VBoxR0_CFLAGS = -fno-pie -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_C) $(VBOX_GCC_Wno-variadic-macros) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing -fno-exceptions $(VBOX_GCC_fno-stack-protector) -fno-common $(VBOX_GCC_fvisibility-hidden) -std=gnu99 $(VBOX_GCC_IPRT_FMT_CHECK) TEMPLATE_VBoxR0_CXXFLAGS = -fno-pie -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_CXX) $(VBOX_GCC_Wno-variadic-macros) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing -fno-exceptions $(VBOX_GCC_fno-stack-protector) -fno-common $(VBOX_GCC_fvisibility-inlines-hidden) $(VBOX_GCC_fvisibility-hidden) -fno-rtti $(VBOX_GCC_IPRT_FMT_CHECK) +TEMPLATE_VBoxR0_CXXFLAGS.bsdsunix = -fno-builtin +TEMPLATE_VBoxR0_CXXFLAGS.freebsd = -fno-builtin TEMPLATE_VBoxR0_CFLAGS.amd64 = -m64 -mno-red-zone -mcmodel=kernel -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -fno-asynchronous-unwind-tables -ffreestanding TEMPLATE_VBoxR0_CXXFLAGS.amd64 = -m64 -mno-red-zone -mcmodel=kernel -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -fno-asynchronous-unwind-tables ifeq ($(KBUILD_TARGET),solaris) @@ -4377,7 +4389,7 @@ ## @todo WTF doesn't the globals work? Debug info is supposed to be split everywhere. GRR TEMPLATE_VBoxR0_LD_DEBUG = split endif -ifn1of ($(KBUILD_TARGET),solaris freebsd) +ifn1of ($(KBUILD_TARGET),solaris bsdsunix freebsd) TEMPLATE_VBoxR0_LIBS = \ $(VBOX_GCC_LIBGCC) # intrinsics endif @@ -4636,6 +4648,84 @@ TEMPLATE_VBOXR0DRV_POST_CMDS = $(VBOX_SIGN_DRIVER_CMDS) endif # Solaris +ifeq ($(KBUILD_TARGET),bsdsunix) + +# Note: @ -> /usr/src/sys and machine -> /usr/src/sys/i386/include + +## The location of the BSDSUniX kernel source. +VBOX_BSDSUNIX_SRC ?= /usr/src/sys +## The BSDSUniX /usr/include. +VBOX_BSDSUNIX_SYS_INCS ?= /usr/include + +TEMPLATE_VBOXR0DRV_TOOL = $(VBOX_GCC_TOOL) +TEMPLATE_VBOXR0DRV_LDTOOL = BSDSUNIXKMODLD +TEMPLATE_VBOXR0DRV_DEFS += _KERNEL KLD_MODULE +TEMPLATE_VBOXR0DRV_INCS = \ + $(VBOX_BSDSUNIX_SRC) \ + $(VBOX_BSDSUNIX_SRC)/contrib/altq \ + $(VBOX_BSDSUNIX_SRC)/../include \ + $(VBOX_BSDSUNIX_SYS_INCS) +# omitting: -Wcast-qual, -Wredundant-decls +TEMPLATE_VBOXR0DRV_CFLAGS = \ + $(VBOX_GCC_WARN) -Wpointer-arith -Winline $(VBOX_GCC_Wno-pointer-sign) $(VBOX_GCC_fdiagnostics-show-option) \ + -Wstrict-prototypes -Wmissing-prototypes -Wstrict-prototypes \ + -Wimplicit-function-declaration -Werror-implicit-function-declaration \ + -O2 -ffreestanding -fno-strict-aliasing -fno-common -finline-limit=8000 \ + $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) \ + -nostdinc -std=c99 +TEMPLATE_VBOXR0DRV_CFLAGS.x86 = -m32 -mpreferred-stack-boundary=2 -mno-mmx -mno-3dnow -mno-sse -mno-sse2 +TEMPLATE_VBOXR0DRV_CFLAGS.amd64 = -m64 --param inline-unit-growth=100 --param large-function-growth=1000 \ + -fno-omit-frame-pointer -mcmodel=kernel -mno-red-zone -mfpmath=387 -mno-sse -mno-sse2 -mno-mmx \ + -mno-3dnow -msoft-float -fno-asynchronous-unwind-tables -Wundef +TEMPLATE_VBOXR0DRV_CXXFLAGS = -fno-exceptions -fno-rtti \ + $(VBOX_GCC_WARN) -Wpointer-arith -Winline \ + -O2 -fno-builtin -fno-strict-aliasing -fno-common -finline-limit=8000 \ + $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) \ + -nostdinc +TEMPLATE_VBOXR0DRV_CXXFLAGS.x86 = $(TEMPLATE_VBOXR0DRV_CFLAGS.x86) +TEMPLATE_VBOXR0DRV_CXXFLAGS.amd64 = $(TEMPLATE_VBOXR0DRV_CFLAGS.amd64) +TEMPLATE_VBOXR0DRV_SYSSUFF = .ko +TEMPLATE_VBOXR0DRV_LDFLAGS = -d --warn-common +TEMPLATE_VBOXR0DRV_LDFLAGS.x86 = -m elf_i386_bsdsux +TEMPLATE_VBOXR0DRV_LDFLAGS.amd64 = -m elf_x86_64_bsdsux + +TOOL_BSDSUNIXKMODLD = BSDSUniX kernel module linker. +# See kBuild/tools/GCC3.kmk for docs. +TOOL_BSDSUNIXKMODLD_LINK_SYSMOD_OUTPUT_MAYBE = $(outbase).map +TOOL_BSDSUNIXKMODLD_LINK_SYSMOD_DEPEND = $(foreach lib,$(libs),$(if $(findstring $(lib),$(subst /,x,$(lib))),, $(lib))) +TOOL_BSDSUNIXKMODLD_LINK_SYSMOD_DEPORD = + ifeq ($(KBUILD_TARGET_ARCH),amd64) +TOOL_BSDSUNIXKMODLD_LINK_SYSMOD_OUTPUT = +define TOOL_BSDSUNIXKMODLD_LINK_SYSMOD_CMDS +# Link intermediate .kld (a relocatable object). + ld $(flags) -r -o $(out) $(objs) \ + $(foreach p,$(libpath), -L$(p))\ + $(foreach lib,$(libs), $(if $(findstring $(lib),$(subst /,x,$(lib))), -l$(patsubst lib%,%,$(basename $(lib))), $(lib))) +# Strip non-exported symbols private and localize the exported ones. + awk -f $(VBOX_BSDSUNIX_SRC)/conf/kmod_syms.awk $(out) $(if $(othersrc), $(othersrc),/dev/null) \ + | xargs -J% objcopy % $(out) + +## Strip debug info (comment out if debugging or something). +# objcopy --strip-debug $(out) +endef + else # x86 +TOOL_BSDSUNIXKMODLD_LINK_SYSMOD_OUTPUT = $(outbase).kld +define TOOL_BSDSUNIXKMODLD_LINK_SYSMOD_CMDS +# Link intermediate .kld (a relocatable object). + ld $(flags) -r -o $(outbase).kld $(objs) \ + $(foreach p,$(libpath), -L$(p))\ + $(foreach lib,$(libs), $(if $(findstring $(lib),$(subst /,x,$(lib))), -l$(patsubst lib%,%,$(basename $(lib))), $(lib))) +# Strip non-exported symbols private and localize the exported ones. + awk -f $(VBOX_BSDSUNIX_SRC)/conf/kmod_syms.awk $(outbase).kld $(if $(othersrc), $(othersrc),/dev/null) \ + | xargs -J% objcopy % $(outbase).kld + +# Link the final .ko (a shared object). + ld $(flags) -Bshareable -znotext -o $(out) $(outbase).kld +endef + endif # x86 + +endif # BSDSUniX + ifeq ($(KBUILD_TARGET),freebsd) # x86 FreeBSD (6.2 or something): # cc -O2 -fno-strict-aliasing -pipe -Werror -D_KERNEL -DKLD_MODULE \ @@ -4683,13 +4773,13 @@ -O2 -ffreestanding -fno-strict-aliasing -fno-common -finline-limit=8000 \ $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) \ -nostdinc -std=c99 -TEMPLATE_VBOXR0DRV_CFLAGS.x86 = -m32 -mno-align-long-strings -mpreferred-stack-boundary=2 -mno-mmx -mno-3dnow -mno-sse -mno-sse2 +TEMPLATE_VBOXR0DRV_CFLAGS.x86 = -m32 -mpreferred-stack-boundary=2 -mno-mmx -mno-3dnow -mno-sse -mno-sse2 TEMPLATE_VBOXR0DRV_CFLAGS.amd64 = -m64 --param inline-unit-growth=100 --param large-function-growth=1000 \ -fno-omit-frame-pointer -mcmodel=kernel -mno-red-zone -mfpmath=387 -mno-sse -mno-sse2 -mno-mmx \ -mno-3dnow -msoft-float -fno-asynchronous-unwind-tables -Wundef TEMPLATE_VBOXR0DRV_CXXFLAGS = -fno-exceptions -fno-rtti \ $(VBOX_GCC_WARN) -Wpointer-arith -Winline \ - -O2 -fno-strict-aliasing -fno-common -finline-limit=8000 \ + -O2 -fno-builtin -fno-strict-aliasing -fno-common -finline-limit=8000 \ $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) \ -nostdinc TEMPLATE_VBOXR0DRV_CXXFLAGS.x86 = $(TEMPLATE_VBOXR0DRV_CFLAGS.x86) @@ -4716,7 +4806,7 @@ | xargs -J% objcopy % $(out) ## Strip debug info (comment out if debugging or something). - objcopy --strip-debug $(out) +# objcopy --strip-debug $(out) endef else # x86 TOOL_FREEBSDKMODLD_LINK_SYSMOD_OUTPUT = $(outbase).kld @@ -4730,7 +4820,7 @@ | xargs -J% objcopy % $(outbase).kld # Link the final .ko (a shared object). - ld $(flags) -Bshareable -o $(out) $(outbase).kld + ld $(flags) -Bshareable -znotext -o $(out) $(outbase).kld endef endif # x86 @@ -5016,7 +5106,23 @@ TEMPLATE_VBOXR3EXE_CFLAGS += -fno-pic TEMPLATE_VBOXR3EXE_CXXFLAGS += -fno-pic TEMPLATE_VBOXR3EXE_LDFLAGS += -fno-pic - else if1of ($(KBUILD_TARGET), freebsd openbsd) + else ifeq ($(KBUILD_TARGET),bsdsunix) +TEMPLATE_VBOXR3EXE_TOOL = GXX3 +TEMPLATE_VBOXR3EXE_LIBS = pthread +TEMPLATE_VBOXR3EXE_LDFLAGS.bsdsunix.x86 = -Wl,-z,notext +TEMPLATE_VBOXR3EXE_INCS += \ + /usr/local/include +TEMPLATE_VBOXR3EXE_LIBPATH += \ + /usr/local/lib + else ifeq ($(KBUILD_TARGET),freebsd) +TEMPLATE_VBOXR3EXE_TOOL = GXX3 +TEMPLATE_VBOXR3EXE_LIBS = pthread +TEMPLATE_VBOXR3EXE_LDFLAGS.freebsd.x86 = -Wl,-z,notext +TEMPLATE_VBOXR3EXE_INCS += \ + /usr/local/include +TEMPLATE_VBOXR3EXE_LIBPATH += \ + /usr/local/lib + else ifeq ($(KBUILD_TARGET),openbsd) TEMPLATE_VBOXR3EXE_TOOL = GXX3 TEMPLATE_VBOXR3EXE_LIBS = pthread TEMPLATE_VBOXR3EXE_INCS += \ @@ -5114,7 +5220,7 @@ # TEMPLATE_VBoxR3DllNoPic = VBox ring-3 SO/DLLs without PIC, without warnings. TEMPLATE_VBoxR3DllNoPic_EXTENDS = VBOXR3 -if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), linux.x86 freebsd.x86) +if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), linux.x86 freebsd.x86 bsdsunix.x86) TEMPLATE_VBoxR3DllNoPic_DEFS = $(TEMPLATE_VBOXR3EXE_DEFS) TEMPLATE_VBoxR3DllNoPic_CFLAGS = $(TEMPLATE_VBOXR3EXE_CFLAGS) $(VBOX_GCC_WERR) TEMPLATE_VBoxR3DllNoPic_CXXFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS) $(VBOX_GCC_WERR) @@ -5145,7 +5251,7 @@ # TEMPLATE_VBoxR3DllWarnNoPic = VBox ring-3 SO/DLLs without PIC, with warnings. TEMPLATE_VBoxR3DllWarnNoPic_EXTENDS = VBOXR3 -if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), linux.x86 freebsd.x86) +if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), linux.x86 freebsd.x86 bsdsunix.x86) TEMPLATE_VBoxR3DllWarnNoPic_DEFS = $(TEMPLATE_VBOXR3EXE_DEFS) TEMPLATE_VBoxR3DllWarnNoPic_CFLAGS = $(TEMPLATE_VBOXR3EXE_CFLAGS) TEMPLATE_VBoxR3DllWarnNoPic_CXXFLAGS = $(TEMPLATE_VBOXR3EXE_CXXFLAGS) @@ -5225,7 +5331,7 @@ $(SDK_VBOX_ZLIB_LIBS) ifeq ($(KBUILD_TARGET),linux) TEMPLATE_VBoxR3Static_LIBS += crypt - else if1of ($(KBUILD_TARGET),darwin freebsd) + else if1of ($(KBUILD_TARGET),darwin bsdsunix freebsd) TEMPLATE_VBoxR3Static_LIBS += iconv else ifeq ($(KBUILD_TARGET),solaris) TEMPLATE_VBoxR3Static_LIBS += kstat @@ -5310,7 +5416,7 @@ TEMPLATE_VBOXR3HARDENEDEXE_LDFLAGS.win.amd64 = $(TEMPLATE_VBOXR3EXE_LDFLAGS.win.amd64) /entry:suplibHardenedWindowsMain TEMPLATE_VBOXR3HARDENEDEXE_LIBS.x86 = $(NOT_SUCH_VARIABLE) TEMPLATE_VBOXR3HARDENEDEXE_LIBS.amd64 = $(NOT_SUCH_VARIABLE) -else ifn1of ($(KBUILD_TARGET), os2 solaris) +else ifn1of ($(KBUILD_TARGET), bsdsunix freebsd os2 solaris) # We want to keep the RPATH on Solaris to be able to find libgcc_1/libstdc++ within $(VBOX_WITH_RUNPATH) TEMPLATE_VBOXR3HARDENEDEXE_LDFLAGS = $(filter-out '$(VBOX_GCC_RPATH_OPT)%,$(TEMPLATE_VBOXR3EXE_LDFLAGS)) TEMPLATE_VBOXR3HARDENEDEXE_LDFLAGS.linux = $(filter-out $(VBOX_GCC_ORIGIN_OPT),$(TEMPLATE_VBOXR3EXE_LDFLAGS.linux)) @@ -5837,7 +5943,23 @@ else ifeq ($(KBUILD_TARGET),haiku) TEMPLATE_VBOXMAINEXE_TOOL = GXX3 TEMPLATE_VBOXMAINEXE_LIBS = $(LIB_RUNTIME) network stdc++ supc++ - else if1of ($(KBUILD_TARGET), freebsd openbsd) + else ifeq ($(KBUILD_TARGET),bsdsunix) +TEMPLATE_VBOXMAINEXE_TOOL = GXX3 +TEMPLATE_VBOXMAINEXE_LIBS = $(LIB_RUNTIME) +TEMPLATE_VBOXMAINEXE_LDFLAGS.bsdsunix.x86 = -Wl,-z,notext +TEMPLATE_VBOXMAINEXE_INCS += \ + /usr/local/include +TEMPLATE_VBOXMAINEXE_LIBPATH += \ + /usr/local/lib + else ifeq ($(KBUILD_TARGET),freebsd) +TEMPLATE_VBOXMAINEXE_TOOL = GXX3 +TEMPLATE_VBOXMAINEXE_LIBS = $(LIB_RUNTIME) +TEMPLATE_VBOXMAINEXE_LDFLAGS.freebsd.x86 = -Wl,-z,notext +TEMPLATE_VBOXMAINEXE_INCS += \ + /usr/local/include +TEMPLATE_VBOXMAINEXE_LIBPATH += \ + /usr/local/lib + else ifeq ($(KBUILD_TARGET),openbsd) TEMPLATE_VBOXMAINEXE_TOOL = GXX3 TEMPLATE_VBOXMAINEXE_LIBS = $(LIB_RUNTIME) TEMPLATE_VBOXMAINEXE_INCS += \ @@ -6225,11 +6347,11 @@ VBOX_QT_MOD = \ QtCore QtGui QtWidgets QtPrintSupport QtMacExtras \ $(if $(VBOX_GUI_USE_QGL),QtOpenGL,) - else if1of ($(KBUILD_TARGET), linux freebsd netbsd openbsd solaris win) + else if1of ($(KBUILD_TARGET), linux bsdsunix freebsd netbsd openbsd solaris win) VBOX_QT_MOD += \ Qt5Core Qt5Gui Qt5Widgets Qt5PrintSupport \ $(if $(VBOX_GUI_USE_QGL),Qt5OpenGL,) - if1of ($(KBUILD_TARGET), linux freebsd netbsd openbsd solaris) + if1of ($(KBUILD_TARGET), linux bsdsunix freebsd netbsd openbsd solaris) VBOX_QT_MOD += \ Qt5DBus Qt5XcbQpa Qt5X11Extras # legacy libraries required to be installed on EL5 @@ -6242,7 +6364,7 @@ VBOX_QT_MOD += \ Qt5WinExtras endif # win - endif # linux freebsd netbsd openbsd solaris win + endif # linux bsdsunix freebsd netbsd openbsd solaris win VBOX_QT_MOD_NAMES = $(foreach qtmod,$(VBOX_QT_MOD),$(qtmod)$(VBOX_QT_INFIX)) @@ -6381,14 +6503,18 @@ $(LIB_PTHREAD) TEMPLATE_VBOXQTGUIEXE_LIBPATH += \ $(VBOX_LIBPATH_X11) + ifeq ($(KBUILD_TARGET),bsdsunix) + TEMPLATE_VBOXQTGUIEXE_LDFLAGS.bsdsunix.x86 = -Wl,-z,notext + TEMPLATE_VBOXQTGUIEXE_INCS += \ + /usr/local/include + TEMPLATE_VBOXQTGUIEXE_LIBPATH += \ + /usr/local/lib + endif ifeq ($(KBUILD_TARGET),freebsd) + TEMPLATE_VBOXQTGUIEXE_LDFLAGS.freebsd.x86 = -Wl,-z,notext TEMPLATE_VBOXQTGUIEXE_INCS += \ - /usr/include \ - /usr/X11R6/include \ /usr/local/include TEMPLATE_VBOXQTGUIEXE_LIBPATH += \ - /usr/lib \ - /usr/X11R6/lib \ /usr/local/lib endif ifeq ($(KBUILD_TARGET),solaris) @@ -6613,16 +6739,12 @@ TEMPLATE_VBoxBldProg_LIBS = network iconv TEMPLATE_VBoxBldProg_LIBPATH += \ /boot/common/lib - else if1of ($(KBUILD_HOST), freebsd openbsd) + else if1of ($(KBUILD_HOST), bsdsunix freebsd openbsd) TEMPLATE_VBoxBldProg_TOOL = GXX3 TEMPLATE_VBoxBldProg_LIBS = pthread TEMPLATE_VBoxBldProg_INCS += \ - /usr/include \ - /usr/X11R6/include \ /usr/local/include TEMPLATE_VBoxBldProg_LIBPATH += \ - /usr/lib \ - /usr/X11R6/lib \ /usr/local/lib else ifeq ($(KBUILD_HOST),netbsd) TEMPLATE_VBoxBldProg_TOOL = GXX3 @@ -6662,6 +6784,11 @@ $(TEMPLATE_VBoxAdvBldProg_LIBS) \ iconv \ $(TEMPLATE_VBoxBldProg_LIBS.darwin) +TEMPLATE_VBoxAdvBldProg_LIBS.bsdsunix = \ + $(TEMPLATE_VBoxAdvBldProg_LIBS) \ + iconv \ + rt \ + $(TEMPLATE_VBoxBldProg_LIBS.bsdsunix) TEMPLATE_VBoxAdvBldProg_LIBS.freebsd = \ $(TEMPLATE_VBoxAdvBldProg_LIBS) \ iconv \ @@ -6745,7 +6872,7 @@ TEMPLATE_VBOXGUESTR3EXE_DEFS.linux := $(TEMPLATE_VBOXR3EXE_DEFS.linux) LOG_USE_C99 RT_WITHOUT_EXEC_ALLOC ifeq ($(KBUILD_TARGET),linux) # As few libs as possible on linux. TEMPLATE_VBOXGUESTR3EXE_LIBS = pthread rt m dl -else if1of ($(KBUILD_TARGET), darwin freebsd openbsd) +else if1of ($(KBUILD_TARGET), darwin bsdsunix freebsd openbsd) TEMPLATE_VBOXGUESTR3EXE_LIBS = $(TEMPLATE_VBOXR3EXE_LIBS) iconv else ifeq ($(KBUILD_TARGET), solaris) TEMPLATE_VBOXGUESTR3EXE_LIBS = $(TEMPLATE_VBOXR3EXE_LIBS) nsl @@ -6918,7 +7045,7 @@ TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS.linux = $(subst -Wl$(COMMA),,$(VBOX_LD_hash_style_sysv)) TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS.$(KBUILD_TYPE) = $(NO_SUCH_VARIABLE) TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS = -r -if1of ($(KBUILD_TARGET), dragonfly freebsd linux netbsd openbsd) # the gnu ld guys. +if1of ($(KBUILD_TARGET), dragonfly bsdsunix freebsd linux netbsd openbsd) # the gnu ld guys. TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS.release = -S TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS.x86 = -m elf_i386 TEMPLATE_VBOXGUESTR3XF86MOD_LDFLAGS.amd64 = -m elf_x86_64 @@ -6961,6 +7088,8 @@ $(VBOX_LIB_VBGL_R3_XORG) TEMPLATE_VBOXGUESTR3XORGMOD_LIBS.freebsd += \ iconv +TEMPLATE_VBOXGUESTR3XORGMOD_LIBS.bsdsunix += \ + iconv # @@ -7014,6 +7143,7 @@ TEMPLATE_VBOXCROGLR3HOSTDLL_DEFS.linux = Linux=1 _GNU_SOURCE TEMPLATE_VBOXCROGLR3HOSTDLL_DEFS.solaris = SunOS=1 _GNU_SOURCE #GLEXT_64_TYPES_DEFINED TEMPLATE_VBOXCROGLR3HOSTDLL_DEFS.darwin = DARWIN=1 GL_GLEXT_LEGACY _GNU_SOURCE +TEMPLATE_VBOXCROGLR3HOSTDLL_DEFS.bsdsunix = BSDSUniX=1 _GNU_SOURCE TEMPLATE_VBOXCROGLR3HOSTDLL_DEFS.freebsd = FreeBSD=1 _GNU_SOURCE TEMPLATE_VBOXCROGLR3HOSTDLL_INCS = $(VBOX_PATH_CROGL_INCLUDE) $(VBOX_PATH_CROGL_GENFILES) TEMPLATE_VBOXCROGLR3HOSTDLL_SDKS.darwin = DARWIN-OPENGL @@ -7023,6 +7153,8 @@ -current_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) \ -compatibility_version $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) TEMPLATE_VBOXCROGLR3HOSTDLL_LDFLAGS.linux = -Wl,--no-as-needed +TEMPLATE_VBOXCROGLR3HOSTDLL_LDFLAGS.bsdsunix = -Wl,--no-as-needed +TEMPLATE_VBOXCROGLR3HOSTDLL_LDFLAGS.freebsd = -Wl,--no-as-needed TEMPLATE_VBOXCROGLR3HOSTDLL_BLDDIRS = $(VBOX_PATH_CROGL_GENFILES)/ ifeq ($(KBUILD_TARGET),darwin) TEMPLATE_VBOXCROGLR3HOSTDLL_CFLAGS = $(TEMPLATE_VBOXR3NP_CFLAGS) -Wno-deprecated-declarations @@ -7056,6 +7188,7 @@ TEMPLATE_VBOXCROGLR3GUESTDLL_DEFS.linux = $(TEMPLATE_$(TEMPLATE_VBOXCROGLR3GUESTDLL_EXTENDS)_DEFS.linux) Linux=1 _GNU_SOURCE TEMPLATE_VBOXCROGLR3GUESTDLL_DEFS.solaris = $(TEMPLATE_$(TEMPLATE_VBOXCROGLR3GUESTDLL_EXTENDS)_DEFS.solaris) SunOS=1 _GNU_SOURCE #GLEXT_64_TYPES_DEFINED TEMPLATE_VBOXCROGLR3GUESTDLL_DEFS.darwin = $(TEMPLATE_$(TEMPLATE_VBOXCROGLR3GUESTDLL_EXTENDS)_DEFS.darwin) DARWIN=1 GL_GLEXT_LEGACY _GNU_SOURCE +TEMPLATE_VBOXCROGLR3GUESTDLL_DEFS.bsdsunix = $(TEMPLATE_$(TEMPLATE_VBOXCROGLR3GUESTDLL_EXTENDS)_DEFS.bsdsunix) BSDSUniX=1 _GNU_SOURCE TEMPLATE_VBOXCROGLR3GUESTDLL_DEFS.freebsd = $(TEMPLATE_$(TEMPLATE_VBOXCROGLR3GUESTDLL_EXTENDS)_DEFS.freebsd) FreeBSD=1 _GNU_SOURCE TEMPLATE_VBOXCROGLR3GUESTDLL_INCS = $(VBOX_PATH_CROGL_INCLUDE) $(VBOX_PATH_CROGL_GENFILES) $(TEMPLATE_$(TEMPLATE_VBOXCROGLR3GUESTDLL_EXTENDS)_INCS) TEMPLATE_VBOXCROGLR3GUESTDLL_SDKS.darwin = DARWIN-OPENGL $(TEMPLATE_$(TEMPLATE_VBOXCROGLR3GUESTDLL_EXTENDS)_SDKS) @@ -7303,7 +7436,7 @@ $(QUIET)$(MV) -f $@.tmp $@ if !defined(VBOX_OSE) && !defined(VBOX_NOINC_LICENSE_VER_KMK) - if1of ($(KBUILD_TARGET), freebsd linux netbsd openbsd solaris) + if1of ($(KBUILD_TARGET), bsdsunix freebsd linux netbsd openbsd solaris) # VBOX_LICENSE_VER is used in several Makefiles VBOX_LICENSE_VER_KMK = $(PATH_OUT)/license-version.kmk $(VBOX_LICENSE_VER_KMK): $(VBOX_BRAND_LICENSE_HTML) @@ -7384,7 +7517,7 @@ $(QUIET)$(CAT) $(VBOX_SVN_REV_KMK) endif -# only needed for VBoxGuest for Linux/FreeBSD guests +# only needed for VBoxGuest for Linux/FreeBSD/BSDSUniX guests VBOX_SVN_REV_HEADER = $(PATH_OUT)/revision-generated.h $(VBOX_SVN_REV_HEADER): $(VBOX_SVN_REV_KMK) $(call MSG_GENERATE,,$@)