Edit

kc3-lang/angle/src/tests/BUILD.gn

Branch :

  • Show log

    Commit

  • Author : Jamie Madill
    Date : 2021-04-21 13:05:46
    Hash : f78927b0
    Message : Remove libGLESv1_CM static. These entry points are already duplicated into libGLESv2. Including them in the static build causes a duplicate symbol error on Android. Bug: angleproject:2344 Change-Id: I56a2f2029e7da49215e64484c1d1316add6ff1c3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2842354 Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>

  • src/tests/BUILD.gn
  • # Copyright 2015 The ANGLE Project Authors. All rights reserved.
    # Use of this source code is governed by a BSD-style license that can be
    # found in the LICENSE file.
    
    import("//build/config/chromecast_build.gni")
    import("//testing/test.gni")
    import("../../gni/angle.gni")
    import("angle_unittests.gni")
    
    declare_args() {
      # Don't build dEQP by default.
      build_angle_deqp_tests = false
      build_angle_gles1_conform_tests = false
      build_angle_trace_perf_tests = false
      build_angle_perftests =
          is_win || is_linux || is_chromeos || is_android || is_apple || is_fuchsia
    }
    
    if (is_android) {
      android_library("native_test_java") {
        testonly = true
        sources = [
          "test_utils/runner/android/java/src/com/android/angle/test/AngleNativeTest.java",
          "test_utils/runner/android/java/src/com/android/angle/test/AngleUnitTestActivity.java",
          "test_utils/runner/android/java/src/com/android/angle/test/TestStatusReporter.java",
        ]
    
        deps = [
          "//build/android:native_libraries_java",
          "//build/android/gtest_apk:native_test_instrumentation_test_runner_java",
        ]
      }
    
      angle_source_set("native_test_support_android") {
        testonly = true
        sources = [ "test_utils/runner/android/AngleNativeTest.cpp" ]
        deps = [ "$angle_root:angle_common" ]
      }
    }
    
    angle_test("test_utils_unittest_helper") {
      sources = [
        "../../util/test_utils_unittest_helper.cpp",
        "../../util/test_utils_unittest_helper.h",
        "test_utils/angle_test_instantiate.h",
        "test_utils/runner/TestSuite_unittest.cpp",
      ]
    }
    
    test_expectations_sources = [
      "test_expectations/GPUTestConfig.cpp",
      "test_expectations/GPUTestConfig.h",
      "test_expectations/GPUTestExpectationsParser.cpp",
      "test_expectations/GPUTestExpectationsParser.h",
    ]
    if (is_mac) {
      test_expectations_sources_mac = [
        "test_expectations/GPUTestConfig_mac.mm",
        "test_expectations/GPUTestConfig_mac.h",
      ]
    }
    
    angle_static_library("angle_test_expectations") {
      public_deps = [
        "$angle_root:angle_common",
        "$angle_root:angle_gpu_info_util",
      ]
      sources = test_expectations_sources
      if (is_mac) {
        sources += test_expectations_sources_mac
        frameworks = [ "Cocoa.framework" ]
      }
      if (is_ios) {
        sources += [
          "test_expectations/GPUTestConfig_ios.h",
          "test_expectations/GPUTestConfig_ios.mm",
        ]
      }
    }
    
    config("angle_common_test_utils_config") {
      include_dirs = [ "." ]
    }
    
    template("angle_common_test_utils") {
      assert(defined(invoker.angle_util))
      angle_source_set(target_name) {
        testonly = true
        if (is_ios) {
          # shared libraries are hidden inside ios_framework_bundle, but we include headers from them
          check_includes = false
        }
        public_configs = [
          ":angle_common_test_utils_config",
          "$angle_root:library_name_config",
        ]
        public_deps = [
          "$angle_root:angle_common",
          "$angle_root:angle_gpu_info_util",
          "$angle_root/util:${invoker.angle_util}",
          "//testing/gmock",
          "//testing/gtest",
          "//third_party/googletest:gmock",
          "//third_party/googletest:gtest",
        ]
        sources = [
          "test_utils/angle_test_configs.cpp",
          "test_utils/angle_test_configs.h",
          "test_utils/angle_test_instantiate.cpp",
          "test_utils/angle_test_instantiate.h",
          "test_utils/angle_test_platform.cpp",
          "test_utils/angle_test_platform.h",
          "test_utils/gl_raii.h",
        ]
        if (is_apple) {
          sources += [
            "test_utils/angle_test_instantiate_apple.h",
            "test_utils/angle_test_instantiate_apple.mm",
          ]
        }
        data_deps = []
        if (angle_enable_vulkan_validation_layers) {
          data_deps += [ "$angle_root/src/common/vulkan:vulkan_validation_layers" ]
        }
      }
    }
    
    angle_common_test_utils("angle_common_test_utils_shared") {
      angle_util = "angle_util"
    }
    
    angle_common_test_utils("angle_common_test_utils_static") {
      angle_util = "angle_util_static"
    }
    
    # We use this in the restricted trace tests to load driver info.
    angle_test("angle_system_info_test") {
      sources = [ "angle_system_info_tests_main.cpp" ]
      deps = [
        "$angle_root:angle_gpu_info_util",
        "$angle_root:libEGL_static",
        "$angle_root:libGLESv2_static",
        "$angle_root/util:angle_util_static",
      ]
    }
    
    angle_test("angle_unittests") {
      sources = angle_unittests_sources + [ "angle_unittest_main.cpp" ]
    
      # Compiler tests frequently require either TranslatorGLSL or TranslatorESSL.  Build them only if
      # both are enabled.
      if (angle_enable_essl && angle_enable_glsl) {
        sources += angle_unittests_compiler_tests_sources
    
        if (is_apple) {
          sources += angle_unittests_glsl_mac_sources
        }
      }
    
      defines = []
    
      if (angle_enable_hlsl) {
        sources += angle_unittests_hlsl_sources
        defines += [ "ANGLE_ENABLE_HLSL" ]
      }
    
      if (angle_enable_gl) {
        sources += angle_unittests_gl_sources
      }
    
      deps = [
        ":angle_test_expectations",
        "$angle_root:angle_json_serializer",
        "$angle_root:libANGLE",
        "$angle_root:libEGL_static",
        "$angle_root:libGLESv2_static",
        "$angle_root:libfeature_support",
        "$angle_root:preprocessor",
        "$angle_root:translator",
        "$angle_root/util:angle_util_static",
      ]
    
      if (!is_android && !is_fuchsia) {
        # SystemUtils.RunApp, the only unittest using a helper binary, is not supported on these
        # platforms yet.
        data_deps = [ ":test_utils_unittest_helper" ]
      }
    }
    
    if (is_win || is_linux || is_chromeos || is_android || is_fuchsia || is_apple) {
      import("angle_end2end_tests.gni")
    
      angle_test("angle_end2end_tests") {
        include_dirs = [ "." ]
    
        sources = angle_end2end_tests_sources + [ "angle_end2end_tests_main.cpp" ]
        libs = []
    
        if (is_mac) {
          sources += angle_end2end_tests_mac_sources
          frameworks = [
            "CoreFoundation.framework",
            "IOSurface.framework",
          ]
          ldflags = [
            "-weak_framework",
            "Metal",
          ]
          cflags_objcc = [
            "-Wno-nullability-completeness",
            "-Wno-unguarded-availability",
          ]
        }
        if (is_win) {
          sources += angle_end2end_tests_win_sources
        }
        if (angle_use_x11) {
          sources += angle_end2end_tests_x11_sources
        }
    
        configs += [ "${angle_root}:libANGLE_config" ]
    
        deps = [
          ":angle_common_test_utils_shared",
          ":angle_test_expectations",
          "$angle_root:angle_image_util",
        ]
    
        if (is_android) {
          include_dirs += [ "${android_ndk_root}/sysroot/usr/includes" ]
        }
    
        data_deps = [
          "$angle_root:libEGL",
          "$angle_root:libGLESv1_CM",
          "$angle_root:libGLESv2",
        ]
    
        if (angle_enable_vulkan) {
          sources += [
            "gl_tests/VulkanExternalImageTest.cpp",
            "test_utils/VulkanExternalHelper.cpp",
            "test_utils/VulkanExternalHelper.h",
          ]
          deps += [ "$angle_root/src/common/vulkan" ]
        }
    
        if (is_fuchsia) {
          additional_manifest_fragments = [
            # TODO(crbug.com/1185811): Figure out why jit_capabilities is needed.
            "//build/config/fuchsia/test/jit_capabilities.test-cmx",
    
            "//build/config/fuchsia/test/present_view_capabilities.test-cmx",
            "//build/config/fuchsia/test/vulkan_capabilities.test-cmx",
          ]
        }
    
        if (is_ios) {
          xcode_extra_attributes = {
            SUPPORTS_MACCATALYST = "YES"
          }
    
          # Need to bundle the libraries inside the .app.
          deps += [
            "$angle_root:libEGL",
            "$angle_root:libGLESv1_CM",
            "$angle_root:libGLESv2",
          ]
        }
      }
    }
    
    if (is_win || is_linux || is_chromeos || is_android || is_fuchsia || is_apple) {
      import("angle_white_box_tests.gni")
    
      angle_test("angle_white_box_tests") {
        include_dirs = [ "." ]
        sources = angle_white_box_tests_sources + [ "angle_end2end_tests_main.cpp" ]
    
        if (is_win && angle_enable_d3d11) {
          sources += angle_white_box_tests_win_sources
        }
    
        configs += [ "${angle_root}:libANGLE_config" ]
    
        deps = [
          ":angle_common_test_utils_static",
          "$angle_root:libANGLE",
          "$angle_root:libEGL_static",
          "$angle_root:libGLESv2_static",
          "$angle_root:preprocessor",
          "$angle_root:translator",
        ]
    
        deps += [ "${angle_root}:angle_gl_enum_utils" ]
    
        if (angle_enable_vulkan) {
          sources += angle_white_box_tests_vulkan_sources
          deps += [ "$angle_root/src/common/vulkan:angle_vulkan_entry_points" ]
        }
      }
    }
    
    config("angle_maybe_has_histograms") {
      if (angle_has_histograms) {
        defines = [ "ANGLE_HAS_HISTOGRAMS" ]
        include_dirs = [ "$root_gen_dir" ]
      }
    }
    
    template("angle_perftests_common") {
      assert(defined(invoker.test_utils))
    
      angle_source_set(target_name) {
        testonly = true
        if (is_ios) {
          # shared libraries are hidden inside ios_framework_bundle, but we include headers from them
          check_includes = false
        }
        sources = [
          "../third_party/trace_event/trace_event.h",
          "perf_tests/ANGLEPerfTest.cpp",
          "perf_tests/ANGLEPerfTest.h",
          "perf_tests/ANGLEPerfTestArgs.cpp",
          "perf_tests/ANGLEPerfTestArgs.h",
          "perf_tests/DrawCallPerfParams.cpp",
          "perf_tests/DrawCallPerfParams.h",
          "perf_tests/third_party/perf/perf_result_reporter.cc",
          "perf_tests/third_party/perf/perf_result_reporter.h",
          "perf_tests/third_party/perf/perf_test.cc",
          "perf_tests/third_party/perf/perf_test.h",
          "test_utils/runner/HistogramWriter.h",
          "test_utils/runner/TestSuite.h",
        ]
        public_deps = [
          "$angle_root/third_party/rapidjson:rapidjson",
          "${invoker.test_utils}",
        ]
        public_configs += [ "${angle_root}:libANGLE_config" ]
      }
    }
    
    angle_perftests_common("angle_perftests_shared") {
      test_utils = ":angle_common_test_utils_shared"
    }
    
    angle_perftests_common("angle_perftests_static") {
      test_utils = ":angle_common_test_utils_static"
    }
    
    if (is_win || is_linux || is_chromeos || is_android || is_apple) {
      import("angle_perftests.gni")
    
      # This test suite is for perf tests that use ANGLE's internals in some direct way.
      angle_test("angle_white_box_perftests") {
        include_dirs = [ "." ]
        sources =
            angle_white_box_perf_tests_sources + [ "angle_perftests_main.cpp" ]
    
        deps = [
          ":angle_perftests_static",
          "$angle_root:libANGLE",
          "$angle_root:libEGL_static",
          "$angle_root:libGLESv2_static",
        ]
    
        # These tests depend on vulkan_command_buffer_utils, which is
        # not yet compatible with mac and vulkan display/headless backend.
        if (angle_enable_vulkan && !angle_use_vulkan_display && !is_apple) {
          sources += angle_white_box_perf_tests_vulkan_sources
          deps += [
            "$angle_glslang_dir:glslang_lib_sources",
            "$angle_root/src/common/vulkan:angle_vulkan_entry_points",
          ]
        }
      }
    }
    
    if (build_angle_perftests) {
      import("angle_perftests.gni")
    
      angle_source_set("angle_trace_perftests") {
        testonly = true
        if (build_angle_trace_perf_tests) {
          if (is_ios) {
            # shared libraries are hidden inside ios_framework_bundle, but we include headers from them
            check_includes = false
          }
          sources = [ "perf_tests/TracePerfTest.cpp" ]
          deps = [
            ":angle_perftests_shared",
            "$angle_root:angle_compression",
            "$angle_root/util:angle_png_utils",
            "restricted_traces:angle_restricted_traces",
          ]
          suppressed_configs +=
              [ "$angle_root:constructor_and_destructor_warnings" ]
        }
      }
    
      # This test suite is designed to run against a generic GL implementation.
      angle_test("angle_perftests") {
        include_dirs = [ "." ]
        sources = angle_perf_tests_sources + [ "angle_perftests_main.cpp" ]
    
        deps = [
          ":angle_perftests_shared",
          ":angle_trace_perftests",
          "$angle_spirv_tools_dir:spvtools_val",
        ]
    
        data_deps = [
          "${angle_root}:libEGL",
          "${angle_root}:libGLESv2",
        ]
    
        data_deps += [ "//testing:run_perf_test" ]
    
        if (is_win || is_linux || is_chromeos) {
          data_deps += [ "${angle_root}/third_party/glmark2:glmark2_angle" ]
        }
        if (is_win && target_cpu != "arm64") {
          data_deps += [ "${angle_root}/third_party/glmark2:glmark2_wgl" ]
        }
        if (is_linux || is_chromeos) {
          data_deps += [ "${angle_root}/third_party/glmark2:glmark2_glx" ]
        }
    
        if (is_clang) {
          # Allows us to edit traces and remove chunks of code without compile warnings.
          cflags_cc = [ "-Wno-unused-const-variable" ]
        }
      }
    }
    
    ###-----------------------------------------------------
    ### ES 1 conformance tests
    ###-----------------------------------------------------
    
    if (build_angle_gles1_conform_tests) {
      gles1_conform_root = "$angle_root/third_party/gles1_conform"
    
      config("angle_gles1_conform_support") {
        include_dirs = [
          "$gles1_conform_root",
          "$gles1_conform_root/conform/conform",
          "$gles1_conform_root/conform/conformshell",
          "$gles1_conform_root/ctk",
          "$gles1_conform_root/fixed",
          "$gles1_conform_root/platform",
        ]
    
        defines = [
          "COMMON",
          "CONFORM_ALTERNATE_MAIN",
    
          # NULLWS defines is only used in covegl/native.h, remove here.
          # if needed please add it in angle_test("angle_gles1_covegl_no_gtest") defines.
          #"NULLWS",
        ]
    
        # This is used by the tests to typedef uint32_t. For some reason only needed on mac.
        if (is_apple) {
          defines += [ "__linux" ]
        }
    
        cflags = []
        if (is_clang) {
          # Remove when crbug.com/428099 is resolved.
          cflags += [
            "-Wno-implicit-function-declaration",
            "-Wno-int-to-pointer-cast",
            "-Wno-self-assign",
            "-Wno-sign-compare",
            "-Wno-unused-const-variable",
            "-Wno-unused-result",
            "-Wno-unused-variable",
    
            # Upstream tests do null pointer arithmetic, so disable those warnings.
            "-Wno-null-pointer-arithmetic",
          ]
        } else {
          cflags += [ "/wd4101" ]  # unreferenced local variable
        }
      }
    
      # This source set is a bit special so we don't use angle_source_set.
      angle_gles1_conform_common_source = [
        "$gles1_conform_root/ctk/ctk.h",
        "$gles1_conform_root/ctk/ctkn.c",
        "$gles1_conform_root/ctk/glext.c",
        "$gles1_conform_root/fixed/fixed.c",
        "$gles1_conform_root/fixed/float64.c",
        "$gles1_conform_root/fixed/int32.c",
        "$gles1_conform_root/fixed/int64.c",
        "$gles1_conform_root/platform/gl_fixed_point.h",
        "$gles1_conform_root/platform/gl_single_precision.h",
        "$gles1_conform_root/platform/math_fixed.h",
        "$gles1_conform_root/platform/math_float.h",
        "$gles1_conform_root/platform/platform.h",
        "$gles1_conform_root/platform/platform_gl.h",
        "$gles1_conform_root/platform/platform_random.h",
        "$gles1_conform_root/platform/platform_stdlib.h",
        "$gles1_conform_root/platform/platform_types.h",
        "$gles1_conform_root/platform/printf_fixed.h",
        "$gles1_conform_root/platform/printf_float.h",
        "$gles1_conform_root/platform/random.c",
        "$gles1_conform_root/platform/stdlib_ansi.h",
      ]
    
      source_set("angle_gles1_conformance_no_gtest") {
        configs += [
          ":angle_gles1_conform_support",
          "$angle_root:internal_config",
        ]
    
        public_configs = [
          "$angle_root/util:angle_util_config",
          "$angle_root:angle_static",
          "$angle_root:gl_prototypes",
        ]
    
        testonly = true
    
        public_deps = [
          "$angle_root:angle_common",
          "$angle_root:libEGL_static",
          "$angle_root:libGLESv2_static",
          "$angle_root:preprocessor",
          "$angle_root:translator",
          "$angle_root/util:angle_util_static",
        ]
    
        sources = [
          "$gles1_conform_root/conform/conform/apfunc.c",
          "$gles1_conform_root/conform/conform/appl.c",
          "$gles1_conform_root/conform/conform/bclear.c",
          "$gles1_conform_root/conform/conform/bcolor.c",
          "$gles1_conform_root/conform/conform/bcorner.c",
          "$gles1_conform_root/conform/conform/blend.c",
          "$gles1_conform_root/conform/conform/bufobj.c",
          "$gles1_conform_root/conform/conform/clip.c",
          "$gles1_conform_root/conform/conform/colramp.c",
          "$gles1_conform_root/conform/conform/copytex.c",
          "$gles1_conform_root/conform/conform/dither.c",
          "$gles1_conform_root/conform/conform/divzero.c",
          "$gles1_conform_root/conform/conform/drawtex.c",
          "$gles1_conform_root/conform/conform/fogexp.c",
          "$gles1_conform_root/conform/conform/foglin.c",
          "$gles1_conform_root/conform/conform/gets.c",
          "$gles1_conform_root/conform/conform/l_ac.c",
          "$gles1_conform_root/conform/conform/l_al.c",
          "$gles1_conform_root/conform/conform/l_am.c",
          "$gles1_conform_root/conform/conform/l_ap.c",
          "$gles1_conform_root/conform/conform/l_as.c",
          "$gles1_conform_root/conform/conform/l_dl.c",
          "$gles1_conform_root/conform/conform/l_dm.c",
          "$gles1_conform_root/conform/conform/l_dmn.c",
          "$gles1_conform_root/conform/conform/l_dmp.c",
          "$gles1_conform_root/conform/conform/l_em.c",
          "$gles1_conform_root/conform/conform/l_se.c",
          "$gles1_conform_root/conform/conform/l_sed.c",
          "$gles1_conform_root/conform/conform/l_sen.c",
          "$gles1_conform_root/conform/conform/l_sep.c",
          "$gles1_conform_root/conform/conform/l_sl.c",
          "$gles1_conform_root/conform/conform/l_sm.c",
          "$gles1_conform_root/conform/conform/l_sn.c",
          "$gles1_conform_root/conform/conform/l_sp.c",
          "$gles1_conform_root/conform/conform/lineaa.c",
          "$gles1_conform_root/conform/conform/linehv.c",
          "$gles1_conform_root/conform/conform/linerast.c",
          "$gles1_conform_root/conform/conform/logicop.c",
          "$gles1_conform_root/conform/conform/mask.c",
          "$gles1_conform_root/conform/conform/mget.c",
          "$gles1_conform_root/conform/conform/mipgen.c",
          "$gles1_conform_root/conform/conform/miplevels.c",
          "$gles1_conform_root/conform/conform/miplin.c",
          "$gles1_conform_root/conform/conform/mipsel.c",
          "$gles1_conform_root/conform/conform/mpalette.c",
          "$gles1_conform_root/conform/conform/mquery.c",
          "$gles1_conform_root/conform/conform/mstack.c",
          "$gles1_conform_root/conform/conform/multitex.c",
          "$gles1_conform_root/conform/conform/mustpass.c",
          "$gles1_conform_root/conform/conform/packpix.c",
          "$gles1_conform_root/conform/conform/pntaa.c",
          "$gles1_conform_root/conform/conform/pntrast.c",
          "$gles1_conform_root/conform/conform/pntsprt.c",
          "$gles1_conform_root/conform/conform/pntszary.c",
          "$gles1_conform_root/conform/conform/polycull.c",
          "$gles1_conform_root/conform/conform/readfmt.c",
          "$gles1_conform_root/conform/conform/rescalen.c",
          "$gles1_conform_root/conform/conform/scissor.c",
          "$gles1_conform_root/conform/conform/spclear.c",
          "$gles1_conform_root/conform/conform/spcorner.c",
          "$gles1_conform_root/conform/conform/spfunc.c",
          "$gles1_conform_root/conform/conform/spop.c",
          "$gles1_conform_root/conform/conform/tests.c",
          "$gles1_conform_root/conform/conform/texcombine.c",
          "$gles1_conform_root/conform/conform/texdecal.c",
          "$gles1_conform_root/conform/conform/texedge.c",
          "$gles1_conform_root/conform/conform/texpalet.c",
          "$gles1_conform_root/conform/conform/trirast.c",
          "$gles1_conform_root/conform/conform/tritile.c",
          "$gles1_conform_root/conform/conform/userclip.c",
          "$gles1_conform_root/conform/conform/vorder.c",
          "$gles1_conform_root/conform/conform/vpclamp.c",
          "$gles1_conform_root/conform/conform/xform.c",
          "$gles1_conform_root/conform/conform/xformmix.c",
          "$gles1_conform_root/conform/conform/xformn.c",
          "$gles1_conform_root/conform/conform/xformvp.c",
          "$gles1_conform_root/conform/conform/xformw.c",
          "$gles1_conform_root/conform/conform/zbclear.c",
          "$gles1_conform_root/conform/conform/zbfunc.c",
          "$gles1_conform_root/conform/conformshell/conform.h",
          "$gles1_conform_root/conform/conformshell/driver.c",
          "$gles1_conform_root/conform/conformshell/driver.h",
          "$gles1_conform_root/conform/conformshell/path.c",
          "$gles1_conform_root/conform/conformshell/path.h",
          "$gles1_conform_root/conform/conformshell/pathdata.c",
          "$gles1_conform_root/conform/conformshell/pathdata.h",
          "$gles1_conform_root/conform/conformshell/paths.c",
          "$gles1_conform_root/conform/conformshell/shell.c",
          "$gles1_conform_root/conform/conformshell/util.c",
          "$gles1_conform_root/conform/conformshell/util.h",
          "$gles1_conform_root/conform/conformshell/utilg.c",
          "$gles1_conform_root/conform/conformshell/utilg.h",
          "$gles1_conform_root/conform/conformshell/utilm.c",
          "$gles1_conform_root/conform/conformshell/utilm.h",
          "$gles1_conform_root/conform/conformshell/utilp.c",
          "$gles1_conform_root/conform/conformshell/utilp.h",
          "$gles1_conform_root/conform/conformshell/utilru.c",
          "$gles1_conform_root/conform/conformshell/utilru.h",
          "$gles1_conform_root/conform/conformshell/utils.c",
          "$gles1_conform_root/conform/conformshell/utils.h",
          "$gles1_conform_root/conform/conformshell/utilt.c",
          "$gles1_conform_root/conform/conformshell/utilt.h",
        ]
    
        sources += angle_gles1_conform_common_source
      }
    
      angle_test("angle_gles1_conformance_tests") {
        deps = [
          ":angle_common_test_utils_static",
          ":angle_gles1_conformance_no_gtest",
        ]
    
        include_dirs = [ "." ]
    
        sources = [
          "angle_end2end_tests_main.cpp",
          "gles1_conformance_tests/ConformanceTests.cpp",
          "test_utils/ANGLETest.cpp",
          "test_utils/ANGLETest.h",
        ]
    
        configs += [
          "${angle_root}:libANGLE_config",
          "${angle_root}:angle_backend_config",
        ]
      }
    
      if (!is_win && !is_apple) {
        source_set("angle_gles1_covgl_no_gtest") {
          configs += [
            ":angle_gles1_conform_support",
            "$angle_root:internal_config",
          ]
    
          public_configs = [
            "$angle_root/util:angle_util_config",
            "$angle_root:angle_static",
            "$angle_root:gl_prototypes",
          ]
    
          testonly = true
    
          public_deps = [
            "$angle_root:angle_common",
            "$angle_root:libEGL_static",
            "$angle_root:libGLESv2_static",
            "$angle_root:preprocessor",
            "$angle_root:translator",
            "$angle_root/util:angle_util_static",
          ]
    
          sources = [
            "$gles1_conform_root/conform/covgl/a.c",
            "$gles1_conform_root/conform/covgl/b.c",
            "$gles1_conform_root/conform/covgl/c.c",
            "$gles1_conform_root/conform/covgl/d.c",
            "$gles1_conform_root/conform/covgl/data.c",
            "$gles1_conform_root/conform/covgl/e.c",
            "$gles1_conform_root/conform/covgl/enum.c",
            "$gles1_conform_root/conform/covgl/f.c",
            "$gles1_conform_root/conform/covgl/g.c",
            "$gles1_conform_root/conform/covgl/h.c",
            "$gles1_conform_root/conform/covgl/i.c",
            "$gles1_conform_root/conform/covgl/l.c",
            "$gles1_conform_root/conform/covgl/m.c",
            "$gles1_conform_root/conform/covgl/n.c",
            "$gles1_conform_root/conform/covgl/o.c",
            "$gles1_conform_root/conform/covgl/p.c",
            "$gles1_conform_root/conform/covgl/q.c",
            "$gles1_conform_root/conform/covgl/r.c",
            "$gles1_conform_root/conform/covgl/s.c",
            "$gles1_conform_root/conform/covgl/shell.h",
            "$gles1_conform_root/conform/covgl/t.c",
            "$gles1_conform_root/conform/covgl/v.c",
            "$gles1_conform_root/conform/covgl/w.c",
          ]
    
          sources += angle_gles1_conform_common_source
    
          defines = [ "ProbeEnum=ProbeEnumANGLE" ]
        }
    
        angle_test("angle_gles1_covgl_tests") {
          deps = [
            ":angle_common_test_utils_static",
            ":angle_gles1_covgl_no_gtest",
          ]
    
          include_dirs = [ "." ]
    
          sources = [
            "$gles1_conform_root/conform/covgl/shell.c",
            "angle_end2end_tests_main.cpp",
            "gles1_conformance_tests/CovglTests.cpp",
            "test_utils/ANGLETest.cpp",
            "test_utils/ANGLETest.h",
          ]
    
          configs += [
            ":angle_gles1_conform_support",
            "${angle_root}:libANGLE_config",
            "${angle_root}:angle_backend_config",
          ]
        }
      }
      source_set("angle_gles1_primtest_no_gtest") {
        configs += [
          ":angle_gles1_conform_support",
          "$angle_root:internal_config",
        ]
    
        public_configs = [
          "$angle_root/util:angle_util_config",
          "$angle_root:angle_static",
          "$angle_root:gl_prototypes",
        ]
    
        testonly = true
    
        public_deps = [
          "$angle_root:angle_common",
          "$angle_root:libEGL_static",
          "$angle_root:libGLESv2_static",
          "$angle_root:preprocessor",
          "$angle_root:translator",
          "$angle_root/util:angle_util_static",
        ]
    
        sources = [
          "$gles1_conform_root/conform/primtest/alias.c",
          "$gles1_conform_root/conform/primtest/alpha.c",
          "$gles1_conform_root/conform/primtest/blend.c",
          "$gles1_conform_root/conform/primtest/depth.c",
          "$gles1_conform_root/conform/primtest/dither.c",
          "$gles1_conform_root/conform/primtest/driver.c",
          "$gles1_conform_root/conform/primtest/driver.h",
          "$gles1_conform_root/conform/primtest/fog.c",
          "$gles1_conform_root/conform/primtest/hint.c",
          "$gles1_conform_root/conform/primtest/light.c",
          "$gles1_conform_root/conform/primtest/logic.c",
          "$gles1_conform_root/conform/primtest/prim.c",
          "$gles1_conform_root/conform/primtest/scissor.c",
          "$gles1_conform_root/conform/primtest/shade.c",
          "$gles1_conform_root/conform/primtest/shell.c",
          "$gles1_conform_root/conform/primtest/shell.h",
          "$gles1_conform_root/conform/primtest/stencil.c",
          "$gles1_conform_root/conform/primtest/texture.c",
          "$gles1_conform_root/conform/primtest/tproto.h",
        ]
    
        sources += angle_gles1_conform_common_source
      }
    
      angle_test("angle_gles1_primtest_tests") {
        deps = [
          ":angle_common_test_utils_static",
          ":angle_gles1_primtest_no_gtest",
        ]
    
        include_dirs = [ "$gles1_conform_root/conform" ]
    
        sources = [
          "angle_end2end_tests_main.cpp",
          "gles1_conformance_tests/PrimtestTests.cpp",
          "test_utils/ANGLETest.cpp",
          "test_utils/ANGLETest.h",
        ]
    
        configs += [
          ":angle_gles1_conform_support",
          "${angle_root}:libANGLE_config",
          "${angle_root}:angle_backend_config",
        ]
      }
      source_set("angle_gles1_covegl_no_gtest_source") {
        configs += [
          ":angle_gles1_conform_support",
          "$angle_root:internal_config",
        ]
    
        public_configs = [
          "$angle_root/util:angle_util_config",
          "$angle_root:angle_static",
          "$angle_root:gl_prototypes",
        ]
    
        testonly = true
    
        public_deps = [
          "$angle_root:angle_common",
          "$angle_root:libEGL_static",
          "$angle_root:libGLESv2_static",
          "$angle_root:preprocessor",
          "$angle_root:translator",
          "$angle_root/util:angle_util_static",
        ]
    
        sources = [
          "$gles1_conform_root/conform/covegl/enum.c",
          "$gles1_conform_root/conform/covegl/native.h",
          "$gles1_conform_root/conform/covegl/test.c",
        ]
    
        sources += angle_gles1_conform_common_source
    
        if (!is_win && !is_linux && !is_chromeos) {
          defines = [ "NULLWS" ]
        }
      }
    
      angle_test("angle_gles1_covegl_no_gtest") {
        deps = [ ":angle_gles1_covegl_no_gtest_source" ]
    
        include_dirs = [ "$gles1_conform_root" ]
    
        sources = [ "$gles1_conform_root/conform/covegl/shell.c" ]
    
        if (is_win) {
          sources += [ "$gles1_conform_root/conform/covegl/native_w32.c" ]
        } else if (is_linux || is_chromeos) {
          sources += [ "$gles1_conform_root/conform/covegl/native.c" ]
        } else {
          sources += [ "$gles1_conform_root/conform/covegl/native_nws.c" ]
          defines += [ "NULLWS" ]
        }
    
        configs += [
          "${angle_root}:libANGLE_config",
          "${angle_root}:angle_backend_config",
        ]
    
        defines += [ "COMMON" ]
    
        if (is_win) {
          if (is_clang) {
            cflags = [ "-Wno-incompatible-pointer-types" ]
          } else {
            cflags = [ "/wd4133" ]  # 'function': incompatible types
          }
    
          suppressed_configs += [
            "//build/config/win:lean_and_mean",
            "//build/config/win:nominmax",
            "//build/config/win:unicode",
          ]
        }
      }
    }
    
    ###-----------------------------------------------------
    ### dEQP tests
    ###-----------------------------------------------------
    
    if (build_angle_deqp_tests && !is_fuchsia) {
      import("deqp_support/deqp.gni")
      import("deqp_support/deqp_data_autogen.gni")
    
      config("angle_deqp_support") {
        include_dirs = deqp_include_dirs
        if (is_win && !is_clang) {
          include_dirs += [ "$deqp_path/framework/platform/win32" ]
          cflags = [
            "/EHsc",  # dEQP requires exceptions
            "/wd4091",  # typedef ignored when no variable is declared
            "/wd4100",
            "/wd4101",  # unreferenced local variable
            "/wd4125",  # decimal digit terminates octal escape sequence
            "/wd4127",  # conditional expression constant
            "/wd4244",  # possible loss of data
            "/wd4245",  # argument signed/unsigned mismatch
            "/wd4297",  # function assumed not to throw an exception but does
            "/wd4302",  # truncation
            "/wd4311",  # pointer truncation
            "/wd4389",  # signed/unsigned mismatch
            "/wd4510",  # default constructor could not be generated
            "/wd4512",
            "/wd4610",  # cannot be instantiated
            "/wd4611",  # setjmp interaction non-portable
            "/wd4701",  # potentially uninit used
            "/wd4702",  # unreachable code
            "/wd4706",  # assignment within conditional expression
            "/wd4834",  # discarding return value of function with 'nodiscard'
                        # attribute
            "/wd4838",  # conversion requires a narrowing conversion
            "/wd4996",  # deprecated
          ]
        }
    
        defines = [
          "DEQP_SUPPORT_GLES31=1",
          "DEQP_SUPPORT_GLES3=1",
          "DEQP_SUPPORT_GLES2=1",
          "DEQP_SUPPORT_EGL=1",
          "DEQP_TARGET_NAME=\"angle\"",
          "DEQP_GLES31_RUNTIME_LOAD=1",
          "DEQP_GLES3_RUNTIME_LOAD=1",
          "DEQP_GLES2_RUNTIME_LOAD=1",
          "QP_SUPPORT_PNG=1",
          "_HAS_EXCEPTIONS=1",
          "_MBCS",
          "ANGLE_DEQP_DATA_DIR=\"gen/vk_gl_cts_data/data\"",
        ]
    
        if (is_android) {
          include_dirs += [ "$deqp_path/framework/platform/android" ]
    
          _android_api = android64_ndk_api_level
          if (!angle_64bit_current_cpu) {
            _android_api = android32_ndk_api_level
          }
    
          defines += [ "DE_ANDROID_API=" + "${_android_api}" ]
        }
    
        if (is_clang) {
          # TODO(jmadill): Remove this once we fix dEQP.
          cflags_c = [ "-Wno-unused-local-typedef" ]
          cflags_cc = [
            "-Wno-sizeof-array-div",  # https://gitlab.khronos.org/Tracker/vk-gl-cts/issues/2127
            "-Wno-string-conversion",  # implicit conversion turns string literal
                                       # into bool
            "-Wno-unused-function",
            "-Wno-unused-local-typedef",
            "-Wno-unused-result",  # ignoring return value of function declared with
                                   # 'nodiscard' attribute
          ]
        }
    
        # Ask the system headers to expose all the regular function otherwise
        # dEQP doesn't compile and produces warnings about implicitly defined
        # functions.
        if (is_linux || is_chromeos) {
          # This has to be GNU_SOURCE as on Linux dEQP uses syscall()
          defines += [ "_GNU_SOURCE" ]
        }
        if (is_android || is_apple) {
          # _XOPEN_SOURCE=600 is what is used in deqp/src/Android.mk
          defines += [ "_XOPEN_SOURCE=600" ]
        }
      }
    
      deqp_undefine_configs = [
        "//build/config/compiler:chromium_code",
        "//build/config/compiler:no_exceptions",
        "//build/config/compiler:no_rtti",
        "${angle_root}:constructor_and_destructor_warnings",
        "${angle_root}:extra_warnings",
      ]
    
      if (is_win) {
        deqp_undefine_configs += [
          "//build/config/win:lean_and_mean",
          "//build/config/win:nominmax",
          "//build/config/win:unicode",
        ]
      }
    
      set_defaults("angle_deqp_source_set") {
        public_configs = []
        configs = angle_common_configs
        cflags = []
      }
    
      template("angle_deqp_source_set") {
        angle_source_set(target_name) {
          testonly = true
          forward_variables_from(invoker, "*")
          suppressed_configs += deqp_undefine_configs
    
          if (is_clang) {
            cflags += [
              # Suppress a spurious header warning. http://crbug.com/995046
              "-Wno-nonportable-include-path",
            ]
          }
        }
      }
    
      config("angle_deqp_framework_debase_config") {
        include_dirs = [ "$deqp_path/framework/delibs/debase" ]
      }
    
      angle_deqp_source_set("angle_deqp_framework_debase") {
        public_configs += [ ":angle_deqp_framework_debase_config" ]
        sources = deqp_framework_debase_sources
      }
    
      config("angle_deqp_framework_decpp_config") {
        include_dirs = [ "$deqp_path/framework/delibs/decpp" ]
      }
    
      angle_deqp_source_set("angle_deqp_framework_decpp") {
        public_configs += [
          ":angle_deqp_support",
          ":angle_deqp_framework_decpp_config",
          "//build/config/compiler:exceptions",
          "//build/config/compiler:no_chromium_code",
        ]
        if (is_clang) {
          cflags_cc = [
            # Supresses self assign warnings in SharedPtr_selfTest
            # Can be removed if dEQP or clang are fixed
            "-Wno-self-assign",
          ]
        }
    
        public_deps = [
          ":angle_deqp_framework_debase",
          ":angle_deqp_framework_delibs",
        ]
        sources = deqp_framework_decpp_sources
      }
    
      config("angle_deqp_framework_xexml_config") {
        include_dirs = [ "$deqp_path/framework/xexml" ]
      }
    
      angle_deqp_source_set("angle_deqp_framework_xexml") {
        public_configs += [
          ":angle_deqp_support",
          ":angle_deqp_framework_decpp_config",
          ":angle_deqp_framework_delibs_config",
          "//build/config/compiler:exceptions",
          "//build/config/compiler:no_chromium_code",
        ]
    
        public_deps = [
          ":angle_deqp_framework_debase",
          ":angle_deqp_framework_decpp",
          ":angle_deqp_framework_delibs",
        ]
        sources = deqp_framework_xexml_sources
      }
    
      config("angle_deqp_libtester_config") {
        defines = [ "ANGLE_DEQP_LIBTESTER_IMPLEMENTATION" ]
    
        if (is_clang) {
          # TODO(jmadill): Remove this once we fix dEQP.
          cflags_cc = [
            "-Wno-delete-non-virtual-dtor",
            "-Wno-deprecated",
    
            # Supresses self assign warning in setLumSat
            # Can be removed if dEQP or clang are fixed
            "-Wno-self-assign",
          ]
        }
      }
    
      config("angle_deqp_framework_delibs_config") {
        include_dirs = [
          "$deqp_path/framework/delibs/debase",
          "$deqp_path/framework/delibs/depool",
          "$deqp_path/framework/delibs/dethread",
          "$deqp_path/framework/delibs/deutil",
          "$deqp_path/framework/delibs/destream",
        ]
      }
    
      angle_deqp_source_set("angle_deqp_framework_delibs") {
        sources = deqp_framework_delibs_sources
    
        if (is_win) {
          sources += deqp_framework_delibs_sources_win
        }
        if (is_linux || is_chromeos || is_android || is_apple) {
          sources += deqp_framework_delibs_sources_unix
        }
    
        public_configs = [
          ":angle_deqp_framework_delibs_config",
          ":angle_deqp_support",
        ]
    
        public_deps = [ ":angle_deqp_framework_debase" ]
      }
    
      config("angle_deqp_framework_common_config") {
        include_dirs = [
          "$deqp_path/framework/common",
          "$deqp_path/framework/randomshaders",
          "$deqp_path/framework/referencerenderer",
        ]
      }
    
      angle_deqp_source_set("angle_deqp_framework_common") {
        sources = deqp_framework_common_sources
        public_configs = [ ":angle_deqp_framework_common_config" ]
        public_deps = [
          ":angle_deqp_framework_decpp",
          ":angle_deqp_framework_qphelper",
          ":angle_deqp_framework_xexml",
        ]
      }
    
      config("angle_deqp_framework_opengl_config") {
        include_dirs = [
          "$deqp_path/framework/opengl",
          "$deqp_path/framework/opengl/simplereference",
          "$deqp_path/framework/opengl/wrapper",
        ]
      }
    
      angle_deqp_source_set("angle_deqp_framework_opengl") {
        sources = deqp_framework_opengl_sources
        public_configs = [ ":angle_deqp_framework_opengl_config" ]
        public_deps = [ ":angle_deqp_framework_common" ]
      }
    
      config("angle_deqp_framework_egl_config") {
        include_dirs = [
          "$deqp_path/framework/egl",
          "$deqp_path/framework/egl/wrapper",
        ]
      }
    
      angle_deqp_source_set("angle_deqp_framework_egl") {
        sources = deqp_framework_egl_sources
        public_configs = [ ":angle_deqp_framework_egl_config" ]
        public_deps = [ ":angle_deqp_framework_opengl" ]
      }
    
      config("angle_deqp_framework_qphelper_config") {
        include_dirs = [ "$deqp_path/framework/qphelper" ]
      }
    
      angle_deqp_source_set("angle_deqp_framework_qphelper") {
        sources = deqp_framework_qphelper_sources
        public_deps = [
          ":angle_deqp_framework_delibs",
          "${angle_libpng_dir}:libpng",
        ]
        public_configs = [ ":angle_deqp_framework_qphelper_config" ]
      }
    
      config("angle_deqp_glshared_config") {
        include_dirs = [ "$deqp_path/modules/glshared" ]
      }
    
      angle_deqp_source_set("angle_deqp_glshared") {
        sources = deqp_glshared_sources
        public_deps = [ ":angle_deqp_framework_opengl" ]
        public_configs = [ ":angle_deqp_glshared_config" ]
      }
    
      angle_deqp_source_set("angle_deqp_libtester") {
        if (is_ios) {
          # shared libraries are hidden inside ios_framework_bundle, but we include headers from them
          check_includes = false
        }
        public_deps = [
          ":angle_deqp_framework_common",
          ":angle_deqp_framework_egl",
          ":angle_deqp_glshared",
          "$angle_root:angle_common",
          "$angle_root/util:angle_util",
        ]
    
        data_deps = [
          "${angle_root}:libEGL",
          "${angle_root}:libGLESv2",
        ]
    
        configs += [ "${angle_root}:library_name_config" ]
        public_configs += [
          ":angle_deqp_libtester_config",
          "${angle_root}:libANGLE_config",
        ]
        sources = deqp_libtester_sources
        if (is_android) {
          libs = [ "log" ]
        }
      }
    
      set_defaults("angle_deqp_gtest") {
        deps = []
        sources = []
        data = []
        data_deps = []
      }
    
      template("angle_deqp_gtest") {
        _api = target_name
    
        config_name = "angle_deqp_${_api}_config"
        config(config_name) {
          defines = invoker.defines
        }
    
        shared_library_name = "angle_deqp_lib${_api}"
        angle_shared_library(shared_library_name) {
          forward_variables_from(invoker,
                                 [
                                   "sources",
                                   "deps",
                                   "data",
                                   "data_deps",
                                 ])
    
          testonly = true
    
          deps += [
            ":angle_deqp_libtester",
            "$angle_root/util:angle_test_utils",
            "$angle_root/util:angle_util",
          ]
    
          suppressed_configs += deqp_undefine_configs
          public_configs += [ ":$config_name" ]
    
          sources += [
            "deqp_support/angle_deqp_libtester.h",
            "deqp_support/angle_deqp_libtester_main.cpp",
            "deqp_support/tcuANGLEPlatform.cpp",
            "deqp_support/tcuANGLEPlatform.h",
          ]
        }
    
        if (!build_with_chromium) {
          angle_executable("angle_deqp_${_api}_no_gtest") {
            testonly = true
            sources = [ "deqp_support/angle_deqp_tests_main.cpp" ]
            deps = [ ":$shared_library_name" ]
          }
        }
    
        angle_test("angle_deqp_${_api}_tests") {
          deps = [
            ":${shared_library_name}",
            ":angle_test_expectations",
            "$angle_root:angle_common",
            "$angle_root/util:angle_util",
          ]
    
          # Must be included outside of the source set for the define
          sources = [
            "angle_deqp_tests_main.cpp",
            "deqp_support/angle_deqp_gtest.cpp",
          ]
    
          expectations_file = "deqp_${_api}_test_expectations.txt"
          if (defined(invoker.expectations_file)) {
            expectations_file = invoker.expectations_file
          }
          data = [
            "deqp_support/${expectations_file}",
            "${invoker.mustpass_dir}/${invoker.mustpass_name}",
          ]
        }
      }
    
      _android_mustpass = "$deqp_path/android/cts/master"
      _aosp_mustpass =
          "$deqp_path/external/openglcts/data/mustpass/gles/aosp_mustpass/master"
      _khronos_mustpass =
          "$deqp_path/external/openglcts/data/mustpass/gles/khronos_mustpass/master"
    
      angle_deqp_source_set("angle_deqp_gles2_common") {
        sources = deqp_gles2_sources
        public_deps = [
          ":angle_deqp_framework_egl",
          ":angle_deqp_glshared",
        ]
      }
    
      angle_deqp_source_set("angle_deqp_gles3_common") {
        sources = deqp_gles3_sources
        public_deps = [
          ":angle_deqp_framework_egl",
          ":angle_deqp_glshared",
        ]
      }
    
      angle_deqp_source_set("angle_deqp_gles31_common") {
        sources = deqp_gles31_sources
        public_deps = [
          ":angle_deqp_framework_egl",
          ":angle_deqp_glshared",
        ]
      }
    
      template("angle_deqp_core_gtest") {
        _api = target_name
        angle_deqp_gtest(target_name) {
          forward_variables_from(invoker, "*")
    
          mustpass_name = "${_api}-master.txt"
    
          deps += angle_deqp_data_copy_targets
    
          data = []
          if (_api == "gles2") {
            data = angle_deqp_data_gles2
          } else if (_api == "gles3") {
            data = angle_deqp_data_gles3
          } else if (_api == "gles31") {
            data = angle_deqp_data_gles31
          } else {
            # Make sure we include something so that angle_deqp_libtester_main.cpp can find something.
            data = [ "$root_gen_dir/vk_gl_cts_data/data/gles2/shaders/misc.test" ]
          }
        }
      }
    
      angle_deqp_core_gtest("gles2") {
        defines = [ "ANGLE_DEQP_GLES2_TESTS" ]
        deps = [ ":angle_deqp_gles2_common" ]
        mustpass_dir = _aosp_mustpass
      }
    
      angle_deqp_core_gtest("gles3") {
        defines = [ "ANGLE_DEQP_GLES3_TESTS" ]
        deps = [ ":angle_deqp_gles3_common" ]
        mustpass_dir = _aosp_mustpass
      }
    
      angle_deqp_core_gtest("gles31") {
        defines = [ "ANGLE_DEQP_GLES31_TESTS" ]
        deps = [ ":angle_deqp_gles31_common" ]
        mustpass_dir = _aosp_mustpass
      }
    
      angle_deqp_core_gtest("egl") {
        defines = [ "ANGLE_DEQP_EGL_TESTS" ]
        sources = deqp_egl_sources
        mustpass_dir = _android_mustpass
      }
    
      # The CTS also includes a set of "KHR" tests that are separate from the main body of dEQP tests.
    
      config("angle_deqp_khr_common_config") {
        include_dirs = [
          "$deqp_path/external/openglcts/modules/common",
          "$deqp_path/external/openglcts/modules/gl",
          "$deqp_path/external/openglcts/modules/gles2",
          "$deqp_path/external/openglcts/modules/gles3",
          "$deqp_path/external/openglcts/modules/gles31",
          "$deqp_path/external/openglcts/modules/gles32",
          "$deqp_path/external/openglcts/modules/glesext",
        ]
        if (is_clang) {
          cflags = [ "-Wno-header-hygiene" ]  # using namespace directive in global
                                              # context in header
        }
      }
    
      angle_deqp_source_set("angle_deqp_khr_common") {
        sources = deqp_khr_common_sources + deqp_khr_test_module_headers +
                  deqp_khr_gl_sources + deqp_khr_gles2_sources +
                  deqp_khr_gles3_sources + deqp_khr_gles31_sources +
                  deqp_khr_gles32_sources + deqp_khr_glesext_sources +
                  [ "deqp_support/glcTestPackageEntry_override.cpp" ]
        public_deps = [
          ":angle_deqp_framework_egl",
          ":angle_deqp_glshared",
          "${angle_glslang_dir}:glslang_lib_sources",
          "${angle_spirv_tools_dir}:spvtools_val",
        ]
        public_configs = [ ":angle_deqp_khr_common_config" ]
    
        # This is a bit of a hack so one test can capture memory limits.
        include_dirs = [ "$deqp_path/external/vulkancts/framework/vulkan" ]
      }
    
      template("angle_deqp_khr_gtest") {
        angle_deqp_gtest(target_name) {
          forward_variables_from(invoker, "*")
          deps = [ ":angle_deqp_khr_common" ]
          deps += angle_deqp_data_copy_targets
          data = angle_deqp_external_openglcts_data_gles3
          mustpass_dir = _khronos_mustpass
        }
      }
    
      angle_deqp_khr_gtest("khr_gles2") {
        defines = [ "ANGLE_DEQP_KHR_GLES2_TESTS" ]
        mustpass_name = "gles2-khr-master.txt"
      }
    
      angle_deqp_khr_gtest("khr_gles3") {
        defines = [ "ANGLE_DEQP_KHR_GLES3_TESTS" ]
        mustpass_name = "gles3-khr-master.txt"
      }
    
      angle_deqp_khr_gtest("khr_gles31") {
        defines = [ "ANGLE_DEQP_KHR_GLES31_TESTS" ]
        mustpass_name = "gles31-khr-master.txt"
      }
    
      angle_deqp_khr_gtest("khr_gles32") {
        defines = [ "ANGLE_DEQP_KHR_GLES32_TESTS" ]
        mustpass_name = "gles32-khr-master.txt"
      }
    
      template("angle_deqp_rotate_gtest") {
        split_target = string_split(target_name, "_")
        _api = split_target[0]
        _rotate = split_target[1]
        angle_deqp_gtest(target_name) {
          forward_variables_from(invoker, "*")
    
          if (_rotate == "rotate90") {
            mustpass_suffix = "rotate-landscape"
          } else if (_rotate == "rotate180") {
            mustpass_suffix = "rotate-reverse-portrait"
          } else if (_rotate == "rotate270") {
            mustpass_suffix = "rotate-reverse-landscape"
          } else {
            assert(false)
          }
    
          mustpass_name = "${_api}-${mustpass_suffix}.txt"
    
          deps += angle_deqp_data_copy_targets
    
          data = []
          if (_api == "gles3") {
            data = angle_deqp_data_gles3
          } else if (_api == "gles31") {
            data = angle_deqp_data_gles31
          } else {
            assert(false)
          }
        }
      }
    
      angle_deqp_rotate_gtest("gles3_rotate90") {
        defines = [ "ANGLE_DEQP_GLES3_ROTATE90_TESTS" ]
        deps = [ ":angle_deqp_gles3_common" ]
        mustpass_dir = _aosp_mustpass
        expectations_file = "deqp_gles3_rotate_test_expectations.txt"
      }
    
      angle_deqp_rotate_gtest("gles3_rotate180") {
        defines = [ "ANGLE_DEQP_GLES3_ROTATE180_TESTS" ]
        deps = [ ":angle_deqp_gles3_common" ]
        mustpass_dir = _aosp_mustpass
        expectations_file = "deqp_gles3_rotate_test_expectations.txt"
      }
    
      angle_deqp_rotate_gtest("gles3_rotate270") {
        defines = [ "ANGLE_DEQP_GLES3_ROTATE270_TESTS" ]
        deps = [ ":angle_deqp_gles3_common" ]
        mustpass_dir = _aosp_mustpass
        expectations_file = "deqp_gles3_rotate_test_expectations.txt"
      }
    
      angle_deqp_rotate_gtest("gles31_rotate90") {
        defines = [ "ANGLE_DEQP_GLES31_ROTATE90_TESTS" ]
        deps = [ ":angle_deqp_gles31_common" ]
        mustpass_dir = _aosp_mustpass
        expectations_file = "deqp_gles31_rotate_test_expectations.txt"
      }
    
      angle_deqp_rotate_gtest("gles31_rotate180") {
        defines = [ "ANGLE_DEQP_GLES31_ROTATE180_TESTS" ]
        deps = [ ":angle_deqp_gles31_common" ]
        mustpass_dir = _aosp_mustpass
        expectations_file = "deqp_gles31_rotate_test_expectations.txt"
      }
    
      angle_deqp_rotate_gtest("gles31_rotate270") {
        defines = [ "ANGLE_DEQP_GLES31_ROTATE270_TESTS" ]
        deps = [ ":angle_deqp_gles31_common" ]
        mustpass_dir = _aosp_mustpass
        expectations_file = "deqp_gles31_rotate_test_expectations.txt"
      }
    }
    
    group("angle_tests") {
      testonly = true
      deps = [
        ":angle_end2end_tests",
        ":angle_perftests",
        ":angle_system_info_test",
        ":angle_unittests",
        "capture_replay_tests",
      ]
      if (!is_fuchsia) {
        deps += [
          ":angle_white_box_perftests",
          ":angle_white_box_tests",
        ]
      }
      if (build_angle_deqp_tests && !is_fuchsia) {
        deps += [
          ":angle_deqp_egl_tests",
          ":angle_deqp_gles2_tests",
          ":angle_deqp_gles31_tests",
          ":angle_deqp_gles3_tests",
        ]
        if (!build_with_chromium) {
          deps += [
            ":angle_deqp_egl_no_gtest",
            ":angle_deqp_gles2_no_gtest",
            ":angle_deqp_gles31_no_gtest",
            ":angle_deqp_gles3_no_gtest",
          ]
        }
      }
      if (build_angle_gles1_conform_tests) {
        deps += [
          ":angle_gles1_conformance_tests",
          ":angle_gles1_covegl_no_gtest",
          ":angle_gles1_primtest_tests",
        ]
        if (!is_win && !is_apple) {
          deps += [ ":angle_gles1_covgl_tests" ]
        }
      }
    }