diff --git a/x11/nvidia-driver/Makefile b/x11/nvidia-driver/Makefile index d95c30595ade..daa727149404 100644 --- a/x11/nvidia-driver/Makefile +++ b/x11/nvidia-driver/Makefile @@ -1,291 +1,333 @@ # Created by: Stijn Hoop # # For those wondering why this port is not under `x11-drivers' category, # have a look at https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=121930. # # Starting with version 1.0-7667, NVidia has dropped support for numerous # "legacy" GPUs. Consult NVidia README (the Appendix) to find out whether # you need to use legacy driver version and install one of corresponding # slave ports instead (`x11/nvidia-driver-390', `x11/nvidia-driver-340', # or `x11/nvidia-driver-304'). # # To simplify testing of new feature branches and beta driver versions, # the port aims to support building against arbitrary DISTVERSION, i.e. # ``make DISTVERSION=xxx.yy.zz -DNO_CHECKSUM'' should typically work. -PORTNAME= nvidia-driver +PORTNAME?= nvidia-driver DISTVERSION?= 460.80 # Always try to set PORTREVISION as it can be overridden by the slave ports PORTREVISION?= 0 CATEGORIES= x11 MASTER_SITES= NVIDIA/XFree86/FreeBSD-${ARCH_SUFX}/${DISTVERSION} DISTNAME= NVIDIA-FreeBSD-${ARCH_SUFX}-${DISTVERSION} DISTFILES= ${DISTNAME}${EXTRACT_SUFX} -MAINTAINER= danfe@FreeBSD.org -COMMENT= NVidia graphics card binary drivers for hardware OpenGL rendering +MAINTAINER?= danfe@FreeBSD.org +COMMENT?= NVidia graphics card binary drivers for hardware OpenGL rendering LICENSE_FILE= ${WRKSRC}/doc/license.txt .include "${.CURDIR}/../nvidia-driver/Makefile.common" # Pull GNU sed(1) for "binary" patching of obj/libglvnd/libEGL.so.1 and # obj/libEGL_nvidia.so.0 (see below) .if ${NVVERSION} >= 410.057 PATCH_DEPENDS= gsed:textproc/gsed .endif USES= kmod uidfix xorg USE_XORG= x11 xorg-server xext USE_LDCONFIG= yes GLVND_JSON_PATH= ${PREFIX}/share/glvnd/egl_vendor.d WAYLAND_JSON_PATH= ${PREFIX}/share/egl/egl_external_platform.d MAKE_ENV= DEBUG_FLAGS=${DEBUG_FLAGS} \ EGL_GLVND_JSON_PATH=${STAGEDIR}${GLVND_JSON_PATH} \ EGL_WAYLAND_JSON_PATH=${STAGEDIR}${WAYLAND_JSON_PATH} -SUB_FILES= pkg-message nvidia.conf +SUB_FILES= pkg-message +.if !defined(LIBGLDIR) +SUB_FILES+= nvidia.conf +.endif .if ${NVVERSION} < 410.057 SUB_FILES+= pkg-deinstall pkg-install .endif SUB_PATCHES= extra-patch-src-Makefile \ extra-patch-src-nv-freebsd.h \ extra-patch-src-nv-misc.h \ extra-patch-src-nvidia_dev.c \ extra-patch-src-nvidia_pci.c DOCSDIR= ${PREFIX}/share/doc/NVIDIA_GLX-1.0 MODULESDIR= lib/xorg/modules +EXTENSIONSDIR?= ${MODULESDIR}/extensions/.nvidia PORTDOCS= * .if ${NVVERSION} >= 331.013 SUB_LIST+= NVGL="" .else SUB_LIST+= NVGL="\# " .endif .if ${NVVERSION} < 355.006 NVSRC= . .else NVSRC= nvidia .endif .if ${NVVERSION} < 460.039 . if ${NVVERSION} >= 358.009 EXTRA_PATCHES+= ${FILESDIR}/extra-patch-src_nvidia-modeset_nvidia-modeset-freebsd.c . endif SUB_PATCHES+= extra-patch-src-nvidia_ctl.c \ extra-patch-src-nvidia_linux.c .else EXTRA_PATCHES+= ${FILESDIR}/460-patch-lib-libGLX_nvidia-Makefile \ ${FILESDIR}/460-patch-src-nvidia-nvidia_ctl.c \ ${FILESDIR}/460-patch-src-nvidia-nvidia_linux.c \ ${FILESDIR}/460-patch-src_nvidia-modeset_nvidia-modeset-freebsd.c .endif OPTIONS_DEFINE= ACPI_PM LINUX WBINVD DOCS OPTIONS_DEFINE_i386= PAE OPTIONS_DEFAULT= LINUX ACPI_PM_DESC= ACPI Power Management support LINUX_DESC= Linux compatibility support PAE_DESC= Physical Address Extensions support WBINVD_DESC= Flush CPU caches directly with WBINVD .if ${NVVERSION} < 310.014 OPTIONS_DEFINE+= FREEBSD_AGP FREEBSD_AGP_DESC= Use FreeBSD AGP GART driver .endif PLIST_SUB+= MODULESDIR=${MODULESDIR} +.if ${NVVERSION} < 410.057 +PLIST_SUB+= EXTENSIONSDIR=${EXTENSIONSDIR} +.else +PLIST_SUB+= EXTENSIONSDIR="@comment " +.endif +.if defined(LIBGLDIR) +PLIST_SUB+= LIBGLDIR=${LIBGLDIR} LIBGLMAP="@comment " +.else +PLIST_SUB+= LIBGLDIR="@comment " LIBGLMAP="" +.endif + +.if ${PORTNAME} != nvidia-secondary-driver +CONFLICTS_INSTALL+= nvidia-secondary-driver +.endif .include pre-patch: .for p in ${SUB_PATCHES} @${SED} 's/%%NVSRC%%/${NVSRC}/g' ${PATCHDIR}/${p}.in > ${WRKDIR}/${p} .endfor .for p in ${SUB_PATCHES} EXTRA_PATCHES+= ${WRKDIR}/${p} .endfor post-patch: .SILENT # We should support -CURRENT: kill the check (first #if __FreeBSD_version) linenum=$$(${SED} -ne '/^#if __FreeBSD_version/ { = ; q ; }' \ ${WRKSRC}/src/${NVSRC}/nv-freebsd.h) ; ${REINPLACE_CMD} \ -e "$$linenum,+2d" ${WRKSRC}/src/${NVSRC}/nv-freebsd.h # Adjust Linux headers #include's after FreeBSD src r246085 ${REINPLACE_CMD} -E '/#include "machine\/\.\.\/linux(32)?\/linux.h"/ \ { x ; s/.*/#include "machine\/..\/..\/compat\/linux\/linux_ioctl.h"/ ; H ; x ; }' \ ${WRKSRC}/src/${NVSRC}/nvidia_linux.c # Fix bogus memset() call ${REINPLACE_CMD} -e '/memset/s/sizeof(ci/sizeof(*ci/' \ ${WRKSRC}/src/${NVSRC}/nvidia_subr.c # Chase `sys/capability.h' rename to `sys/capsicum.h' in FreeBSD src r263232 ${REINPLACE_CMD} -e 's:sys/capability\.h:sys/capsicum.h:' \ ${WRKSRC}/src/${NVSRC}/nv-freebsd.h .if ${NVVERSION} >= 358.009 ${REINPLACE_CMD} -e 's:sys/capability\.h:sys/capsicum.h:' \ ${WRKSRC}/src/nvidia-modeset/nvidia-modeset-freebsd.c .endif # KPI of kmem_alloc_contig(),kmem_free() changed in FreeBSD src r338143,r338318 .if ${OSVERSION} >= 1200079 ${REINPLACE_CMD} \ -e 's/kmem_alloc_contig(kmem_arena, /kmem_alloc_contig(/' \ -e 's/kmem_free(kmem_arena, /kmem_free(/' \ ${WRKSRC}/src/${NVSRC}/nvidia_subr.c .endif # Pull the right header after FreeBSD src r347984 .if ${OSVERSION} >= 1300029 && ${NVVERSION} >= 358.009 ${REINPLACE_CMD} -e '/^#include/s:lock\.h:mutex.h:' \ ${WRKSRC}/src/nvidia-modeset/nvidia-modeset-freebsd.c .endif # Disable installation of Linux libraries (provided by the corresponding # `x11/linux-nvidia-libs' port or its slaves) ${REINPLACE_CMD} -e 's/exists(\/.*/& \&\& 0/' \ ${WRKSRC}/lib/Makefile # Do not install VDPAU libraries which are provided by `multimedia/libvdpau' # port for a while now ${REINPLACE_CMD} -e '/libvdpau[[:blank:]_][^n]/d ; \ s/name libvdpau/&_nvidia/' ${WRKSRC}/lib/Makefile # Do not build any binaries (native nvidia-settings and nvidia-xconfig are # provided by their corresponding ports) and manual pages ${REINPLACE_CMD} -E 's/(extension).*/\1/' ${WRKSRC}/x11/Makefile ${REINPLACE_CMD} -e '/bin/d ; /man/d' ${WRKSRC}/x11/Makefile # Also do not install libnvidia-gtk* libraries which are for nvidia-settings .if ${NVVERSION} >= 346.016 ${REINPLACE_CMD} -e '/libnvidia-gtk/d' ${WRKSRC}/lib/Makefile .endif # Adjust installation path of a conflicting file (shared between # nvidia-driver and xorg-server) to ease package manager work .if ${NVVERSION} < 410.057 ${REINPLACE_CMD} -e '/LIBDIR/s:xorg/modules/extensions:&/.nvidia:' \ ${WRKSRC}/x11/extension/Makefile .endif # Do not execute afterinstall target (prevent automatic module registration # 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/${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 .if ${NVVERSION} >= 410.057 ${REINPLACE_CMD} -e 's,/usr/share/nvidia,$${DESTDIR}${DOCSDIR},' \ ${WRKSRC}/lib/libGLX_nvidia/Makefile ${WRKSRC}/doc/Makefile ${REINPLACE_CMD} -e '/AUXLINK_LINK/s,\$${DESTDIR},,' \ ${WRKSRC}/lib/libGLX_nvidia/Makefile prefix="${PREFIX}" ; padding=$$(($${#prefix}+3)) ; \ gsed ${REINPLACE_ARGS} -E "s,/etc/glvnd/egl_vendor\.d.{$$padding},${GLVND_JSON_PATH}\x00," \ ${WRKSRC}/obj/libglvnd/libEGL.so.1 .elif ${NVVERSION} >= 334.016 ${REINPLACE_CMD} -e 's,/usr/share/nvidia,$${DESTDIR}${DOCSDIR},' \ ${WRKSRC}/lib/libGL/Makefile ${WRKSRC}/doc/Makefile .endif .if ${NVVERSION} >= 415.013 prefix="${PREFIX}" ; padding=$$(($${#prefix}+3)) ; \ gsed ${REINPLACE_ARGS} -E "s,/etc/egl/egl_external_platform\.d.{$$padding},${WAYLAND_JSON_PATH}\x00," \ ${WRKSRC}/obj/libEGL_nvidia.so.0 .endif # Finally, process OPTIONS .if ${PORT_OPTIONS:MFREEBSD_AGP} ${REINPLACE_CMD} -E 's/undef (NV_SUPPORT_OS_AGP)/define \1/' \ ${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/${NVSRC}/nv-freebsd.h .endif .if ! ${PORT_OPTIONS:MLINUX} ${REINPLACE_CMD} -E 's/define (NV_SUPPORT_LINUX_COMPAT)/undef \1/' \ ${WRKSRC}/src/${NVSRC}/nv-freebsd.h . if ${NVVERSION} >= 358.009 ${REINPLACE_CMD} -E 's/define (NVKMS_SUPPORT_LINUX_COMPAT)/undef \1/' \ ${WRKSRC}/src/nvidia-modeset/nvidia-modeset-freebsd.c . endif .endif .if ${PORT_OPTIONS:MPAE} ${REINPLACE_CMD} -E 's/undef (NV_SUPPORT_PAE)/define \1/' \ ${WRKSRC}/src/${NVSRC}/nv-freebsd.h .endif .if ${PORT_OPTIONS:MWBINVD} ${REINPLACE_CMD} -E 's/undef (NV_USE_WBINVD)/define \1/' \ ${WRKSRC}/src/${NVSRC}/nv-freebsd.h .endif # Conditionally install documentation (but you generally want it) .if ! ${PORT_OPTIONS:MDOCS} ${REINPLACE_CMD} -E 's/(x11).*/\1/ ; /doc/d' ${WRKSRC}/Makefile .endif pre-install: @${MKDIR} ${STAGEDIR}${PREFIX}/${MODULESDIR}/drivers \ ${STAGEDIR}${PREFIX}/${MODULESDIR}/extensions post-install: .SILENT ${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:R} < 460 ${REINPLACE_CMD} -e '/libnvidia-glvkspirv\.so/d ; \ /nvidia_icd\.json/d ; /nvidia_layers\.json/d' ${TMPPLIST} .endif .if ${NVVERSION} >= 304.128 && ${NVVERSION} < 310.019 || ${NVVERSION} >= 361.016 ${REINPLACE_CMD} -E '/libvdpau(_trace)?\.so/d' ${TMPPLIST} .endif .if ${NVVERSION} >= 310.019 ${REINPLACE_CMD} -e '/libXvMCNVIDIA/d' ${TMPPLIST} .else # some applications need this symlink (see PR ports/72877) ${LN} -sf libXvMCNVIDIA.so.1 \ ${STAGEDIR}${PREFIX}/lib/libXvMCNVIDIA_dynamic.so.1 .endif .if ${NVVERSION} < 331.013 || ${ARCH} == amd64 && ${NVVERSION} < 334.016 ${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} < 358.009 ${REINPLACE_CMD} -e '/nvidia-modeset\.ko/d' ${TMPPLIST} .endif .if ${NVVERSION} < 410.057 ${REINPLACE_CMD} -E '/lib(EGL|GLESv[12].*)_nvidia/d ; \ /lib(GLX|GLdispatch|OpenGL)/d ; \ /extensions\/libglxserver_nvidia\.so/d ; \ /10_nvidia\.json/d' ${TMPPLIST} .else ${REINPLACE_CMD} -e '/extensions\/\.nvidia\/libglx/d' ${TMPPLIST} .endif .if ${NVVERSION} < 415.013 ${REINPLACE_CMD} -e '/libnvidia-egl-wayland\.so/d ; \ /10_nvidia_wayland\.json/d' ${TMPPLIST} .endif .if ${NVVERSION} < 440.036 ${REINPLACE_CMD} -e '/lib32\//d' ${TMPPLIST} .elif ${NVVERSION} < 465.01901 ${REINPLACE_CMD} -e '/lib32\/libnvidia-glvkspirv\.so/d' ${TMPPLIST} .endif # Rename some libraries and install a libmap file to resolve conflict with # Mesa libraries. ${LN} -sf libGL-NVIDIA.so.1 \ ${STAGEDIR}${PREFIX}/lib/libGL-NVIDIA.so ${MV} -f ${STAGEDIR}${PREFIX}/lib/libGL.so.1 \ ${STAGEDIR}${PREFIX}/lib/libGL-NVIDIA.so.1 ${RM} ${STAGEDIR}${PREFIX}/lib/libGL.so .if ${NVVERSION} >= 331.013 ${LN} -sf libEGL-NVIDIA.so.1 \ ${STAGEDIR}${PREFIX}/lib/libEGL-NVIDIA.so ${MV} -f ${STAGEDIR}${PREFIX}/lib/libEGL.so.1 \ ${STAGEDIR}${PREFIX}/lib/libEGL-NVIDIA.so.1 ${RM} ${STAGEDIR}${PREFIX}/lib/libEGL.so ${RM} ${STAGEDIR}${PREFIX}/lib/libGLESv1_CM.so ${RM} ${STAGEDIR}${PREFIX}/lib/libGLESv1_CM.so.1 ${LN} -sf libGLESv2-NVIDIA.so.2 \ ${STAGEDIR}${PREFIX}/lib/libGLESv2-NVIDIA.so ${MV} -f ${STAGEDIR}${PREFIX}/lib/libGLESv2.so.2 \ ${STAGEDIR}${PREFIX}/lib/libGLESv2-NVIDIA.so.2 ${RM} ${STAGEDIR}${PREFIX}/lib/libGLESv2.so .endif +# Configuration of Nvidia as secondary GPU requires preserving Mesa libraries +# as default implementation; a libmap must not override in this case. +.if !defined(LIBGLDIR) @${MKDIR} ${STAGEDIR}${PREFIX}/etc/libmap.d/ ${INSTALL_DATA} ${WRKDIR}/nvidia.conf \ ${STAGEDIR}${PREFIX}/etc/libmap.d/ +.else +# libgl proxies require a library path containing unrenamed lib*GL*.so + ${MKDIR} ${STAGEDIR}${PREFIX}/${LIBGLDIR} + ${RLN} ${STAGEDIR}${PREFIX}/lib/libGL-NVIDIA.so.1 \ + ${STAGEDIR}${PREFIX}/${LIBGLDIR}/libGL.so.1 + ${RLN} ${STAGEDIR}${PREFIX}/lib/libEGL-NVIDIA.so.1 \ + ${STAGEDIR}${PREFIX}/${LIBGLDIR}/libEGL.so.1 + ${RLN} ${STAGEDIR}${PREFIX}/lib/libGLESv2-NVIDIA.so.2 \ + ${STAGEDIR}${PREFIX}/${LIBGLDIR}/libGLESv2.so.2 +.endif +# Configuration of Nvidia as secondary GPU requires preserving xorg-server's +# libglx.so and moving Nvidia's glx to where it can be found by a secondary +# Xorg instance. +# Not needed since 410.057: Nvidia driver finds libglxserver_nvidia.so instead. +.if ${NVVERSION} < 410.057 +.if ${EXTENSIONSDIR} != ${MODULESDIR}/extensions/.nvidia + ${MKDIR} ${STAGEDIR}${PREFIX}/${EXTENSIONSDIR} + ${MV} ${STAGEDIR}${PREFIX}/${MODULESDIR}/extensions/.nvidia/* \ + ${STAGEDIR}${PREFIX}/${EXTENSIONSDIR}/ +.endif +.endif .include diff --git a/x11/nvidia-driver/pkg-plist b/x11/nvidia-driver/pkg-plist index 9ae1e8fa5261..85156cdb6eff 100644 --- a/x11/nvidia-driver/pkg-plist +++ b/x11/nvidia-driver/pkg-plist @@ -1,94 +1,97 @@ bin/nvidia-bug-report.sh bin/nvidia-debugdump bin/nvidia-smi -etc/libmap.d/nvidia.conf +%%LIBGLMAP%%etc/libmap.d/nvidia.conf +%%LIBGLDIR%%/libGL.so.1 +%%LIBGLDIR%%/libEGL.so.1 +%%LIBGLDIR%%/libGLESv2.so.2 lib/libEGL-NVIDIA.so lib/libEGL-NVIDIA.so.1 lib/libEGL_nvidia.so lib/libEGL_nvidia.so.0 lib/libGL-NVIDIA.so lib/libGL-NVIDIA.so.1 lib/libGLESv1_CM_nvidia.so lib/libGLESv1_CM_nvidia.so.1 lib/libGLESv2-NVIDIA.so lib/libGLESv2-NVIDIA.so.2 lib/libGLESv2_nvidia.so lib/libGLESv2_nvidia.so.2 lib/libGLX.so lib/libGLX.so.0 lib/libGLX_indirect.so.0 lib/libGLX_nvidia.so lib/libGLX_nvidia.so.0 lib/libGLdispatch.so lib/libGLdispatch.so.0 lib/libOpenGL.so lib/libOpenGL.so.0 lib/libXvMCNVIDIA.a lib/libXvMCNVIDIA.so lib/libXvMCNVIDIA.so.1 lib/libXvMCNVIDIA_dynamic.so.1 lib/libnvidia-cfg.so lib/libnvidia-cfg.so.1 @comment lib/libnvidia-egl-wayland.so @comment lib/libnvidia-egl-wayland.so.1 lib/libnvidia-eglcore.so lib/libnvidia-eglcore.so.1 lib/libnvidia-glcore.so lib/libnvidia-glcore.so.1 lib/libnvidia-glsi.so lib/libnvidia-glsi.so.1 lib/libnvidia-glvkspirv.so lib/libnvidia-glvkspirv.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 lib32/libEGL.so lib32/libEGL.so.1 lib32/libEGL_nvidia.so lib32/libEGL_nvidia.so.0 lib32/libGL.so lib32/libGL.so.1 lib32/libGLESv1_CM.so lib32/libGLESv1_CM.so.1 lib32/libGLESv1_CM_nvidia.so lib32/libGLESv1_CM_nvidia.so.1 lib32/libGLESv2.so lib32/libGLESv2.so.2 lib32/libGLESv2_nvidia.so lib32/libGLESv2_nvidia.so.2 lib32/libGLX.so lib32/libGLX.so.0 lib32/libGLX_nvidia.so lib32/libGLX_nvidia.so.0 lib32/libGLdispatch.so lib32/libGLdispatch.so.0 lib32/libOpenGL.so lib32/libOpenGL.so.0 lib32/libnvidia-cfg.so lib32/libnvidia-cfg.so.1 lib32/libnvidia-eglcore.so lib32/libnvidia-eglcore.so.1 lib32/libnvidia-glcore.so lib32/libnvidia-glcore.so.1 lib32/libnvidia-glsi.so lib32/libnvidia-glsi.so.1 lib32/libnvidia-glvkspirv.so lib32/libnvidia-glvkspirv.so.1 lib32/libnvidia-tls.so lib32/libnvidia-tls.so.1 lib32/vdpau/libvdpau_nvidia.so.1 man/man1/nvidia-smi.1.gz @comment share/egl/egl_external_platform.d/10_nvidia_wayland.json share/glvnd/egl_vendor.d/10_nvidia.json share/vulkan/icd.d/nvidia_icd.json share/vulkan/implicit_layer.d/nvidia_layers.json %%MODULESDIR%%/drivers/nvidia_drv.so -%%MODULESDIR%%/extensions/.nvidia/libglx.so -%%MODULESDIR%%/extensions/.nvidia/libglx.so.1 +%%EXTENSIONSDIR%%/libglx.so +%%EXTENSIONSDIR%%/libglx.so.1 %%MODULESDIR%%/extensions/libglxserver_nvidia.so %%MODULESDIR%%/extensions/libglxserver_nvidia.so.1 /%%KMODDIR%%/nvidia.ko /%%KMODDIR%%/nvidia-modeset.ko diff --git a/x11/nvidia-hybrid-graphics/Makefile b/x11/nvidia-hybrid-graphics/Makefile new file mode 100644 index 000000000000..0e99e9c99e1d --- /dev/null +++ b/x11/nvidia-hybrid-graphics/Makefile @@ -0,0 +1,78 @@ +# Created by: Theron Tarigo + +PORTNAME= nvidia-hybrid-graphics +PORTVERSION= 0.5 +CATEGORIES= x11 +MASTER_SITES= # none +DISTFILES= # none + +MAINTAINER= theron.tarigo@gmail.com +COMMENT= NVIDIA secondary GPU configuration - Optimus Technology support + +LICENSE= BSD2CLAUSE + +RUN_DEPENDS= nvidia-xconfig:x11/nvidia-xconfig \ + ${LOCALBASE}/bin/Xorg:x11-servers/xorg-server + +FLAVORS= default 390 + +NO_ARCH= yes +NO_BUILD= yes +WRKSRC= ${WRKDIR}/src + +default_RUN_DEPENDS= \ + nvidia-secondary-driver>=440.64:x11/nvidia-secondary-driver +390_RUN_DEPENDS= \ + nvidia-secondary-driver-390>=390.87:x11/nvidia-secondary-driver-390 + +VIRTUALGL_RUN_DEPENDS= ${LOCALBASE}/VirtualGL/bin/vglrun:x11/virtualgl + +390_PKGNAMESUFFIX= -390 + +OPTIONS_DEFINE= VIRTUALGL OPTIRUN +OPTIONS_DEFAULT= VIRTUALGL OPTIRUN +OPTIONS_SUB= OPTIRUN +VIRTUALGL_DESC= Use VirtualGL for OpenGL redirection support +OPTIRUN_DESC= Install "optirun" alias for nvrun-vgl +OPTIRUN_IMPLIES= VIRTUALGL + +scripts= \ + bin/Xorg-nvidia-headless \ + bin/nvidia-headless-xconfig \ + bin/nvrun \ + bin/nvrun-vgl \ + libexec/nvidia-headless-utils/readconf \ + libexec/nvidia-settings-hybrid +configs= \ + etc/X11/xorg-nvidia-headless-template.conf \ + etc/nvidia-headless.conf \ + etc/nvidia-hybrid.conf \ + +SUB_FILES= pkg-message ${scripts:%=src/%} ${configs:%=src/%} +SUB_LIST+= VGLRUN=${LOCALBASE}/VirtualGL/bin/vglrun + +USE_RC_SUBR= nvidia_xorg + +do-extract: +.for f in ${SUB_FILES} + ${MKDIR} ${WRKDIR}/${f:H} +.endfor + +do-install: +.for f in ${scripts} + @${MKDIR} ${STAGEDIR}${PREFIX}/${f:H} + ${INSTALL_SCRIPT} ${WRKSRC}/${f} ${STAGEDIR}${PREFIX}/${f} +.endfor +.for f in ${configs} + @${MKDIR} ${STAGEDIR}${PREFIX}/${f:H} + ${INSTALL_DATA} ${WRKSRC}/${f} ${STAGEDIR}${PREFIX}/${f}.sample +.endfor + +post-install: + @${MKDIR} ${STAGEDIR}${PREFIX}/etc/X11/xorg-nvidia-headless.conf.d + +post-install-OPTIRUN-on: + @${RLN} ${STAGEDIR}${PREFIX}/bin/nvrun-vgl \ + ${STAGEDIR}${PREFIX}/bin/optirun + +.include diff --git a/x11/nvidia-hybrid-graphics/files/nvidia_xorg.in b/x11/nvidia-hybrid-graphics/files/nvidia_xorg.in new file mode 100644 index 000000000000..34e3e0a5f95b --- /dev/null +++ b/x11/nvidia-hybrid-graphics/files/nvidia_xorg.in @@ -0,0 +1,48 @@ +#!/bin/sh +# +# $FreeBSD$ +# +# PROVIDE: nvidia_xorg +# REQUIRE: LOGIN +# KEYWORD: shutdown + +. /etc/rc.subr + +name=nvidia_xorg +rcvar=nvidia_xorg_enable +desc="Nvidia GPU Dedicated Xorg" + +load_rc_config $name + +: ${nvidia_xorg_enable:=NO} +: ${nvidia_modeset:=NO} +: ${nvidia_manage_kld:=YES} + +command=/usr/sbin/daemon +pidfile=/var/run/${name}.pid +procname="%%LOCALBASE%%/bin/Xorg" +command_args="-p ${pidfile} -f %%PREFIX%%/bin/Xorg-nvidia-headless" +start_precmd="${name}_prestart" +stop_postcmd="${name}_poststop" + +if checkyesno nvidia_modeset; then + kmod=nvidia-modeset +else + kmod=nvidia +fi + +nvidia_xorg_prestart() +{ + if checkyesno nvidia_manage_kld; then + kldload -n ${kmod} || return 1 + fi +} + +nvidia_xorg_poststop() +{ + if checkyesno nvidia_manage_kld; then + kldunload -f ${kmod} || return 1 + fi +} + +run_rc_command "$1" diff --git a/x11/nvidia-hybrid-graphics/files/pkg-message.in b/x11/nvidia-hybrid-graphics/files/pkg-message.in new file mode 100644 index 000000000000..2e3b6e2c2904 --- /dev/null +++ b/x11/nvidia-hybrid-graphics/files/pkg-message.in @@ -0,0 +1,24 @@ +Running Xorg-nvidia-headless at startup is recommended especially on mobile +systems since leaving Nvidia GPU powered on with no Xorg may consume +significantly more power. + +# sysrc nvidia_xorg_enable=YES +# service nvidia_xorg start + +The Xorg instance uses separate configuration files from the defaults for Xorg: + + %%PREFIX%%/etc/X11/xorg-nvidia-headless.conf.d/ + + %%PREFIX%%/etc/X11/xorg-nvidia-headless-template.conf + Only used if xorg-nvidia-headless.conf does not exist. + This file is passed through nvidia-xconfig, which does not preserve + all options. + + %%PREFIX%%/etc/X11/xorg-nvidia-headless.conf + Created by manually invoking %%PREFIX%%/bin/nvidia-headless-xconfig. + Once created, this configuration is not passed through nvidia-xconfig. + +Configuration is not normally needed for typical OpenGL acceleration usage. + +A properly configured xorg-nvidia-headless.conf will allow Xorg-nvidia-headless +to be started by non-superuser if Xorg has been installed setuid. diff --git a/x11/nvidia-hybrid-graphics/files/src/bin/Xorg-nvidia-headless.in b/x11/nvidia-hybrid-graphics/files/src/bin/Xorg-nvidia-headless.in new file mode 100644 index 000000000000..b89819168842 --- /dev/null +++ b/x11/nvidia-hybrid-graphics/files/src/bin/Xorg-nvidia-headless.in @@ -0,0 +1,17 @@ +#!/bin/sh +conf=%%PREFIX%%/etc/nvidia-headless.conf +. %%PREFIX%%/libexec/nvidia-headless-utils/readconf +if [ -z "$NVDISPLAY" ]; then printf %s\\n "NVDISPLAY required in environment or in $conf" >&2 ; exit 1; fi +xconfig=%%LOCALBASE%%/etc/X11/xorg-nvidia-headless.conf +xconfarg=xorg-nvidia-headless.conf +if [ ! -e "$xconfig" ]; then +if [ "$(id -u)" != 0 ]; then +printf %s\\n "nvidia-headless must be configured by superuser" >&2 +exit 1 +fi +xconfig=/var/cache/nvidia-headless/xorg.conf +mkdir -p /var/cache/nvidia-headless +xconfarg="$xconfig" +%%PREFIX%%/bin/nvidia-headless-xconfig -o "$xconfig" +fi +exec %%LOCALBASE%%/bin/Xorg -sharevts -novtswitch -noreset -config "$xconfarg" -configdir "xorg-nvidia-headless.conf.d" "$NVDISPLAY" "$@" diff --git a/x11/nvidia-hybrid-graphics/files/src/bin/nvidia-headless-xconfig.in b/x11/nvidia-hybrid-graphics/files/src/bin/nvidia-headless-xconfig.in new file mode 100644 index 000000000000..29f06a2c4dd8 --- /dev/null +++ b/x11/nvidia-hybrid-graphics/files/src/bin/nvidia-headless-xconfig.in @@ -0,0 +1,9 @@ +#!/bin/sh +exec %%LOCALBASE%%/bin/nvidia-xconfig \ + --enable-all-gpus \ + --preserve-busid \ + --allow-empty-initial-configuration \ + --connected-monitor=DFP \ + --no-use-edid \ + -c %%PREFIX%%/etc/X11/xorg-nvidia-headless-template.conf \ + -o %%LOCALBASE%%/etc/X11/xorg-nvidia-headless.conf "$@" diff --git a/x11/nvidia-hybrid-graphics/files/src/bin/nvrun-vgl.in b/x11/nvidia-hybrid-graphics/files/src/bin/nvrun-vgl.in new file mode 100644 index 000000000000..ecb5b256005f --- /dev/null +++ b/x11/nvidia-hybrid-graphics/files/src/bin/nvrun-vgl.in @@ -0,0 +1,8 @@ +#!/bin/sh +conf=%%PREFIX%%/etc/nvidia-headless.conf +. %%PREFIX%%/libexec/nvidia-headless-utils/readconf +conf=%%PREFIX%%/etc/nvidia-hybrid.conf +. %%PREFIX%%/libexec/nvidia-headless-utils/readconf +if [ -z "$NVDISPLAY" ]; then printf %s\\n "NVDISPLAY required in environment or in $conf" >&2 ; exit 1; fi +if [ -z "$VGLRUN" ]; then printf %s\\n "VGLRUN required in environment or in $conf" >&2 ; exit 1; fi +exec "$VGLRUN" -ld "%%LOCALBASE%%/lib/libGL-NVIDIA" -d "$NVDISPLAY" "$@" diff --git a/x11/nvidia-hybrid-graphics/files/src/bin/nvrun.in b/x11/nvidia-hybrid-graphics/files/src/bin/nvrun.in new file mode 100644 index 000000000000..9f214ca9c523 --- /dev/null +++ b/x11/nvidia-hybrid-graphics/files/src/bin/nvrun.in @@ -0,0 +1,7 @@ +#!/bin/sh +conf=%%PREFIX%%/etc/nvidia-headless.conf +. %%PREFIX%%/libexec/nvidia-headless-utils/readconf +if [ -z "$NVDISPLAY" ]; then printf %s\\n "NVDISPLAY required in environment or in $conf" >&2 ; exit 1; fi +export DISPLAY="$NVDISPLAY" +export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:%%LOCALBASE%%/lib/libGL-NVIDIA" +exec "$@" diff --git a/x11/nvidia-hybrid-graphics/files/src/etc/X11/xorg-nvidia-headless-template.conf.in b/x11/nvidia-hybrid-graphics/files/src/etc/X11/xorg-nvidia-headless-template.conf.in new file mode 100644 index 000000000000..96fce627063e --- /dev/null +++ b/x11/nvidia-hybrid-graphics/files/src/etc/X11/xorg-nvidia-headless-template.conf.in @@ -0,0 +1,39 @@ + +Section "ServerLayout" + Identifier "nvidia" + Screen 0 "Screen0" + InputDevice "fake" "CorePointer" "CoreKeyboard" + Option "AutoAddDevices" "false" +EndSection + +Section "Files" + ModulePath "%%LOCALBASE%%/lib/xorg/modules-NVIDIA" + ModulePath "%%LOCALBASE%%/lib/xorg/modules" +EndSection + +Section "Module" + Load "dri3" + Load "glx" + Disable "efifb" +EndSection + +Section "InputDevice" + Identifier "fake" + Driver "" +EndSection + +Section "Monitor" + Identifier "Monitor0" +EndSection + +Section "Device" + Identifier "Device0" + Driver "nvidia" +EndSection + +Section "Screen" + Identifier "Screen0" + Device "Device0" + Monitor "Monitor0" +EndSection + diff --git a/x11/nvidia-hybrid-graphics/files/src/etc/nvidia-headless.conf.in b/x11/nvidia-hybrid-graphics/files/src/etc/nvidia-headless.conf.in new file mode 100644 index 000000000000..0b1bfdb982a3 --- /dev/null +++ b/x11/nvidia-hybrid-graphics/files/src/etc/nvidia-headless.conf.in @@ -0,0 +1 @@ +NVDISPLAY=:8 diff --git a/x11/nvidia-hybrid-graphics/files/src/etc/nvidia-hybrid.conf.in b/x11/nvidia-hybrid-graphics/files/src/etc/nvidia-hybrid.conf.in new file mode 100644 index 000000000000..6b578c8d1b40 --- /dev/null +++ b/x11/nvidia-hybrid-graphics/files/src/etc/nvidia-hybrid.conf.in @@ -0,0 +1 @@ +VGLRUN=%%VGLRUN%% diff --git a/x11/nvidia-hybrid-graphics/files/src/libexec/nvidia-headless-utils/readconf.in b/x11/nvidia-hybrid-graphics/files/src/libexec/nvidia-headless-utils/readconf.in new file mode 100644 index 000000000000..620a9b8efcbd --- /dev/null +++ b/x11/nvidia-hybrid-graphics/files/src/libexec/nvidia-headless-utils/readconf.in @@ -0,0 +1,5 @@ +while IFS== read -r _var _val ; do + expr "$_var" : '[a-zA-Z][a-zA-Z0-9_]*$' >&- && \ + eval [ -z \${$_var+UNSET} ] '&&' $_var="\$_val" '||' true || \ + printf %s\\n "$conf: $_var: bad variable name" >&2 +done < "$conf" ; unset _var _val diff --git a/x11/nvidia-hybrid-graphics/files/src/libexec/nvidia-settings-hybrid.in b/x11/nvidia-hybrid-graphics/files/src/libexec/nvidia-settings-hybrid.in new file mode 100644 index 000000000000..d4740ff05484 --- /dev/null +++ b/x11/nvidia-hybrid-graphics/files/src/libexec/nvidia-settings-hybrid.in @@ -0,0 +1,4 @@ +#!/bin/sh +conf=%%PREFIX%%/etc/nvidia-headless.conf +. %%PREFIX%%/libexec/nvidia-headless-utils/readconf +exec nvrun-vgl %%LOCALBASE%%/libexec/nvidia-settings -c "$NVDISPLAY" "$@" diff --git a/x11/nvidia-hybrid-graphics/pkg-descr b/x11/nvidia-hybrid-graphics/pkg-descr new file mode 100644 index 000000000000..560f9e8a04ae --- /dev/null +++ b/x11/nvidia-hybrid-graphics/pkg-descr @@ -0,0 +1,8 @@ +This port integrates the Nvidia graphics driver and supporting utilities with +VirtualGL, enabling use of Nvidia acceleration on a system with hybrid graphics +hardware configuration, aka "Optimus". + +Applications to be run with Nvidia acceleration should be started using +`nvrun-vgl`. + +WWW: https://github.com/therontarigo/freebsd-gpu-headless diff --git a/x11/nvidia-hybrid-graphics/pkg-plist b/x11/nvidia-hybrid-graphics/pkg-plist new file mode 100644 index 000000000000..be2a1fb8d97f --- /dev/null +++ b/x11/nvidia-hybrid-graphics/pkg-plist @@ -0,0 +1,11 @@ +bin/Xorg-nvidia-headless +bin/nvidia-headless-xconfig +bin/nvrun +libexec/nvidia-headless-utils/readconf +%%VIRTUALGL%%bin/nvrun-vgl +%%OPTIRUN%%bin/optirun +libexec/nvidia-settings-hybrid +@sample etc/X11/xorg-nvidia-headless-template.conf.sample +@sample etc/nvidia-headless.conf.sample +@sample etc/nvidia-hybrid.conf.sample +@dir etc/X11/xorg-nvidia-headless.conf.d diff --git a/x11/nvidia-secondary-driver-390/Makefile b/x11/nvidia-secondary-driver-390/Makefile new file mode 100644 index 000000000000..3b4e0f3337dd --- /dev/null +++ b/x11/nvidia-secondary-driver-390/Makefile @@ -0,0 +1,6 @@ +# Created by: Theron Tarigo + +MASTERDIR= ${.CURDIR}/../nvidia-driver-390 +NVSDR_MASTERDIR= ${.CURDIR}/../nvidia-secondary-driver + +.include "${NVSDR_MASTERDIR}/Makefile" diff --git a/x11/nvidia-secondary-driver/Makefile b/x11/nvidia-secondary-driver/Makefile new file mode 100644 index 000000000000..707ebfb8b36d --- /dev/null +++ b/x11/nvidia-secondary-driver/Makefile @@ -0,0 +1,20 @@ +# Created by: Theron Tarigo + +PORTNAME= nvidia-secondary-driver +# Explicitly set PORTREVISION as it can be overridden by the master port +PORTREVISION= 0 + +MASTERDIR?= ${.CURDIR}/../nvidia-driver + +MAINTAINER= theron.tarigo@gmail.com +COMMENT= NVidia graphics card binary drivers for hardware OpenGL rendering on secondary device + +CONFLICTS_INSTALL= nvidia-driver + +EXTENSIONSDIR= lib/xorg/modules-NVIDIA/extensions + +LIBGLDIR= lib/libGL-NVIDIA + +SUB_FILES= pkg-message + +.include "${MASTERDIR}/Makefile" diff --git a/x11/nvidia-secondary-driver/pkg-message b/x11/nvidia-secondary-driver/pkg-message new file mode 100644 index 000000000000..b1d7f346e9ff --- /dev/null +++ b/x11/nvidia-secondary-driver/pkg-message @@ -0,0 +1,4 @@ +Utilization of this driver for GLX acceleration requires special configuration +of an Xorg server instance. + +x11/nvidia-hybrid-graphics is provided to handle this configuration. diff --git a/x11/nvidia-settings/Makefile b/x11/nvidia-settings/Makefile index ab36182de32b..7380136ed74d 100644 --- a/x11/nvidia-settings/Makefile +++ b/x11/nvidia-settings/Makefile @@ -1,60 +1,67 @@ # Created by: Alexander Nedotsukov PORTNAME= nvidia-settings PORTVERSION= 460.73.01 CATEGORIES= x11 MAINTAINER= x11@FreeBSD.org COMMENT= Display Control Panel for X NVidia driver LICENSE= GPLv2 ONLY_FOR_ARCHS= amd64 i386 ONLY_FOR_ARCHS_REASON= Nvidia driver is only available on x86 BUILD_DEPENDS= ${LOCALBASE}/include/dbus-1.0/dbus/dbus.h:devel/dbus LIB_DEPENDS= libfontconfig.so:x11-fonts/fontconfig \ libfreetype.so:print/freetype2 \ libjansson.so:devel/jansson \ libvdpau.so:multimedia/libvdpau USES= gl gmake gnome pkgconfig gettext-runtime xorg USE_GNOME= gtk20 cairo gdkpixbuf2 USE_GL= gl USE_XORG= x11 xext xv xxf86vm USE_GITHUB= yes GH_ACCOUNT= NVIDIA PLIST_FILES= bin/nvidia-settings \ + libexec/nvidia-settings \ man/man1/nvidia-settings.1.gz \ lib/libnvidia-gtk2.so.${PORTVERSION} \ share/applications/nvidia-settings.desktop \ share/pixmaps/nvidia-settings.png +SUB_FILES= nvidia-settings + LDFLAGS+= -pthread LLD_UNSAFE= yes MAKE_ENV= NV_USE_BUNDLED_LIBJANSSON=0 \ NV_VERBOSE= \ GTK3_AVAILABLE=0 \ INSTALL_DOC_ARGS="${INSTALL_MAN:Ninstall}" \ XNVCTRL_CFLAGS=-I${LOCALBASE}/include \ XNVCTRL_LDFLAGS=-L${LOCALBASE}/lib post-patch: .SILENT ${REINPLACE_CMD} \ -e '/^MANDIR/s|share/||' ${WRKSRC}/utils.mk ${REINPLACE_CMD} -E -e 's,__(PIXMAP|UTILS)_PATH__/,,' \ -e '/^Categories/ s,=.*,= Settings;HardwareSettings;,' \ ${WRKSRC}/doc/nvidia-settings.desktop ${REINPLACE_CMD} -e 's|/usr/share/nvidia/|${LOCALBASE}/share/doc/NVIDIA_GLX-1.0/|' \ ${WRKSRC}/src/gtk+-2.x/ctkappprofile.c post-install: .SILENT ${STRIP_CMD} ${STAGEDIR}${PREFIX}/lib/libnvidia-gtk2.so.${PORTVERSION} ${INSTALL_DATA} ${WRKSRC}/doc/nvidia-settings.desktop \ ${STAGEDIR}/${DESKTOPDIR} ${INSTALL_DATA} ${WRKSRC}/doc/nvidia-settings.png \ ${STAGEDIR}/${PREFIX}/share/pixmaps + ${MV} ${STAGEDIR}${PREFIX}/bin/nvidia-settings \ + ${STAGEDIR}${PREFIX}/libexec/nvidia-settings + ${INSTALL} ${WRKDIR}/nvidia-settings \ + ${STAGEDIR}${PREFIX}/bin/nvidia-settings .include diff --git a/x11/nvidia-settings/files/nvidia-settings.in b/x11/nvidia-settings/files/nvidia-settings.in new file mode 100644 index 000000000000..240c4fb5f56c --- /dev/null +++ b/x11/nvidia-settings/files/nvidia-settings.in @@ -0,0 +1,3 @@ +#!/bin/sh +[ -e "%%LOCALBASE%%/libexec/nvidia-settings-hybrid" ] && exec %%LOCALBASE%%/libexec/nvidia-settings-hybrid "$@" +exec %%PREFIX%%/libexec/nvidia-settings "$@"