third-party: add egl dependency

After removing ANGLE, we are also removing our EGL headers.

For an AOSP tree build, we expect that headers to be found in
external/angle. For SYSTEM build, we use pkg-config to detect it. For
DOWNLOAD we directly download the EGL registry hosted on github.

Test: presubmit, build with SYSTEM and AOSP dependency resolution

Change-Id: I304b50be56669e9e034a801b56c71a2ac763f280
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c1f51c9..0d304c6 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -42,6 +42,10 @@
 
 option(ASTC_CPU_DECODING "Enable decoding ASTC textures on the CPU" OFF)
 
+# For now the caller of the cmake script is responsible to create the angle_shader_translator
+# target.
+option(USE_ANGLE_SHADER_PARSER "Build with ANGLE shader parser." OFF)
+
 if(UNIX AND NOT APPLE)
     set(LINUX TRUE)
 endif()
@@ -75,6 +79,8 @@
     add_compile_definitions(VK_USE_PLATFORM_MACOS_MVK)
 elseif(UNIX)
     # TODO(kaiyili, b/179477624): Add Linux specific Vulkan platform macro definitions
+    # Use X11 version of EGL platform specific definitions.
+    add_compile_definitions(USE_X11)
 elseif(WIN32)
     add_compile_definitions(VK_USE_PLATFORM_WIN32_KHR)
 endif()
@@ -118,15 +124,15 @@
 
 set(GFXSTREAM_REPO_ROOT ${CMAKE_CURRENT_SOURCE_DIR})
 
+if(USE_ANGLE_SHADER_PARSER)
+    add_compile_definitions(USE_ANGLE_SHADER_PARSER)
+endif()
+
 include(android.cmake)
 
 set(EXTRA_SUBDIR_TEST_INCLUDE_FILES)
 
 
-if(DEPENDENCY_RESOLUTION STREQUAL "AOSP")
-    add_compile_definitions(USE_ANGLE_SHADER_PARSER)
-endif ()
-
 # Third party dependencies
 add_subdirectory(third-party)
 
diff --git a/stream-servers/CMakeLists.txt b/stream-servers/CMakeLists.txt
index df4b098..62c6145 100644
--- a/stream-servers/CMakeLists.txt
+++ b/stream-servers/CMakeLists.txt
@@ -64,6 +64,7 @@
         renderControl_dec
         gfxstream-gl-server
         gfxstream-vulkan-server
+        gfxstream_egl_headers
         gfxstream-snapshot
         apigen-codec-common
         ${GFXSTREAM_HOST_COMMON_LIB}
@@ -78,7 +79,6 @@
         ${GFXSTREAM_REPO_ROOT}/stream-servers/apigen-codec-common
         ${GFXSTREAM_REPO_ROOT}/stream-servers/gl
         ${GFXSTREAM_REPO_ROOT}/stream-servers/vulkan
-        ${GFXSTREAM_REPO_ROOT}/third-party/angle/include
         ${GFXSTREAM_REPO_ROOT}/third-party/glm/include)
 
 if (WIN32)
diff --git a/stream-servers/gl/CMakeLists.txt b/stream-servers/gl/CMakeLists.txt
index 2cc3688..5218c10 100644
--- a/stream-servers/gl/CMakeLists.txt
+++ b/stream-servers/gl/CMakeLists.txt
@@ -25,6 +25,7 @@
         PUBLIC
         aemu-base.headers
         gfxstream_vulkan_headers
+        gfxstream_egl_headers
         gles1_dec
         gles2_dec
         GLSnapshot
@@ -37,5 +38,4 @@
                            ${GFXSTREAM_REPO_ROOT}/include
                            ${GFXSTREAM_REPO_ROOT}/stream-servers
                            ${GFXSTREAM_REPO_ROOT}/stream-servers/gl
-                           ${GFXSTREAM_REPO_ROOT}/third-party/angle/include
                            ${GFXSTREAM_REPO_ROOT}/third-party/glm/include)
diff --git a/stream-servers/gl/gles1_dec/CMakeLists.txt b/stream-servers/gl/gles1_dec/CMakeLists.txt
index 98fc749..2d618d0 100644
--- a/stream-servers/gl/gles1_dec/CMakeLists.txt
+++ b/stream-servers/gl/gles1_dec/CMakeLists.txt
@@ -7,12 +7,13 @@
     gles1_dec
     PUBLIC
     apigen-codec-common
-    GLSnapshot)
+    GLSnapshot
+    PRIVATE
+    gfxstream_egl_headers)
 target_include_directories(
     gles1_dec
     PRIVATE
     ${GFXSTREAM_REPO_ROOT}
     ${GFXSTREAM_REPO_ROOT}/include
     ${GFXSTREAM_REPO_ROOT}/stream-servers
-    ${GFXSTREAM_REPO_ROOT}/stream-servers/apigen-codec-common
-    ${GFXSTREAM_REPO_ROOT}/third-party/angle/include)
+    ${GFXSTREAM_REPO_ROOT}/stream-servers/apigen-codec-common)
diff --git a/stream-servers/gl/gles2_dec/CMakeLists.txt b/stream-servers/gl/gles2_dec/CMakeLists.txt
index d520c3c..e2374d6 100644
--- a/stream-servers/gl/gles2_dec/CMakeLists.txt
+++ b/stream-servers/gl/gles2_dec/CMakeLists.txt
@@ -7,12 +7,13 @@
     gles2_dec
     PUBLIC
     apigen-codec-common
