diff mbox

Add package gpu-viv-bin-mx6q to the freescale-imx directory

Message ID 1368129212-4892-2-git-send-email-h.fijnvandraat@inter.nl.net
State Superseded
Headers show

Commit Message

H.Fijnvandraat@inter.nl.net May 9, 2013, 7:53 p.m. UTC
Signed-off-by: Henk Fijnvandraat <h.fijnvandraat@inter.nl.net>
---
 package/freescale-imx/Config.in                    |    1 +
 package/freescale-imx/gpu-viv-bin-mx6q/Config.in   |   26 +++++++
 ...gpu-viv-bin-mx6q-0001-correct-HAL-include.patch |   18 +++++
 .../gpu-viv-bin-mx6q/gpu-viv-bin-mx6q.mk           |   77 ++++++++++++++++++++
 4 files changed, 122 insertions(+)
 create mode 100644 package/freescale-imx/gpu-viv-bin-mx6q/Config.in
 create mode 100644 package/freescale-imx/gpu-viv-bin-mx6q/gpu-viv-bin-mx6q-0001-correct-HAL-include.patch
 create mode 100644 package/freescale-imx/gpu-viv-bin-mx6q/gpu-viv-bin-mx6q.mk

Comments

Arnout Vandecappelle May 10, 2013, 10:26 p.m. UTC | #1
We usually give a title like:

gpu-viv-bin-mx6q: new package

  Also, you should probably add this to the series that moves everything 
imx-related into the freescale-imx directory, because it depends on that 
move.

On 09/05/13 21:53, Henk Fijnvandraat wrote:
> Signed-off-by: Henk Fijnvandraat <h.fijnvandraat@inter.nl.net>
[snip]
> diff --git a/package/freescale-imx/gpu-viv-bin-mx6q/Config.in b/package/freescale-imx/gpu-viv-bin-mx6q/Config.in
> new file mode 100644
> index 0000000..e09addb
> --- /dev/null
> +++ b/package/freescale-imx/gpu-viv-bin-mx6q/Config.in
> @@ -0,0 +1,26 @@
> +config BR2_PACKAGE_GPU_VIV_BIN_IMX6Q
> +	bool "gpu-viv-bin-mx6q"
> +	select BR2_PACKAGE_HAS_OPENGL_EGL
> +	select BR2_PACKAGE_HAS_OPENGL_ES
> +	depends on BR2_arm # Only relevant for i.MX6
> +	 # Library binaries are linked against libc.so.6
> +	depends on BR2_TOOLCHAIN_CTNG_glibc || \
> +		BR2_TOOLCHAIN_CTNG_eglibc || \
> +		BR2_TOOLCHAIN_EXTERNAL_GLIBC
> +	help
> +	  Userspace libraries for Vivante GPU on i.MX6 platforms
> +
> +	  It contains libraries and headers for GLES, OpenCL, and OpenVG.
> +	  It also contains a DRI plugin for X11. It also contains a
> +	  plugin for DirectFB-1.4.0, but that doesn't work together with
> +	  buildroot's DirectFB-1.4.16.

  It probably would work with 1.4.16, but buildroot has 1.6.3.

> +
> +	  This library is provided by Freescale as-is and doesn't have
> +	  an upstream.
> +
> +if BR2_PACKAGE_GPU_VIV_BIN_IMX6Q
> +config BR2_PACKAGE_GPU_VIV_BIN_IMX6Q_EXAMPLES
> +	bool "gpu-viv-bin-mx6q-examples"

  This config option should have a more descriptive name, e.g.
	bool "Install examples"

  Note that it is not necessary to repeat the package name, because the 
option will be indented under gpu-viv-bin-mx6q.

