diff options
author | 2017-06-21 12:26:51 +0900 | |
---|---|---|
committer | 2017-06-21 13:00:42 +0900 | |
commit | a243e5dc36b5c75fb963d51064b132ea5367372e (patch) | |
tree | 1e8038c22da6a045a0fd685b349d548687259caa | |
parent | 4284205e247e72c81943a567888ec63055f31653 (diff) |
Mark EGL/GLES libs as vendor_available
EGL/GLES libs are marked as vendor_available, otherwise vendors are not
able to use OpenGL. The libs were not simply declared as LL-NDK because
doing so causes the dual loading of libui.so in vendor processes;
platform version of libui.so is loaded since it is depended by libEGL.so
whereas there also is vendor version of libui.so in /system/lib/vndk.
When libEGL.so is built for vendors, 1) libgraphicsenv is removed from
its dependency list as the lib must not be available to vendors and 2)
eglGetNativeClientBufferANDROID is unusable since the function relies on
AHardwareBuffer_to_ANativeWindowBuffer which isn't available to vendor.
Bug: 37731063
Test: BOARD_VNDK_VERSION=current m -j libEGL.vendor
Test: BOARD_VNDK_VERSION=current m -j libGLESv2.vendor
Change-Id: I83a128b14a5d852bb0f2cd821a8e3f82c66a313f
-rw-r--r-- | opengl/Android.bp | 6 | ||||
-rw-r--r-- | opengl/libs/Android.bp | 17 | ||||
-rw-r--r-- | opengl/libs/EGL/Loader.cpp | 4 | ||||
-rw-r--r-- | opengl/libs/EGL/eglApi.cpp | 7 | ||||
-rw-r--r-- | opengl/libs/EGL/egl_cache.cpp | 1 |
5 files changed, 35 insertions, 0 deletions
diff --git a/opengl/Android.bp b/opengl/Android.bp index c520bda140..aec5a95628 100644 --- a/opengl/Android.bp +++ b/opengl/Android.bp @@ -52,6 +52,12 @@ ndk_headers { license: "include/KHR/NOTICE", } +cc_library_headers { + name: "gl_headers", + vendor_available: true, + export_include_dirs: ["include"], +} + subdirs = [ "*", ] diff --git a/opengl/libs/Android.bp b/opengl/libs/Android.bp index 4e275db403..a3446368de 100644 --- a/opengl/libs/Android.bp +++ b/opengl/libs/Android.bp @@ -64,6 +64,16 @@ cc_defaults { "liblog", "libdl", ], + static_libs: [ + "libarect", + ], + header_libs: [ + "gl_headers", + "libsystem_headers", + "libhardware_headers", + "libnativebase_headers", + ], + export_header_lib_headers: ["gl_headers"], // we need to access the private Bionic header <bionic_tls.h> include_dirs: ["bionic/libc/private"], @@ -75,6 +85,7 @@ cc_defaults { cc_defaults { name: "egl_libs_defaults", defaults: ["gl_libs_defaults"], + vendor_available: true, cflags: [ "-DLOG_TAG=\"libEGL\"", ], @@ -85,6 +96,11 @@ cc_defaults { "libnativewindow", "libbacktrace", ], + target: { + vendor: { + exclude_shared_libs: ["libgraphicsenv"], + }, + }, } cc_library_static { @@ -129,6 +145,7 @@ cc_test { cc_defaults { name: "gles_libs_defaults", defaults: ["gl_libs_defaults"], + vendor_available: true, arch: { arm: { instruction_set: "arm", diff --git a/opengl/libs/EGL/Loader.cpp b/opengl/libs/EGL/Loader.cpp index 6e5c510d8d..32f8caa989 100644 --- a/opengl/libs/EGL/Loader.cpp +++ b/opengl/libs/EGL/Loader.cpp @@ -28,7 +28,9 @@ #include <cutils/properties.h> #include <log/log.h> +#ifndef __ANDROID_VNDK__ #include <graphicsenv/GraphicsEnv.h> +#endif #include <vndksupport/linker.h> #include "egl_trace.h" @@ -477,10 +479,12 @@ void *Loader::load_driver(const char* kind, ATRACE_CALL(); void* dso = nullptr; +#ifndef __ANDROID_VNDK__ android_namespace_t* ns = android_getDriverNamespace(); if (ns) { dso = load_updated_driver(kind, ns); } +#endif if (!dso) { dso = load_system_driver(kind); if (!dso) diff --git a/opengl/libs/EGL/eglApi.cpp b/opengl/libs/EGL/eglApi.cpp index 835e72bf27..2a222ac551 100644 --- a/opengl/libs/EGL/eglApi.cpp +++ b/opengl/libs/EGL/eglApi.cpp @@ -1963,8 +1963,15 @@ EGLBoolean eglPresentationTimeANDROID(EGLDisplay dpy, EGLSurface surface, EGLClientBuffer eglGetNativeClientBufferANDROID(const AHardwareBuffer *buffer) { clearError(); + // AHardwareBuffer_to_ANativeWindowBuffer is a platform-only symbol and thus + // this function cannot be implemented when this libEGL is built for + // vendors. +#ifndef __ANDROID_VNDK__ if (!buffer) return setError(EGL_BAD_PARAMETER, (EGLClientBuffer)0); return const_cast<ANativeWindowBuffer *>(AHardwareBuffer_to_ANativeWindowBuffer(buffer)); +#else + return setError(EGL_BAD_PARAMETER, (EGLClientBuffer)0); +#endif } // ---------------------------------------------------------------------------- diff --git a/opengl/libs/EGL/egl_cache.cpp b/opengl/libs/EGL/egl_cache.cpp index dc1a4af46e..579e422c1a 100644 --- a/opengl/libs/EGL/egl_cache.cpp +++ b/opengl/libs/EGL/egl_cache.cpp @@ -26,6 +26,7 @@ #include <inttypes.h> #include <sys/mman.h> #include <sys/stat.h> +#include <unistd.h> #include <thread> |