diff mbox

[18/20] gpu-viv-bin-mx6q: new package

Message ID 1369606110-8088-19-git-send-email-thomas.petazzoni@free-electrons.com
State Accepted
Headers show

Commit Message

Thomas Petazzoni May 26, 2013, 10:08 p.m. UTC
From: Henk Fijnvandraat <h.fijnvandraat@inter.nl.net>

This patch adds a new package for the OpenGL, OpenVG and EGL
proprietary implementations specific to the Vivante GPU of i.MX6
processors.

Signed-off-by: Henk Fijnvandraat <h.fijnvandraat@inter.nl.net>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 package/freescale-imx/Config.in                    |    1 +
 package/freescale-imx/gpu-viv-bin-mx6q/Config.in   |   30 ++++++++
 ...gpu-viv-bin-mx6q-0001-correct-HAL-include.patch |   16 ++++
 .../gpu-viv-bin-mx6q/gpu-viv-bin-mx6q.mk           |   79 ++++++++++++++++++++
 4 files changed, 126 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

Peter Korsgaard May 29, 2013, 1:39 p.m. UTC | #1
>>>>> "Thomas" == Thomas Petazzoni <thomas.petazzoni@free-electrons.com> writes:

 Thomas> From: Henk Fijnvandraat <h.fijnvandraat@inter.nl.net>
 Thomas> This patch adds a new package for the OpenGL, OpenVG and EGL
 Thomas> proprietary implementations specific to the Vivante GPU of i.MX6
 Thomas> processors.

 Thomas> Signed-off-by: Henk Fijnvandraat <h.fijnvandraat@inter.nl.net>
 Thomas> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
 Thomas> ---
 Thomas>  package/freescale-imx/Config.in                    |    1 +
 Thomas>  package/freescale-imx/gpu-viv-bin-mx6q/Config.in   |   30 ++++++++
 Thomas>  ...gpu-viv-bin-mx6q-0001-correct-HAL-include.patch |   16 ++++
 Thomas>  .../gpu-viv-bin-mx6q/gpu-viv-bin-mx6q.mk           |   79 ++++++++++++++++++++
 Thomas>  4 files changed, 126 insertions(+)
 Thomas>  create mode 100644 package/freescale-imx/gpu-viv-bin-mx6q/Config.in
 Thomas>  create mode 100644 package/freescale-imx/gpu-viv-bin-mx6q/gpu-viv-bin-mx6q-0001-correct-HAL-include.patch
 Thomas>  create mode 100644 package/freescale-imx/gpu-viv-bin-mx6q/gpu-viv-bin-mx6q.mk

 Thomas> diff --git a/package/freescale-imx/Config.in b/package/freescale-imx/Config.in
 Thomas> index 840b83b..7c22f79 100644
 Thomas> --- a/package/freescale-imx/Config.in
 Thomas> +++ b/package/freescale-imx/Config.in
 Thomas> @@ -3,5 +3,6 @@ menu "Freescale i.MX libraries"
 
 Thomas>  source "package/freescale-imx/imx-lib/Config.in"
 Thomas>  source "package/freescale-imx/firmware-imx/Config.in"
 Thomas> +source "package/freescale-imx/gpu-viv-bin-mx6q/Config.in"
 
 Thomas>  endmenu
 Thomas> diff --git a/package/freescale-imx/gpu-viv-bin-mx6q/Config.in b/package/freescale-imx/gpu-viv-bin-mx6q/Config.in
 Thomas> new file mode 100644
 Thomas> index 0000000..37f8e03
 Thomas> --- /dev/null
 Thomas> +++ b/package/freescale-imx/gpu-viv-bin-mx6q/Config.in
 Thomas> @@ -0,0 +1,30 @@
 Thomas> +config BR2_PACKAGE_GPU_VIV_BIN_MX6Q
 Thomas> +	bool "gpu-viv-bin-mx6q"
 Thomas> +	select BR2_PACKAGE_HAS_OPENGL_EGL
 Thomas> +	select BR2_PACKAGE_HAS_OPENGL_ES
 Thomas> +	depends on BR2_arm # Only relevant for i.MX6
 Thomas> +	 # Library binaries are linked against libc.so.6
 Thomas> +	depends on BR2_TOOLCHAIN_CTNG_glibc || \
 Thomas> +		BR2_TOOLCHAIN_CTNG_eglibc || \
 Thomas> +		BR2_TOOLCHAIN_EXTERNAL_GLIBC

