# Copyright 2015 The Chromium 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("../../gni/angle.gni")
import("//build/config/chromecast_build.gni")
import("//testing/test.gni")

unittests_gypi = exec_script("//build/gypi_to_gn.py",
                             [
                               rebase_path("angle_unittests.gypi"),
                               "--replace=<(angle_path)=.",
                             ],
                             "scope",
                             [ "angle_unittests.gypi" ])

declare_args() {
  # Don't build dEQP by default.
  build_angle_deqp_tests = false
  build_angle_gles1_conform_tests = false
}

if (build_with_chromium) {
  googletest_deps = [
    "//base",
    "//base/test:test_support",
    "//testing/gmock",
    "//testing/gtest",
  ]
} else {
  googletest_deps = [
    ":angle_internal_gmock",
    ":angle_internal_gtest",
  ]

  config("angle_internal_gtest_config") {
    include_dirs = [
      "//third_party/googletest/src/googletest",
      "//third_party/googletest/src/googletest/include",
    ]
  }

  static_library("angle_internal_gtest") {
    sources = [
      "//third_party/googletest/src/googletest/src/gtest-all.cc",
    ]
    public_configs = [ ":angle_internal_gtest_config" ]
  }

  config("angle_internal_gmock_config") {
    include_dirs = [
      "//third_party/googletest/src/googlemock",
      "//third_party/googletest/src/googlemock/include",
      "//third_party/googletest/src/googletest/include",
    ]
    if (is_clang) {
      # TODO: Can remove this if/when the issue is fixed.
      # https://github.com/google/googletest/issues/533
      cflags = [ "-Wno-inconsistent-missing-override" ]
    }
  }

  static_library("angle_internal_gmock") {
    sources = [
      "//third_party/googletest/src/googlemock/src/gmock-all.cc",
    ]
    public_configs = [ ":angle_internal_gmock_config" ]
  }

  group("all") {
    testonly = true
    deps = [
      "//src/tests:angle_end2end_tests",
      "//src/tests:angle_perftests",
      "//src/tests:angle_unittests",
      "//src/tests:angle_white_box_tests",
    ]
    if (build_angle_deqp_tests) {
      deps += [
        "//src/tests:angle_deqp_egl_no_gtest",
        "//src/tests:angle_deqp_egl_tests",
        "//src/tests:angle_deqp_gles2_no_gtest",
        "//src/tests:angle_deqp_gles2_tests",
        "//src/tests:angle_deqp_gles31_no_gtest",
        "//src/tests:angle_deqp_gles31_tests",
        "//src/tests:angle_deqp_gles3_no_gtest",
        "//src/tests:angle_deqp_gles3_tests",
      ]
    }
    if (build_angle_gles1_conform_tests) {
      deps += [ "//src/tests:angle_gles1_conformance_tests" ]
    }
  }
}

test("angle_unittests") {
  include_dirs = [ "$angle_root/src" ]

  sources = rebase_path(unittests_gypi.angle_unittests_sources, ".", "../..")

  if (angle_enable_hlsl) {
    sources +=
        rebase_path(unittests_gypi.angle_unittests_hlsl_sources, ".", "../..")
    defines = [ "ANGLE_ENABLE_HLSL" ]
  }

  if (build_with_chromium) {
    sources += [ "//gpu/angle_unittest_main.cc" ]
  } else {
    sources += [ "angle_unittests_main.cpp" ]
  }

  deps = googletest_deps + [
           angle_root + ":libANGLE",
           angle_root + ":preprocessor",
           angle_root + ":translator",
         ]
}

