From patchwork Wed Jul 10 18:09:12 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Spenser Gilliland X-Patchwork-Id: 258186 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from hemlock.osuosl.org (hemlock.osuosl.org [140.211.166.133]) by ozlabs.org (Postfix) with ESMTP id 95FE92C0299 for ; Thu, 11 Jul 2013 04:09:39 +1000 (EST) Received: from localhost (localhost [127.0.0.1]) by hemlock.osuosl.org (Postfix) with ESMTP id 131DCA0259; Wed, 10 Jul 2013 18:09:32 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from hemlock.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id wVYYKcjoN3gT; Wed, 10 Jul 2013 18:09:25 +0000 (UTC) Received: from ash.osuosl.org (ash.osuosl.org [140.211.166.34]) by hemlock.osuosl.org (Postfix) with ESMTP id B7FC4A0251; Wed, 10 Jul 2013 18:09:25 +0000 (UTC) X-Original-To: buildroot@lists.busybox.net Delivered-To: buildroot@osuosl.org Received: from whitealder.osuosl.org (whitealder.osuosl.org [140.211.166.138]) by ash.osuosl.org (Postfix) with ESMTP id 9CC401BFA7D for ; Wed, 10 Jul 2013 18:09:29 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by whitealder.osuosl.org (Postfix) with ESMTP id 3723A897DD for ; Wed, 10 Jul 2013 18:09:28 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from whitealder.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id W4sCNt-tx3oI for ; Wed, 10 Jul 2013 18:09:24 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from mail-ob0-f174.google.com (mail-ob0-f174.google.com [209.85.214.174]) by whitealder.osuosl.org (Postfix) with ESMTPS id BB38F89744 for ; Wed, 10 Jul 2013 18:09:23 +0000 (UTC) Received: by mail-ob0-f174.google.com with SMTP id wd20so8784887obb.5 for ; Wed, 10 Jul 2013 11:09:23 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=from:to:cc:subject:date:message-id:x-mailer:x-gm-message-state; bh=NXjpyTlN5C2ALBFtot0tfaJ78llEMbl9MPX1h5PVMoI=; b=PREDvAJyI2O3EHdklIRvsTedMgTmWjF22CkYoHrhzRjXM+pvbqw2UL+Ds7p/NlgrX9 nS5Ga9Ieu0zo47YJosO4psd83/gdu5a5JnL836KSNB2+oBU0pxFVnoxjcK0zFo1XTSUR UNj8H7gUSdnvOxFdMC621DWgcpSfscNYMQSKa/X9wgy6PsXC9lLsPPjDEzDHFLjoudAK QDIe/Do3h/hSDmQKSK8XeKWXAhoXxuC9UWA3b0lDr5WIMfEjo0At+QqkZwm/JbNEObXe bgsReGmbtmwuWJd39WfTddqVrjBG7Cuf+Cs5pKIAoxjrJTXjeXFhMxFNA418sMhil7WP nYpQ== X-Received: by 10.182.33.4 with SMTP id n4mr28493241obi.19.1373479762808; Wed, 10 Jul 2013 11:09:22 -0700 (PDT) Received: from bourban.gateway.2wire.net (108-90-245-135.lightspeed.cicril.sbcglobal.net. [108.90.245.135]) by mx.google.com with ESMTPSA id o4sm44809738obl.7.2013.07.10.11.09.19 for (version=TLSv1.1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 10 Jul 2013 11:09:20 -0700 (PDT) From: Spenser Gilliland To: buildroot@busybox.net Date: Wed, 10 Jul 2013 13:09:12 -0500 Message-Id: <1373479755-8086-1-git-send-email-spenser@gillilanding.com> X-Mailer: git-send-email 1.8.1.2 X-Gm-Message-State: ALoCoQnSBrxefxemGY9lZ8S7DXKtMbjea+n10WpCcRiUL0CxMX8RgjSLgv3ozkt2bAKGc0EFcK+4 Cc: Thomas Petazzoni Subject: [Buildroot] [PATCH v4 1/2] ti-gfx: add new package X-BeenThere: buildroot@busybox.net X-Mailman-Version: 2.1.14 Precedence: list List-Id: Discussion and development of buildroot List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: buildroot-bounces@busybox.net Sender: buildroot-bounces@busybox.net adds accelerated GPU support for the OMAP35xx, AM35xx, AM37xx, DM37xx, AM387x, C6A814x, AM389x, C6A816x, and AM335x platforms. Signed-off-by: Spenser Gilliland Cc: Thomas Petazzoni Cc: Sundareson, Prabindh Cc: Peter Korsgaard --- v4: - Fix header issue with qt. - Add eglimage version installation. v3: - integrate reviews from thomas. - Add qt patch v2: - Take into account reviews. - Simplfy init script. - Fix header installation. v1: - Added .pc files - all review issues addressed RFC v3: - all reviews addressed - added demos - added hard float (not runtime tested) - added init script - added SGX detection script (untested) - tested on beaglexm using demos RFC v2: - basic working with minor issues during tests RFC v1: - inital revision --- package/Config.in | 1 + package/opengl/libegl/libegl.mk | 4 + package/opengl/libgles/libgles.mk | 4 + package/ti-gfx/Config.in | 68 +++++++++ package/ti-gfx/S80ti-gfx | 54 +++++++ package/ti-gfx/egl.pc | 10 ++ package/ti-gfx/esrev.sh | 59 ++++++++ package/ti-gfx/glesv2.pc | 10 ++ package/ti-gfx/powervr.ini | 2 + package/ti-gfx/ti-gfx-km_install_modules.patch | 19 +++ package/ti-gfx/ti-gfx-newclkapi.patch | 143 ++++++++++++++++++ package/ti-gfx/ti-gfx.mk | 192 +++++++++++++++++++++++++ 12 files changed, 566 insertions(+) create mode 100644 package/ti-gfx/Config.in create mode 100644 package/ti-gfx/S80ti-gfx create mode 100644 package/ti-gfx/egl.pc create mode 100644 package/ti-gfx/esrev.sh create mode 100644 package/ti-gfx/glesv2.pc create mode 100644 package/ti-gfx/powervr.ini create mode 100644 package/ti-gfx/ti-gfx-km_install_modules.patch create mode 100644 package/ti-gfx/ti-gfx-newclkapi.patch create mode 100644 package/ti-gfx/ti-gfx.mk diff --git a/package/Config.in b/package/Config.in index 7c24dab..c8b90a8 100644 --- a/package/Config.in +++ b/package/Config.in @@ -292,6 +292,7 @@ source "package/snowball-hdmiservice/Config.in" source "package/sredird/Config.in" source "package/statserial/Config.in" source "package/sysstat/Config.in" +source "package/ti-gfx/Config.in" source "package/ti-utils/Config.in" source "package/uboot-tools/Config.in" source "package/udev/Config.in" diff --git a/package/opengl/libegl/libegl.mk b/package/opengl/libegl/libegl.mk index bd8040d..00e1f19 100644 --- a/package/opengl/libegl/libegl.mk +++ b/package/opengl/libegl/libegl.mk @@ -10,6 +10,10 @@ ifeq ($(BR2_PACKAGE_RPI_USERLAND),y) LIBEGL_DEPENDENCIES += rpi-userland endif +ifeq ($(BR2_PACKAGE_TI_GFX),y) +LIBEGL_DEPENDENCIES += ti-gfx +endif + ifeq ($(LIBEGL_DEPENDENCIES),) define LIBEGL_CONFIGURE_CMDS echo "No libEGL implementation selected. Configuration error." diff --git a/package/opengl/libgles/libgles.mk b/package/opengl/libgles/libgles.mk index a0048a7..d2fe11b 100644 --- a/package/opengl/libgles/libgles.mk +++ b/package/opengl/libgles/libgles.mk @@ -10,6 +10,10 @@ ifeq ($(BR2_PACKAGE_RPI_USERLAND),y) LIBGLES_DEPENDENCIES += rpi-userland endif +ifeq ($(BR2_PACKAGE_TI_GFX),y) +LIBGLES_DEPENDENCIES += ti-gfx +endif + ifeq ($(LIBGLES_DEPENDENCIES),) define LIBGLES_CONFIGURE_CMDS echo "No libGLES implementation selected. Configuration error." diff --git a/package/ti-gfx/Config.in b/package/ti-gfx/Config.in new file mode 100644 index 0000000..4d67371 --- /dev/null +++ b/package/ti-gfx/Config.in @@ -0,0 +1,68 @@ +config BR2_PACKAGE_TI_GFX + bool "ti-gfx" + select BR2_PACKAGE_HAS_OPENGL_EGL + select BR2_PACKAGE_HAS_OPENGL_ES + depends on BR2_LINUX_KERNEL && BR2_TOOLCHAIN_USES_GLIBC && BR2_arm + help + Graphics libraries for TI boards. + + http://downloads.ti.com/dsps/dsps_public_sw/gfxsdk/ + +if BR2_PACKAGE_TI_GFX + +config BR2_PACKAGE_TI_GFX_DEBUG + bool "enable debug support" + help + Turns on debugging in the kernel module, install libraries built with + debugging enabled, installs various tests and installs esrev script. + +config BR2_PACKAGE_TI_GFX_DEMOS + bool "install demos" + default y + help + Install the OGLES2ChameleonMan and OGLES2MagicLantern demos + +config BR2_PACKAGE_TI_GFX_EGLIMAGE + bool "install eglimage version of libraries" + help + Installs OpenGL libaries which support the eglimage api. + +config BR2_PACKAGE_TI_GFX_HARD_FLOAT + bool "use hard float binaries" + help + Install hard float binaries (required if using a hard float toolchain) + +choice + prompt "Target" + default BR2_PACKAGE_TI_GFX_ES3 + help + Select the SOC for which you would like to install drivers. Please + use the chart at + http://processors.wiki.ti.com/index.php/OMAP35x_Graphics_SDK_Getting_Started_Guide + +config BR2_PACKAGE_TI_GFX_ES3 + bool "es3.x (OMAP35xx, AM35xx Rev 3.1+)" + help + OMAP35xx, AM35xx Rev 3.1+ + +config BR2_PACKAGE_TI_GFX_ES5 + bool "es5.x (AM37xx, DM37xx)" + help + AM37xx, DM37xx + +config BR2_PACKAGE_TI_GFX_ES6 + bool "es6.x (AM387x, C6A814x, AM389x, C6A816x)" + help + AM387x, C6A814x, AM389x, C6A816x + +config BR2_PACKAGE_TI_GFX_ES8 + bool "es8.x (AM335x)" + help + AM335x + +endchoice + +endif + +comment "requires an eglibc/glibc based toolchain and the linux kernel" + depends on !(BR2_LINUX_KERNEL && BR2_TOOLCHAIN_USES_GLIBC && BR2_arm) diff --git a/package/ti-gfx/S80ti-gfx b/package/ti-gfx/S80ti-gfx new file mode 100644 index 0000000..ee2250e --- /dev/null +++ b/package/ti-gfx/S80ti-gfx @@ -0,0 +1,54 @@ +#!/bin/sh + +start() { + echo "ti-gfx: starting pvr driver" + + BITSPERPIXEL="$(fbset | awk '/geom/ {print $6}')" + YRES="$(fbset | awk '/geom/ {print $3}')" + # Set RGBA ordering to something the drivers like + if [ "$BITSPERPIXEL" = "32" ] ; then + fbset -rgba 8/16,8/8,8/0,8/24 + fi + # Try to enable triple buffering when there's enough VRAM + fbset -vyres $(( YRES*3 )) + + modprobe omaplfb + modprobe bufferclass_ti + + pvr_maj=$(awk '$2=="pvrsrvkm" { print $1; }' /proc/devices) + if [ -e /dev/pvrsrvkm ] ; then + rm -f /dev/pvrsrvkm + fi + + mknod /dev/pvrsrvkm c $pvr_maj 0 + chmod 666 /dev/pvrsrvkm + + if ! /usr/bin/pvrsrvctl --start --no-module; then + echo "ti-gfx: unable to start server" + fi +} + +stop() { + echo "ti-gfx: stopping pvr driver" + + rmmod bufferclass_ti + rmmod omaplfb + rmmod pvrsrvkm +} + +case "$1" in +start) + start +;; +stop) + stop +;; +restart) + stop + start +;; +*) + echo "ti-gfx: Please use start, stop, or restart." + exit 1 +;; +esac diff --git a/package/ti-gfx/egl.pc b/package/ti-gfx/egl.pc new file mode 100644 index 0000000..9f6ed51 --- /dev/null +++ b/package/ti-gfx/egl.pc @@ -0,0 +1,10 @@ +prefix=/usr/ +exec_prefix=/usr/ +libdir=${exec_prefix}/lib +includedir=${prefix}/include + +Name: egl +Description: TI Graphics SDK implementation of EGL +Version: 1.9.2188537 +Libs: -L${libdir} -lEGL -lIMGegl +Cflags: -I{includedir}/EGL/ diff --git a/package/ti-gfx/esrev.sh b/package/ti-gfx/esrev.sh new file mode 100644 index 0000000..bd8b64e --- /dev/null +++ b/package/ti-gfx/esrev.sh @@ -0,0 +1,59 @@ +#!/bin/sh + +# Debug script to determine proper ES revision for the current board. The +# pvrsrvkm module must be insmoded before attempting to get the es rev. + +machine_id() { # return the machine ID + awk 'BEGIN { FS=": " } /Hardware/ \ + { gsub(" ", "_", $2); print tolower($2) } ' +---- +Index: ti-gfx-4_09_00_01/GFX_Linux_KM/Makefile +=================================================================== +--- ti-gfx-4_09_00_01.orig/GFX_Linux_KM/Makefile 2013-03-07 11:00:11.000000000 -0600 ++++ ti-gfx-4_09_00_01/GFX_Linux_KM/Makefile 2013-05-23 01:36:29.356676281 -0500 +@@ -479,6 +479,9 @@ + all: + $(MAKE) -C $(KERNELDIR) M=`pwd` $* + ++install: ++ $(MAKE) -C $(KERNELDIR) M=`pwd` modules_install ++ + clean: + @find . -name "*.o" -exec rm -r {} \; + @find . -name "*.ko" -exec rm -r {} \; diff --git a/package/ti-gfx/ti-gfx-newclkapi.patch b/package/ti-gfx/ti-gfx-newclkapi.patch new file mode 100644 index 0000000..8f50c7e --- /dev/null +++ b/package/ti-gfx/ti-gfx-newclkapi.patch @@ -0,0 +1,143 @@ +This patch adjusts the omap3630 portion of the powervr driver to use the new +clk kernel api. + +Signed-off-by: Spenser Gilliland +---- +Index: ti-gfx-4_09_00_01/GFX_Linux_KM/services4/system/omap3630/sysutils_linux.c +=================================================================== +--- ti-gfx-4_09_00_01.orig/GFX_Linux_KM/services4/system/omap3630/sysutils_linux.c 2013-06-28 13:44:06.352701522 -0500 ++++ ti-gfx-4_09_00_01/GFX_Linux_KM/services4/system/omap3630/sysutils_linux.c 2013-06-28 13:45:12.364702727 -0500 +@@ -153,6 +153,49 @@ + psTimingInfo->ui32ActivePowManLatencyms = SYS_SGX_ACTIVE_POWER_LATENCY_MS; + } + ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,2,0) ++int clk_disable_unprepare(struct clk *clk) ++{ ++ return clk_disable(clk); ++} ++#elif LINUX_VERSION_CODE < KERNEL_VERSION(3,3,0) ++int clk_disable_unprepare(struct clk *clk) ++{ ++ res = clk_disable(clk); ++ if (res < 0) ++ return res; ++ ++ res = clk_unprepare(clk); ++ if (ret < 0) ++ return res; ++ ++ return 0; ++} ++#endif ++ ++ ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,2,0) ++int clk_prepare_enable(struct clk *clk) ++{ ++ return clk_enable(clk); ++} ++#elif LINUX_VERSION_CODE < KERNEL_VERSION(3,3,0) ++int clk_prepare_enable(struct clk *clk) ++{ ++ res = clk_prepare(clk); ++ if (ret < 0) ++ return res; ++ ++ res = clk_enable(clk); ++ if (res < 0) { ++ clk_unprepare(clk); ++ return res; ++ } ++ ++ return 0; ++} ++#endif ++ + PVRSRV_ERROR EnableSGXClocks(SYS_DATA *psSysData) + { + #if !defined(NO_HARDWARE) +@@ -167,19 +210,19 @@ + + PVR_DPF((PVR_DBG_MESSAGE, "EnableSGXClocks: Enabling SGX Clocks")); + +- res=clk_enable(psSysSpecData->psSGX_FCK); ++ res=clk_prepare_enable(psSysSpecData->psSGX_FCK); + if (res < 0) + { + PVR_DPF((PVR_DBG_ERROR, "EnableSGXClocks: Couldn't enable SGX functional clock (%d)", res)); + return PVRSRV_ERROR_UNABLE_TO_ENABLE_CLOCK; + } + +- res=clk_enable(psSysSpecData->psSGX_ICK); ++ res=clk_prepare_enable(psSysSpecData->psSGX_ICK); + if (res < 0) + { + PVR_DPF((PVR_DBG_ERROR, "EnableSGXClocks: Couldn't enable SGX interface clock (%d)", res)); + +- clk_disable(psSysSpecData->psSGX_FCK); ++ clk_disable_unprepare(psSysSpecData->psSGX_FCK); + return PVRSRV_ERROR_UNABLE_TO_ENABLE_CLOCK; + } + +@@ -233,7 +276,6 @@ + return PVRSRV_OK; + } + +- + IMG_VOID DisableSGXClocks(SYS_DATA *psSysData) + { + #if !defined(NO_HARDWARE) +@@ -246,9 +288,9 @@ + + PVR_DPF((PVR_DBG_MESSAGE, "DisableSGXClocks: Disabling SGX Clocks")); + +- clk_disable(psSysSpecData->psSGX_FCK); ++ clk_disable_unprepare(psSysSpecData->psSGX_FCK); + +- clk_disable(psSysSpecData->psSGX_ICK); ++ clk_disable_unprepare(psSysSpecData->psSGX_ICK); + + // SysDisableSGXInterrupts(psSysData); + +@@ -374,14 +416,14 @@ + rate = clk_get_rate(psSysSpecData->psGPT11_FCK); + PVR_TRACE(("GPTIMER11 clock is %dMHz", HZ_TO_MHZ(rate))); + +- res = clk_enable(psSysSpecData->psGPT11_FCK); ++ res = clk_prepare_enable(psSysSpecData->psGPT11_FCK); + if (res < 0) + { + PVR_DPF((PVR_DBG_ERROR, "EnableSystemClocks: Couldn't enable GPTIMER11 functional clock (%d)", res)); + goto ExitError; + } + +- res = clk_enable(psSysSpecData->psGPT11_ICK); ++ res = clk_prepare_enable(psSysSpecData->psGPT11_ICK); + if (res < 0) + { + PVR_DPF((PVR_DBG_ERROR, "EnableSystemClocks: Couldn't enable GPTIMER11 interface clock (%d)", res)); +@@ -444,9 +486,9 @@ + + ExitDisableGPT11ICK: + #if defined(PVR_OMAP3_TIMING_PRCM) +- clk_disable(psSysSpecData->psGPT11_ICK); ++ clk_disable_unprepare(psSysSpecData->psGPT11_ICK); + ExitDisableGPT11FCK: +- clk_disable(psSysSpecData->psGPT11_FCK); ++ clk_disable_unprepare(psSysSpecData->psGPT11_FCK); + ExitError: + #endif + eError = PVRSRV_ERROR_CLOCK_REQUEST_FAILED; +@@ -490,9 +532,9 @@ + #endif + + #if defined(PVR_OMAP3_TIMING_PRCM) +- clk_disable(psSysSpecData->psGPT11_ICK); ++ clk_disable_unprepare(psSysSpecData->psGPT11_ICK); + +- clk_disable(psSysSpecData->psGPT11_FCK); ++ clk_disable_unprepare(psSysSpecData->psGPT11_FCK); + #endif + } + #endif diff --git a/package/ti-gfx/ti-gfx.mk b/package/ti-gfx/ti-gfx.mk new file mode 100644 index 0000000..2848b8c --- /dev/null +++ b/package/ti-gfx/ti-gfx.mk @@ -0,0 +1,192 @@ +############################################################################### +# +# ti-gfx +# +############################################################################### + +TI_GFX_VERSION = 4_09_00_01 +TI_GFX_SO_VERSION = 1.9.2188537 + +ifeq ($(BR2_PACKAGE_TI_GFX_HARD_FLOAT),y) +TI_GFX_SOURCE = Graphics_SDK_setuplinux_$(TI_GFX_VERSION)_hardfp_minimal_demos.bin +else +TI_GFX_SOURCE = Graphics_SDK_setuplinux_$(TI_GFX_VERSION)_minimal_demos.bin +endif + +TI_GFX_SITE = http://downloads.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/gfxsdk/$(TI_GFX_VERSION)/exports/ +TI_GFX_LICENSE = Technology / Software Publicly Available +TI_GFX_LICENSE_FILES = TSPA.txt +TI_GFX_INSTALL_STAGING = YES + +TI_GFX_DEPENDENCIES = linux + +ifeq ($(BR2_PACKAGE_TI_GFX_ES3),y) +TI_GFX_OMAPES = 3.x +TI_GFX_PLATFORM = omap3 +endif +ifeq ($(BR2_PACKAGE_TI_GFX_ES5),y) +TI_GFX_OMAPES = 5.x +TI_GFX_PLATFORM = omap3630 +endif +ifeq ($(BR2_PACKAGE_TI_GFX_ES6),y) +TI_GFX_OMPAES = 6.x +TI_GFX_PLATFORM = ti81xx +endif +ifeq ($(BR2_PACKAGE_TI_GFX_ES8),y) +TI_GFX_OMAPES = 8.x +TI_GFX_PLATFORM = ti335x +endif + +ifeq ($(BR2_PACKAGE_TI_GFX_DEBUG),y) +TI_GFX_DEBUG_LIB = dbg +TI_GFX_DEBUG_KM = debug +else +TI_GFX_DEBUG_LIB = rel +TI_GFX_DEBUG_KM = release +endif + +TI_GFX_BIN_PATH = gfx_$(TI_GFX_DEBUG_LIB)_es$(TI_GFX_OMAPES) + +TI_GFX_KM_MAKE_OPTS = \ + $(LINUX_MAKE_FLAGS) \ + BUILD=$(TI_GFX_DEBUG_KM) \ + TI_PLATFORM=$(TI_GFX_PLATFORM) \ + OMAPES=$(TI_GFX_OMAPES) \ + SUPPORT_XORG=0 \ + KERNELDIR=$(LINUX_DIR) + +TI_GFX_DEMO_MAKE_OPTS = \ + PLATFORM=LinuxARMV7 \ + X11BUILD=0 + +# The only required binary is pvrsrvctl all others are optional +TI_GFX_BIN = pvrsrvctl + +ifeq ($(BR2_PACKAGE_TI_GFX_DEBUG),y) +TI_GFX_BIN += \ + eglinfo ews_server ews_server_es2 ews_test_gles1 ews_test_gles2 \ + ews_test_swrender gles1test1 gles2test1 pvr2d_test services_test \ + sgx_blit_test sgx_clipblit_test sgx_flip_test sgx_init_test \ + sgx_render_flip_test xeglinfo xgles1test1 xgles2test1 xmultiegltest +endif + +TI_GFX_LIBS = \ + libEGL libews libGLES_CM libGLESv2 libglslcompiler libIMGegl libpvr2d \ + libpvrEWS_WSEGL libpvrPVR2D_BLITWSEGL libpvrPVR2D_DRIWSEGL \ + libpvrPVR2D_FLIPWSEGL libpvrPVR2D_FRONTWSEGL libpvrPVR2D_LINUXFBWSEGL \ + libpvrPVRScopeServices libsrv_init libsrv_um libsrv_um_dri libusc pvr_drv + +TI_GFX_DEMOS = ChameleonMan MagicLantern +TI_GFX_DEMOS_LOC = GFX_Linux_SDK/OGLES2/SDKPackage/Demos +TI_GFX_DEMOS_MAKE_LOC = OGLES2/Build/LinuxGeneric +TI_GFX_DEMOS_BIN_LOC = OGLES2/Build/LinuxARMV7/ReleaseRaw/ + +TI_GFX_HDR_DIRS = OGLES2/EGL OGLES2/EWS OGLES2/GLES2 OGLES2/KHR \ + OGLES/GLES bufferclass_ti/ pvr2d/ wsegl/ + +define TI_GFX_EXTRACT_CMDS + $(RM) -rf $(TI_GFX_DIR) + chmod +x $(DL_DIR)/$(TI_GFX_SOURCE) + printf "Y\nY\n qY\n\n" | $(DL_DIR)/$(TI_GFX_SOURCE) \ + --prefix $(@D) \ + --mode console +endef + +define TI_GFX_CONFIGURE_CMDS + $(if $(BR2_PACKAGE_TI_GFX_EGLIMAGE), + mv -f $(@D)/$(TI_GFX_BIN_PATH)/libEGL_eglimage.so \ + $(@D)/$(TI_GFX_BIN_PATH)/libEGL.so; \ + mv -f $(@D)/$(TI_GFX_BIN_PATH)/libGLES_CM_eglimage.so \ + $(@D)/$(TI_GFX_BIN_PATH)/libGLES_CM.so; \ + mv -f $(@D)/$(TI_GFX_BIN_PATH)/libGLESv2_eglimage.so \ + $(@D)/$(TI_GFX_BIN_PATH)/libGLESv2.so; \ + mv -f $(@D)/$(TI_GFX_BIN_PATH)/libglslcompiler_eglimage.so \ + $(@D)/$(TI_GFX_BIN_PATH)/libglslcompiler.so; \ + mv -f $(@D)/$(TI_GFX_BIN_PATH)/libIMGegl_eglimage.so \ + $(@D)/$(TI_GFX_BIN_PATH)/libIMGegl.so; + ) +endef + +define TI_GFX_BUILD_KM_CMDS + $(MAKE) $(TI_GFX_KM_MAKE_OPTS) -C $(@D)/GFX_Linux_KM all +endef + +define TI_GFX_BUILD_DEMO_CMDS + $(foreach demo, $(TI_GFX_DEMOS), \ + cd $(@D)/$(TI_GFX_DEMOS_LOC)/$(demo)/$(TI_GFX_DEMOS_MAKE_LOC); \ + $(TARGET_MAKE_ENV) $(MAKE1) $(TI_GFX_DEMO_MAKE_OPTS) all + ) +endef + +define TI_GFX_BUILD_CMDS + $(TI_GFX_BUILD_KM_CMDS) + $(if $(BR2_PACKAGE_TI_GFX_DEMOS), + $(TI_GFX_BUILD_DEMO_CMDS) + ) +endef + +define TI_GFX_INSTALL_STAGING_CMDS + $(foreach incdir,$(TI_GFX_HDR_DIRS), + $(INSTALL) -d $(STAGING_DIR)/usr/include/$(notdir $(incdir)); \ + $(INSTALL) -D -m 0644 $(@D)/include/$(incdir)/*.h \ + $(STAGING_DIR)/usr/include/$(notdir $(incdir))/ + ) + $(INSTALL) -D -m 0755 $(@D)/$(TI_GFX_BIN_PATH)/*.so $(STAGING_DIR)/usr/lib/ + $(INSTALL) -D -m 0644 package/ti-gfx/egl.pc $(STAGING_DIR)/usr/lib/pkgconfig/ + $(INSTALL) -D -m 0644 package/ti-gfx/glesv2.pc $(STAGING_DIR)/usr/lib/pkgconfig/ +endef + +define TI_GFX_INSTALL_KM_CMDS + $(MAKE) $(TI_GFX_KM_MAKE_OPTS) -C $(@D)/GFX_Linux_KM install +endef + +define TI_GFX_INSTALL_BINS_CMDS + $(foreach bin,$(TI_GFX_BIN), + $(INSTALL) -D -m 0755 $(@D)/$(TI_GFX_BIN_PATH)/$(bin) \ + $(TARGET_DIR)/usr/bin/$(bin) + ) + $(if $(BR2_PACKAGE_TI_GFX_DEBUG), + $(INSTALL) -D -m 0755 package/ti-gfx/esrev.sh \ + $(TARGET_DIR)/usr/bin/esrev) +endef + +define TI_GFX_INSTALL_LIBS_CMDS + # create symlinks and install libraries. these libraries do not have a + # SONAME defined; therefore, they will not be automatically renamed and + # must be renamed manually. + $(foreach lib,$(TI_GFX_LIBS), + $(INSTALL) -D -m 0755 $(@D)/$(TI_GFX_BIN_PATH)/$(lib).so \ + $(TARGET_DIR)/usr/lib/$(lib).so.$(TI_GFX_SO_VERSION); \ + ln -sf $(lib).so.$(TI_GFX_SO_VERSION) \ + $(TARGET_DIR)/usr/lib/$(lib).so + ) + # libs use the following file for configuration. + $(INSTALL) -D -m 0644 package/ti-gfx/powervr.ini \ + $(TARGET_DIR)/etc/powervr.ini +endef + +ifeq ($(BR2_PACKAGE_TI_GFX_DEMOS),y) +define TI_GFX_INSTALL_DEMOS_CMDS + $(foreach demo,$(TI_GFX_DEMOS), + $(INSTALL) -D -m 0755 \ + $(@D)/$(TI_GFX_DEMOS_LOC)/$(demo)/$(TI_GFX_DEMOS_BIN_LOC)/OGLES2$(demo) \ + $(TARGET_DIR)/usr/bin/OGLES2$(demo) + ) +endef +endif + +define TI_GFX_INSTALL_INIT_SYSV + $(INSTALL) -D -m 0755 package/ti-gfx/S80ti-gfx \ + $(TARGET_DIR)/etc/init.d/S80ti-gfx +endef + +define TI_GFX_INSTALL_TARGET_CMDS + $(TI_GFX_INSTALL_KM_CMDS) + $(TI_GFX_INSTALL_BINS_CMDS) + $(TI_GFX_INSTALL_LIBS_CMDS) + $(if $(BR2_PACKAGE_TI_GFX_DEMOS), + $(TI_GFX_INSTALL_DEMOS_CMDS) + ) +endef + +$(eval $(generic-package))