Index: x11/nvidia-driver/Makefile =================================================================== --- x11/nvidia-driver/Makefile +++ x11/nvidia-driver/Makefile @@ -10,7 +10,7 @@ # slave ports instead (`x11/nvidia-driver-340' or `x11/nvidia-driver-304'). PORTNAME= nvidia-driver -DISTVERSION?= 346.96 +DISTVERSION?= 367.35 # Always try to set PORTREVISION as it can be overridden by the slave ports PORTREVISION?= 0 CATEGORIES= x11 @@ -29,7 +29,7 @@ ARCH_SUFX= x86${ARCH:S/i386//:S/amd/_/} USES= kmod uidfix -USE_XORG= xorg-server +USE_XORG= x11 xorg-server xext USE_GL= gl USE_LDCONFIG= yes @@ -57,11 +57,23 @@ . endif .endif -EXTRA_PATCHES= ${FILESDIR}/extra-patch-mk-nvidia.lib.mk \ - ${FILESDIR}/extra-patch-src-Makefile \ +.if ${NVVERSION} < 355.006 +EXTRA_PATCHES= ${FILESDIR}/extra-patch-src-Makefile \ ${FILESDIR}/extra-patch-src-nv-freebsd.h \ - ${FILESDIR}/extra-patch-src-nv-misc.h \ - ${FILESDIR}/extra-patch-x11-driver-Makefile + ${FILESDIR}/extra-patch-src-nv-misc.h +NVSRC= . +.else +EXTRA_PATCHES= ${FILESDIR}/extra-patch-src_nvidia_Makefile \ + ${FILESDIR}/extra-patch-src_nvidia_nv-freebsd.h \ + ${FILESDIR}/extra-patch-src_nvidia_nv-misc.h +NVSRC= nvidia +.endif +.if ${NVVERSION} >= 358.009 +# Initialize memory allocations to avoid spurious "lock re-initialization" +# errors. A little more detail can be found in bug 201340 starting around +# comment #50. +EXTRA_PATCHES+= ${FILESDIR}/extra-patch-src_nvidia-modeset_nvidia-modeset-freebsd.c +.endif OPTIONS_DEFINE= ACPI_PM LINUX WBINVD DOCS OPTIONS_DEFINE_i386= PAE @@ -94,39 +106,40 @@ post-patch: .SILENT # We should support -CURRENT: kill the check - ${REINPLACE_CMD} -e '24,26d' ${WRKSRC}/src/nv-freebsd.h + ${REINPLACE_CMD} -e '24,26d' ${WRKSRC}/src/${NVSRC}/nv-freebsd.h # Adjust Linux headers #include's after FreeBSD src SVN r246085 .if ${OSVERSION} > 1000027 ${REINPLACE_CMD} -E '/#include "machine\/\.\.\/linux(32)?\/linux.h"/ \ { x ; s/.*/#include "machine\/..\/..\/compat\/linux\/linux_ioctl.h"/ ; H ; x ; }' \ - ${WRKSRC}/src/nvidia_linux.c + ${WRKSRC}/src/${NVSRC}/nvidia_linux.c .endif # Adjust vm_object locking after FreeBSD src SVN r248084 .if ${OSVERSION} > 1000029 ${REINPLACE_CMD} -e '/#include / \ { x ; s/.*/#include / ; G ; }' \ - ${WRKSRC}/src/nv-freebsd.h + ${WRKSRC}/src/${NVSRC}/nv-freebsd.h ${REINPLACE_CMD} -E 's/(VM_OBJECT_)(UN)?(LOCK)/\1W\2\3/' \ - ${WRKSRC}/src/nvidia_subr.c + ${WRKSRC}/src/${NVSRC}/nvidia_subr.c .endif # Adjust kmem(9) calls after FreeBSD src SVN r254025 .if ${OSVERSION} > 1000040 && ${NVVERSION} < 331.067 ${REINPLACE_CMD} -e '/kmem_/s/kernel_map/kernel_arena/' \ - ${WRKSRC}/src/nvidia_subr.c + ${WRKSRC}/src/${NVSRC}/nvidia_subr.c .endif # Fix CTLFLAG_* values for SYSCTL_ADD_PROC() after FreeBSD src SVN r273377 .if ${OSVERSION} > 1100039 || ${OSVERSION} > 1001501 && ${OSVERSION} < 1100000 ${REINPLACE_CMD} -e '/SYSCTL_ADD_PROC/,/;/ \ s/^[[:blank:]]*CTLFLAG_RD/CTLTYPE_STRING |&/' \ - ${WRKSRC}/src/nvidia_sysctl.c + ${WRKSRC}/src/${NVSRC}/nvidia_sysctl.c .endif # Replace d_thread_t (compat shim to support FreeBSD 4) with `struct thread' ${REINPLACE_CMD} -e 's/d_thread_t/struct thread/' \ - ${WRKSRC}/src/nvidia_ctl.c ${WRKSRC}/src/nvidia_dev.c \ - ${WRKSRC}/src/nvidia_linux.c -# Fix stack buffer overflow in nvidia_sysctl_bus_type() - ${REINPLACE_CMD} -e 's/8 bus_type\[4\]/8 bus_type[8]/' \ - ${WRKSRC}/src/nvidia_sysctl.c + ${WRKSRC}/src/${NVSRC}/nvidia_ctl.c ${WRKSRC}/src/${NVSRC}/nvidia_dev.c \ + ${WRKSRC}/src/${NVSRC}/nvidia_linux.c +.if ${NVVERSION} >= 358.009 + ${REINPLACE_CMD} -e 's/d_thread_t/struct thread/' \ + ${WRKSRC}/src/nvidia-modeset/nvidia-modeset-freebsd.c +.endif # Respect WITHOUT_LINUX setting ${REINPLACE_CMD} -e 's/exists(\/.*/& \&\& !defined(WITHOUT_LINUX)/' \ ${WRKSRC}/lib/Makefile @@ -157,7 +170,7 @@ # and "smart" installation of conflicting files heuristics) ${REINPLACE_CMD} -e 's/afterinstall/&_dontexecute/' ${WRKSRC}/Makefile ${REINPLACE_CMD} -e 's/beforeinstall/&_dontexecute/' \ - ${WRKSRC}/lib/Makefile ${WRKSRC}/src/Makefile + ${WRKSRC}/lib/Makefile ${WRKSRC}/src/${NVSRC}/Makefile # /usr/share/nvidia path is hardcoded in libGL and nvidia-settings, but we # won't adhere to this stupidity and install nvidia-application-profiles-* # files as part of documentation @@ -165,26 +178,31 @@ ${REINPLACE_CMD} -e 's,/usr/share/nvidia,${STAGEDIR}${DOCSDIR},' \ ${WRKSRC}/lib/libGL/Makefile ${WRKSRC}/doc/Makefile .endif +# New cap_rights_t structure was introduced in FreeBSD r255219 (FreeBSD 10.0). +.if ${OSVERSION} < 1000053 && ${NVVERSION} >= 358.009 + ${REINPLACE_CMD} '//d ; /cap_rights_t rights/d ; s/cap_rights_init(&rights, CAP_IOCTL)/CAP_IOCTL/' \ + ${WRKSRC}/src/nvidia-modeset/nvidia-modeset-freebsd.c +.endif # Finally, process OPTIONS .if ${PORT_OPTIONS:MFREEBSD_AGP} ${REINPLACE_CMD} -E 's/undef (NV_SUPPORT_OS_AGP)/define \1/' \ - ${WRKSRC}/src/nv-freebsd.h + ${WRKSRC}/src/${NVSRC}/nv-freebsd.h .endif .if ${PORT_OPTIONS:MACPI_PM} ${REINPLACE_CMD} -E 's/undef (NV_SUPPORT_ACPI_PM)/define \1/' \ - ${WRKSRC}/src/nv-freebsd.h + ${WRKSRC}/src/${NVSRC}/nv-freebsd.h .endif .if ! ${PORT_OPTIONS:MLINUX} ${REINPLACE_CMD} -E 's/define (NV_SUPPORT_LINUX_COMPAT)/undef \1/' \ - ${WRKSRC}/src/nv-freebsd.h + ${WRKSRC}/src/${NVSRC}/nv-freebsd.h .endif .if ${PORT_OPTIONS:MPAE} ${REINPLACE_CMD} -E 's/undef (NV_SUPPORT_PAE)/define \1/' \ - ${WRKSRC}/src/nv-freebsd.h + ${WRKSRC}/src/${NVSRC}/nv-freebsd.h .endif .if ${PORT_OPTIONS:MWBINVD} ${REINPLACE_CMD} -E 's/undef (NV_USE_WBINVD)/define \1/' \ - ${WRKSRC}/src/nv-freebsd.h + ${WRKSRC}/src/${NVSRC}/nv-freebsd.h .endif # Conditionally install documentation (but you generally want it) .if ! ${PORT_OPTIONS:MDOCS} @@ -199,7 +217,7 @@ ${INSTALL_SCRIPT} ${WRKSRC}/obj/nvidia-bug-report.sh \ ${STAGEDIR}${PREFIX}/bin # pkg-plist is already overbloated, so use these hacks instead of PLIST_SUB's -.if ${NVVERSION} < 310.019 +.if ${NVVERSION} >= 304.128 && ${NVVERSION} < 310.019 || ${NVVERSION} >= 361.016 ${REINPLACE_CMD} -E '/libvdpau(_trace)?\.so/d' ${TMPPLIST} .endif .if ${NVVERSION} >= 310.019 @@ -212,6 +230,28 @@ ${REINPLACE_CMD} -E '/lib(nvidia-)?(EGL|eglcore|GLESv|glsi)/d' \ ${TMPPLIST} .endif +.if ${NVVERSION} < 352.009 + ${REINPLACE_CMD} -E '/(lib)?nvidia-(debugdump|smi|ml)/d' ${TMPPLIST} +.endif +.if ${NVVERSION} < 355.006 + ${REINPLACE_CMD} -E '/(libEGL_nvidia|GLdispatch|OpenGL)/d' ${TMPPLIST} +.else + ${REINPLACE_CMD} 's/libEGL\.so\.${PORTVERSION}/libEGL.so/' \ + ${TMPPLIST} +.endif +.if ${NVVERSION} < 358.009 + ${REINPLACE_CMD} '/nvidia-modeset.ko/d' ${TMPPLIST} +.else + ${REINPLACE_CMD} 's/nvidia$$/nvidia-modeset/ ; s/nvidia_/nvidia-modeset_/' \ + ${PKGMESSAGE} +.endif +.if ${NVVERSION} >= 361.028 + ${REINPLACE_CMD} -E '/(EGL_nvidia\.so|GLESv[12](_CM)?(\.so\.[0-9]+\.[0-9]+))$$/d' \ + ${TMPPLIST} +.else + ${REINPLACE_CMD} -E '/\/lib\/libGLESv[12](_CM)?(\.so)?(_nvidia.so(\.[0-9]|\.[0-9]+\.[0-9]+)?)?$$/d ; \ + /libEGL_nvidia\.so\.${PORTVERSION}/d' ${TMPPLIST} +.endif # Target below can be used instead of standard `makesum' to correctly # update distinfo (i.e., keeping other driver version entries intact) Index: x11/nvidia-driver/distinfo =================================================================== --- x11/nvidia-driver/distinfo +++ x11/nvidia-driver/distinfo @@ -1,7 +1,8 @@ -SHA256 (NVIDIA-FreeBSD-x86_64-346.96.tar.gz) = 89daaff29afe92d825ec8c00149a703b4eb234e4f16bbfb98673f077521bcff9 -SIZE (NVIDIA-FreeBSD-x86_64-346.96.tar.gz) = 58774970 -SHA256 (NVIDIA-FreeBSD-x86-346.96.tar.gz) = a27d7b79c053702bf6524b2c4725321fa557be18a585735e0b8122d884348c3e -SIZE (NVIDIA-FreeBSD-x86-346.96.tar.gz) = 58010757 +TIMESTAMP = 1468687296 +SHA256 (NVIDIA-FreeBSD-x86_64-367.35.tar.gz) = b33057ce23ce1ae44ddd246a7d2d9e2b0aa2ed5a289d8a83e849249de81a1035 +SIZE (NVIDIA-FreeBSD-x86_64-367.35.tar.gz) = 59393955 +SHA256 (NVIDIA-FreeBSD-x86-367.35.tar.gz) = 2edf78801213dea72ddd6c40acd860893623224166ad522fd47e202443cb6d50 +SIZE (NVIDIA-FreeBSD-x86-367.35.tar.gz) = 62636433 SHA256 (NVIDIA-FreeBSD-x86_64-340.96.tar.gz) = b67962a4433dd1fa86cde038bb244a547f5ed6c242febc348d618886b7715d09 SIZE (NVIDIA-FreeBSD-x86_64-340.96.tar.gz) = 60536275 SHA256 (NVIDIA-FreeBSD-x86-340.96.tar.gz) = dda243ed9b36e29162b1c97b987b9ca82ef7fcff4635ac78443fdb06739ec22e @@ -10,5 +11,3 @@ SIZE (NVIDIA-FreeBSD-x86_64-304.131.tar.gz) = 35812363 SHA256 (NVIDIA-FreeBSD-x86-304.131.tar.gz) = d9d350de797d0db58ed82d73569766d8e914b0410f0f9fc78aac098fdcd31027 SIZE (NVIDIA-FreeBSD-x86-304.131.tar.gz) = 34782985 -SHA256 (NVIDIA-FreeBSD-x86-173.14.39.tar.gz) = 63a922ce4c5b676b4cb1ace98094dace4cc5408f2553e183df7b2127777a238b -SIZE (NVIDIA-FreeBSD-x86-173.14.39.tar.gz) = 20038266 Index: x11/nvidia-driver/files/extra-patch-mk-nvidia.lib.mk =================================================================== --- x11/nvidia-driver/files/extra-patch-mk-nvidia.lib.mk +++ /dev/null @@ -1,13 +0,0 @@ ---- mk/nvidia.lib.mk.orig 2013-08-16 10:53:30.000000000 +0200 -+++ mk/nvidia.lib.mk 2014-01-27 16:55:39.000000000 +0100 -@@ -46,8 +46,8 @@ - .endif - .endif - .if defined(AUXLINK_TGT) -- @rm -f ${AUXLINK_LINK} -- @ln -fs ${AUXLINK_TGT} ${AUXLINK_LINK} -+ @rm -f ${DESTDIR}${AUXLINK_LINK} -+ @ln -fs ${AUXLINK_TGT} ${DESTDIR}${AUXLINK_LINK} - .endif - .if defined(STATICLIB_NAME) - @rm -f ${DESTDIR}${LIBDIR}/${STATICLIB_NAME} Index: x11/nvidia-driver/files/extra-patch-src_nvidia-modeset_nvidia-modeset-freebsd.c =================================================================== --- /dev/null +++ x11/nvidia-driver/files/extra-patch-src_nvidia-modeset_nvidia-modeset-freebsd.c @@ -0,0 +1,20 @@ +--- src/nvidia-modeset/nvidia-modeset-freebsd.c.orig 2016-05-28 15:44:11 UTC ++++ src/nvidia-modeset/nvidia-modeset-freebsd.c +@@ -245,7 +245,7 @@ struct nvkms_ref_ptr { + + struct nvkms_ref_ptr* NVKMS_API_CALL nvkms_alloc_ref_ptr(void *ptr) + { +- struct nvkms_ref_ptr *ref_ptr = nvkms_alloc(sizeof(*ref_ptr), NV_FALSE); ++ struct nvkms_ref_ptr *ref_ptr = nvkms_alloc(sizeof(*ref_ptr), NV_TRUE); + if (ref_ptr) { + mtx_init(&ref_ptr->lock, "nvkms-ref-ptr-lock", NULL, MTX_SPIN); + // The ref_ptr owner counts as a reference on the ref_ptr itself. +@@ -792,7 +792,7 @@ static int nvkms_open( + nvkms_module.client_counter += 1; + sx_xunlock(&nvkms_module.lock); + +- popen = nvkms_alloc(sizeof(*popen), NV_FALSE); ++ popen = nvkms_alloc(sizeof(*popen), NV_TRUE); + if (popen == NULL) { + return ENOMEM; + } Index: x11/nvidia-driver/files/extra-patch-src_nvidia_Makefile =================================================================== --- /dev/null +++ x11/nvidia-driver/files/extra-patch-src_nvidia_Makefile @@ -0,0 +1,18 @@ +--- src/nvidia/Makefile.orig 2015-08-26 22:35:13 UTC ++++ src/nvidia/Makefile +@@ -26,6 +26,15 @@ NO_OBJ= true + stdarg.h: + @ln -s machine/stdarg.h stdarg.h + ++SRCS+= opt_global.h ++.if ${MACHINE_ARCH} == "i386" && !defined(KERNBUILDDIR) ++PAE!= sed -n '/define NV_SUPPORT_PAE/p' nv-freebsd.h ++.if !empty(PAE) ++opt_global.h: ++ echo "#define PAE 1" > ${.TARGET} ++.endif ++.endif ++ + *.c: stdarg.h + + beforeinstall: ${KMOD}.ko Index: x11/nvidia-driver/files/extra-patch-src_nvidia_nv-freebsd.h =================================================================== --- /dev/null +++ x11/nvidia-driver/files/extra-patch-src_nvidia_nv-freebsd.h @@ -0,0 +1,14 @@ +--- src/nvidia/nv-freebsd.h.orig 2015-10-30 22:40:02 UTC ++++ src/nvidia/nv-freebsd.h +@@ -144,6 +144,11 @@ MALLOC_DECLARE(M_NVIDIA); + #endif + + /* ++ * Enable/Disable support for PAE on i386. ++ */ ++#undef NV_SUPPORT_PAE ++ ++/* + * Enable/Disable support for ACPI Power Management. + */ + Index: x11/nvidia-driver/files/extra-patch-src_nvidia_nv-misc.h =================================================================== --- /dev/null +++ x11/nvidia-driver/files/extra-patch-src_nvidia_nv-misc.h @@ -0,0 +1,11 @@ +--- src/nvidia/nv-misc.h.orig 2015-10-30 22:24:29 UTC ++++ src/nvidia/nv-misc.h +@@ -11,6 +11,8 @@ + #ifndef _NV_MISC_H_ + #define _NV_MISC_H_ + ++#include "opt_global.h" ++ + #include "nvtypes.h" + #include "rmretval.h" + Index: x11/nvidia-driver/files/patch-mk_nvidia.lib.mk =================================================================== --- /dev/null +++ x11/nvidia-driver/files/patch-mk_nvidia.lib.mk @@ -0,0 +1,13 @@ +--- mk/nvidia.lib.mk.orig 2015-08-24 03:56:22 UTC ++++ mk/nvidia.lib.mk +@@ -46,8 +46,8 @@ install: ${EXTRADEPS} + .endif + .endif + .if defined(AUXLINK_TGT) +- @rm -f ${AUXLINK_LINK} +- @ln -fs ${AUXLINK_TGT} ${AUXLINK_LINK} ++ @rm -f ${DESTDIR}${AUXLINK_LINK} ++ @ln -fs ${AUXLINK_TGT} ${DESTDIR}${AUXLINK_LINK} + .endif + .if defined(STATICLIB_NAME) + @rm -f ${DESTDIR}${LIBDIR}/${STATICLIB_NAME} Index: x11/nvidia-driver/files/patch-x11_driver_Makefile =================================================================== --- /dev/null +++ x11/nvidia-driver/files/patch-x11_driver_Makefile @@ -0,0 +1,11 @@ +--- x11/driver/Makefile.orig 2015-08-24 03:56:22 UTC ++++ x11/driver/Makefile +@@ -5,7 +5,7 @@ LOCALBASE= /usr/local + .endif + + DRIVERS= nvidia_drv.o nvidia_drv.so +-.if exists(${LOCALBASE}/lib/xorg/modules/drivers) ++.if exists(${DESTDIR}${LOCALBASE}/lib/xorg/modules/drivers) + DRIVERDIR= ${LOCALBASE}/lib/xorg/modules/drivers + .else + DRIVERDIR= ${LOCALBASE}/lib/modules/drivers Index: x11/nvidia-driver/pkg-plist =================================================================== --- x11/nvidia-driver/pkg-plist +++ x11/nvidia-driver/pkg-plist @@ -1,4 +1,6 @@ bin/nvidia-bug-report.sh +bin/nvidia-debugdump +bin/nvidia-smi lib/.nvidia/libGL.so lib/.nvidia/libGL.so.1 lib/.nvidia/libEGL.so @@ -19,22 +21,40 @@ lib/libnvidia-glcore.so.1 lib/libnvidia-glsi.so lib/libnvidia-glsi.so.1 +lib/libnvidia-ml.so +lib/libnvidia-ml.so.1 lib/libnvidia-tls.so lib/libnvidia-tls.so.1 lib/libvdpau_nvidia.so lib/vdpau/libvdpau_nvidia.so.1 +man/man1/nvidia-smi.1.gz %%MODULESDIR%%/drivers/nvidia_drv.so %%MODULESDIR%%/extensions/.nvidia/libglx.so %%MODULESDIR%%/extensions/.nvidia/libglx.so.1 /%%KMODDIR%%/nvidia.ko +/%%KMODDIR%%/nvidia-modeset.ko %%LINUX%%%%LINUXBASE%%/usr/lib/libEGL.so.%%SHLIB_VERSION%% %%LINUX%%%%LINUXBASE%%/usr/lib/libEGL.so.1 +%%LINUX%%%%LINUXBASE%%/usr/lib/libEGL_nvidia.so.%%SHLIB_VERSION%% %%LINUX%%%%LINUXBASE%%/usr/lib/libGL.so.%%SHLIB_VERSION%% %%LINUX%%%%LINUXBASE%%/usr/lib/libGL.so.1 +%%LINUX%%%%LINUXBASE%%/usr/lib/libEGL_nvidia.so +%%LINUX%%%%LINUXBASE%%/usr/lib/libEGL_nvidia.so.0 %%LINUX%%%%LINUXBASE%%/usr/lib/libGLESv1_CM.so.%%SHLIB_VERSION%% %%LINUX%%%%LINUXBASE%%/usr/lib/libGLESv1_CM.so.1 +%%LINUX%%%%LINUXBASE%%/usr/lib/libGLESv1_CM.so +%%LINUX%%%%LINUXBASE%%/usr/lib/libGLESv1_CM_nvidia.so.1 +%%LINUX%%%%LINUXBASE%%/usr/lib/libGLESv1_CM_nvidia.so.%%SHLIB_VERSION%% %%LINUX%%%%LINUXBASE%%/usr/lib/libGLESv2.so.%%SHLIB_VERSION%% %%LINUX%%%%LINUXBASE%%/usr/lib/libGLESv2.so.2 +%%LINUX%%%%LINUXBASE%%/usr/lib/libGLESv2.so +%%LINUX%%%%LINUXBASE%%/usr/lib/libGLESv2_nvidia.so.2 +%%LINUX%%%%LINUXBASE%%/usr/lib/libGLESv2_nvidia.so.%%SHLIB_VERSION%% +%%LINUX%%%%LINUXBASE%%/usr/lib/libGLdispatch.so +%%LINUX%%%%LINUXBASE%%/usr/lib/libGLdispatch.so.0 +%%LINUX%%%%LINUXBASE%%/usr/lib/libOpenGL.so +%%LINUX%%%%LINUXBASE%%/usr/lib/libOpenGL.so.0 +%%LINUX%%%%LINUXBASE%%/usr/lib/libnvidia-glcore.so.%%SHLIB_VERSION%% %%LINUX%%%%LINUXBASE%%/usr/lib/libcuda.so.%%SHLIB_VERSION%% %%LINUX%%%%LINUXBASE%%/usr/lib/libcuda.so.1 %%LINUX%%%%LINUXBASE%%/usr/lib/libnvidia-eglcore.so.%%SHLIB_VERSION%% @@ -51,3 +71,8 @@ %%LINUX%%%%LINUXBASE%%/usr/lib/vdpau/libvdpau_trace.so.1 %%LINUX%%@exec %%LINUXBASE%%/sbin/ldconfig -r %%LINUXBASE%% %%LINUX%%@unexec %%LINUXBASE%%/sbin/ldconfig -r %%LINUXBASE%% +%%LINUX%%@dir %%LINUXBASE%%/usr/lib/vdpau +%%LINUX%%@dir %%LINUXBASE%%/usr/lib +%%LINUX%%@dir %%LINUXBASE%%/usr +%%LINUX%%@dir %%LINUXBASE%% +%%LINUX%%@dir /compat