> +	help
> +	  Copy the Vivante examples to the Target
> +endif
> diff --git a/package/freescale-imx/gpu-viv-bin-mx6q/gpu-viv-bin-mx6q-0001-correct-HAL-include.patch b/package/freescale-imx/gpu-viv-bin-mx6q/gpu-viv-bin-mx6q-0001-correct-HAL-include.patch
> new file mode 100644
> index 0000000..f63bb9a
> --- /dev/null
> +++ b/package/freescale-imx/gpu-viv-bin-mx6q/gpu-viv-bin-mx6q-0001-correct-HAL-include.patch
> @@ -0,0 +1,18 @@
> +Correct the directory path for gc_hal_eglplatform_type.h
> +
> +Signed-off-by: Henk Fijnvandraat <h.fijnvandraat@inter.nl.net>
> +
> +Only in gpu-viv-bin-mx6q-1.1.0: etc
> +diff -rup gpu-viv-bin-mx6q-1.1.0-orig/usr/include/gc_vdk_types.h gpu-viv-bin-mx6q-1.1.0/usr/include/gc_vdk_types.h
> +--- gpu-viv-bin-mx6q-1.1.0-orig/usr/include/gc_vdk_types.h	2012-12-18 10:35:55.000000000 +0100
> ++++ gpu-viv-bin-mx6q-1.1.0/usr/include/gc_vdk_types.h	2013-05-09 21:09:28.080138681 +0200
> +@@ -39,7 +39,7 @@ extern "C" {
> + #endif
> +
> + #include <EGL/egl.h>
> +-#include "gc_hal_eglplatform_type.h"
> ++#include <HAL/gc_hal_eglplatform_type.h>
> +
> +
> + /*******************************************************************************
> +Only in gpu-viv-bin-mx6q-1.1.0/usr/include: gc_vdk_types.h~
> diff --git a/package/freescale-imx/gpu-viv-bin-mx6q/gpu-viv-bin-mx6q.mk b/package/freescale-imx/gpu-viv-bin-mx6q/gpu-viv-bin-mx6q.mk
> new file mode 100644
> index 0000000..d003443
> --- /dev/null
> +++ b/package/freescale-imx/gpu-viv-bin-mx6q/gpu-viv-bin-mx6q.mk
> @@ -0,0 +1,77 @@
> +#############################################################
> +#
> +# gpu-viv-bin-mx6q
> +#
> +#############################################################
> +
> +GPU_VIV_BIN_MX6Q_VERSION = $(IMX_VERSION_LEVEL)
> +GPU_VIV_BIN_MX6Q_SITE    = $(IMX_MIRROR_SITE)
> +GPU_VIV_BIN_MX6Q_SOURCE  = gpu-viv-bin-mx6q-$(GPU_VIV_BIN_MX6Q_VERSION).bin
> +
> +GPU_VIV_BIN_MX6Q_INSTALL_STAGING = YES
> +
> +# GPU_VIV_BIN_MX6Q_LICENSE = Freescale Semiconductor Software License Agreement
> +# No license file is included in the archive; we could extract it from
> +# the self-extractor, but that's just too much effort.
> +# This is a legal minefield: the EULA specifies that
> +# the Board Support Package includes software and hardware (sic!)
> +# for which a separate license is needed...
> +GPU_VIV_BIN_MX6Q_REDISTRIBUTE = NO
> +
> +# The archive is a shell-self-extractor of a bzipped tar. It happens
> +# to extract in the correct directory (gpu-viv-bin-mx6q-x.y.z)
> +# The --force makes sure it doesn't fail if the source dir already exists.
> +# The --auto-accept skips the license check - not needed for us
> +# because we have legal-info.
> +define GPU_VIV_BIN_MX6Q_EXTRACT_CMDS
> +	cd $(BUILD_DIR); \
> +	sh $(DL_DIR)/$(GPU_VIV_BIN_MX6Q_SOURCE) --force --auto-accept
> +endef
> +
> +define GPU_VIV_BIN_MX6Q_INSTALL_STAGING_CMDS
> +	cp -r $(@D)/usr/* $(STAGING_DIR)/usr
> +endef
> +
> +ifdef $(BR2_PACKAGE_GPU_VIV_BIN_IMX6Q_EXAMPLES)
> +define GPU_VIV_BIN_MX6Q_INSTALL_EXAMPLES
> +	cp -r $(@D)/opt/* $(TARGET_DIR)/opt
> +endef
> +endif
> +
> +ifeq ($(BR2_PACKAGE_XORG7),y)
> +GPU_VIV_BIN_MX6Q_LIB_TARGET = x11

  Actually, I never tested if the x11 version works at all - it may 
depend on a different X11 version than we carry, just like directfb...


  Regards,
  Arnout

> +else
> +# DirectFB is not supported (wrong version)
> +GPU_VIV_BIN_MX6Q_LIB_TARGET = fb
> +endif
> +
> +# Instead of building, we fix up the inconsistencies that exist
> +# in the upstream archive here.
> +# Make sure these commands are idempotent.
> +define GPU_VIV_BIN_MX6Q_BUILD_CMDS
> +	$(SED) 's/defined(LINUX)/defined(__linux__)/g' $(@D)/usr/include/*/*.h
> +	for lib in EGL GAL VIVANTE; do \
> +		ln -sf lib$${lib}-$(GPU_VIV_BIN_MX6Q_LIB_TARGET).so \
> +			$(@D)/usr/lib/lib$${lib}.so; \
> +	done
> +	ln -sf libGL.so.1.2 $(@D)/usr/lib/libGL.so.1
> +	ln -sf libGL.so.1.2 $(@D)/usr/lib/libGL.so
> +endef
> +
> +# On the target, remove the unused libraries.
> +# Note that this is _required_, else ldconfig may create symlinks
> +# to the wrong library
> +define GPU_VIV_BIN_MX6Q_INSTALL_TARGET_CMDS
> +	$(GPU_VIV_BIN_MX6Q_INSTALL_EXAMPLES)
> +	cp -a $(@D)/usr/lib $(TARGET_DIR)/usr
> +	for lib in EGL GAL VIVANTE; do \
> +		for f in $(TARGET_DIR)/usr/lib/lib$${lib}-*.so; do \
> +			case $$f in \
> +				*-$(GPU_VIV_BIN_MX6Q_LIB_TARGET).so) : ;; \
> +				*) $(RM) $$f ;; \
> +			esac; \
> +		done; \
> +	done
> +endef
> +
> +$(eval $(generic-package))
>
Thomas Petazzoni May 11, 2013, 10:20 a.m. UTC | #2
Dear Henk Fijnvandraat,

