From owner-svn-ports-head@FreeBSD.ORG Wed May 15 21:22:23 2013 Return-Path: Delivered-To: svn-ports-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 5EE8E583; Wed, 15 May 2013 21:22:23 +0000 (UTC) (envelope-from decke@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 419A3C23; Wed, 15 May 2013 21:22:23 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r4FLMN3k010825; Wed, 15 May 2013 21:22:23 GMT (envelope-from decke@svn.freebsd.org) Received: (from decke@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r4FLMMLY010815; Wed, 15 May 2013 21:22:22 GMT (envelope-from decke@svn.freebsd.org) Message-Id: <201305152122.r4FLMMLY010815@svn.freebsd.org> From: Bernhard Froehlich Date: Wed, 15 May 2013 21:22:22 +0000 (UTC) To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r318265 - in head/emulators/virtualbox-ose-additions: . files X-SVN-Group: ports-head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-ports-head@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the ports tree for head List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 May 2013 21:22:23 -0000 Author: decke Date: Wed May 15 21:22:21 2013 New Revision: 318265 URL: http://svnweb.freebsd.org/changeset/ports/318265 Log: - Add proper 3D acceleration support for FreeBSD guests Submitted by: John Clark Added: head/emulators/virtualbox-ose-additions/files/patch-src-VBox-Additions-common-crOpenGL-Makefile.kmk (contents, props changed) head/emulators/virtualbox-ose-additions/files/patch-src-VBox-Additions-common-crOpenGL-fakedri_drv.c (contents, props changed) Modified: head/emulators/virtualbox-ose-additions/Makefile head/emulators/virtualbox-ose-additions/files/vboxguest.in (contents, props changed) head/emulators/virtualbox-ose-additions/pkg-plist (contents, props changed) Modified: head/emulators/virtualbox-ose-additions/Makefile ============================================================================== --- head/emulators/virtualbox-ose-additions/Makefile Wed May 15 21:18:01 2013 (r318264) +++ head/emulators/virtualbox-ose-additions/Makefile Wed May 15 21:22:21 2013 (r318265) @@ -3,6 +3,7 @@ PORTNAME= virtualbox-ose DISTVERSION= 4.2.12 +PORTREVISION= 1 CATEGORIES= emulators kld MASTER_SITES= http://download.virtualbox.org/virtualbox/${DISTVERSION}/ \ http://tmp.chruetertee.ch/ \ @@ -31,8 +32,7 @@ MAKE_JOBS_UNSAFE= yes HAS_CONFIGURE= yes CONFIGURE_ARGS+=--with-gcc="${CC}" --with-g++="${CXX}" --nofatal \ --disable-xpcom --disable-sdl-ttf --disable-pulse \ - --disable-alsa --disable-dbus --disable-python \ - --build-headless + --disable-alsa --disable-dbus --disable-python CONFLICTS= bcc-[0-9]* CONFLICTS_INSTALL= virtualbox-ose-additions-devel-[3,4]* virtualbox-ose-[3,4]* virtualbox-ose-devel-[3,4]* virtualbox-ose-legacy-[3,4]* @@ -70,9 +70,12 @@ PLIST_SUB+= X11="@comment " .endif .if ${PORT_OPTIONS:MOPENGL} +USE_XORG+= xcomposite xdamage xext xfixes USE_GL= gl +PLIST_SUB+= OPENGL="" .else CONFIGURE_ARGS+=--disable-opengl +PLIST_SUB+= OPENGL="@comment " .endif .if ${ARCH} == i386 @@ -122,6 +125,9 @@ do-build: do-install: ${MKDIR} ${KMODDIR} ${INSTALL_KLD} ${VBOX_BIN}/src/vboxguest/vboxguest.ko ${KMODDIR} +.if ${PORT_OPTIONS:MX11} + ${INSTALL_KLD} ${VBOX_BIN}/vboxvideo.ko ${KMODDIR} +.endif @/usr/sbin/kldxref ${KMODDIR} ${MKDIR} ${PREFIX}/etc/rc.d/ @@ -154,6 +160,20 @@ do-install: ${INSTALL_DATA} ${VBOX_BIN}/vboxmouse_drv_${XSERVER_ABI}.so ${INPUTDIR}/vboxmouse_drv.so .endif +.if ${PORT_OPTIONS:MOPENGL} + ${MKDIR} ${PREFIX}/lib + ${INSTALL_DATA} ${VBOX_BIN}/VBoxOGL.so ${PREFIX}/lib/ + ${INSTALL_DATA} ${VBOX_BIN}/VBoxOGLarrayspu.so ${PREFIX}/lib/ + ${INSTALL_DATA} ${VBOX_BIN}/VBoxOGLcrutil.so ${PREFIX}/lib/ + ${INSTALL_DATA} ${VBOX_BIN}/VBoxOGLerrorspu.so ${PREFIX}/lib/ + ${INSTALL_DATA} ${VBOX_BIN}/VBoxOGLfeedbackspu.so ${PREFIX}/lib/ + ${INSTALL_DATA} ${VBOX_BIN}/VBoxOGLpackspu.so ${PREFIX}/lib/ + ${INSTALL_DATA} ${VBOX_BIN}/VBoxOGLpassthroughspu.so ${PREFIX}/lib/ + + ${MKDIR} ${PREFIX}/lib/dri + ${LN} -sf ${PREFIX}/lib/VBoxOGL.so ${PREFIX}/lib/dri/vboxvideo_dri.so +.endif + post-install: @${CAT} ${PKGMESSAGE} Added: head/emulators/virtualbox-ose-additions/files/patch-src-VBox-Additions-common-crOpenGL-Makefile.kmk ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/emulators/virtualbox-ose-additions/files/patch-src-VBox-Additions-common-crOpenGL-Makefile.kmk Wed May 15 21:22:21 2013 (r318265) @@ -0,0 +1,40 @@ +--- src/VBox/Additions/common/crOpenGL/Makefile.kmk.orig 2013-04-12 12:35:06.000000000 +0200 ++++ src/VBox/Additions/common/crOpenGL/Makefile.kmk 2013-05-02 23:33:26.523212251 +0200 +@@ -42,7 +42,7 @@ + + if1of ($(KBUILD_TARGET), linux solaris freebsd) + #VBoxOGL_DRI = 1 +- ifn1of ($(KBUILD_TARGET),solaris freebsd) # No DRI on Solaris yet ++ ifn1of ($(KBUILD_TARGET),solaris) # No DRI on Solaris yet + VBoxOGL_FAKEDRI = 1 + endif + +@@ -209,8 +209,13 @@ + $(PATH_STAGE_LIB)/libXfixes.so \ + $(PATH_STAGE_LIB)/libXext.so + ifdef VBoxOGL_FAKEDRI +- VBoxOGL_LIBS += \ ++ ifeq ($(KBUILD_TARGET), freebsd) ++ VBoxOGL_LIBS += \ ++ elf ++ else ++ VBoxOGL_LIBS += \ + dl ++ endif + endif + endif + ifdef VBOX_WITH_CRHGSMI +@@ -368,6 +373,13 @@ + | $$(dir $$@) + $(call MSG_GENERATE,python,$@,$<) + $(QUIET)$(call VBOX_CROGL_PYTHON_ENV,$(VBOX_PATH_CROGL_PYTHON_INCLUDE),$@) $(VBOX_BLD_PYTHON) $< $(VBOX_PATH_CROGL_GLAPI) ++ else ifeq ($(KBUILD_TARGET),freebsd) ++$(VBOX_PATH_CROGL_GENFILES)/freebsd_exports.c: \ ++ $(PATH_SUB_CURRENT)/FreeBSD_exports.py \ ++ $(VBOX_CROGL_API_FILES) $(PATH_SUB_CURRENT)/entrypoints.py \ ++ | $$(dir $$@) ++ $(call MSG_GENERATE,python,$@,$<) ++ $(QUIET)$(call VBOX_CROGL_PYTHON_ENV,$(VBOX_PATH_CROGL_PYTHON_INCLUDE),$@) $(VBOX_BLD_PYTHON) $< $(VBOX_PATH_CROGL_GLAPI) + else + $(VBOX_PATH_CROGL_GENFILES)/linux_exports.c: \ + $(PATH_SUB_CURRENT)/Linux_exports.py \ Added: head/emulators/virtualbox-ose-additions/files/patch-src-VBox-Additions-common-crOpenGL-fakedri_drv.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/emulators/virtualbox-ose-additions/files/patch-src-VBox-Additions-common-crOpenGL-fakedri_drv.c Wed May 15 21:22:21 2013 (r318265) @@ -0,0 +1,120 @@ +--- src/VBox/Additions/common/crOpenGL/fakedri_drv.c.orig 2012-12-19 13:25:04.000000000 -0500 ++++ src/VBox/Additions/common/crOpenGL/fakedri_drv.c 2013-01-27 17:57:04.000000000 -0500 +@@ -29,6 +29,15 @@ + #include + #include + #include ++ ++#include ++#if defined(BSD) ++#include ++#include ++#include ++#include ++#endif ++ + /** X server message type definitions. */ + typedef enum { + X_PROBED, /* Value was probed */ +@@ -50,11 +59,11 @@ + + //@todo this could be different... + #ifdef RT_ARCH_AMD64 +-# define DRI_DEFAULT_DRIVER_DIR "/usr/lib64/dri:/usr/lib/dri:/usr/lib/x86_64-linux-gnu/dri" +-# define DRI_XORG_DRV_DIR "/usr/lib/xorg/modules/drivers/" ++# define DRI_DEFAULT_DRIVER_DIR "/usr/local/lib/dri" ++# define DRI_XORG_DRV_DIR "/usr/local/lib/xorg/modules/drivers/" + #else +-# define DRI_DEFAULT_DRIVER_DIR "/usr/lib/dri:/usr/lib/i386-linux-gnu/dri" +-# define DRI_XORG_DRV_DIR "/usr/lib/xorg/modules/drivers/" ++# define DRI_DEFAULT_DRIVER_DIR "/usr/local/lib/dri" ++# define DRI_XORG_DRV_DIR "/usr/local/lib/xorg/modules/drivers/" + #endif + + #ifdef DEBUG_DRI_CALLS +@@ -209,6 +218,85 @@ + + #define FAKEDRI_JMP64_PATCH_SIZE 13 + ++#if defined(BSD) ++/* Provide basic dladdr1 flags */ ++enum { ++ RTLD_DL_SYMENT = 1 ++}; ++ ++/* Provide a minimal local version of dladdr1 */ ++static int ++dladdr1(const void *address, Dl_info *dlip, void **info, int flags) ++{ ++ static DRI_ELFSYM desym; ++ GElf_Sym sym; ++ GElf_Shdr shdr; ++ Elf *elf; ++ Elf_Scn *scn; ++ Elf_Data *data; ++ int ret, fd, count, i; ++ ++ /* Initialize variables */ ++ fd = -1; ++ elf = NULL; ++ ++ /* Call dladdr first */ ++ ret = dladdr(address, dlip); ++ if (ret == 0) goto err_exit; ++ ++ /* Check for supported flags */ ++ if (flags != RTLD_DL_SYMENT) return 1; ++ ++ /* Open shared library's ELF file */ ++ if (elf_version(EV_CURRENT) == EV_NONE) goto err_exit; ++ fd = open(dlip->dli_fname, O_RDONLY); ++ if (fd < 0) goto err_exit; ++ elf = elf_begin(fd, ELF_C_READ, NULL); ++ if (elf == NULL) goto err_exit; ++ ++ /* Find the '.dynsym' section */ ++ scn = elf_nextscn(elf, NULL); ++ while (scn != NULL) { ++ if (gelf_getshdr(scn, &shdr) == NULL) goto err_exit; ++ if (shdr.sh_type == SHT_DYNSYM) break; ++ scn = elf_nextscn(elf, scn); ++ } ++ if (scn == NULL) goto err_exit; ++ ++ /* Search for the requested symbol by name and offset */ ++ data = elf_getdata(scn, NULL); ++ count = shdr.sh_size / shdr.sh_entsize; ++ for (i = 0; i < count; i++) { ++ gelf_getsym(data, i, &sym); ++ if ((strcmp(dlip->dli_sname, ++ elf_strptr(elf, shdr.sh_link, sym.st_name)) == 0) && ++ (sym.st_value == (dlip->dli_saddr - dlip->dli_fbase))) { ++ break; ++ } ++ } ++ ++ /* Close ELF file */ ++ elf_end(elf); ++ close(fd); ++ ++ /* Return symbol entry in native format */ ++ desym.st_name = sym.st_name; ++ desym.st_info = sym.st_info; ++ desym.st_other = sym.st_other; ++ desym.st_shndx = sym.st_shndx; ++ desym.st_value = sym.st_value; ++ desym.st_size = sym.st_size; ++ *info = &desym; ++ return 1; ++ ++ /* Error handler */ ++err_exit: ++ if (elf != NULL) elf_end(elf); ++ if (fd >= 0) close(fd); ++ return 0; ++} ++#endif ++ + static void + vboxPatchMesaExport(const char* psFuncName, const void *pStart, const void *pEnd) + { Modified: head/emulators/virtualbox-ose-additions/files/vboxguest.in ============================================================================== --- head/emulators/virtualbox-ose-additions/files/vboxguest.in Wed May 15 21:18:01 2013 (r318264) +++ head/emulators/virtualbox-ose-additions/files/vboxguest.in Wed May 15 21:22:21 2013 (r318265) @@ -32,10 +32,26 @@ vboxguest_start() return 1 fi fi + if ! kldstat -q -m vgapci/vboxvideo; + then + if ! kldload vboxvideo > /dev/null 2>&1; + then + warn "Can't load vboxvideo module." + return 1 + fi + fi } vboxguest_stop() { + if kldstat -q -m vgapci/vboxvideo; + then + if ! kldunload vboxvideo > /dev/null 2>&1; + then + warn "Can't unload vboxvideo module." + return 1 + fi + fi if kldstat -q -m pci/vboxguest; then if ! kldunload vboxguest > /dev/null 2>&1; Modified: head/emulators/virtualbox-ose-additions/pkg-plist ============================================================================== --- head/emulators/virtualbox-ose-additions/pkg-plist Wed May 15 21:18:01 2013 (r318264) +++ head/emulators/virtualbox-ose-additions/pkg-plist Wed May 15 21:22:21 2013 (r318265) @@ -4,6 +4,14 @@ %%X11%%etc/xdg/autostart/vboxclient.desktop sbin/VBoxControl sbin/VBoxService +%%OPENGL%%lib/VBoxOGL.so +%%OPENGL%%lib/VBoxOGLarrayspu.so +%%OPENGL%%lib/VBoxOGLcrutil.so +%%OPENGL%%lib/VBoxOGLerrorspu.so +%%OPENGL%%lib/VBoxOGLfeedbackspu.so +%%OPENGL%%lib/VBoxOGLpackspu.so +%%OPENGL%%lib/VBoxOGLpassthroughspu.so +%%OPENGL%%lib/dri/vboxvideo_dri.so %%X11%%share/autostart/vboxclient.desktop %%X11%%lib/xorg/modules/drivers/vboxvideo_drv.so %%X11%%lib/xorg/modules/input/vboxmouse_drv.so @@ -12,8 +20,10 @@ sbin/VBoxService %%X11%%@dirrmtry lib/xorg/modules/input %%X11%%@dirrmtry lib/xorg/modules %%X11%%@dirrmtry lib/xorg +%%OPENGL%%@dirrmtry lib/dri %%X11%%@dirrmtry lib @cwd / %%KMODDIR%%/vboxguest.ko +%%KMODDIR%%/vboxvideo.ko @exec /usr/sbin/kldxref /%%KMODDIR%% @unexec /usr/sbin/kldxref /%%KMODDIR%%