We should also inform the user about this, so I've added a comment
option, similar to how we handle to other toolchain options.

 Thomas> +	help
 Thomas> +	  Userspace libraries for Vivante GPU on i.MX6 platforms
 Thomas> +
 Thomas> +	  It contains libraries and headers for GLES, OpenCL, and
 Thomas> +	  OpenVG.  It also contains a DRI plugin for X11. It also
 Thomas> +	  contains a plugin for DirectFB-1.4.0, but that doesn't work
 Thomas> +	  together with buildroot's DirectFB-1.4.16.

This is already outdated, so I changed this to 'buildroot's DirectFB
version'.

Committed to next, thanks - But I don't see it hooked up with the
opengl/* virtual packages, so it doesn't seem really useful yet.

What kind of kernel dependencies does this package have?
Thomas Petazzoni May 29, 2013, 1:48 p.m. UTC | #2
Dear Peter Korsgaard,

On Wed, 29 May 2013 15:39:30 +0200, Peter Korsgaard wrote:

>  Thomas> +config BR2_PACKAGE_GPU_VIV_BIN_MX6Q
>  Thomas> +	bool "gpu-viv-bin-mx6q"
>  Thomas> +	select BR2_PACKAGE_HAS_OPENGL_EGL
>  Thomas> +	select BR2_PACKAGE_HAS_OPENGL_ES
>  Thomas> +	depends on BR2_arm # Only relevant for i.MX6
>  Thomas> +	 # Library binaries are linked against libc.so.6
>  Thomas> +	depends on BR2_TOOLCHAIN_CTNG_glibc || \
>  Thomas> +		BR2_TOOLCHAIN_CTNG_eglibc || \
>  Thomas> +		BR2_TOOLCHAIN_EXTERNAL_GLIBC
> 
> We should also inform the user about this, so I've added a comment
> option, similar to how we handle to other toolchain options.

Then we should fix BR2_PACKAGE_ELFUTILS_PROGS, BR2_PACKAGE_MONGREL2,
BR2_PACKAGE_NSS_MDNS and BR2_PACKAGE_TZDATA (even though for the
latter, I'm not sure, since tzdata is not useful at all with uClibc).

>  Thomas> +	help
>  Thomas> +	  Userspace libraries for Vivante GPU on i.MX6 platforms
>  Thomas> +
>  Thomas> +	  It contains libraries and headers for GLES, OpenCL, and
>  Thomas> +	  OpenVG.  It also contains a DRI plugin for X11. It also
>  Thomas> +	  contains a plugin for DirectFB-1.4.0, but that doesn't work
>  Thomas> +	  together with buildroot's DirectFB-1.4.16.
> 
> This is already outdated, so I changed this to 'buildroot's DirectFB
> version'.

Right.

> Committed to next, thanks - But I don't see it hooked up with the
> opengl/* virtual packages, so it doesn't seem really useful yet.

Correct. I've mainly taken Henk's patch and tried to make it suitable
for upstream. Further improvements are definitely needed.

> What kind of kernel dependencies does this package have?

As far as I can see, it doesn't have any build-time dependency. It's
just a bunch of pre-built shared libraries and header files that get
copied around. At runtime, I believe a specific kernel driver is
needed.

But Arnout/Henk can probably comment on this.

Thanks,

Thomas
Peter Korsgaard May 29, 2013, 1:54 p.m. UTC | #3
>>>>> "Thomas" == Thomas Petazzoni <thomas.petazzoni@free-electrons.com> writes:

 Thomas> Dear Peter Korsgaard,
 Thomas> On Wed, 29 May 2013 15:39:30 +0200, Peter Korsgaard wrote:

 Thomas> +config BR2_PACKAGE_GPU_VIV_BIN_MX6Q
 Thomas> +	bool "gpu-viv-bin-mx6q"
 Thomas> +	select BR2_PACKAGE_HAS_OPENGL_EGL
 Thomas> +	select BR2_PACKAGE_HAS_OPENGL_ES
 Thomas> +	depends on BR2_arm # Only relevant for i.MX6
 Thomas> +	 # Library binaries are linked against libc.so.6
 Thomas> +	depends on BR2_TOOLCHAIN_CTNG_glibc || \
 Thomas> +		BR2_TOOLCHAIN_CTNG_eglibc || \
 Thomas> +		BR2_TOOLCHAIN_EXTERNAL_GLIBC
 >> 
 >> We should also inform the user about this, so I've added a comment
 >> option, similar to how we handle to other toolchain options.

 Thomas> Then we should fix BR2_PACKAGE_ELFUTILS_PROGS, BR2_PACKAGE_MONGREL2,
 Thomas> BR2_PACKAGE_NSS_MDNS and BR2_PACKAGE_TZDATA (even though for the
 Thomas> latter, I'm not sure, since tzdata is not useful at all with uClibc).

I think we should, yes (exept for tzdata and arguably also nss_mdns).
Arnout Vandecappelle June 1, 2013, 6:14 p.m. UTC | #4
On 29/05/13 15:48, Thomas Petazzoni wrote:
>> >What kind of kernel dependencies does this package have?

> As far as I can see, it doesn't have any build-time dependency. It's
> just a bunch of pre-built shared libraries and header files that get
> copied around. At runtime, I believe a specific kernel driver is
> needed.

  It's hard to know for sure. Like most SoC vendors, Freescale assume 
you'll just use _their_ kernel, _their_ toolchain, _their_ binary 
libraries and even _their_ LTIB (though it seems Freescale is becoming 
more open about this).

  Now, regarding the kernel it's pretty easy: upstream support for i.MX6 
is limited to UART, SD and USB so you're bound to the Freescale kernel if 
you want to use any graphics at all. And the Freescale kernel contains 
the galcore module needed for accessing the vivante GPU.

  There is also firmware for the VPU in the imx-firmware package, but I 
think that is only needed for the H.264 etc. codecs.

  Regards,
  Arnout
diff mbox

Patch

diff --git a/package/freescale-imx/Config.in b/package/freescale-imx/Config.in
index 840b83b..7c22f79 100644
--- a/package/freescale-imx/Config.in
+++ b/package/freescale-imx/Config.in
@@ -3,5 +3,6 @@  menu "Freescale i.MX libraries"
 
 source "package/freescale-imx/imx-lib/Config.in"
 source "package/freescale-imx/firmware-imx/Config.in"
+source "package/freescale-imx/gpu-viv-bin-mx6q/Config.in"
 
 endmenu
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..37f8e03
--- /dev/null
+++ b/package/freescale-imx/gpu-viv-bin-mx6q/Config.in
@@ -0,0 +1,30 @@ 
+config BR2_PACKAGE_GPU_VIV_BIN_MX6Q
+	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_MX6Q
+
+config BR2_PACKAGE_GPU_VIV_BIN_MX6Q_EXAMPLES
+	bool "install examples"
+	help
+	  Copy the Vivante examples to the target.
+
+	  Warning: examples take approximately 150 MB of disk space.
+
+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..c83cd55
--- /dev/null
+++ b/package/freescale-imx/gpu-viv-bin-mx6q/gpu-viv-bin-mx6q-0001-correct-HAL-include.patch
@@ -0,0 +1,16 @@ 
+Correct the directory path for gc_hal_eglplatform_type.h
+
+Signed-off-by: Henk Fijnvandraat <h.fijnvandraat@inter.nl.net>
+
+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>
+ 
+ 
+ /*******************************************************************************
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..f988d25
--- /dev/null
+++ b/package/freescale-imx/gpu-viv-bin-mx6q/gpu-viv-bin-mx6q.mk
@@ -0,0 +1,79 @@ 
+#############################################################
+#
+# gpu-viv-bin-mx6q
+#
+#############################################################
+
+GPU_VIV_BIN_MX6Q_VERSION = $(FREESCALE_IMX_VERSION)
+GPU_VIV_BIN_MX6Q_SITE    = $(FREESCALE_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
+
+# DirectFB is not supported (wrong version)
+ifeq ($(BR2_PACKAGE_XORG7),y)
+GPU_VIV_BIN_MX6Q_LIB_TARGET = x11
+else
+GPU_VIV_BIN_MX6Q_LIB_TARGET = fb
+endif
+
+# 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
+
+# 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
+
+define GPU_VIV_BIN_MX6Q_INSTALL_STAGING_CMDS
+	cp -r $(@D)/usr/* $(STAGING_DIR)/usr
+endef
+
+ifeq ($(BR2_PACKAGE_GPU_VIV_BIN_MX6Q_EXAMPLES),y)
+define GPU_VIV_BIN_MX6Q_INSTALL_EXAMPLES
+	mkdir -p $(TARGET_DIR)/usr/share/examples/
+	cp -r $(@D)/opt/* $(TARGET_DIR)/usr/share/examples/
+endef
+endif
+
+# 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))