Arnout made some good comments, I have a few others below.

On Thu,  9 May 2013 21:53:32 +0200, Henk Fijnvandraat wrote:

> diff --git a/package/freescale-imx/gpu-viv-bin-mx6q/gpu-viv-bin-mx6q.mk b/package/freescale-imx/gpu-viv-bin-mx6q/gpu-viv-bin-mx6q.mk
> new file mode 100644
> index 0000000..d003443
> --- /dev/null
> +++ b/package/freescale-imx/gpu-viv-bin-mx6q/gpu-viv-bin-mx6q.mk
> @@ -0,0 +1,77 @@
> +#############################################################
> +#
> +# gpu-viv-bin-mx6q
> +#
> +#############################################################
> +
> +GPU_VIV_BIN_MX6Q_VERSION = $(IMX_VERSION_LEVEL)
> +GPU_VIV_BIN_MX6Q_SITE    = $(IMX_MIRROR_SITE)
> +GPU_VIV_BIN_MX6Q_SOURCE  = gpu-viv-bin-mx6q-$(GPU_VIV_BIN_MX6Q_VERSION).bin
> +
> +GPU_VIV_BIN_MX6Q_INSTALL_STAGING = YES
> +
> +# GPU_VIV_BIN_MX6Q_LICENSE = Freescale Semiconductor Software License Agreement

Why is this in a comment?

> +# No license file is included in the archive; we could extract it from
> +# the self-extractor, but that's just too much effort.
> +# This is a legal minefield: the EULA specifies that
> +# the Board Support Package includes software and hardware (sic!)
> +# for which a separate license is needed...
> +GPU_VIV_BIN_MX6Q_REDISTRIBUTE = NO
> +
> +# The archive is a shell-self-extractor of a bzipped tar. It happens
> +# to extract in the correct directory (gpu-viv-bin-mx6q-x.y.z)
> +# The --force makes sure it doesn't fail if the source dir already exists.
> +# The --auto-accept skips the license check - not needed for us
> +# because we have legal-info.
> +define GPU_VIV_BIN_MX6Q_EXTRACT_CMDS
> +	cd $(BUILD_DIR); \
> +	sh $(DL_DIR)/$(GPU_VIV_BIN_MX6Q_SOURCE) --force --auto-accept
> +endef

I think we generally prefer to have the entire command executed in a
sub-shell, i.e:

	(cd $(BUILD_DIR); \
	 sh $(DL_DIR)/$(GPU_VIV_BIN_MX6Q_SOURCE) --force --auto-accept)

Also, what guarantees us that it will actually be extracted to the
right subfilter in $(BUILD_DIR) ?