-    GLSnapshot)
+    GLSnapshot
+    PRIVATE
+    gfxstream_egl_headers)
 target_include_directories(
     gles2_dec
     PRIVATE
     ${GFXSTREAM_REPO_ROOT}
     ${GFXSTREAM_REPO_ROOT}/include
     ${GFXSTREAM_REPO_ROOT}/stream-servers
-    ${GFXSTREAM_REPO_ROOT}/stream-servers/apigen-codec-common
-    ${GFXSTREAM_REPO_ROOT}/third-party/angle/include)
+    ${GFXSTREAM_REPO_ROOT}/stream-servers/apigen-codec-common)
diff --git a/stream-servers/gl/glestranslator/GLES_CM/CMakeLists.txt b/stream-servers/gl/glestranslator/GLES_CM/CMakeLists.txt
index db1f96b..0028b18 100644
--- a/stream-servers/gl/glestranslator/GLES_CM/CMakeLists.txt
+++ b/stream-servers/gl/glestranslator/GLES_CM/CMakeLists.txt
@@ -11,12 +11,12 @@
     apigen-codec-common
     aemu-base.headers
     aemu-host-common.headers
-    gfxstream-snapshot.headers)
+    gfxstream-snapshot.headers
+    gfxstream_egl_headers)
 target_include_directories(
     GLES_CM_translator_static PRIVATE
     ${GFXSTREAM_REPO_ROOT}
     ${GFXSTREAM_REPO_ROOT}/include
     ${GFXSTREAM_REPO_ROOT}/stream-servers/
     ${GFXSTREAM_REPO_ROOT}/stream-servers/gl/glestranslator/include
-    ${GFXSTREAM_REPO_ROOT}/third-party/angle/include
     ${GFXSTREAM_REPO_ROOT}/third-party/glm/include)
diff --git a/stream-servers/gl/glestranslator/GLES_V2/CMakeLists.txt b/stream-servers/gl/glestranslator/GLES_V2/CMakeLists.txt
index c4f100b..550ed00 100644
--- a/stream-servers/gl/glestranslator/GLES_V2/CMakeLists.txt
+++ b/stream-servers/gl/glestranslator/GLES_V2/CMakeLists.txt
@@ -20,7 +20,7 @@
     aemu-base.headers
     aemu-host-common.headers)
 
-if(DEPENDENCY_RESOLUTION STREQUAL "AOSP")
+if(USE_ANGLE_SHADER_PARSER)
     target_link_libraries(
        GLES_V2_translator_static PRIVATE
        angle_shader_translator)
diff --git a/stream-servers/gl/glestranslator/GLcommon/CMakeLists.txt b/stream-servers/gl/glestranslator/GLcommon/CMakeLists.txt
index cc0af8c..2874168 100644
--- a/stream-servers/gl/glestranslator/GLcommon/CMakeLists.txt
+++ b/stream-servers/gl/glestranslator/GLcommon/CMakeLists.txt
@@ -25,14 +25,14 @@
     ${GFXSTREAM_REPO_ROOT}
     ${GFXSTREAM_REPO_ROOT}/include
     ${GFXSTREAM_REPO_ROOT}/stream-servers
-    ${GFXSTREAM_REPO_ROOT}/stream-servers/gl/glestranslator/include
-    ${GFXSTREAM_REPO_ROOT}/third-party/angle/include)
+    ${GFXSTREAM_REPO_ROOT}/stream-servers/gl/glestranslator/include)
 target_link_libraries(
     GLcommon PUBLIC
     aemu-base.headers
     aemu-host-common.headers
     gfxstream-snapshot.headers
-    gfxstream-compressedTextures)
+    gfxstream-compressedTextures
+    gfxstream_egl_headers)
 if (NOT MSVC)
     target_compile_options(GLcommon PRIVATE -fvisibility=hidden)
 endif()
