summaryrefslogtreecommitdiff
path: root/recipes-bsp/tdx-nv-binaries
diff options
context:
space:
mode:
Diffstat (limited to 'recipes-bsp/tdx-nv-binaries')
-rw-r--r--recipes-bsp/tdx-nv-binaries/files/aplay.desktop5
-rw-r--r--recipes-bsp/tdx-nv-binaries/files/egl.pc10
-rw-r--r--recipes-bsp/tdx-nv-binaries/files/eglplatform.h147
-rw-r--r--recipes-bsp/tdx-nv-binaries/files/gles.pc10
-rw-r--r--recipes-bsp/tdx-nv-binaries/files/glesv2.pc10
-rw-r--r--recipes-bsp/tdx-nv-binaries/files/khronos_headers.tgzbin0 -> 279190 bytes
-rw-r--r--recipes-bsp/tdx-nv-binaries/files/mimeapps.list10
-rw-r--r--recipes-bsp/tdx-nv-binaries/files/nvgstplayer.desktop6
-rw-r--r--recipes-bsp/tdx-nv-binaries/files/nvsamples-hardfp.patchbin0 -> 6479 bytes
-rw-r--r--recipes-bsp/tdx-nv-binaries/files/nvsamples-no-binary-shaders.patch93
-rw-r--r--recipes-bsp/tdx-nv-binaries/files/nvsamples-oe.patch50
-rw-r--r--recipes-bsp/tdx-nv-binaries/nvsamples.bb59
-rw-r--r--recipes-bsp/tdx-nv-binaries/tdx-nv-binaries.bb187
13 files changed, 587 insertions, 0 deletions
diff --git a/recipes-bsp/tdx-nv-binaries/files/aplay.desktop b/recipes-bsp/tdx-nv-binaries/files/aplay.desktop
new file mode 100644
index 0000000..ead86f3
--- /dev/null
+++ b/recipes-bsp/tdx-nv-binaries/files/aplay.desktop
@@ -0,0 +1,5 @@
+[Desktop Entry]
+Type=Application
+Name=aplay
+Exec=aplay %f
+NoDisplay=true
diff --git a/recipes-bsp/tdx-nv-binaries/files/egl.pc b/recipes-bsp/tdx-nv-binaries/files/egl.pc
new file mode 100644
index 0000000..3af7eec
--- /dev/null
+++ b/recipes-bsp/tdx-nv-binaries/files/egl.pc
@@ -0,0 +1,10 @@
+prefix=/usr
+exec_prefix=${prefix}
+libdir=/usr/lib
+includedir=/usr/include
+
+Name: egl
+Description: EGL implementation
+Version: 1
+Cflags: -I${includedir}/EGL
+Libs: -L${libdir} -lEGL
diff --git a/recipes-bsp/tdx-nv-binaries/files/eglplatform.h b/recipes-bsp/tdx-nv-binaries/files/eglplatform.h
new file mode 100644
index 0000000..72b5f2d
--- /dev/null
+++ b/recipes-bsp/tdx-nv-binaries/files/eglplatform.h
@@ -0,0 +1,147 @@
+#ifndef __eglplatform_h_
+#define __eglplatform_h_
+
+/*
+** Copyright (c) 2007-2009 The Khronos Group Inc.
+**
+** Permission is hereby granted, free of charge, to any person obtaining a
+** copy of this software and/or associated documentation files (the
+** "Materials"), to deal in the Materials without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Materials, and to
+** permit persons to whom the Materials are furnished to do so, subject to
+** the following conditions:
+**
+** The above copyright notice and this permission notice shall be included
+** in all copies or substantial portions of the Materials.
+**
+** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+*/
+
+/* Platform-specific types and definitions for egl.h
+ * $Revision: 12306 $ on $Date: 2010-08-25 09:51:28 -0700 (Wed, 25 Aug 2010) $
+ *
+ * Adopters may modify khrplatform.h and this file to suit their platform.
+ * You are encouraged to submit all modifications to the Khronos group so that
+ * they can be included in future versions of this file. Please submit changes
+ * by sending them to the public Khronos Bugzilla (http://khronos.org/bugzilla)
+ * by filing a bug against product "EGL" component "Registry".
+ */
+
+#include <KHR/khrplatform.h>
+
+/* Macros used in EGL function prototype declarations.
+ *
+ * EGL functions should be prototyped as:
+ *
+ * EGLAPI return-type EGLAPIENTRY eglFunction(arguments);
+ * typedef return-type (EXPAPIENTRYP PFNEGLFUNCTIONPROC) (arguments);
+ *
+ * KHRONOS_APICALL and KHRONOS_APIENTRY are defined in KHR/khrplatform.h
+ */
+
+#ifndef EGLAPI
+#define EGLAPI KHRONOS_APICALL
+#endif
+
+#ifndef EGLAPIENTRY
+#define EGLAPIENTRY KHRONOS_APIENTRY
+#endif
+#define EGLAPIENTRYP EGLAPIENTRY*
+
+/* The types NativeDisplayType, NativeWindowType, and NativePixmapType
+ * are aliases of window-system-dependent types, such as X Display * or
+ * Windows Device Context. They must be defined in platform-specific
+ * code below. The EGL-prefixed versions of Native*Type are the same
+ * types, renamed in EGL 1.3 so all types in the API start with "EGL".
+ *
+ * Khronos STRONGLY RECOMMENDS that you use the default definitions
+ * provided below, since these changes affect both binary and source
+ * portability of applications using EGL running on different EGL
+ * implementations.
+ */
+
+#if defined(_WIN32) || defined(__VC32__) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) /* Win32 and WinCE */
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN 1
+#endif
+#include <windows.h>
+
+typedef HDC EGLNativeDisplayType;
+typedef HBITMAP EGLNativePixmapType;
+typedef HWND EGLNativeWindowType;
+
+#elif defined(__WINSCW__) || defined(__SYMBIAN32__) /* Symbian */
+
+typedef int EGLNativeDisplayType;
+typedef void *EGLNativeWindowType;
+typedef void *EGLNativePixmapType;
+
+#elif defined(WL_EGL_PLATFORM)
+
+typedef struct wl_display *EGLNativeDisplayType;
+typedef struct wl_egl_pixmap *EGLNativePixmapType;
+typedef struct wl_egl_window *EGLNativeWindowType;
+
+#elif defined(__GBM__)
+
+typedef struct gbm_device *EGLNativeDisplayType;
+typedef struct gbm_bo *EGLNativePixmapType;
+typedef void *EGLNativeWindowType;
+
+#elif defined(ANDROID) /* Android */
+
+struct ANativeWindow;
+struct egl_native_pixmap_t;
+
+typedef struct ANativeWindow *EGLNativeWindowType;
+typedef struct egl_native_pixmap_t *EGLNativePixmapType;
+typedef void *EGLNativeDisplayType;
+
+#elif defined(__unix__)
+
+/* don't include the X headers here, some define clash with Qt5 symbols */
+#if 1
+
+typedef struct _XDisplay *EGLNativeDisplayType;
+typedef unsigned long EGLNativePixmapType;
+typedef unsigned long EGLNativeWindowType;
+
+#else
+
+/* X11 (tentative) */
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+
+typedef Display *EGLNativeDisplayType;
+typedef Pixmap EGLNativePixmapType;
+typedef Window EGLNativeWindowType;
+
+#endif /* MESA_EGL_NO_X11_HEADERS */
+
+#else
+#error "Platform not recognized"
+#endif
+
+/* EGL 1.2 types, renamed for consistency in EGL 1.3 */
+typedef EGLNativeDisplayType NativeDisplayType;
+typedef EGLNativePixmapType NativePixmapType;
+typedef EGLNativeWindowType NativeWindowType;
+
+
+/* Define EGLint. This must be a signed integral type large enough to contain
+ * all legal attribute names and values passed into and out of EGL, whether
+ * their type is boolean, bitmask, enumerant (symbolic constant), integer,
+ * handle, or other. While in general a 32-bit integer will suffice, if
+ * handles are 64 bit types, then EGLint should be defined as a signed 64-bit
+ * integer type.
+ */
+typedef khronos_int32_t EGLint;
+
+#endif /* __eglplatform_h */
diff --git a/recipes-bsp/tdx-nv-binaries/files/gles.pc b/recipes-bsp/tdx-nv-binaries/files/gles.pc
new file mode 100644
index 0000000..91387c9
--- /dev/null
+++ b/recipes-bsp/tdx-nv-binaries/files/gles.pc
@@ -0,0 +1,10 @@
+prefix=/usr
+exec_prefix=${prefix}
+libdir=/usr/lib
+includedir=/usr/include
+
+Name: glesv2
+Description: OpenGL ES 1.1 implementation
+Version: 1.1
+Cflags: -I${includedir}/GLES
+Libs: -L${libdir} -lGLESv1_CM
diff --git a/recipes-bsp/tdx-nv-binaries/files/glesv2.pc b/recipes-bsp/tdx-nv-binaries/files/glesv2.pc
new file mode 100644
index 0000000..356a1cb
--- /dev/null
+++ b/recipes-bsp/tdx-nv-binaries/files/glesv2.pc
@@ -0,0 +1,10 @@
+prefix=/usr
+exec_prefix=${prefix}
+libdir=/usr/lib
+includedir=/usr/include
+
+Name: glesv2
+Description: OpenGL ES 2 implementation
+Version: 2
+Cflags: -I${includedir}/GLESv2
+Libs: -L${libdir} -lGLESv2
diff --git a/recipes-bsp/tdx-nv-binaries/files/khronos_headers.tgz b/recipes-bsp/tdx-nv-binaries/files/khronos_headers.tgz
new file mode 100644
index 0000000..5eb5db7
--- /dev/null
+++ b/recipes-bsp/tdx-nv-binaries/files/khronos_headers.tgz
Binary files differ
diff --git a/recipes-bsp/tdx-nv-binaries/files/mimeapps.list b/recipes-bsp/tdx-nv-binaries/files/mimeapps.list
new file mode 100644
index 0000000..6a513dc
--- /dev/null
+++ b/recipes-bsp/tdx-nv-binaries/files/mimeapps.list
@@ -0,0 +1,10 @@
+[Added Associations]
+video/mpeg=nvgstplayer.desktop;
+video/x-msvideo=nvgstplayer.desktop;
+video/mp4=nvgstplayer.desktop;
+video/quicktime=nvgstplayer.desktop;
+video/x-ms-wmv=nvgstplayer.desktop;
+video/x-matroska=cd nvgstplayer.desktop;
+audio/mpeg=nvgstplayer.desktop;
+audio/basic=aplay.desktop;
+audio/x-wav=aplay.desktop;
diff --git a/recipes-bsp/tdx-nv-binaries/files/nvgstplayer.desktop b/recipes-bsp/tdx-nv-binaries/files/nvgstplayer.desktop
new file mode 100644
index 0000000..f85659c
--- /dev/null
+++ b/recipes-bsp/tdx-nv-binaries/files/nvgstplayer.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=nvgstplayer
+Exec=nvgstplayer --uri %u
+Terminal=true
+NoDisplay=true
diff --git a/recipes-bsp/tdx-nv-binaries/files/nvsamples-hardfp.patch b/recipes-bsp/tdx-nv-binaries/files/nvsamples-hardfp.patch
new file mode 100644
index 0000000..43376d7
--- /dev/null
+++ b/recipes-bsp/tdx-nv-binaries/files/nvsamples-hardfp.patch
Binary files differ
diff --git a/recipes-bsp/tdx-nv-binaries/files/nvsamples-no-binary-shaders.patch b/recipes-bsp/tdx-nv-binaries/files/nvsamples-no-binary-shaders.patch
new file mode 100644
index 0000000..73b27a1
--- /dev/null
+++ b/recipes-bsp/tdx-nv-binaries/files/nvsamples-no-binary-shaders.patch
@@ -0,0 +1,93 @@
+diff -Naur nvsamples.orig/make/nvdefs.mk nvsamples/make/nvdefs.mk
+--- nvsamples.orig/make/nvdefs.mk 2012-09-10 19:16:45.299731097 +0200
++++ nvsamples/make/nvdefs.mk 2012-09-24 19:41:40.659811178 +0200
+@@ -86,7 +86,8 @@
+
+ NV_CGDIR = $(NV_TOPDIR)/utils/Cg
+ HEXIFY = $(NV_CGDIR)/hexify.pl
+-CGC = $(NV_CGDIR)/$(NV_HOST_OSTYPE)/cgc -quiet
++#prevent binary shaders, the L4T OpenGL drivers do not support them
++#CGC = $(NV_CGDIR)/$(NV_HOST_OSTYPE)/cgc -quiet
+ SHADER_FIX = $(NV_CGDIR)/$(NV_HOST_OSTYPE)/shaderfix
+ CGC_CG = $(CGC)
+ CGC_GLSL = $(CGC) -ogles
+@@ -124,3 +127,10 @@
+ $(CGC_CG_FRG) -o $*.tmp $<
+ $(SHADER_FIX) -o $@ $*.tmp
+ rm -rf $*.tmp
++
++#deploy source shaders in headerfiles
++%.hglslv: %.glslv
++ $(HEXIFY) $< $@
++
++%.hglslf: %.glslf
++ $(HEXIFY) $< $@
+
+diff -Naur nvsamples.orig/samples/opengles2/bubble/shaders.c nvsamples/samples/opengles2/bubble/shaders.c
+--- nvsamples.orig/samples/opengles2/bubble/shaders.c 2011-05-04 13:36:25.000000000 +0200
++++ nvsamples/samples/opengles2/bubble/shaders.c 2012-10-16 14:17:57.593654157 +0200
+@@ -88,16 +88,16 @@
+ // Otherwise, load and compile the shader sources
+ prog_bubble =
+ NvGl2DemoLoadShaderSources(
+- "bubble_vert.glslv", "bubble_frag.glslf", GL_FALSE);
++ "shaders/bubble_vert.glslv", "shaders/bubble_frag.glslf", GL_FALSE);
+ prog_mesh =
+ NvGl2DemoLoadShaderSources(
+- "mesh_vert.glslv", "mesh_frag.glslf", GL_FALSE);
++ "shaders/mesh_vert.glslv", "shaders/mesh_frag.glslf", GL_FALSE);
+ prog_cube =
+ NvGl2DemoLoadShaderSources(
+- "envCube_vert.glslv", "envCube_frag.glslf", GL_FALSE);
++ "shaders/envCube_vert.glslv", "shaders/envCube_frag.glslf", GL_FALSE);
+ prog_mouse =
+ NvGl2DemoLoadShaderSources(
+- "mouse_vert.glslv", "mouse_frag.glslf", GL_FALSE);
++ "shaders/mouse_vert.glslv", "shaders/mouse_frag.glslf", GL_FALSE);
+ # endif
+
+ success = prog_bubble && prog_mesh && prog_cube && prog_mouse;
+diff -Naur nvsamples.orig/samples/opengles2/ctree/shaders.c nvsamples/samples/opengles2/ctree/shaders.c
+--- nvsamples.orig/samples/opengles2/ctree/shaders.c 2011-05-04 13:36:26.000000000 +0200
++++ nvsamples/samples/opengles2/ctree/shaders.c 2012-10-16 14:17:16.193651084 +0200
+@@ -130,22 +130,22 @@
+ // Otherwise, load and compile the shader sources
+ prog_solids =
+ NvGl2DemoLoadShaderSources(
+- "lighting_vert.glslv", "solids_frag.glslf", GL_FALSE);
++ "shaders/lighting_vert.glslv", "shaders/solids_frag.glslf", GL_FALSE);
+ prog_leaves =
+ NvGl2DemoLoadShaderSources(
+- "lighting_vert.glslv", "leaves_frag.glslf", GL_FALSE);
++ "shaders/lighting_vert.glslv", "shaders/leaves_frag.glslf", GL_FALSE);
+ prog_simplecol =
+ NvGl2DemoLoadShaderSources(
+- "simplecol_vert.glslv", "simplecol_frag.glslf", GL_FALSE);
++ "shaders/simplecol_vert.glslv", "shaders/simplecol_frag.glslf", GL_FALSE);
+ prog_simpletex =
+ NvGl2DemoLoadShaderSources(
+- "simpletex_vert.glslv", "simpletex_frag.glslf", GL_FALSE);
++ "shaders/simpletex_vert.glslv", "shaders/simpletex_frag.glslf", GL_FALSE);
+ prog_overlaycol =
+ NvGl2DemoLoadShaderSources(
+- "overlaycol_vert.glslv", "overlaycol_frag.glslf", GL_FALSE);
++ "shaders/overlaycol_vert.glslv", "shaders/overlaycol_frag.glslf", GL_FALSE);
+ prog_overlaytex =
+ NvGl2DemoLoadShaderSources(
+- "overlaytex_vert.glslv", "overlaytex_frag.glslf", GL_FALSE);
++ "shaders/overlaytex_vert.glslv", "shaders/overlaytex_frag.glslf", GL_FALSE);
+ # endif
+ success = prog_solids && prog_leaves
+ && prog_simplecol && prog_simpletex
+diff -Naur nvsamples.orig/samples/opengles2/gears/gears.c nvsamples/samples/opengles2/gears/gears.c
+--- nvsamples.orig/samples/opengles2/gears/gears.c 2011-05-04 13:36:27.000000000 +0200
++++ nvsamples/samples/opengles2/gears/gears.c 2012-10-16 14:14:51.433680786 +0200
+@@ -393,7 +393,7 @@
+ // Otherwise, load and compile the shader source
+ gearShaderProgram =
+ NvGl2DemoLoadShaderSources(
+- "gears_vert.glslv", "gears_frag.glslf", GL_FALSE);
++ "shaders/gears_vert.glslv", "shaders/gears_frag.glslf", GL_FALSE);
+ # endif
+
+ // Use the program we just loaded
diff --git a/recipes-bsp/tdx-nv-binaries/files/nvsamples-oe.patch b/recipes-bsp/tdx-nv-binaries/files/nvsamples-oe.patch
new file mode 100644
index 0000000..5b8e137
--- /dev/null
+++ b/recipes-bsp/tdx-nv-binaries/files/nvsamples-oe.patch
@@ -0,0 +1,50 @@
+diff -Naur nvsamples-1.0-r0.orig/nvsamples/make/nvdefs.mk nvsamples-1.0-r0/nvsamples/make/nvdefs.mk
+--- nvsamples/make/nvdefs.mk.orig 2011-12-07 10:22:49.000000000 +0100
++++ nvsamples/make/nvdefs.mk 2012-07-07 12:37:13.000000000 +0200
+@@ -1,4 +1,4 @@
+-NV_TOPDIR = $(HOME)/nvsamples
++NV_TOPDIR = $(WORKDIR)/nvsamples
+ NV_PLATFORM_DIR = $(NV_TOPDIR)
+ NV_KERNDIR = $(NV_TOPDIR)/../kernel
+
+@@ -42,17 +42,13 @@
+ NV_PLATFORM_CPPFLAGS += -DKD
+ endif
+
+-NV_PLATFORM_LDFLAGS =
++NV_PLATFORM_LDFLAGS = -L/usr/X11R6.4/lib -lX11 -lICE -lSM
+
+ NV_PLATFORM_SDK_INC_DIR = $(NV_TOPDIR)/include
+ NV_PLATFORM_SDK_LIB_DIR = $(NV_TOPDIR)/lib-target
+-ROOTFS_LIB_DIR = $(NV_TOPDIR)/../T20_LinuxImageV1.0Beta4/rootfs/usr/lib
+
+ NV_PLATFORM_SDK_INC = -I$(NV_PLATFORM_SDK_INC_DIR)
+-NV_PLATFORM_SDK_LIB = -L$(NV_PLATFORM_SDK_LIB_DIR) \
+- -L$(ROOTFS_LIB_DIR) \
+- -Xlinker -rpath-link \
+- -Xlinker $(ROOTFS_LIB_DIR)
++NV_PLATFORM_SDK_LIB = -L$(NV_PLATFORM_SDK_LIB_DIR)
+ NV_PLATFORM_OPT = -Os -O2
+ NV_PLATFORM_MATHLIB = -lm
+ NV_PLATFORM_THREADLIB = -lpthread
+@@ -80,13 +76,13 @@
+
+ # compiler utilities
+
+-CROSSBIN = $(NV_TOPDIR)/../arm-2009q3/bin/arm-none-linux-gnueabi-
+-CC = $(CROSSBIN)gcc
+-CXX = $(CROSSBIN)g++
+-LD = $(CROSSBIN)gcc
+-AR = $(CROSSBIN)ar
+-RANLIB = $(CROSSBIN)ranlib
+-STRIP = $(CROSSBIN)strip
++CROSSBIN = arm-angstrom-linux-gnueabi-
++CC ?= $(CROSSBIN)gcc
++CXX ?= $(CROSSBIN)g++
++LD = $(CC)
++AR ?= $(CROSSBIN)ar
++RANLIB ?= $(CROSSBIN)ranlib
++STRIP ?= $(CROSSBIN)strip
+
+ NV_CGDIR = $(NV_TOPDIR)/utils/Cg
+ HEXIFY = $(NV_CGDIR)/hexify.pl
diff --git a/recipes-bsp/tdx-nv-binaries/nvsamples.bb b/recipes-bsp/tdx-nv-binaries/nvsamples.bb
new file mode 100644
index 0000000..493ec8f
--- /dev/null
+++ b/recipes-bsp/tdx-nv-binaries/nvsamples.bb
@@ -0,0 +1,59 @@
+SECTION = "graphical/utils"
+SUMMARY = "Nvidia samples for OpenGL ES, OpenGL ES headers"
+LICENSE = "CLOSED"
+DEPENDS = "tdx-nv-binaries virtual/libx11 libsm libice"
+
+PR = "r1"
+
+PARALLEL_MAKE = ""
+
+SRC_URI = " \
+ http://developer.toradex.com/files/toradex-dev/uploads/media/Colibri/Linux/Samples/nvsamples.tar.bz2 \
+ file://nvsamples-oe.patch \
+ file://nvsamples-no-binary-shaders.patch \
+ file://nvsamples-hardfp.patch \
+"
+
+S = "${WORKDIR}/nvsamples"
+
+SRC_URI[md5sum] = "240b0beb0056dde2e6ac1538dc8b6684"
+SRC_URI[sha256sum] = "2638beea80fd85fdc5f9443e6959c210e275e627f662266cd404ce7c68b0806d"
+
+#no gnu_hash in NVIDIA binaries, skip QA for this package
+INSANE_SKIP_${PN} = "dev-so ldflags"
+
+FILES_${PN} += " \
+ /home/root/textures/* \
+ /home/root/shaders/* \
+"
+
+do_compile () {
+ cd ${S}/samples/tools/nvtexfont2
+ oe_runmake clean
+ oe_runmake WORKDIR=${WORKDIR}
+ ln -sf ../samples/tools/nvtexfont2/libnvtexfont2.a ${S}/lib-target/
+
+ cd ${S}/samples/tools/nvgl2demo_common
+ oe_runmake clean
+ oe_runmake WORKDIR=${WORKDIR}
+ ln -sf ../samples/tools/nvgl2demo_common/libnvgl2demo_common.a ${S}/lib-target/
+
+ cd ${S}/samples/opengles2
+ oe_runmake clean
+ oe_runmake WORKDIR=${WORKDIR}
+}
+
+do_install () {
+ # install the sample code
+ install -d ${D}${bindir}
+ install -d ${D}/home/root/textures
+ install -d ${D}/home/root/shaders
+ install -m 0755 ${S}/samples/opengles2/ctree/ctree ${D}${bindir}
+ install -m 0644 ${S}/samples/opengles2/ctree/textures/* ${D}/home/root/textures
+ install -m 0644 ${S}/samples/opengles2/ctree/*.glsl? ${D}/home/root/shaders
+ install -m 0755 ${S}/samples/opengles2/bubble/bubble ${D}${bindir}
+ install -m 0644 ${S}/samples/opengles2/bubble/textures/* ${D}/home/root/textures
+ install -m 0644 ${S}/samples/opengles2/bubble/*.glsl? ${D}/home/root/shaders
+ install -m 0755 ${S}/samples/opengles2/gears/gears ${D}${bindir}
+ install -m 0644 ${S}/samples/opengles2/gears/*.glsl? ${D}/home/root/shaders
+}
diff --git a/recipes-bsp/tdx-nv-binaries/tdx-nv-binaries.bb b/recipes-bsp/tdx-nv-binaries/tdx-nv-binaries.bb
new file mode 100644
index 0000000..cd5f668
--- /dev/null
+++ b/recipes-bsp/tdx-nv-binaries/tdx-nv-binaries.bb
@@ -0,0 +1,187 @@
+SUMMARY = "binary files from Nvidia along with their configuration"
+LICENSE = "CLOSED & SGI & Khronos"
+PR = "r19"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+COMPATIBLE_MACHINE = "(tegra)"
+
+PROVIDES += "virtual/egl virtual/libgles1 virtual/libgles2"
+
+# the khronos headers are taken from here: https://www.khronos.org/registry/khronos_headers.tgz
+# this tarball changes from time to time breaking the receipe, thus it is provided with the recipe
+SRC_COMMON = " \
+ file://aplay.desktop \
+ file://egl.pc \
+ file://eglplatform.h \
+ file://gles.pc \
+ file://glesv2.pc \
+ file://khronos_headers.tgz \
+ file://mimeapps.list \
+ file://nvgstplayer.desktop \
+ https://www.khronos.org/registry/omxil/api/1.1.2/OpenMAX_IL_1_1_2_Header.zip;name=openmax-h;unpack=no \
+"
+
+SRC_URI_tegra2 = " \
+ http://developer.download.nvidia.com/mobile/tegra/l4t/r16.5.0/ventana_release_armhf/Tegra20_Linux-codecs_R16.5_armhf.tbz2;name=t20codecs \
+ http://developer.download.nvidia.com/mobile/tegra/l4t/r16.5.0/ventana_release_armhf/Tegra20_Linux_R16.5_armhf.tbz2;name=t20drivers \
+ ${SRC_COMMON} \
+"
+
+SRC_URI_tegra3 = " \
+ http://developer.download.nvidia.com/mobile/tegra/l4t/r16.5.0/cardhu_release_armhf/Tegra30_Linux-codecs_R16.5_armhf.tbz2;name=t30codecs \
+ http://developer.download.nvidia.com/mobile/tegra/l4t/r16.5.0/cardhu_release_armhf/Tegra30_Linux_R16.5_armhf.tbz2;name=t30drivers \
+ http://developer.toradex.com/files/toradex-dev/uploads/media/Colibri/Linux/Extra/libgstomx.so;name=libgstomx \
+ ${SRC_COMMON} \
+"
+
+SRC_URI[openmax-h.md5sum] = "402a7600397c341895cfecbbe1f4e028"
+SRC_URI[openmax-h.sha256sum] = "e7159c88185df60a0dbb28583815067c31285a1f1d4652f6752a7329ccb534d1"
+
+SRC_URI[t20codecs.md5sum] = "03da7451b755094c61dade6250f1ad0a"
+SRC_URI[t20codecs.sha256sum] = "0c5fe818d5e0bdc83c24b7cb0db4f87705244258bfe1925d0a0a0698e3bf712b"
+SRC_URI[t20drivers.md5sum] = "5252b747668c14376b3f82d08debad2c"
+SRC_URI[t20drivers.sha256sum] = "02b7a83b29cec59cf275b98f0de0fc87a24ffa25593af6af729cd2e881c41587"
+
+SRC_URI[t30codecs.md5sum] = "03a0b726f18a26ed379c62b83119e497"
+SRC_URI[t30codecs.sha256sum] = "640df86c47d0dd6cbfc15eff49ee146a964c2a0362fe52ee6880c84e08b7a98b"
+SRC_URI[t30drivers.md5sum] = "8759be1c7b93511cf70939df28b8af51"
+SRC_URI[t30drivers.sha256sum] = "2288ad9ce30239975208cbd5fd896791c9d37d87ca8d30b51f04bacc74835427"
+SRC_URI[libgstomx.md5sum] = "faa6ee38fb1b7aba7c6c7f98f6b2cedd"
+SRC_URI[libgstomx.sha256sum] = "844c2f3ecb8498a9b287c2b2bc6184de75c2cf7d76f64f0a7749e76e1a37a1dc"
+
+
+# xserver-xorg driver ABI version to be used by the symlink, must match the required ABI version from the used xserver
+XSERVER_DRIVER_ABI_REQUIRED = "14"
+
+LIC_FILES_CHKSUM = " \
+ file://../khronos_headers/GLES2/gl2.h;beginline=8;endline=29;md5=c0e8cc16602f8077310fb00bbf128ef6 \
+ file://${WORKDIR}/Linux_for_Tegra/nv_tegra/LICENSE;md5=d88b0db2ba7f6dfe70852c64b2fce6ce \
+ file://${WORKDIR}/Tegra_Software_License_Agreement-Tegra-Linux-codecs.txt;md5=47cc79e762df48980a032c610cfc172f \
+ file://${WORKDIR}/Linux_for_Tegra/nv_tegra/nv_sample_apps/LICENSE.gst-openmax;md5=a7d467726825e72551082b781a94d09d \
+"
+
+PACKAGES = "${PN}-dbg ${PN}-restricted-codecs ${PN}-nv-gstapps ${PN} ${PN}-dev"
+
+FILES_${PN}-dbg += " \
+ /usr/lib/gstreamer-0.10/.debug \
+"
+FILES_${PN} += " \
+ ${sysconfdir}/X11/def* \
+ ${sysconfdir}/X11/xorg.conf.* \
+ ${sysconfdir}/init/* \
+ ${sysconfdir}/udev/rules.d/* \
+ ${sysconfdir}/init/nv* \
+ ${sysconfdir}/init/wpa* \
+ /lib/firmware/* \
+ /usr/lib/lib* \
+ /usr/lib/xorg/* \
+ /usr/lib/gstreamer*/* \
+ /home/root/.local/share/applications/* \
+"
+FILES_${PN}-restricted-codecs += " \
+ /lib/firmware/*.axf \
+"
+FILES_${PN}-nv-gstapps += " \
+ /usr/bin/* \
+ /usr/share/doc/nv_gstapps/* \
+"
+
+#no gnu_hash in NVIDIA binaries, skip QA dev-so for this package
+#we have symlinks ending in .so, skip QA ldflags for this package
+#inhibit warnings about files being stripped
+INSANE_SKIP_${PN} = "build-deps dev-so ldflags already-stripped textrel"
+INSANE_SKIP_${PN}-nv-gstapps = "build-deps dev-so ldflags already-stripped textrel file-rdeps"
+
+do_patch () {
+ mkdir -p OpenMAX/il
+ unzip -o -d OpenMAX/il OpenMAX_IL_1_1_2_Header.zip
+}
+
+do_compile () {
+ #unpack the different packages
+ #nvidia drivers
+ mkdir nvidia_drivers
+ tar -C nvidia_drivers -xjf ${WORKDIR}/Linux_for_Tegra/nv_tegra/nvidia_drivers.tbz2
+ tar -C nvidia_drivers -xjf ${WORKDIR}/Linux_for_Tegra/nv_tegra/config.tbz2
+
+ #nvidia sample gstreamer apps
+ mkdir -p nvgstapps/usr/share/doc/nv_gstapps
+ tar -C nvgstapps -xjf ${WORKDIR}/Linux_for_Tegra/nv_tegra/nv_sample_apps/nvgstapps.tbz2
+ cp ${WORKDIR}/Linux_for_Tegra/nv_tegra/nv_sample_apps/nv*.txt nvgstapps/usr/share/doc/nv_gstapps/
+
+ #restricted codecs
+ mkdir restricted_codecs
+ tar -C restricted_codecs -xjf ${WORKDIR}/restricted_codecs.tbz2
+}
+
+do_install () {
+ #nvidia_driver
+ install -d ${D}/usr/lib/xorg/modules/drivers ${D}/home/root/.local/share/applications/
+ install -d ${D}/lib/firmware/
+ install -d ${D}/${sysconfdir}/X11 ${D}/${sysconfdir}/init ${D}/${sysconfdir}/udev/rules.d
+ install -m 0644 nvidia_drivers/${sysconfdir}/X11/xorg.conf ${D}/${sysconfdir}/X11/xorg.conf.nvidia
+ install -m 0755 nvidia_drivers/${sysconfdir}/init/* ${D}/${sysconfdir}/init/
+ install -m 0644 nvidia_drivers/${sysconfdir}/udev/rules.d/* ${D}/${sysconfdir}/udev/rules.d/
+ install -m 0644 nvidia_drivers/${sysconfdir}/nv* ${D}/${sysconfdir}/
+ install -m 0644 nvidia_drivers/${sysconfdir}/wpa_supplicant.conf ${D}/${sysconfdir}/wpa_supplicant.conf.nvidia
+ install -m 0644 nvidia_drivers/lib/firmware/* ${D}/lib/firmware/
+ install -m 0644 nvidia_drivers/usr/lib/*.so ${D}/usr/lib/
+ install -m 0644 nvidia_drivers/usr/lib/*.so.? ${D}/usr/lib/
+ rm ${D}/usr/lib/libjpeg.so
+ install -m 0644 nvidia_drivers/usr/lib/xorg/modules/drivers/* ${D}/usr/lib/xorg/modules/drivers/
+ ln -s tegra_drv.abi${XSERVER_DRIVER_ABI_REQUIRED}.so ${D}/usr/lib/xorg/modules/drivers/tegra_drv.so
+ # create symlink to the shared libs for development, *.so -> *.so.x
+ export LIBNAME=`ls ${D}/usr/lib/libGLESv2.so.?`
+ export LIBNAME=`basename $LIBNAME`
+ ln -s $LIBNAME ${D}/usr/lib/libGLESv2.so
+ export LIBNAME=`ls ${D}/usr/lib/libEGL.so.?`
+ export LIBNAME=`basename $LIBNAME`
+ ln -s $LIBNAME ${D}/usr/lib/libEGL.so
+ export LIBNAME=`ls ${D}/usr/lib/libGLESv1_CM.so.?`
+ export LIBNAME=`basename $LIBNAME`
+ ln -s $LIBNAME ${D}/usr/lib/libGLESv1_CM.so
+
+ #nvidia sample gstreamer apps
+ install -d ${D}/usr/bin ${D}/usr/lib/gstreamer-0.10 ${D}/usr/share/doc/nv_gstapps
+ install -d ${D}/usr/lib/xorg/modules/drivers ${D}/home/root/.local/share/applications/
+ install -m 0755 nvgstapps/usr/bin/* ${D}/usr/bin/
+ install -m 0644 nvgstapps/usr/lib/gstreamer-0.10/*.so ${D}/usr/lib/gstreamer-0.10/
+ install -m 0644 nvgstapps/usr/share/doc/nv_gstapps/* ${D}/usr/share/doc/nv_gstapps/
+ install -m 0644 ${WORKDIR}/*.desktop ${D}/home/root/.local/share/applications/
+ install -m 0644 ${WORKDIR}/mimeapps.list ${D}//home/root/.local/share/applications/
+ ln -s libpcre.so.1 ${D}/usr/lib/libpcre.so.3
+ ln -s libpcreposix.so.0 ${D}/usr/lib/libpcreposix.so.3
+
+ #nvidia restricted codecs
+ install -d ${D}/lib/firmware/
+ install -m 0644 restricted_codecs/lib/firmware/* ${D}/lib/firmware/
+
+ #khronos headers for EGL/GLES/GLES2/OpenMax
+ for dir in EGL GLES GLES2 KD KHR
+ do
+ install -d ${D}${includedir}/$dir
+ install -m 0644 ${WORKDIR}/khronos_headers/$dir/* ${D}${includedir}/$dir
+ done
+
+ #Override eglplatform.h that khronos provide.
+ install -m 0644 ${WORKDIR}/eglplatform.h ${D}${includedir}/EGL/
+
+ dir="OpenMAX/il"
+ install -d ${D}${includedir}/$dir
+ install -m 0644 ${WORKDIR}/$dir/* ${D}${includedir}/$dir
+
+ install -d ${D}/usr/lib/pkgconfig
+ install -m 0644 ${WORKDIR}/*.pc ${D}/usr/lib/pkgconfig/
+}
+
+do_install_append_tegra3 () {
+ #OpenMAX-IL implementation library, evaluation version with fix to validate input frame rate
+ install -m 0644 ${WORKDIR}/libgstomx.so ${D}/usr/lib/gstreamer-0.10/
+}
+
+# Add the ABI dependency at package generation time, as otherwise bitbake will
+# attempt to find a provider for it (and fail) when it does the parse.
+python populate_packages_prepend() {
+ pn = d.getVar("PN", True)
+ d.appendVar("RDEPENDS_" + pn, " xorg-abi-video-${XSERVER_DRIVER_ABI_REQUIRED}")
+}