> +define GPU_VIV_BIN_MX6Q_INSTALL_STAGING_CMDS
> +	cp -r $(@D)/usr/* $(STAGING_DIR)/usr
> +endef
> +
> +ifdef $(BR2_PACKAGE_GPU_VIV_BIN_IMX6Q_EXAMPLES)
> +define GPU_VIV_BIN_MX6Q_INSTALL_EXAMPLES
> +	cp -r $(@D)/opt/* $(TARGET_DIR)/opt
> +endef
> +endif

Maybe usr/share/gpu-viv-imx6q/examples/ is a better location than opt/ ?

Also, the installation steps should be after the build steps. It
doesn't change anything from a functional point of view, but it's the
way we write all packages, just because it is more logical.

> +ifeq ($(BR2_PACKAGE_XORG7),y)
> +GPU_VIV_BIN_MX6Q_LIB_TARGET = x11
> +else
> +# DirectFB is not supported (wrong version)
> +GPU_VIV_BIN_MX6Q_LIB_TARGET = fb
> +endif

Hum, so if X.org is not selected, this package installs something that
doesn't work? Seems strange.

Also, I see that this installs EGL libraries, I thought EGL was here to
allow the creation of OpenGL contexts when there is no windowing system
such as X.org. For example, with the Rasberry Pi libraries, you can
have EGL+OpenGL and Qt running on top of it, without DirectFB or X.org.
Isn't that also possible here?

Are you sure that the "fb" target actually requires DirectFB ?

> +# Instead of building, we fix up the inconsistencies that exist
> +# in the upstream archive here.
> +# Make sure these commands are idempotent.
> +define GPU_VIV_BIN_MX6Q_BUILD_CMDS
> +	$(SED) 's/defined(LINUX)/defined(__linux__)/g' $(@D)/usr/include/*/*.h
> +	for lib in EGL GAL VIVANTE; do \
> +		ln -sf lib$${lib}-$(GPU_VIV_BIN_MX6Q_LIB_TARGET).so \
> +			$(@D)/usr/lib/lib$${lib}.so; \
> +	done
> +	ln -sf libGL.so.1.2 $(@D)/usr/lib/libGL.so.1
> +	ln -sf libGL.so.1.2 $(@D)/usr/lib/libGL.so
> +endef
> +
> +# On the target, remove the unused libraries.
> +# Note that this is _required_, else ldconfig may create symlinks
> +# to the wrong library
> +define GPU_VIV_BIN_MX6Q_INSTALL_TARGET_CMDS
> +	$(GPU_VIV_BIN_MX6Q_INSTALL_EXAMPLES)
> +	cp -a $(@D)/usr/lib $(TARGET_DIR)/usr
> +	for lib in EGL GAL VIVANTE; do \
> +		for f in $(TARGET_DIR)/usr/lib/lib$${lib}-*.so; do \
> +			case $$f in \
> +				*-$(GPU_VIV_BIN_MX6Q_LIB_TARGET).so) : ;; \
> +				*) $(RM) $$f ;; \
> +			esac; \
> +		done; \
> +	done

Isn't it either to only copy the relevant libraries instead of copying
everything, and then remove everything that's not useful?

Thanks!

Thomas
Arnout Vandecappelle May 12, 2013, 6:43 p.m. UTC | #3
On 11/05/13 12:20, Thomas Petazzoni wrote:
> Dear Henk Fijnvandraat,
>
> Arnout made some good comments, I have a few others below.
>
> On Thu,  9 May 2013 21:53:32 +0200, Henk Fijnvandraat wrote:
[snip]
>> +# The archive is a shell-self-extractor of a bzipped tar. It happens
>> +# to extract in the correct directory (gpu-viv-bin-mx6q-x.y.z)
>> +# The --force makes sure it doesn't fail if the source dir already exists.
>> +# The --auto-accept skips the license check - not needed for us
>> +# because we have legal-info.
>> +define GPU_VIV_BIN_MX6Q_EXTRACT_CMDS
>> +	cd $(BUILD_DIR); \
>> +	sh $(DL_DIR)/$(GPU_VIV_BIN_MX6Q_SOURCE) --force --auto-accept
>> +endef
>
> I think we generally prefer to have the entire command executed in a
> sub-shell, i.e:
>
> 	(cd $(BUILD_DIR); \
> 	 sh $(DL_DIR)/$(GPU_VIV_BIN_MX6Q_SOURCE) --force --auto-accept)

  Begging to differ here... I don't see much point of having three levels 