diff --git a/stream-servers/renderControl_dec/CMakeLists.txt b/stream-servers/renderControl_dec/CMakeLists.txt
index 5fd4111..db8c280 100644
--- a/stream-servers/renderControl_dec/CMakeLists.txt
+++ b/stream-servers/renderControl_dec/CMakeLists.txt
@@ -5,12 +5,13 @@
 target_link_libraries(
     renderControl_dec
     PUBLIC
-    apigen-codec-common)
+    apigen-codec-common
+    PRIVATE
+    gfxstream_egl_headers)
 target_include_directories(
     renderControl_dec
     PRIVATE
     ${GFXSTREAM_REPO_ROOT}
     ${GFXSTREAM_REPO_ROOT}/include
     ${GFXSTREAM_REPO_ROOT}/stream-servers
-    ${GFXSTREAM_REPO_ROOT}/stream-servers/apigen-codec-common
-    ${GFXSTREAM_REPO_ROOT}/third-party/angle/include)
+    ${GFXSTREAM_REPO_ROOT}/stream-servers/apigen-codec-common)
diff --git a/stream-servers/testlibs/CMakeLists.txt b/stream-servers/testlibs/CMakeLists.txt
index ce94658..3e41a07 100644
--- a/stream-servers/testlibs/CMakeLists.txt
+++ b/stream-servers/testlibs/CMakeLists.txt
@@ -18,14 +18,14 @@
 target_link_libraries(
     OSWindow
     PRIVATE
-    aemu-base.headers)
+    aemu-base.headers
+    gfxstream_egl_headers)
 target_include_directories(
     OSWindow
     PUBLIC
     .
     PRIVATE
     ${GFXSTREAM_REPO_ROOT}/include
-    ${GFXSTREAM_REPO_ROOT}/third-party/angle/include
     ${GFXSTREAM_REPO_ROOT}/third-party/glm/include)
 
 if (LINUX)
diff --git a/stream-servers/vulkan/CMakeLists.txt b/stream-servers/vulkan/CMakeLists.txt
index e60c2bf..c5f8d00 100644
--- a/stream-servers/vulkan/CMakeLists.txt
+++ b/stream-servers/vulkan/CMakeLists.txt
@@ -29,7 +29,9 @@
         aemu-base.headers
         gfxstream-snapshot.headers
         gfxstream_utils.headers
-        gfxstream_vulkan_headers)
+        gfxstream_vulkan_headers
+        PRIVATE
+        gfxstream_egl_headers)
 
 if (WIN32)
 target_compile_definitions(gfxstream-vulkan-server PRIVATE -DVK_USE_PLATFORM_WIN32_KHR)
@@ -52,5 +54,4 @@
                            ${GFXSTREAM_REPO_ROOT}/stream-servers
                            ${GFXSTREAM_REPO_ROOT}/stream-servers/vulkan
                            ${GFXSTREAM_REPO_ROOT}/stream-servers/apigen-codec-common
-                           ${GFXSTREAM_REPO_ROOT}/third-party/angle/include
                            ${GFXSTREAM_REPO_ROOT}/third-party/glm/include)
diff --git a/third-party/CMakeLists.txt b/third-party/CMakeLists.txt
index b3e2c68..f4fb8e0 100644
--- a/third-party/CMakeLists.txt
+++ b/third-party/CMakeLists.txt
@@ -1,7 +1,3 @@
-if(DEPENDENCY_RESOLUTION STREQUAL "AOSP")
-    add_subdirectory(angle)
-endif ()
-
 # Configure and add `astc-encoder`, if needed
 if (ASTC_CPU_DECODING)
     set(DECOMPRESSOR ON)   # Disable compression code
@@ -173,6 +169,33 @@
     endif()
 endif()
 
+if(NOT TARGET gfxstream_egl_headers)
+    if(DEPENDENCY_RESOLUTION STREQUAL "AOSP")
+        # ANGLE provides the EGL headers for us.
+        set(ANGLE_PATH ${PROJECT_SOURCE_DIR}/../../../external/angle)
+        if(NOT EXISTS ${ANGLE_PATH})
+            message(FATAL_ERROR "ANGLE is not found.")
+        endif()
+        add_library(gfxstream_egl_headers INTERFACE)
+        target_include_directories(gfxstream_egl_headers INTERFACE ${ANGLE_PATH}/include)
+    elseif(DEPENDENCY_RESOLUTION STREQUAL "SYSTEM")
+        find_package(PkgConfig REQUIRED)
+        pkg_search_module(egl REQUIRED IMPORTED_TARGET GLOBAL egl>=1.5)
+        add_library(gfxstream_egl_headers ALIAS PkgConfig::egl)
+    elseif(DEPENDENCY_RESOLUTION STREQUAL "DOWNLOAD")
+        FetchContent_Declare(
+            egl
+            GIT_REPOSITORY https://github.com/KhronosGroup/EGL-Registry.git
+            GIT_TAG main
+            GIT_REMOTE_UPDATE_STRATEGY CHECKOUT
+            GIT_PROGRESS TRUE
+        )
+        list(APPEND PROJECT_TO_FETCH egl)
+        add_library(gfxstream_egl_headers INTERFACE)
+        target_include_directories(gfxstream_egl_headers INTERFACE ${egl_SOURCE_DIR}/api)
+    endif()
+endif()
+
 if(PROJECT_TO_FETCH)
     FetchContent_MakeAvailable(${PROJECT_TO_FETCH})
 endif()
@@ -186,3 +209,6 @@
 if(NOT TARGET flatbuffers)
     message(FATAL_ERROR "The dependency flatbuffers not found.")
 endif()
+if(USE_ANGLE_SHADER_PARSER AND NOT TARGET angle_shader_translator)
+    message(FATAL_ERROR "The dependency angle_shader_translator not found.")
+endif()
\ No newline at end of file