if (is_win || is_linux || is_mac || is_android) {
  end2end_gypi = exec_script("//build/gypi_to_gn.py",
                             [
                               rebase_path("angle_end2end_tests.gypi"),
                               "--replace=<(angle_path)=.",
                             ],
                             "scope",
                             [ "angle_end2end_tests.gypi" ])

  test("angle_end2end_tests") {
    include_dirs = [
      "../../src/tests",
      "../../util",
    ]
    defines = [
      "ANGLE_EGL_LIBRARY_NAME=\"libEGL${angle_libs_suffix}\"",
      "ANGLE_GLESV2_LIBRARY_NAME=\"libGLESv2${angle_libs_suffix}\"",
    ]

    if (is_android) {
      use_native_activity = true
    }

    sources =
        rebase_path(end2end_gypi.angle_end2end_tests_sources, ".", "../..")
    libs = []

    if (is_mac) {
      sources += rebase_path(end2end_gypi.angle_end2end_tests_mac_sources,
                             ".",
                             "../..")
      libs += [
        "CoreFoundation.framework",
        "IOSurface.framework",
      ]
    }
    if (is_win) {
      sources += rebase_path(end2end_gypi.angle_end2end_tests_win_sources,
                             ".",
                             "../..")
    }
    if (use_x11) {
      sources += rebase_path(end2end_gypi.angle_end2end_tests_x11_sources,
                             ".",
                             "../..")
    }

    if (build_with_chromium) {
      sources += [ "//gpu/angle_end2end_tests_main.cc" ]
    } else {
      sources += [ "angle_end2end_tests_main.cpp" ]
    }

    configs += [
      angle_root + ":internal_config",
      angle_root + ":libANGLE_config",
    ]

    if (is_linux && !is_component_build) {
      # Set rpath to find libEGL.so and libGLESv2.so even in a non-component build.
      configs += [ "//build/config/gcc:rpath_for_built_shared_libraries" ]
    }

    deps = googletest_deps + [
             angle_root + ":angle_image_util",
             angle_root + ":angle_util",
             angle_root + ":libEGL${angle_libs_suffix}",
             angle_root + ":libGLESv1_CM${angle_libs_suffix}",
             angle_root + ":libGLESv2${angle_libs_suffix}",
             angle_root + ":preprocessor",
             angle_root + ":translator",
           ]
  }

  white_box_gypi = exec_script("//build/gypi_to_gn.py",
                               [
                                 rebase_path("angle_white_box_tests.gypi"),
                                 "--replace=<(angle_path)=.",
                               ],
                               "scope",
                               [ "angle_white_box_tests.gypi" ])

  test("angle_white_box_tests") {
    include_dirs = [
      "../../src/tests",
      "../../util",
    ]

    if (is_android) {
      use_native_activity = true
    }

    sources =
        rebase_path(white_box_gypi.angle_white_box_tests_sources, ".", "../..")

    if (is_win) {
      sources += rebase_path(white_box_gypi.angle_white_box_tests_win_sources,
                             ".",
                             "../..")
    }

    # Share the same main file as end2end_tests.
    # TODO(jmadill): Probably should rename this if we're sharing.
    if (build_with_chromium) {
      sources += [ "//gpu/angle_end2end_tests_main.cc" ]
    } else {
      sources += [ "angle_end2end_tests_main.cpp" ]
    }

    if (angle_enable_vulkan) {
      sources += [ "gl_tests/VulkanFormatTablesTest.cpp" ]
      sources += [ "gl_tests/VulkanUniformUpdatesTest.cpp" ]
    }

    configs += [
      angle_root + ":internal_config",
      angle_root + ":libANGLE_config",
    ]

    if (is_linux && !is_component_build) {
      # Set rpath to find libEGL.so and libGLESv2.so even in a non-component build.
      configs += [ "//build/config/gcc:rpath_for_built_shared_libraries" ]
    }

    deps = googletest_deps + [
             angle_root + ":angle_util_static",
             angle_root + ":libANGLE",
             angle_root + ":libEGL_static",
             angle_root + ":libGLESv2_static",
             angle_root + ":preprocessor",
             angle_root + ":translator",
           ]
  }
}

if (is_win || is_linux || is_android || is_mac) {
  perftests_gypi = exec_script("//build/gypi_to_gn.py",
                               [
                                 rebase_path("angle_perftests.gypi"),
                                 "--replace=<(angle_path)=.",
                               ],
                               "scope",
                               [ "angle_perftests.gypi" ])

  test("angle_perftests") {
    include_dirs = [
      "../../src/tests",
      "../../util",
    ]

    if (is_android) {
      use_native_activity = true
      configs -= [ "//build/config/android:hide_all_but_jni" ]
    }

    sources = rebase_path(perftests_gypi.angle_perf_tests_sources, ".", "../..")

    if (is_win) {
      sources +=
          rebase_path(perftests_gypi.angle_perf_tests_win_sources, ".", "../..")
    }

    if (angle_enable_vulkan) {
      sources += rebase_path(perftests_gypi.angle_perf_tests_vulkan_sources,
                             ".",
                             "../..")
    }

    if (build_with_chromium) {
      sources += [ "//gpu/angle_perftests_main.cc" ]
    } else {
      sources += [ "angle_perftests_main.cpp" ]
    }

    configs += [
      angle_root + ":internal_config",
      angle_root + ":libANGLE_config",
    ]

    deps = googletest_deps + [
             angle_root + ":angle_util_static",
             angle_root + ":libANGLE",
             angle_root + ":libEGL_static",
             angle_root + ":libGLESv2_static",
           ]
  }
}