of shells. make already starts a shell, then we start another shell to 
run the extractor script. The third level added by the () looks pretty 
redundant to me.


> Also, what guarantees us that it will actually be extracted to the
> right subfilter in $(BUILD_DIR) ?

  Well, that's mentioned in the comment above :-). If it would be 
extracted into a different directory, the only option would be to rename 
it - but you still need to know the name of the directory in which it is 
extracted by the extractor script.


>> +define GPU_VIV_BIN_MX6Q_INSTALL_STAGING_CMDS
>> +	cp -r $(@D)/usr/* $(STAGING_DIR)/usr
>> +endef
>> +
>> +ifdef $(BR2_PACKAGE_GPU_VIV_BIN_IMX6Q_EXAMPLES)
>> +define GPU_VIV_BIN_MX6Q_INSTALL_EXAMPLES
>> +	cp -r $(@D)/opt/* $(TARGET_DIR)/opt
>> +endef
>> +endif
>
> Maybe usr/share/gpu-viv-imx6q/examples/ is a better location than opt/ ?

  Agreed, except that normally the share/ directory contains 
platform-independent things like man pages, while the examples are all 
binaries.


> Also, the installation steps should be after the build steps. It
> doesn't change anything from a functional point of view, but it's the
> way we write all packages, just because it is more logical.
>
>> +ifeq ($(BR2_PACKAGE_XORG7),y)
>> +GPU_VIV_BIN_MX6Q_LIB_TARGET = x11
>> +else
>> +# DirectFB is not supported (wrong version)
>> +GPU_VIV_BIN_MX6Q_LIB_TARGET = fb
>> +endif
>
> Hum, so if X.org is not selected, this package installs something that
> doesn't work? Seems strange.

  Comment could be better: directfb (called dfb by this package) doesn't 
work, but fb (= linux framebuffer without windowing layer) works.


> Also, I see that this installs EGL libraries, I thought EGL was here to
> allow the creation of OpenGL contexts when there is no windowing system
> such as X.org. For example, with the Rasberry Pi libraries, you can
> have EGL+OpenGL and Qt running on top of it, without DirectFB or X.org.
> Isn't that also possible here?
>
> Are you sure that the "fb" target actually requires DirectFB ?
>
>> +# Instead of building, we fix up the inconsistencies that exist
>> +# in the upstream archive here.
>> +# Make sure these commands are idempotent.
>> +define GPU_VIV_BIN_MX6Q_BUILD_CMDS
>> +	$(SED) 's/defined(LINUX)/defined(__linux__)/g' $(@D)/usr/include/*/*.h
>> +	for lib in EGL GAL VIVANTE; do \
>> +		ln -sf lib$${lib}-$(GPU_VIV_BIN_MX6Q_LIB_TARGET).so \
>> +			$(@D)/usr/lib/lib$${lib}.so; \
>> +	done
>> +	ln -sf libGL.so.1.2 $(@D)/usr/lib/libGL.so.1
>> +	ln -sf libGL.so.1.2 $(@D)/usr/lib/libGL.so
>> +endef
>> +
>> +# On the target, remove the unused libraries.
>> +# Note that this is _required_, else ldconfig may create symlinks
>> +# to the wrong library
>> +define GPU_VIV_BIN_MX6Q_INSTALL_TARGET_CMDS
>> +	$(GPU_VIV_BIN_MX6Q_INSTALL_EXAMPLES)
>> +	cp -a $(@D)/usr/lib $(TARGET_DIR)/usr
>> +	for lib in EGL GAL VIVANTE; do \
>> +		for f in $(TARGET_DIR)/usr/lib/lib$${lib}-*.so; do \
>> +			case $$f in \
>> +				*-$(GPU_VIV_BIN_MX6Q_LIB_TARGET).so) : ;; \
>> +				*) $(RM) $$f ;; \
>> +			esac; \
>> +		done; \
>> +	done
>
> Isn't it either to only copy the relevant libraries instead of copying
> everything, and then remove everything that's not useful?

  There are 16 libraries to install, so it makes sense to use a wildcard. 
