update buildroot to 2017.02.11
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
kernel: use LDFLAGS when linking modules
|
||||
|
||||
Currently, linking module objects is simply using $(LD), assuming that
|
||||
the default emulation is correct for the current architecture.
|
||||
|
||||
However, that might not be the case when the toolchain default is not
|
||||
the same as the current arch. For example, if the toolchain defaults to
|
||||
i386 and is capable of x86_64, and we're targetting x86_64 (or the
|
||||
opposite), the link would fail because the ld emulation is incorrect:
|
||||
|
||||
.../i686-pc-linux-gnu-ld: Relocatable linking with relocations from
|
||||
format elf64-x86-64 (.../nvidia-driver-370.23/kernel/nvidia/nv-frontend.o)
|
||||
to format elf32-i386 (.../nvidia-driver-370.23/kernel/nvidia/nv-interface.o)
|
||||
is not supported
|
||||
|
||||
Add use of $(LDFLAGS) when doing the link, as the kernel provides the
|
||||
proper emulation in those.
|
||||
|
||||
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
|
||||
|
||||
---
|
||||
Issue reported upstream:
|
||||
https://devtalk.nvidia.com/default/topic/958653/
|
||||
|
||||
diff -durN nvidia-driver-370.23.orig/kernel/nvidia/nvidia.Kbuild nvidia-driver-370.23/kernel/nvidia/nvidia.Kbuild
|
||||
--- nvidia-driver-370.23.orig/kernel/nvidia/nvidia.Kbuild 2016-08-09 01:57:50.000000000 +0200
|
||||
+++ nvidia-driver-370.23/kernel/nvidia/nvidia.Kbuild 2016-08-20 12:25:02.780233423 +0200
|
||||
@@ -87,7 +87,7 @@
|
||||
always += $(NVIDIA_INTERFACE)
|
||||
|
||||
$(obj)/$(NVIDIA_INTERFACE): $(addprefix $(obj)/,$(NVIDIA_OBJECTS))
|
||||
- $(LD) -r -o $@ $^
|
||||
+ $(LD) $(LDFLAGS) -r -o $@ $^
|
||||
|
||||
|
||||
#
|
||||
diff -durN nvidia-driver-370.23.orig/kernel/nvidia-modeset/nvidia-modeset.Kbuild nvidia-driver-370.23/kernel/nvidia-modeset/nvidia-modeset.Kbuild
|
||||
--- nvidia-driver-370.23.orig/kernel/nvidia-modeset/nvidia-modeset.Kbuild 2016-08-09 01:43:19.000000000 +0200
|
||||
+++ nvidia-driver-370.23/kernel/nvidia-modeset/nvidia-modeset.Kbuild 2016-08-20 12:25:39.596772662 +0200
|
||||
@@ -70,7 +70,7 @@
|
||||
always += $(NVIDIA_MODESET_INTERFACE)
|
||||
|
||||
$(obj)/$(NVIDIA_MODESET_INTERFACE): $(addprefix $(obj)/,$(NVIDIA_MODESET_OBJECTS))
|
||||
- $(LD) -r -o $@ $^
|
||||
+ $(LD) $(LDFLAGS) -r -o $@ $^
|
||||
|
||||
#
|
||||
# Register the conftests needed by nvidia-modeset.ko
|
||||
88
bsp/buildroot-2017.02.11/package/nvidia-driver/Config.in
Normal file
88
bsp/buildroot-2017.02.11/package/nvidia-driver/Config.in
Normal file
@@ -0,0 +1,88 @@
|
||||
comment "nvidia-driver needs a glibc toolchain"
|
||||
depends on BR2_i386 || BR2_x86_64
|
||||
depends on !BR2_TOOLCHAIN_USES_GLIBC
|
||||
|
||||
config BR2_PACKAGE_NVIDIA_DRIVER
|
||||
bool "nvidia-driver"
|
||||
depends on BR2_i386 || BR2_x86_64
|
||||
depends on BR2_TOOLCHAIN_USES_GLIBC
|
||||
help
|
||||
The binary-only driver blob for NVidia cards.
|
||||
This is the userland part only.
|
||||
|
||||
http://www.nvidia.com/
|
||||
|
||||
if BR2_PACKAGE_NVIDIA_DRIVER
|
||||
|
||||
comment "nvidia-driver X.org drivers needs a modular Xorg server"
|
||||
depends on !BR2_PACKAGE_XSERVER_XORG_SERVER_MODULAR
|
||||
|
||||
config BR2_PACKAGE_NVIDIA_DRIVER_XORG
|
||||
bool "X.org drivers"
|
||||
default y
|
||||
depends on BR2_PACKAGE_XSERVER_XORG_SERVER_MODULAR
|
||||
select BR2_PACKAGE_MESA3D_HEADERS
|
||||
select BR2_PACKAGE_XLIB_LIBX11 # runtime
|
||||
select BR2_PACKAGE_XLIB_LIBXEXT # runtime
|
||||
select BR2_PACKAGE_HAS_LIBGL
|
||||
select BR2_PACKAGE_HAS_LIBEGL
|
||||
select BR2_PACKAGE_HAS_LIBEGL_WAYLAND
|
||||
select BR2_PACKAGE_HAS_LIBGLES
|
||||
|
||||
if BR2_PACKAGE_NVIDIA_DRIVER_XORG
|
||||
|
||||
config BR2_PACKAGE_PROVIDES_LIBGL
|
||||
default "nvidia-driver"
|
||||
|
||||
config BR2_PACKAGE_PROVIDES_LIBEGL
|
||||
default "nvidia-driver"
|
||||
|
||||
config BR2_PACKAGE_PROVIDES_LIBGLES
|
||||
default "nvidia-driver"
|
||||
|
||||
config BR2_PACKAGE_NVIDIA_DRIVER_PRIVATE_LIBS
|
||||
bool "Install private libraries"
|
||||
help
|
||||
Two libraries require special agreement with NVidia to
|
||||
develop code linking to those libraries: libnvidia-ifr.so
|
||||
and libnvidia-fbc.so (to grab and encode an OpenGL buffer or
|
||||
an X framebuffer.)
|
||||
|
||||
Say 'y' here if you plan on running a program that uses
|
||||
those private libraries.
|
||||
|
||||
endif # BR2_PACKAGE_NVIDIA_DRIVER_XORG
|
||||
|
||||
config BR2_PACKAGE_NVIDIA_DRIVER_CUDA
|
||||
bool "CUDA support"
|
||||
|
||||
if BR2_PACKAGE_NVIDIA_DRIVER_CUDA
|
||||
|
||||
config BR2_PACKAGE_NVIDIA_DRIVER_OPENCL
|
||||
bool "OpenCL support"
|
||||
|
||||
config BR2_PACKAGE_NVIDIA_DRIVER_CUDA_PROGS
|
||||
bool "CUDA MPS server and control"
|
||||
help
|
||||
Say 'y' here if you need to run more than one program
|
||||
doing CUDA at the same time. The MPS server will be
|
||||
launched automatically when needed.
|
||||
|
||||
endif # BR2_PACKAGE_NVIDIA_DRIVER_CUDA
|
||||
|
||||
comment "nvidia kernel module needs a kernel to be built"
|
||||
depends on !BR2_LINUX_KERNEL
|
||||
|
||||
config BR2_PACKAGE_NVIDIA_DRIVER_MODULE
|
||||
bool "nvidia kernel module"
|
||||
depends on BR2_LINUX_KERNEL
|
||||
select BR2_LINUX_NEEDS_MODULES # not using kernel-module infra
|
||||
help
|
||||
Build the nvidia.ko kernel module.
|
||||
|
||||
If CUDA support (above) is set, and the target is x86_64, then
|
||||
this will also build the nvidia-uvm.ko kernel module, which
|
||||
provides Unified Memory access to the GPU and CPU memories for
|
||||
CUDA programs.
|
||||
|
||||
endif # BR2_PACKAGE_NVIDIA_DRIVER
|
||||
10
bsp/buildroot-2017.02.11/package/nvidia-driver/egl.pc
Normal file
10
bsp/buildroot-2017.02.11/package/nvidia-driver/egl.pc
Normal file
@@ -0,0 +1,10 @@
|
||||
prefix=/usr
|
||||
exec_prefix=${prefix}
|
||||
libdir=${exec_prefix}/lib
|
||||
includedir=${prefix}/include
|
||||
|
||||
Name: egl
|
||||
Description: Nvidia OpenGL library
|
||||
Version: 1
|
||||
Cflags: -I${includedir}
|
||||
Libs: -L${libdir} -lEGL
|
||||
11
bsp/buildroot-2017.02.11/package/nvidia-driver/gl.pc
Normal file
11
bsp/buildroot-2017.02.11/package/nvidia-driver/gl.pc
Normal file
@@ -0,0 +1,11 @@
|
||||
prefix=/usr
|
||||
exec_prefix=${prefix}
|
||||
libdir=${exec_prefix}/lib
|
||||
includedir=${prefix}/include
|
||||
|
||||
Name: gl
|
||||
Description: Nvidia OpenGL library
|
||||
Version: 10.4.2
|
||||
Libs: -L${libdir} -lGL -lm -lXext -lX11 -ldl
|
||||
Cflags: -I${includedir} -DMESA_EGL_NO_X11_HEADERS
|
||||
glx_tls: no
|
||||
@@ -0,0 +1,3 @@
|
||||
# Locally computed
|
||||
sha256 cc79d3ac2b688009ed2e47a1cf27557aea5dd745b3b6e9b83945c359ddab4335 NVIDIA-Linux-x86-375.20.run
|
||||
sha256 d10e40a19dc57ac958567a2b247c2b113e5f1e4186ad48e9a58e70a46d07620b NVIDIA-Linux-x86_64-375.20.run
|
||||
196
bsp/buildroot-2017.02.11/package/nvidia-driver/nvidia-driver.mk
Normal file
196
bsp/buildroot-2017.02.11/package/nvidia-driver/nvidia-driver.mk
Normal file
@@ -0,0 +1,196 @@
|
||||
################################################################################
|
||||
#
|
||||
# nvidia-driver
|
||||
#
|
||||
################################################################################
|
||||
|
||||
NVIDIA_DRIVER_VERSION = 375.20
|
||||
NVIDIA_DRIVER_SUFFIX = $(if $(BR2_x86_64),_64)
|
||||
NVIDIA_DRIVER_SITE = http://download.nvidia.com/XFree86/Linux-x86$(NVIDIA_DRIVER_SUFFIX)/$(NVIDIA_DRIVER_VERSION)
|
||||
NVIDIA_DRIVER_SOURCE = NVIDIA-Linux-x86$(NVIDIA_DRIVER_SUFFIX)-$(NVIDIA_DRIVER_VERSION).run
|
||||
NVIDIA_DRIVER_LICENSE = NVIDIA Software License
|
||||
NVIDIA_DRIVER_LICENSE_FILES = LICENSE
|
||||
NVIDIA_DRIVER_REDISTRIBUTE = NO
|
||||
NVIDIA_DRIVER_INSTALL_STAGING = YES
|
||||
|
||||
ifeq ($(BR2_PACKAGE_NVIDIA_DRIVER_XORG),y)
|
||||
|
||||
# Since nvidia-driver are binary blobs, the below dependencies are not
|
||||
# strictly speaking build dependencies of nvidia-driver. However, they
|
||||
# are build dependencies of packages that depend on nvidia-driver, so
|
||||
# they should be built prior to those packages, and the only simple
|
||||
# way to do so is to make nvidia-driver depend on them.
|
||||
NVIDIA_DRIVER_DEPENDENCIES = mesa3d-headers
|
||||
NVIDIA_DRIVER_PROVIDES = libgl libegl libgles
|
||||
|
||||
# libGL.so.$(NVIDIA_DRIVER_VERSION) is the legacy libGL.so library; it
|
||||
# has been replaced with libGL.so.1.0.0. Installing both is technically
|
||||
# possible, but great care must be taken to ensure they do not conflict,
|
||||
# so that EGL still works. The legacy library exposes an NVidia-specific
|
||||
# API, so it should not be needed, except for legacy, binary-only
|
||||
# applications (in other words: we don't care).
|
||||
#
|
||||
# libGL.so.1.0.0 is the new vendor-neutral library, aimed at replacing
|
||||
# the old libGL.so.$(NVIDIA_DRIVER_VERSION) library. The latter contains
|
||||
# NVidia extensions (which is deemed bad now), while the former follows
|
||||
# the newly-introduced vendor-neutral "dispatching" API/ABI:
|
||||
# https://github.com/aritger/linux-opengl-abi-proposal/blob/master/linux-opengl-abi-proposal.txt
|
||||
# However, this is not very usefull to us, as we don't support multiple
|
||||
# GL providers at the same time on the system, which this proposal is
|
||||
# aimed at supporting.
|
||||
#
|
||||
# So we only install the legacy library for now.
|
||||
NVIDIA_DRIVER_LIBS_GL = \
|
||||
libGLX.so.0 \
|
||||
libGL.so.$(NVIDIA_DRIVER_VERSION) \
|
||||
libGLX_nvidia.so.$(NVIDIA_DRIVER_VERSION) \
|
||||
|
||||
NVIDIA_DRIVER_LIBS_EGL = \
|
||||
libEGL.so.1 \
|
||||
libGLdispatch.so.0 \
|
||||
libEGL_nvidia.so.$(NVIDIA_DRIVER_VERSION) \
|
||||
|
||||
NVIDIA_DRIVER_LIBS_GLES = \
|
||||
libGLESv1_CM.so.1 \
|
||||
libGLESv2.so.2 \
|
||||
libGLESv1_CM_nvidia.so.$(NVIDIA_DRIVER_VERSION) \
|
||||
libGLESv2_nvidia.so.$(NVIDIA_DRIVER_VERSION) \
|
||||
|
||||
NVIDIA_DRIVER_LIBS_MISC = \
|
||||
libnvidia-eglcore.so.$(NVIDIA_DRIVER_VERSION) \
|
||||
libnvidia-egl-wayland.so.$(NVIDIA_DRIVER_VERSION) \
|
||||
libnvidia-glcore.so.$(NVIDIA_DRIVER_VERSION) \
|
||||
libnvidia-glsi.so.$(NVIDIA_DRIVER_VERSION) \
|
||||
tls/libnvidia-tls.so.$(NVIDIA_DRIVER_VERSION) \
|
||||
libvdpau_nvidia.so.$(NVIDIA_DRIVER_VERSION) \
|
||||
libnvidia-ml.so.$(NVIDIA_DRIVER_VERSION) \
|
||||
|
||||
NVIDIA_DRIVER_LIBS = \
|
||||
$(NVIDIA_DRIVER_LIBS_GL) \
|
||||
$(NVIDIA_DRIVER_LIBS_EGL) \
|
||||
$(NVIDIA_DRIVER_LIBS_GLES) \
|
||||
$(NVIDIA_DRIVER_LIBS_MISC) \
|
||||
|
||||
# Install the gl.pc file
|
||||
define NVIDIA_DRIVER_INSTALL_GL_DEV
|
||||
$(INSTALL) -D -m 0644 $(@D)/libGL.la $(STAGING_DIR)/usr/lib/libGL.la
|
||||
$(SED) 's:__GENERATED_BY__:Buildroot:' $(STAGING_DIR)/usr/lib/libGL.la
|
||||
$(SED) 's:__LIBGL_PATH__:/usr/lib:' $(STAGING_DIR)/usr/lib/libGL.la
|
||||
$(SED) 's:-L[^[:space:]]\+::' $(STAGING_DIR)/usr/lib/libGL.la
|
||||
$(INSTALL) -D -m 0644 package/nvidia-driver/gl.pc $(STAGING_DIR)/usr/lib/pkgconfig/gl.pc
|
||||
$(INSTALL) -D -m 0644 package/nvidia-driver/egl.pc $(STAGING_DIR)/usr/lib/pkgconfig/egl.pc
|
||||
endef
|
||||
|
||||
# Those libraries are 'private' libraries requiring an agreement with
|
||||
# NVidia to develop code for those libs. There seems to be no restriction
|
||||
# on using those libraries (e.g. if the user has such an agreement, or
|
||||
# wants to run a third-party program developped under such an agreement).
|
||||
ifeq ($(BR2_PACKAGE_NVIDIA_DRIVER_PRIVATE_LIBS),y)
|
||||
NVIDIA_DRIVER_LIBS += \
|
||||
libnvidia-ifr.so.$(NVIDIA_DRIVER_VERSION) \
|
||||
libnvidia-fbc.so.$(NVIDIA_DRIVER_VERSION)
|
||||
endif
|
||||
|
||||
# We refer to the destination path; the origin file has no directory component
|
||||
NVIDIA_DRIVER_X_MODS = \
|
||||
drivers/nvidia_drv.so \
|
||||
extensions/libglx.so.$(NVIDIA_DRIVER_VERSION) \
|
||||
libnvidia-wfb.so.$(NVIDIA_DRIVER_VERSION)
|
||||
|
||||
endif # X drivers
|
||||
|
||||
ifeq ($(BR2_PACKAGE_NVIDIA_DRIVER_CUDA),y)
|
||||
NVIDIA_DRIVER_LIBS += \
|
||||
libcuda.so.$(NVIDIA_DRIVER_VERSION) \
|
||||
libnvidia-compiler.so.$(NVIDIA_DRIVER_VERSION) \
|
||||
libnvcuvid.so.$(NVIDIA_DRIVER_VERSION) \
|
||||
libnvidia-fatbinaryloader.so.$(NVIDIA_DRIVER_VERSION) \
|
||||
libnvidia-ptxjitcompiler.so.$(NVIDIA_DRIVER_VERSION) \
|
||||
libnvidia-encode.so.$(NVIDIA_DRIVER_VERSION)
|
||||
ifeq ($(BR2_PACKAGE_NVIDIA_DRIVER_CUDA_PROGS),y)
|
||||
NVIDIA_DRIVER_PROGS = nvidia-cuda-mps-control nvidia-cuda-mps-server
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(BR2_PACKAGE_NVIDIA_DRIVER_OPENCL),y)
|
||||
NVIDIA_DRIVER_LIBS += \
|
||||
libOpenCL.so.1.0.0 \
|
||||
libnvidia-opencl.so.$(NVIDIA_DRIVER_VERSION)
|
||||
endif
|
||||
|
||||
# Build and install the kernel modules if needed
|
||||
ifeq ($(BR2_PACKAGE_NVIDIA_DRIVER_MODULE),y)
|
||||
|
||||
NVIDIA_DRIVER_MODULES = nvidia nvidia-modeset nvidia-drm
|
||||
ifeq ($(BR2_x86_64),y)
|
||||
NVIDIA_DRIVER_MODULES += nvidia-uvm
|
||||
endif
|
||||
|
||||
# They can't do everything like everyone. They need those variables,
|
||||
# because they don't recognise the usual variables set by the kernel
|
||||
# build system. We also need to tell them what modules to build.
|
||||
NVIDIA_DRIVER_MODULE_MAKE_OPTS = \
|
||||
NV_KERNEL_SOURCES="$(LINUX_DIR)" \
|
||||
NV_KERNEL_OUTPUT="$(LINUX_DIR)" \
|
||||
NV_KERNEL_MODULES="$(NVIDIA_DRIVER_MODULES)"
|
||||
|
||||
NVIDIA_DRIVER_MODULE_SUBDIRS = kernel
|
||||
|
||||
$(eval $(kernel-module))
|
||||
|
||||
endif # BR2_PACKAGE_NVIDIA_DRIVER_MODULE == y
|
||||
|
||||
# The downloaded archive is in fact an auto-extract script. So, it can run
|
||||
# virtually everywhere, and it is fine enough to provide useful options.
|
||||
# Except it can't extract into an existing (even empty) directory.
|
||||
define NVIDIA_DRIVER_EXTRACT_CMDS
|
||||
$(SHELL) $(DL_DIR)/$(NVIDIA_DRIVER_SOURCE) --extract-only --target \
|
||||
$(@D)/tmp-extract
|
||||
chmod u+w -R $(@D)
|
||||
mv $(@D)/tmp-extract/* $(@D)/tmp-extract/.manifest $(@D)
|
||||
rm -rf $(@D)/tmp-extract
|
||||
endef
|
||||
|
||||
# Helper to install libraries
|
||||
# $1: destination directory (target or staging)
|
||||
#
|
||||
# For all libraries, we install them and create a symlink using
|
||||
# their SONAME, so we can link to them at runtime; we also create
|
||||
# the no-version symlink, so we can link to them at build time.
|
||||
define NVIDIA_DRIVER_INSTALL_LIBS
|
||||
$(foreach lib,$(NVIDIA_DRIVER_LIBS),\
|
||||
$(INSTALL) -D -m 0644 $(@D)/$(lib) $(1)/usr/lib/$(notdir $(lib))
|
||||
libsoname="$$( $(TARGET_READELF) -d "$(@D)/$(lib)" \
|
||||
|sed -r -e '/.*\(SONAME\).*\[(.*)\]$$/!d; s//\1/;' )"; \
|
||||
if [ -n "$${libsoname}" -a "$${libsoname}" != "$(notdir $(lib))" ]; then \
|
||||
ln -sf $(notdir $(lib)) \
|
||||
$(1)/usr/lib/$${libsoname}; \
|
||||
fi
|
||||
baseso=$(firstword $(subst .,$(space),$(notdir $(lib)))).so; \
|
||||
if [ -n "$${baseso}" -a "$${baseso}" != "$(notdir $(lib))" ]; then \
|
||||
ln -sf $(notdir $(lib)) $(1)/usr/lib/$${baseso}; \
|
||||
fi
|
||||
)
|
||||
endef
|
||||
|
||||
# For staging, install libraries and development files
|
||||
define NVIDIA_DRIVER_INSTALL_STAGING_CMDS
|
||||
$(call NVIDIA_DRIVER_INSTALL_LIBS,$(STAGING_DIR))
|
||||
$(NVIDIA_DRIVER_INSTALL_GL_DEV)
|
||||
endef
|
||||
|
||||
# For target, install libraries and X.org modules
|
||||
define NVIDIA_DRIVER_INSTALL_TARGET_CMDS
|
||||
$(call NVIDIA_DRIVER_INSTALL_LIBS,$(TARGET_DIR))
|
||||
$(foreach m,$(NVIDIA_DRIVER_X_MODS), \
|
||||
$(INSTALL) -D -m 0644 $(@D)/$(notdir $(m)) \
|
||||
$(TARGET_DIR)/usr/lib/xorg/modules/$(m)
|
||||
)
|
||||
$(foreach p,$(NVIDIA_DRIVER_PROGS), \
|
||||
$(INSTALL) -D -m 0755 $(@D)/$(p) \
|
||||
$(TARGET_DIR)/usr/bin/$(p)
|
||||
)
|
||||
$(NVIDIA_DRIVER_INSTALL_KERNEL_MODULE)
|
||||
endef
|
||||
|
||||
$(eval $(generic-package))
|
||||
Reference in New Issue
Block a user