###-----------------------------------------------------
### ES 1 conformance tests
###-----------------------------------------------------

if (build_angle_gles1_conform_tests) {
  gles1_conform_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/include",
      "$gles1_conform_root/platform",
    ]

    defines = [
      "COMMON",
      "CONFORM_ALTERNATE_MAIN",
      "NULLWS",
      "GL_GLEXT_PROTOTYPES",
    ]

    cflags = []
    if (is_clang) {
      # Remove when crbug.com/428099 is resolved.
      cflags += [
        "-Wno-implicit-function-declaration",
        "-Wno-self-assign",
        "-Wno-sign-compare",
        "-Wno-unused-const-variable",
        "-Wno-unused-variable",
        "-Wno-int-to-pointer-cast",
      ]
    }
  }

  static_library("angle_gles1_conformance_no_gtest") {
    configs += [ ":angle_gles1_conform_support" ]

    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",
      "$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",
    ]
  }

  test("angle_gles1_conformance_tests") {
    deps = googletest_deps + [
             ":angle_gles1_conformance_no_gtest",
             angle_root + ":angle_common",
             angle_root + ":angle_util",
             angle_root + ":libEGL${angle_libs_suffix}",
             angle_root + ":libGLESv1_CM${angle_libs_suffix}",
             angle_root + ":libGLESv2${angle_libs_suffix}",
             angle_root + ":preprocessor",
             angle_root + ":translator",
           ]

    include_dirs = [
      "../../src/tests",
      "../../util",
    ]

    sources = [
      "gles1_conformance_tests/ConformanceTests.cpp",
      "test_utils/ANGLETest.cpp",
      "test_utils/ANGLETest.h",
      "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/gl_raii.h",
    ]

    configs += [
      angle_root + ":internal_config",
      angle_root + ":libANGLE_config",
    ]

    if (build_with_chromium) {
      sources += [ "//gpu/angle_end2end_tests_main.cc" ]
    } else {
      sources += [ "angle_end2end_tests_main.cpp" ]
    }
  }
}

###-----------------------------------------------------
### dEQP tests
###-----------------------------------------------------