And I couldn't find a glob pattern that excludes the -x11 and -dfb files. 
So removing them was easier.

[In case it wasn't clear: Henk and I collaborated on this patch]

  Regards,
  Arnout

>
> Thanks!
>
> Thomas
>
diff mbox

Patch

diff --git a/package/freescale-imx/Config.in b/package/freescale-imx/Config.in
index 8d0e347..c044608 100644
--- a/package/freescale-imx/Config.in
+++ b/package/freescale-imx/Config.in
@@ -12,5 +12,6 @@  menuconfig BR2_PACKAGE_IMX
 
 if BR2_PACKAGE_IMX
 source "package/freescale-imx/imx-lib/Config.in"
+source "package/freescale-imx/gpu-viv-bin-mx6q/Config.in"
 source "package/freescale-imx/firmware-imx/Config.in"
 endif
diff --git a/package/freescale-imx/gpu-viv-bin-mx6q/Config.in b/package/freescale-imx/gpu-viv-bin-mx6q/Config.in
new file mode 100644
index 0000000..e09addb
--- /dev/null
+++ b/package/freescale-imx/gpu-viv-bin-mx6q/Config.in
@@ -0,0 +1,26 @@ 
+config BR2_PACKAGE_GPU_VIV_BIN_IMX6Q
+	bool "gpu-viv-bin-mx6q"
+	select BR2_PACKAGE_HAS_OPENGL_EGL
+	select BR2_PACKAGE_HAS_OPENGL_ES
+	depends on BR2_arm # Only relevant for i.MX6
+	 # Library binaries are linked against libc.so.6
+	depends on BR2_TOOLCHAIN_CTNG_glibc || \
+		BR2_TOOLCHAIN_CTNG_eglibc || \
+		BR2_TOOLCHAIN_EXTERNAL_GLIBC
+	help
+	  Userspace libraries for Vivante GPU on i.MX6 platforms
+
+	  It contains libraries and headers for GLES, OpenCL, and OpenVG.
+	  It also contains a DRI plugin for X11. It also contains a 
+	  plugin for DirectFB-1.4.0, but that doesn't work together with 
+	  buildroot's DirectFB-1.4.16.
+
+	  This library is provided by Freescale as-is and doesn't have
+	  an upstream.
+
+if BR2_PACKAGE_GPU_VIV_BIN_IMX6Q
+config BR2_PACKAGE_GPU_VIV_BIN_IMX6Q_EXAMPLES
+	bool "gpu-viv-bin-mx6q-examples"
+	help
+	  Copy the Vivante examples to the Target
+endif
diff --git a/package/freescale-imx/gpu-viv-bin-mx6q/gpu-viv-bin-mx6q-0001-correct-HAL-include.patch b/package/freescale-imx/gpu-viv-bin-mx6q/gpu-viv-bin-mx6q-0001-correct-HAL-include.patch
new file mode 100644
index 0000000..f63bb9a
--- /dev/null
+++ b/package/freescale-imx/gpu-viv-bin-mx6q/gpu-viv-bin-mx6q-0001-correct-HAL-include.patch
@@ -0,0 +1,18 @@ 
+Correct the directory path for gc_hal_eglplatform_type.h
+
+Signed-off-by: Henk Fijnvandraat <h.fijnvandraat@inter.nl.net>
+
+Only in gpu-viv-bin-mx6q-1.1.0: etc
+diff -rup gpu-viv-bin-mx6q-1.1.0-orig/usr/include/gc_vdk_types.h gpu-viv-bin-mx6q-1.1.0/usr/include/gc_vdk_types.h
+--- gpu-viv-bin-mx6q-1.1.0-orig/usr/include/gc_vdk_types.h	2012-12-18 10:35:55.000000000 +0100
++++ gpu-viv-bin-mx6q-1.1.0/usr/include/gc_vdk_types.h	2013-05-09 21:09:28.080138681 +0200
+@@ -39,7 +39,7 @@ extern "C" {
+ #endif
+ 
+ #include <EGL/egl.h>
+-#include "gc_hal_eglplatform_type.h"
++#include <HAL/gc_hal_eglplatform_type.h>
+ 
+ 
+ /*******************************************************************************
+Only in gpu-viv-bin-mx6q-1.1.0/usr/include: gc_vdk_types.h~
diff --git a/package/freescale-imx/gpu-viv-bin-mx6q/gpu-viv-bin-mx6q.mk b/package/freescale-imx/gpu-viv-bin-mx6q/gpu-viv-bin-mx6q.mk
new file mode 100644
index 0000000..d003443
--- /dev/null
+++ b/package/freescale-imx/gpu-viv-bin-mx6q/gpu-viv-bin-mx6q.mk
@@ -0,0 +1,77 @@ 
+#############################################################
+#
+# gpu-viv-bin-mx6q
+#
+#############################################################
+
+GPU_VIV_BIN_MX6Q_VERSION = $(IMX_VERSION_LEVEL)
+GPU_VIV_BIN_MX6Q_SITE    = $(IMX_MIRROR_SITE)
+GPU_VIV_BIN_MX6Q_SOURCE  = gpu-viv-bin-mx6q-$(GPU_VIV_BIN_MX6Q_VERSION).bin
+
+GPU_VIV_BIN_MX6Q_INSTALL_STAGING = YES
+
+# GPU_VIV_BIN_MX6Q_LICENSE = Freescale Semiconductor Software License Agreement
+# No license file is included in the archive; we could extract it from
+# the self-extractor, but that's just too much effort.
+# This is a legal minefield: the EULA specifies that
+# the Board Support Package includes software and hardware (sic!)
+# for which a separate license is needed...
+GPU_VIV_BIN_MX6Q_REDISTRIBUTE = NO
+
+# The archive is a shell-self-extractor of a bzipped tar. It happens
+# to extract in the correct directory (gpu-viv-bin-mx6q-x.y.z)
+# The --force makes sure it doesn't fail if the source dir already exists.
+# The --auto-accept skips the license check - not needed for us
+# because we have legal-info.
+define GPU_VIV_BIN_MX6Q_EXTRACT_CMDS
+	cd $(BUILD_DIR); \
+	sh $(DL_DIR)/$(GPU_VIV_BIN_MX6Q_SOURCE) --force --auto-accept
+endef
+
+define GPU_VIV_BIN_MX6Q_INSTALL_STAGING_CMDS
+	cp -r $(@D)/usr/* $(STAGING_DIR)/usr
+endef
+
+ifdef $(BR2_PACKAGE_GPU_VIV_BIN_IMX6Q_EXAMPLES)
+define GPU_VIV_BIN_MX6Q_INSTALL_EXAMPLES
+	cp -r $(@D)/opt/* $(TARGET_DIR)/opt
+endef
+endif
+
+ifeq ($(BR2_PACKAGE_XORG7),y)
+GPU_VIV_BIN_MX6Q_LIB_TARGET = x11
+else
+# DirectFB is not supported (wrong version)
+GPU_VIV_BIN_MX6Q_LIB_TARGET = fb
+endif
+
+# Instead of building, we fix up the inconsistencies that exist
+# in the upstream archive here.
+# Make sure these commands are idempotent.
+define GPU_VIV_BIN_MX6Q_BUILD_CMDS
+	$(SED) 's/defined(LINUX)/defined(__linux__)/g' $(@D)/usr/include/*/*.h
+	for lib in EGL GAL VIVANTE; do \
+		ln -sf lib$${lib}-$(GPU_VIV_BIN_MX6Q_LIB_TARGET).so \
+			$(@D)/usr/lib/lib$${lib}.so; \
+	done
+	ln -sf libGL.so.1.2 $(@D)/usr/lib/libGL.so.1
+	ln -sf libGL.so.1.2 $(@D)/usr/lib/libGL.so
+endef
+
+# On the target, remove the unused libraries.
+# Note that this is _required_, else ldconfig may create symlinks
+# to the wrong library
+define GPU_VIV_BIN_MX6Q_INSTALL_TARGET_CMDS
+	$(GPU_VIV_BIN_MX6Q_INSTALL_EXAMPLES)
+	cp -a $(@D)/usr/lib $(TARGET_DIR)/usr
+	for lib in EGL GAL VIVANTE; do \
+		for f in $(TARGET_DIR)/usr/lib/lib$${lib}-*.so; do \
+			case $$f in \
+				*-$(GPU_VIV_BIN_MX6Q_LIB_TARGET).so) : ;; \
+				*) $(RM) $$f ;; \
+			esac; \
+		done; \
+	done
+endef
+
+$(eval $(generic-package))