Message ID | 1369606110-8088-19-git-send-email-thomas.petazzoni@free-electrons.com |
---|---|
State | Accepted |
Headers | show |
>>>>> "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?
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
>>>>> "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).
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 --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))