update buildroot to 2017.02.11

This commit is contained in:
jbnadal
2018-05-22 15:35:47 +02:00
parent 4bf1f5e091
commit a3c10bd762
9257 changed files with 433426 additions and 1701 deletions

View File

@@ -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

View 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

View 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

View 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

View File

@@ -0,0 +1,3 @@
# Locally computed
sha256 cc79d3ac2b688009ed2e47a1cf27557aea5dd745b3b6e9b83945c359ddab4335 NVIDIA-Linux-x86-375.20.run
sha256 d10e40a19dc57ac958567a2b247c2b113e5f1e4186ad48e9a58e70a46d07620b NVIDIA-Linux-x86_64-375.20.run

View 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))