# TODO(jmadill): Other platforms.
if (build_angle_deqp_tests) {
  deqp_gypi =
      exec_script("//build/gypi_to_gn.py",
                  [
                    rebase_path("deqp.gypi"),
                    "--replace=<(angle_path)=.",
                    "--replace=<(deqp_path)=$angle_root/third_party/deqp/src",
                  ],
                  "scope",
                  [ "deqp.gypi" ])

  config("angle_deqp_support") {
    include_dirs = rebase_path(deqp_gypi.deqp_include_dirs, ".", "../..")
    if (is_win && !is_clang) {
      include_dirs +=
          [ "$angle_root/third_party/deqp/src/framework/platform/win32" ]
      cflags = deqp_gypi.deqp_win_cflags
    }
    if (is_android) {
      include_dirs +=
          [ "$angle_root/third_party/deqp/src/framework/platform/android" ]
    }
    defines = deqp_gypi.deqp_defines
    defines += [ "_MBCS" ]

    if (is_clang) {
      # TODO(jmadill): Remove this once we fix dEQP.
      cflags_c = [ "-Wno-unused-local-typedef" ]
      cflags_cc = [ "-Wno-unused-local-typedef" ]
    }

    # 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) {
      # This has to be GNU_SOURCE as on Linux dEQP uses syscall()
      defines += [ "_GNU_SOURCE" ]
    }
    if (is_android || is_mac) {
      # _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",
  ]

  if (is_win) {
    deqp_undefine_configs += [
      "//build/config/win:lean_and_mean",
      "//build/config/win:nominmax",
      "//build/config/win:unicode",
    ]
  }

  static_library("angle_deqp_decpp") {
    configs -= deqp_undefine_configs
    public_configs = [
      ":angle_deqp_support",
      "//build/config/compiler:exceptions",
      "//build/config/compiler:no_chromium_code",
      angle_root + ":internal_config",
    ]
    if (is_clang) {
      cflags_cc = [
        # Supresses self assign warnings in SharedPtr_selfTest
        # Can be removed if dEQP or clang are fixed
        "-Wno-self-assign",
      ]
    }

    sources = rebase_path(deqp_gypi.deqp_libtester_decpp_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",
      ]
    }
  }

  static_library("angle_deqp_libtester") {
    public_deps = [
      ":angle_deqp_decpp",
      angle_root + ":angle_common",
      angle_root + ":angle_util",
      angle_root + ":libEGL${angle_libs_suffix}",
      "//third_party/libpng:libpng",
    ]
    defines = [ "ANGLE_EGL_LIBRARY_NAME=\"libEGL${angle_libs_suffix}\"" ]

    configs -= deqp_undefine_configs
    public_configs = [ ":angle_deqp_libtester_config" ]
    sources = rebase_path(deqp_gypi.deqp_libtester_sources, ".", "../..")
    if (is_win) {
      sources += rebase_path(deqp_gypi.deqp_libtester_sources_win, ".", "../..")
    }
    if (is_linux || is_android || is_mac) {
      sources +=
          rebase_path(deqp_gypi.deqp_libtester_sources_unix, ".", "../..")
    }
    if (is_android) {
      sources +=
          rebase_path(deqp_gypi.deqp_libtester_sources_android, ".", "../..")
      libs = [ "log" ]
    }
  }

  config("angle_deqp_gtest_support_config") {
    include_dirs = [ "third_party/gpu_test_expectations" ]
  }

  source_set("angle_deqp_gtest_support") {
    testonly = true

    public_deps = googletest_deps + [
                    angle_root + ":angle_common",
                    angle_root + ":angle_util",
                  ]

    public_configs = [ ":angle_deqp_gtest_support_config" ]

    sources = deqp_gypi.deqp_gpu_test_expectations_sources
    if (is_mac) {
      sources += deqp_gypi.deqp_gpu_test_expectations_sources_mac
      libs = [ "Cocoa.framework" ]
    }

    if (build_with_chromium) {
      sources += [ "//gpu/angle_deqp_tests_main.cc" ]
    } else {
      sources += [ "deqp_support/angle_deqp_gtest_main.cpp" ]
    }

    if (!is_android) {
      public_deps += [ angle_root + ":angle_gpu_info_util" ]
    }
  }

  api_names = [
    "gles2",
    "gles3",
    "gles31",
    "egl",
  ]
  target_defines = [
    "ANGLE_DEQP_GLES2_TESTS",
    "ANGLE_DEQP_GLES3_TESTS",
    "ANGLE_DEQP_GLES31_TESTS",
    "ANGLE_DEQP_EGL_TESTS",
  ]
  target_sources = [
    deqp_gypi.deqp_gles2_sources,
    deqp_gypi.deqp_gles3_sources,
    deqp_gypi.deqp_gles31_sources,
    deqp_gypi.deqp_egl_sources,
  ]

  foreach(index,
          [
            0,
            1,
            2,
            3,
          ]) {
    api_name = api_names[index]
    config_name = "angle_deqp_lib${api_name}_config"
    config(config_name) {
      defines = [ target_defines[index] ]
    }

    shared_library_name = "angle_deqp_lib${api_name}"
    shared_library(shared_library_name) {
      deps = [
        ":angle_deqp_libtester",

        angle_root + ":angle_util",
      ]

      configs -= deqp_undefine_configs
      if (is_android) {
        configs -= [ "//build/config/android:hide_all_but_jni_onload" ]
      }
      public_configs = [ ":${config_name}" ]

      sources = rebase_path(target_sources[index], ".", "../..")
      sources += [
        "deqp_support/angle_deqp_libtester_main.cpp",
        "deqp_support/tcuANGLEPlatform.cpp",
        "deqp_support/tcuANGLEPlatform.h",
      ]
    }

    if (!build_with_chromium) {
      executable("angle_deqp_${api_name}_no_gtest") {
        sources = [
          "deqp_support/angle_deqp_tests_main.cpp",
        ]
        deps = [
          ":${shared_library_name}",
        ]
      }
    }

    test_name = "angle_deqp_${api_name}_tests"
    test(test_name) {
      deps = [
        ":${shared_library_name}",
        ":angle_deqp_gtest_support",
      ]

      # Must be included outside of the source set for the define
      sources = [
        "deqp_support/angle_deqp_gtest.cpp",
      ]

      data = [
        "deqp_support/deqp_${api_name}_test_expectations.txt",
        "$angle_root/third_party/deqp/src/android/cts/master/${api_name}-master.txt",
        "$angle_root/third_party/deqp/src/data/",
      ]

      if (is_linux && !is_component_build) {
        # Set rpath to find *.so files even in a non-component build.
        configs += [ "//build/config/gcc:rpath_for_built_shared_libraries" ]
      }

      if (is_android) {
        use_native_activity = true
      }
    }
  }
}
