1# Copyright 2015 The ANGLE Project Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5import("//build/config/chromecast_build.gni")
6import("//testing/test.gni")
7import("../../gni/angle.gni")
8import("angle_unittests.gni")
9
10declare_args() {
11  # Don't build dEQP by default.
12  build_angle_deqp_tests = false
13  build_angle_gles1_conform_tests = false
14  build_angle_trace_perf_tests = false
15  build_angle_perftests =
16      is_win || is_linux || is_chromeos || is_android || is_apple || is_fuchsia
17}
18
19if (is_android) {
20  android_library("native_test_java") {
21    testonly = true
22    sources = [
23      "test_utils/runner/android/java/src/com/android/angle/test/AngleNativeTest.java",
24      "test_utils/runner/android/java/src/com/android/angle/test/AngleUnitTestActivity.java",
25      "test_utils/runner/android/java/src/com/android/angle/test/TestStatusReporter.java",
26    ]
27
28    deps = [
29      "//build/android:native_libraries_java",
30      "//build/android/gtest_apk:native_test_instrumentation_test_runner_java",
31    ]
32  }
33
34  angle_source_set("native_test_support_android") {
35    testonly = true
36    sources = [ "test_utils/runner/android/AngleNativeTest.cpp" ]
37    deps = [ "$angle_root:angle_common" ]
38  }
39}
40
41angle_test("test_utils_unittest_helper") {
42  sources = [
43    "../../util/test_utils_unittest_helper.cpp",
44    "../../util/test_utils_unittest_helper.h",
45    "test_utils/angle_test_instantiate.h",
46    "test_utils/runner/TestSuite_unittest.cpp",
47  ]
48}
49
50test_expectations_sources = [
51  "test_expectations/GPUTestConfig.cpp",
52  "test_expectations/GPUTestConfig.h",
53  "test_expectations/GPUTestExpectationsParser.cpp",
54  "test_expectations/GPUTestExpectationsParser.h",
55]
56if (is_mac) {
57  test_expectations_sources_mac = [
58    "test_expectations/GPUTestConfig_mac.mm",
59    "test_expectations/GPUTestConfig_mac.h",
60  ]
61}
62if (is_ios) {
63  test_expectation_sources_ios = [
64    "test_expectations/GPUTestConfig_ios.mm",
65    "test_expectations/GPUTestConfig_ios.h",
66  ]
67}
68
69angle_static_library("angle_test_expectations") {
70  public_deps = [
71    "$angle_root:angle_common",
72    "$angle_root:angle_gpu_info_util",
73  ]
74  sources = test_expectations_sources
75  if (is_mac) {
76    sources += test_expectations_sources_mac
77    frameworks = [ "Cocoa.framework" ]
78  }
79  if (is_ios) {
80    sources += test_expectation_sources_ios
81    frameworks = [ "Foundation.framework" ]
82  }
83}
84
85config("angle_common_test_utils_config") {
86  include_dirs = [ "." ]
87}
88
89template("angle_common_test_utils") {
90  assert(defined(invoker.angle_util))
91  angle_source_set(target_name) {
92    testonly = true
93    if (is_ios) {
94      # shared libraries are hidden inside ios_framework_bundle, but we include headers from them
95      check_includes = false
96    }
97    public_configs = [
98      ":angle_common_test_utils_config",
99      "$angle_root:library_name_config",
100    ]
101    public_deps = [
102      "$angle_root:angle_common",
103      "$angle_root:angle_gpu_info_util",
104      "$angle_root/util:${invoker.angle_util}",
105      "//testing/gmock",
106      "//testing/gtest",
107      "//third_party/googletest:gmock",
108      "//third_party/googletest:gtest",
109    ]
110    sources = [
111      "$angle_root/third_party/renderdoc/src/renderdoc_app.h",
112      "test_utils/RenderDoc.cpp",
113      "test_utils/RenderDoc.h",
114      "test_utils/angle_test_configs.cpp",
115      "test_utils/angle_test_configs.h",
116      "test_utils/angle_test_instantiate.cpp",
117      "test_utils/angle_test_instantiate.h",
118      "test_utils/angle_test_platform.cpp",
119      "test_utils/angle_test_platform.h",
120      "test_utils/gl_raii.h",
121    ]
122    if (is_apple) {
123      sources += [
124        "test_utils/angle_test_instantiate_apple.h",
125        "test_utils/angle_test_instantiate_apple.mm",
126      ]
127    }
128    data_deps = []
129    if (angle_enable_vulkan_validation_layers) {
130      data_deps += [ "$angle_root/src/common/vulkan:vulkan_validation_layers" ]
131    }
132  }
133}
134
135angle_common_test_utils("angle_common_test_utils_shared") {
136  angle_util = "angle_util"
137}
138
139angle_common_test_utils("angle_common_test_utils_static") {
140  angle_util = "angle_util_static"
141}
142
143# We use this in the restricted trace tests to load driver info.
144angle_test("angle_system_info_test") {
145  sources = [ "angle_system_info_tests_main.cpp" ]
146  deps = [
147    "$angle_root:angle_gpu_info_util",
148    "$angle_root:libEGL_static",
149    "$angle_root:libGLESv2_static",
150    "$angle_root/util:angle_util_static",
151  ]
152}
153
154angle_test("angle_unittests") {
155  sources = angle_unittests_sources + [ "angle_unittest_main.cpp" ]
156
157  # Compiler tests frequently require either TranslatorGLSL or TranslatorESSL.  Build them only if
158  # both are enabled.
159  if (angle_enable_essl && angle_enable_glsl) {
160    sources += angle_unittests_compiler_tests_sources
161
162    if (is_apple) {
163      sources += angle_unittests_glsl_mac_sources
164    }
165  }
166
167  defines = []
168
169  if (angle_enable_hlsl) {
170    sources += angle_unittests_hlsl_sources
171    defines += [ "ANGLE_ENABLE_HLSL" ]
172  }
173
174  if (angle_enable_gl) {
175    sources += angle_unittests_gl_sources
176  }
177
178  deps = [
179    ":angle_test_expectations",
180    "$angle_root:angle_json_serializer",
181    "$angle_root:libANGLE",
182    "$angle_root:libEGL_static",
183    "$angle_root:libGLESv2_static",
184    "$angle_root:libfeature_support",
185    "$angle_root:preprocessor",
186    "$angle_root:translator",
187    "$angle_root/util:angle_util_static",
188  ]
189
190  if (!is_android && !is_fuchsia) {
191    # SystemUtils.RunApp, the only unittest using a helper binary, is not supported on these
192    # platforms yet.
193    data_deps = [ ":test_utils_unittest_helper" ]
194  }
195}
196
197if (is_win || is_linux || is_chromeos || is_android || is_fuchsia || is_apple) {
198  import("angle_end2end_tests.gni")
199
200  angle_test("angle_end2end_tests") {
201    include_dirs = [ "." ]
202
203    sources = angle_end2end_tests_sources + [ "angle_end2end_tests_main.cpp" ]
204    libs = []
205    data = [ "angle_end2end_tests_expectations.txt" ]
206
207    if (is_mac) {
208      sources += angle_end2end_tests_mac_sources
209      frameworks = [
210        "CoreFoundation.framework",
211        "IOSurface.framework",
212      ]
213      ldflags = [
214        "-weak_framework",
215        "Metal",
216      ]
217      cflags_objcc = [
218        "-Wno-nullability-completeness",
219        "-Wno-unguarded-availability",
220      ]
221    }
222    if (is_win) {
223      sources += angle_end2end_tests_win_sources
224    }
225    if (angle_use_x11) {
226      sources += angle_end2end_tests_x11_sources
227    }
228
229    configs += [ "${angle_root}:libANGLE_config" ]
230
231    deps = [
232      ":angle_common_test_utils_shared",
233      "$angle_root:angle_image_util",
234    ]
235
236    if (is_android) {
237      include_dirs += [ "${android_ndk_root}/sysroot/usr/includes" ]
238    }
239
240    data_deps = [
241      "$angle_root:libEGL",
242      "$angle_root:libGLESv1_CM",
243      "$angle_root:libGLESv2",
244    ]
245
246    if (angle_enable_vulkan) {
247      sources += [
248        "gl_tests/VulkanExternalImageTest.cpp",
249        "test_utils/VulkanExternalHelper.cpp",
250        "test_utils/VulkanExternalHelper.h",
251      ]
252      deps += [ "$angle_root/src/common/vulkan" ]
253    }
254
255    if (is_fuchsia) {
256      additional_manifest_fragments = [
257        # TODO(crbug.com/1185811): Figure out why jit_capabilities is needed.
258        "//build/config/fuchsia/test/jit_capabilities.test-cmx",
259
260        "//build/config/fuchsia/test/present_view_capabilities.test-cmx",
261        "//build/config/fuchsia/test/vulkan_capabilities.test-cmx",
262      ]
263    }
264
265    if (is_ios) {
266      xcode_extra_attributes = {
267        SUPPORTS_MACCATALYST = "YES"
268      }
269
270      # Need to bundle the libraries inside the .app.
271      deps += [
272        "$angle_root:libEGL",
273        "$angle_root:libGLESv1_CM",
274        "$angle_root:libGLESv2",
275      ]
276    }
277  }
278}
279
280if (is_win || is_linux || is_chromeos || is_android || is_fuchsia || is_apple) {
281  import("angle_white_box_tests.gni")
282
283  angle_test("angle_white_box_tests") {
284    include_dirs = [ "." ]
285    sources = angle_white_box_tests_sources + [ "angle_generic_tests_main.cpp" ]
286
287    if (is_win && angle_enable_d3d11) {
288      sources += angle_white_box_tests_win_sources
289    }
290
291    configs += [ "${angle_root}:libANGLE_config" ]
292
293    deps = [
294      ":angle_common_test_utils_static",
295      "$angle_root:libANGLE",
296      "$angle_root:libEGL_static",
297      "$angle_root:libGLESv2_static",
298      "$angle_root:preprocessor",
299      "$angle_root:translator",
300    ]
301
302    deps += [ "${angle_root}:angle_gl_enum_utils" ]
303
304    if (angle_enable_vulkan) {
305      sources += angle_white_box_tests_vulkan_sources
306      deps += [ "$angle_root/src/common/vulkan:angle_vulkan_entry_points" ]
307    }
308  }
309}
310
311config("angle_maybe_has_histograms") {
312  if (angle_has_histograms) {
313    defines = [ "ANGLE_HAS_HISTOGRAMS" ]
314    include_dirs = [ "$root_gen_dir" ]
315  }
316}
317
318template("angle_perftests_common") {
319  assert(defined(invoker.test_utils))
320
321  angle_source_set(target_name) {
322    testonly = true
323    if (is_ios) {
324      # shared libraries are hidden inside ios_framework_bundle, but we include headers from them
325      check_includes = false
326    }
327    sources = [
328      "../third_party/trace_event/trace_event.h",
329      "perf_tests/ANGLEPerfTest.cpp",
330      "perf_tests/ANGLEPerfTest.h",
331      "perf_tests/ANGLEPerfTestArgs.cpp",
332      "perf_tests/ANGLEPerfTestArgs.h",
333      "perf_tests/DrawCallPerfParams.cpp",
334      "perf_tests/DrawCallPerfParams.h",
335      "perf_tests/third_party/perf/perf_result_reporter.cc",
336      "perf_tests/third_party/perf/perf_result_reporter.h",
337      "perf_tests/third_party/perf/perf_test.cc",
338      "perf_tests/third_party/perf/perf_test.h",
339      "test_utils/runner/HistogramWriter.h",
340      "test_utils/runner/TestSuite.h",
341    ]
342    public_deps = [
343      "$angle_root/src/tests:angle_test_expectations",
344      "$angle_root/third_party/rapidjson:rapidjson",
345      "${invoker.test_utils}",
346    ]
347    public_configs += [ "${angle_root}:libANGLE_config" ]
348  }
349}
350
351angle_perftests_common("angle_perftests_shared") {
352  test_utils = ":angle_common_test_utils_shared"
353}
354
355angle_perftests_common("angle_perftests_static") {
356  test_utils = ":angle_common_test_utils_static"
357}
358
359if (is_win || is_linux || is_chromeos || is_android || is_apple) {
360  import("angle_perftests.gni")
361
362  # This test suite is for perf tests that use ANGLE's internals in some direct way.
363  angle_test("angle_white_box_perftests") {
364    include_dirs = [ "." ]
365    sources =
366        angle_white_box_perf_tests_sources + [ "angle_perftests_main.cpp" ]
367
368    deps = [
369      ":angle_perftests_static",
370      "$angle_root:libANGLE",
371      "$angle_root:libEGL_static",
372      "$angle_root:libGLESv2_static",
373    ]
374
375    # These tests depend on vulkan_command_buffer_utils, which is
376    # not yet compatible with mac and vulkan display/headless backend.
377    if (angle_enable_vulkan && !angle_use_vulkan_display && !is_apple) {
378      sources += angle_white_box_perf_tests_vulkan_sources
379      deps += [
380        "$angle_glslang_dir:glslang_lib_sources",
381        "$angle_root/src/common/vulkan:angle_vulkan_entry_points",
382      ]
383    }
384  }
385}
386
387if (build_angle_perftests) {
388  import("angle_perftests.gni")
389
390  config("angle_trace_perftests_config") {
391    if (build_angle_trace_perf_tests) {
392      defines = [ "ANGLE_TRACE_PERF_TESTS" ]
393    }
394  }
395
396  angle_source_set("angle_trace_perftests") {
397    testonly = true
398
399    if (build_angle_trace_perf_tests) {
400      # http://anglebug.com/6009: Traces with long shaders are hitting string literal
401      # limit in MSVC, so only compile them when using clang
402      assert(is_clang, "build_angle_trace_perf_tests requires is_clang")
403
404      if (is_ios) {
405        # shared libraries are hidden inside ios_framework_bundle, but we include headers from them
406        check_includes = false
407      }
408      sources = [ "perf_tests/TracePerfTest.cpp" ]
409      deps = [
410        ":angle_perftests_shared",
411        "$angle_root:angle_compression",
412        "$angle_root/util:angle_png_utils",
413        "restricted_traces:angle_restricted_traces",
414      ]
415      public_configs = [ ":angle_trace_perftests_config" ]
416      suppressed_configs +=
417          [ "$angle_root:constructor_and_destructor_warnings" ]
418    }
419  }
420
421  # This test suite is designed to run against a generic GL implementation.
422  angle_test("angle_perftests") {
423    include_dirs = [ "." ]
424    sources = angle_perf_tests_sources + [ "angle_perftests_main.cpp" ]
425
426    deps = [
427      ":angle_perftests_shared",
428      ":angle_trace_perftests",
429      "$angle_spirv_tools_dir:spvtools_val",
430    ]
431
432    data_deps = [
433      "${angle_root}:libEGL",
434      "${angle_root}:libGLESv2",
435    ]
436
437    data_deps += [ "//testing:run_perf_test" ]
438
439    if (is_win || is_linux || is_chromeos) {
440      data_deps += [ "${angle_root}/third_party/glmark2:glmark2_angle" ]
441    }
442    if (is_win && target_cpu != "arm64") {
443      data_deps += [ "${angle_root}/third_party/glmark2:glmark2_wgl" ]
444    }
445    if (is_linux || is_chromeos) {
446      data_deps += [ "${angle_root}/third_party/glmark2:glmark2_glx" ]
447    }
448
449    if (is_clang) {
450      # Allows us to edit traces and remove chunks of code without compile warnings.
451      cflags_cc = [ "-Wno-unused-const-variable" ]
452    }
453  }
454}
455
456###-----------------------------------------------------
457### ES 1 conformance tests
458###-----------------------------------------------------
459
460if (build_angle_gles1_conform_tests) {
461  gles1_conform_root = "$angle_root/third_party/gles1_conform"
462
463  config("angle_gles1_conform_support") {
464    include_dirs = [
465      "$gles1_conform_root",
466      "$gles1_conform_root/conform/conform",
467      "$gles1_conform_root/conform/conformshell",
468      "$gles1_conform_root/ctk",
469      "$gles1_conform_root/fixed",
470      "$gles1_conform_root/platform",
471    ]
472
473    defines = [
474      "COMMON",
475      "CONFORM_ALTERNATE_MAIN",
476
477      # NULLWS defines is only used in covegl/native.h, remove here.
478      # if needed please add it in angle_test("angle_gles1_covegl_no_gtest") defines.
479      #"NULLWS",
480    ]
481
482    # This is used by the tests to typedef uint32_t. For some reason only needed on mac.
483    if (is_apple) {
484      defines += [ "__linux" ]
485    }
486
487    cflags = []
488    if (is_clang) {
489      # Remove when crbug.com/428099 is resolved.
490      cflags += [
491        "-Wno-implicit-function-declaration",
492        "-Wno-implicit-int-float-conversion",
493        "-Wno-int-to-pointer-cast",
494        "-Wno-self-assign",
495        "-Wno-sign-compare",
496        "-Wno-unused-const-variable",
497        "-Wno-unused-result",
498        "-Wno-unused-variable",
499
500        # Upstream tests do null pointer arithmetic, so disable those warnings.
501        "-Wno-null-pointer-arithmetic",
502      ]
503    } else {
504      cflags += [ "/wd4101" ]  # unreferenced local variable
505    }
506  }
507
508  # This source set is a bit special so we don't use angle_source_set.
509  angle_gles1_conform_common_source = [
510    "$gles1_conform_root/ctk/ctk.h",
511    "$gles1_conform_root/ctk/ctkn.c",
512    "$gles1_conform_root/ctk/glext.c",
513    "$gles1_conform_root/fixed/fixed.c",
514    "$gles1_conform_root/fixed/float64.c",
515    "$gles1_conform_root/fixed/int32.c",
516    "$gles1_conform_root/fixed/int64.c",
517    "$gles1_conform_root/platform/gl_fixed_point.h",
518    "$gles1_conform_root/platform/gl_single_precision.h",
519    "$gles1_conform_root/platform/math_fixed.h",
520    "$gles1_conform_root/platform/math_float.h",
521    "$gles1_conform_root/platform/platform.h",
522    "$gles1_conform_root/platform/platform_gl.h",
523    "$gles1_conform_root/platform/platform_random.h",
524    "$gles1_conform_root/platform/platform_stdlib.h",
525    "$gles1_conform_root/platform/platform_types.h",
526    "$gles1_conform_root/platform/printf_fixed.h",
527    "$gles1_conform_root/platform/printf_float.h",
528    "$gles1_conform_root/platform/random.c",
529    "$gles1_conform_root/platform/stdlib_ansi.h",
530  ]
531
532  source_set("angle_gles1_conformance_no_gtest") {
533    configs += [
534      ":angle_gles1_conform_support",
535      "$angle_root:internal_config",
536    ]
537
538    public_configs = [
539      "$angle_root/util:angle_util_config",
540      "$angle_root:angle_static",
541      "$angle_root:gl_prototypes",
542    ]
543
544    if (is_clang) {
545      cflags_c = [ "-Wno-implicit-fallthrough" ]
546    }
547
548    testonly = true
549
550    public_deps = [
551      "$angle_root:angle_common",
552      "$angle_root:libEGL_static",
553      "$angle_root:libGLESv2_static",
554      "$angle_root:preprocessor",
555      "$angle_root:translator",
556      "$angle_root/util:angle_util_static",
557    ]
558
559    sources = [
560      "$gles1_conform_root/conform/conform/apfunc.c",
561      "$gles1_conform_root/conform/conform/appl.c",
562      "$gles1_conform_root/conform/conform/bclear.c",
563      "$gles1_conform_root/conform/conform/bcolor.c",
564      "$gles1_conform_root/conform/conform/bcorner.c",
565      "$gles1_conform_root/conform/conform/blend.c",
566      "$gles1_conform_root/conform/conform/bufobj.c",
567      "$gles1_conform_root/conform/conform/clip.c",
568      "$gles1_conform_root/conform/conform/colramp.c",
569      "$gles1_conform_root/conform/conform/copytex.c",
570      "$gles1_conform_root/conform/conform/dither.c",
571      "$gles1_conform_root/conform/conform/divzero.c",
572      "$gles1_conform_root/conform/conform/drawtex.c",
573      "$gles1_conform_root/conform/conform/fogexp.c",
574      "$gles1_conform_root/conform/conform/foglin.c",
575      "$gles1_conform_root/conform/conform/gets.c",
576      "$gles1_conform_root/conform/conform/l_ac.c",
577      "$gles1_conform_root/conform/conform/l_al.c",
578      "$gles1_conform_root/conform/conform/l_am.c",
579      "$gles1_conform_root/conform/conform/l_ap.c",
580      "$gles1_conform_root/conform/conform/l_as.c",
581      "$gles1_conform_root/conform/conform/l_dl.c",
582      "$gles1_conform_root/conform/conform/l_dm.c",
583      "$gles1_conform_root/conform/conform/l_dmn.c",
584      "$gles1_conform_root/conform/conform/l_dmp.c",
585      "$gles1_conform_root/conform/conform/l_em.c",
586      "$gles1_conform_root/conform/conform/l_se.c",
587      "$gles1_conform_root/conform/conform/l_sed.c",
588      "$gles1_conform_root/conform/conform/l_sen.c",
589      "$gles1_conform_root/conform/conform/l_sep.c",
590      "$gles1_conform_root/conform/conform/l_sl.c",
591      "$gles1_conform_root/conform/conform/l_sm.c",
592      "$gles1_conform_root/conform/conform/l_sn.c",
593      "$gles1_conform_root/conform/conform/l_sp.c",
594      "$gles1_conform_root/conform/conform/lineaa.c",
595      "$gles1_conform_root/conform/conform/linehv.c",
596      "$gles1_conform_root/conform/conform/linerast.c",
597      "$gles1_conform_root/conform/conform/logicop.c",
598      "$gles1_conform_root/conform/conform/mask.c",
599      "$gles1_conform_root/conform/conform/mget.c",
600      "$gles1_conform_root/conform/conform/mipgen.c",
601      "$gles1_conform_root/conform/conform/miplevels.c",
602      "$gles1_conform_root/conform/conform/miplin.c",
603      "$gles1_conform_root/conform/conform/mipsel.c",
604      "$gles1_conform_root/conform/conform/mpalette.c",
605      "$gles1_conform_root/conform/conform/mquery.c",
606      "$gles1_conform_root/conform/conform/mstack.c",
607      "$gles1_conform_root/conform/conform/multitex.c",
608      "$gles1_conform_root/conform/conform/mustpass.c",
609      "$gles1_conform_root/conform/conform/packpix.c",
610      "$gles1_conform_root/conform/conform/pntaa.c",
611      "$gles1_conform_root/conform/conform/pntrast.c",
612      "$gles1_conform_root/conform/conform/pntsprt.c",
613      "$gles1_conform_root/conform/conform/pntszary.c",
614      "$gles1_conform_root/conform/conform/polycull.c",
615      "$gles1_conform_root/conform/conform/readfmt.c",
616      "$gles1_conform_root/conform/conform/rescalen.c",
617      "$gles1_conform_root/conform/conform/scissor.c",
618      "$gles1_conform_root/conform/conform/spclear.c",
619      "$gles1_conform_root/conform/conform/spcorner.c",
620      "$gles1_conform_root/conform/conform/spfunc.c",
621      "$gles1_conform_root/conform/conform/spop.c",
622      "$gles1_conform_root/conform/conform/tests.c",
623      "$gles1_conform_root/conform/conform/texcombine.c",
624      "$gles1_conform_root/conform/conform/texdecal.c",
625      "$gles1_conform_root/conform/conform/texedge.c",
626      "$gles1_conform_root/conform/conform/texpalet.c",
627      "$gles1_conform_root/conform/conform/trirast.c",
628      "$gles1_conform_root/conform/conform/tritile.c",
629      "$gles1_conform_root/conform/conform/userclip.c",
630      "$gles1_conform_root/conform/conform/vorder.c",
631      "$gles1_conform_root/conform/conform/vpclamp.c",
632      "$gles1_conform_root/conform/conform/xform.c",
633      "$gles1_conform_root/conform/conform/xformmix.c",
634      "$gles1_conform_root/conform/conform/xformn.c",
635      "$gles1_conform_root/conform/conform/xformvp.c",
636      "$gles1_conform_root/conform/conform/xformw.c",
637      "$gles1_conform_root/conform/conform/zbclear.c",
638      "$gles1_conform_root/conform/conform/zbfunc.c",
639      "$gles1_conform_root/conform/conformshell/conform.h",
640      "$gles1_conform_root/conform/conformshell/driver.c",
641      "$gles1_conform_root/conform/conformshell/driver.h",
642      "$gles1_conform_root/conform/conformshell/path.c",
643      "$gles1_conform_root/conform/conformshell/path.h",
644      "$gles1_conform_root/conform/conformshell/pathdata.c",
645      "$gles1_conform_root/conform/conformshell/pathdata.h",
646      "$gles1_conform_root/conform/conformshell/paths.c",
647      "$gles1_conform_root/conform/conformshell/shell.c",
648      "$gles1_conform_root/conform/conformshell/util.c",
649      "$gles1_conform_root/conform/conformshell/util.h",
650      "$gles1_conform_root/conform/conformshell/utilg.c",
651      "$gles1_conform_root/conform/conformshell/utilg.h",
652      "$gles1_conform_root/conform/conformshell/utilm.c",
653      "$gles1_conform_root/conform/conformshell/utilm.h",
654      "$gles1_conform_root/conform/conformshell/utilp.c",
655      "$gles1_conform_root/conform/conformshell/utilp.h",
656      "$gles1_conform_root/conform/conformshell/utilru.c",
657      "$gles1_conform_root/conform/conformshell/utilru.h",
658      "$gles1_conform_root/conform/conformshell/utils.c",
659      "$gles1_conform_root/conform/conformshell/utils.h",
660      "$gles1_conform_root/conform/conformshell/utilt.c",
661      "$gles1_conform_root/conform/conformshell/utilt.h",
662    ]
663
664    sources += angle_gles1_conform_common_source
665  }
666
667  angle_test("angle_gles1_conformance_tests") {
668    deps = [
669      ":angle_common_test_utils_static",
670      ":angle_gles1_conformance_no_gtest",
671    ]
672
673    include_dirs = [ "." ]
674
675    sources = [
676      "angle_generic_tests_main.cpp",
677      "gles1_conformance_tests/ConformanceTests.cpp",
678      "test_utils/ANGLETest.cpp",
679      "test_utils/ANGLETest.h",
680    ]
681
682    configs += [
683      "${angle_root}:libANGLE_config",
684      "${angle_root}:angle_backend_config",
685    ]
686  }
687
688  if (!is_win && !is_apple) {
689    source_set("angle_gles1_covgl_no_gtest") {
690      configs += [
691        ":angle_gles1_conform_support",
692        "$angle_root:internal_config",
693      ]
694
695      public_configs = [
696        "$angle_root/util:angle_util_config",
697        "$angle_root:angle_static",
698        "$angle_root:gl_prototypes",
699      ]
700
701      testonly = true
702
703      public_deps = [
704        "$angle_root:angle_common",
705        "$angle_root:libEGL_static",
706        "$angle_root:libGLESv2_static",
707        "$angle_root:preprocessor",
708        "$angle_root:translator",
709        "$angle_root/util:angle_util_static",
710      ]
711
712      sources = [
713        "$gles1_conform_root/conform/covgl/a.c",
714        "$gles1_conform_root/conform/covgl/b.c",
715        "$gles1_conform_root/conform/covgl/c.c",
716        "$gles1_conform_root/conform/covgl/d.c",
717        "$gles1_conform_root/conform/covgl/data.c",
718        "$gles1_conform_root/conform/covgl/e.c",
719        "$gles1_conform_root/conform/covgl/enum.c",
720        "$gles1_conform_root/conform/covgl/f.c",
721        "$gles1_conform_root/conform/covgl/g.c",
722        "$gles1_conform_root/conform/covgl/h.c",
723        "$gles1_conform_root/conform/covgl/i.c",
724        "$gles1_conform_root/conform/covgl/l.c",
725        "$gles1_conform_root/conform/covgl/m.c",
726        "$gles1_conform_root/conform/covgl/n.c",
727        "$gles1_conform_root/conform/covgl/o.c",
728        "$gles1_conform_root/conform/covgl/p.c",
729        "$gles1_conform_root/conform/covgl/q.c",
730        "$gles1_conform_root/conform/covgl/r.c",
731        "$gles1_conform_root/conform/covgl/s.c",
732        "$gles1_conform_root/conform/covgl/shell.h",
733        "$gles1_conform_root/conform/covgl/t.c",
734        "$gles1_conform_root/conform/covgl/v.c",
735        "$gles1_conform_root/conform/covgl/w.c",
736      ]
737
738      sources += angle_gles1_conform_common_source
739
740      defines = [ "ProbeEnum=ProbeEnumANGLE" ]
741    }
742
743    angle_test("angle_gles1_covgl_tests") {
744      deps = [
745        ":angle_common_test_utils_static",
746        ":angle_gles1_covgl_no_gtest",
747      ]
748
749      include_dirs = [ "." ]
750
751      sources = [
752        "$gles1_conform_root/conform/covgl/shell.c",
753        "angle_generic_tests_main.cpp",
754        "gles1_conformance_tests/CovglTests.cpp",
755        "test_utils/ANGLETest.cpp",
756        "test_utils/ANGLETest.h",
757      ]
758
759      configs += [
760        ":angle_gles1_conform_support",
761        "${angle_root}:libANGLE_config",
762        "${angle_root}:angle_backend_config",
763      ]
764    }
765  }
766  source_set("angle_gles1_primtest_no_gtest") {
767    configs += [
768      ":angle_gles1_conform_support",
769      "$angle_root:internal_config",
770    ]
771
772    public_configs = [
773      "$angle_root/util:angle_util_config",
774      "$angle_root:angle_static",
775      "$angle_root:gl_prototypes",
776    ]
777
778    testonly = true
779
780    public_deps = [
781      "$angle_root:angle_common",
782      "$angle_root:libEGL_static",
783      "$angle_root:libGLESv2_static",
784      "$angle_root:preprocessor",
785      "$angle_root:translator",
786      "$angle_root/util:angle_util_static",
787    ]
788
789    sources = [
790      "$gles1_conform_root/conform/primtest/alias.c",
791      "$gles1_conform_root/conform/primtest/alpha.c",
792      "$gles1_conform_root/conform/primtest/blend.c",
793      "$gles1_conform_root/conform/primtest/depth.c",
794      "$gles1_conform_root/conform/primtest/dither.c",
795      "$gles1_conform_root/conform/primtest/driver.c",
796      "$gles1_conform_root/conform/primtest/driver.h",
797      "$gles1_conform_root/conform/primtest/fog.c",
798      "$gles1_conform_root/conform/primtest/hint.c",
799      "$gles1_conform_root/conform/primtest/light.c",
800      "$gles1_conform_root/conform/primtest/logic.c",
801      "$gles1_conform_root/conform/primtest/prim.c",
802      "$gles1_conform_root/conform/primtest/scissor.c",
803      "$gles1_conform_root/conform/primtest/shade.c",
804      "$gles1_conform_root/conform/primtest/shell.c",
805      "$gles1_conform_root/conform/primtest/shell.h",
806      "$gles1_conform_root/conform/primtest/stencil.c",
807      "$gles1_conform_root/conform/primtest/texture.c",
808      "$gles1_conform_root/conform/primtest/tproto.h",
809    ]
810
811    sources += angle_gles1_conform_common_source
812  }
813
814  angle_test("angle_gles1_primtest_tests") {
815    deps = [
816      ":angle_common_test_utils_static",
817      ":angle_gles1_primtest_no_gtest",
818    ]
819
820    include_dirs = [ "$gles1_conform_root/conform" ]
821
822    sources = [
823      "angle_generic_tests_main.cpp",
824      "gles1_conformance_tests/PrimtestTests.cpp",
825      "test_utils/ANGLETest.cpp",
826      "test_utils/ANGLETest.h",
827    ]
828
829    configs += [
830      ":angle_gles1_conform_support",
831      "${angle_root}:libANGLE_config",
832      "${angle_root}:angle_backend_config",
833    ]
834  }
835  source_set("angle_gles1_covegl_no_gtest_source") {
836    configs += [
837      ":angle_gles1_conform_support",
838      "$angle_root:internal_config",
839    ]
840
841    public_configs = [
842      "$angle_root/util:angle_util_config",
843      "$angle_root:angle_static",
844      "$angle_root:gl_prototypes",
845    ]
846
847    testonly = true
848
849    public_deps = [
850      "$angle_root:angle_common",
851      "$angle_root:libEGL_static",
852      "$angle_root:libGLESv2_static",
853      "$angle_root:preprocessor",
854      "$angle_root:translator",
855      "$angle_root/util:angle_util_static",
856    ]
857
858    sources = [
859      "$gles1_conform_root/conform/covegl/enum.c",
860      "$gles1_conform_root/conform/covegl/native.h",
861      "$gles1_conform_root/conform/covegl/test.c",
862    ]
863
864    sources += angle_gles1_conform_common_source
865
866    if (!is_win && !is_linux && !is_chromeos) {
867      defines = [ "NULLWS" ]
868    }
869  }
870
871  angle_test("angle_gles1_covegl_no_gtest") {
872    deps = [ ":angle_gles1_covegl_no_gtest_source" ]
873
874    include_dirs = [ "$gles1_conform_root" ]
875
876    sources = [ "$gles1_conform_root/conform/covegl/shell.c" ]
877
878    if (is_win) {
879      sources += [ "$gles1_conform_root/conform/covegl/native_w32.c" ]
880    } else if (is_linux || is_chromeos) {
881      sources += [ "$gles1_conform_root/conform/covegl/native.c" ]
882    } else {
883      sources += [ "$gles1_conform_root/conform/covegl/native_nws.c" ]
884      defines += [ "NULLWS" ]
885    }
886
887    configs += [
888      "${angle_root}:libANGLE_config",
889      "${angle_root}:angle_backend_config",
890    ]
891
892    defines += [ "COMMON" ]
893
894    if (is_win) {
895      if (is_clang) {
896        cflags = [ "-Wno-incompatible-pointer-types" ]
897      } else {
898        cflags = [ "/wd4133" ]  # 'function': incompatible types
899      }
900
901      suppressed_configs += [
902        "//build/config/win:lean_and_mean",
903        "//build/config/win:nominmax",
904        "//build/config/win:unicode",
905      ]
906    }
907  }
908}
909
910###-----------------------------------------------------
911### dEQP tests
912###-----------------------------------------------------
913
914if (build_angle_deqp_tests && !is_fuchsia) {
915  import("deqp_support/deqp.gni")
916  import("deqp_support/deqp_data_autogen.gni")
917
918  config("angle_deqp_support") {
919    include_dirs = deqp_include_dirs
920    if (is_win && !is_clang) {
921      include_dirs += [ "$deqp_path/framework/platform/win32" ]
922      cflags = [
923        "/EHsc",  # dEQP requires exceptions
924        "/wd4091",  # typedef ignored when no variable is declared
925        "/wd4100",
926        "/wd4101",  # unreferenced local variable
927        "/wd4125",  # decimal digit terminates octal escape sequence
928        "/wd4127",  # conditional expression constant
929        "/wd4244",  # possible loss of data
930        "/wd4245",  # argument signed/unsigned mismatch
931        "/wd4297",  # function assumed not to throw an exception but does
932        "/wd4302",  # truncation
933        "/wd4311",  # pointer truncation
934        "/wd4389",  # signed/unsigned mismatch
935        "/wd4510",  # default constructor could not be generated
936        "/wd4512",
937        "/wd4610",  # cannot be instantiated
938        "/wd4611",  # setjmp interaction non-portable
939        "/wd4701",  # potentially uninit used
940        "/wd4702",  # unreachable code
941        "/wd4706",  # assignment within conditional expression
942        "/wd4834",  # discarding return value of function with 'nodiscard'
943                    # attribute
944        "/wd4838",  # conversion requires a narrowing conversion
945        "/wd4996",  # deprecated
946      ]
947    }
948
949    defines = [
950      "DEQP_SUPPORT_GLES31=1",
951      "DEQP_SUPPORT_GLES3=1",
952      "DEQP_SUPPORT_GLES2=1",
953      "DEQP_SUPPORT_EGL=1",
954      "DEQP_TARGET_NAME=\"angle\"",
955      "DEQP_GLES31_RUNTIME_LOAD=1",
956      "DEQP_GLES3_RUNTIME_LOAD=1",
957      "DEQP_GLES2_RUNTIME_LOAD=1",
958      "QP_SUPPORT_PNG=1",
959      "_HAS_EXCEPTIONS=1",
960      "_MBCS",
961      "ANGLE_DEQP_DATA_DIR=\"gen/vk_gl_cts_data/data\"",
962    ]
963
964    if (is_android) {
965      include_dirs += [ "$deqp_path/framework/platform/android" ]
966
967      _android_api = android64_ndk_api_level
968      if (!angle_64bit_current_cpu) {
969        _android_api = android32_ndk_api_level
970      }
971
972      defines += [ "DE_ANDROID_API=" + "${_android_api}" ]
973    }
974
975    if (is_clang) {
976      # TODO(jmadill): Remove this once we fix dEQP.
977      cflags_c = [ "-Wno-unused-local-typedef" ]
978      cflags_cc = [
979        "-Wno-sizeof-array-div",  # https://gitlab.khronos.org/Tracker/vk-gl-cts/issues/2127
980        "-Wno-string-conversion",  # implicit conversion turns string literal
981                                   # into bool
982        "-Wno-unused-function",
983        "-Wno-unused-local-typedef",
984        "-Wno-unused-result",  # ignoring return value of function declared with
985                               # 'nodiscard' attribute
986      ]
987    }
988
989    # Ask the system headers to expose all the regular function otherwise
990    # dEQP doesn't compile and produces warnings about implicitly defined
991    # functions.
992    if (is_linux || is_chromeos) {
993      # This has to be GNU_SOURCE as on Linux dEQP uses syscall()
994      defines += [ "_GNU_SOURCE" ]
995    }
996    if (is_android || is_apple) {
997      # _XOPEN_SOURCE=600 is what is used in deqp/src/Android.mk
998      defines += [ "_XOPEN_SOURCE=600" ]
999    }
1000  }
1001
1002  deqp_undefine_configs = [
1003    "//build/config/compiler:chromium_code",
1004    "//build/config/compiler:no_exceptions",
1005    "//build/config/compiler:no_rtti",
1006    "${angle_root}:constructor_and_destructor_warnings",
1007    "${angle_root}:extra_warnings",
1008  ]
1009
1010  if (is_win) {
1011    deqp_undefine_configs += [
1012      "//build/config/win:lean_and_mean",
1013      "//build/config/win:nominmax",
1014      "//build/config/win:unicode",
1015    ]
1016  }
1017
1018  set_defaults("angle_deqp_source_set") {
1019    public_configs = []
1020    configs = angle_common_configs
1021    cflags = []
1022  }
1023
1024  template("angle_deqp_source_set") {
1025    angle_source_set(target_name) {
1026      testonly = true
1027      forward_variables_from(invoker, "*")
1028      suppressed_configs += deqp_undefine_configs
1029
1030      if (is_clang) {
1031        cflags += [
1032          # Suppress a spurious header warning. http://crbug.com/995046
1033          "-Wno-nonportable-include-path",
1034        ]
1035      }
1036    }
1037  }
1038
1039  config("angle_deqp_framework_debase_config") {
1040    include_dirs = [ "$deqp_path/framework/delibs/debase" ]
1041  }
1042
1043  angle_deqp_source_set("angle_deqp_framework_debase") {
1044    public_configs += [ ":angle_deqp_framework_debase_config" ]
1045    sources = deqp_framework_debase_sources
1046  }
1047
1048  config("angle_deqp_framework_decpp_config") {
1049    include_dirs = [ "$deqp_path/framework/delibs/decpp" ]
1050  }
1051
1052  angle_deqp_source_set("angle_deqp_framework_decpp") {
1053    public_configs += [
1054      ":angle_deqp_support",
1055      ":angle_deqp_framework_decpp_config",
1056      "//build/config/compiler:exceptions",
1057      "//build/config/compiler:no_chromium_code",
1058    ]
1059    if (is_clang) {
1060      cflags_cc = [
1061        # Supresses self assign warnings in SharedPtr_selfTest
1062        # Can be removed if dEQP or clang are fixed
1063        "-Wno-self-assign",
1064      ]
1065    }
1066
1067    public_deps = [
1068      ":angle_deqp_framework_debase",
1069      ":angle_deqp_framework_delibs",
1070    ]
1071    sources = deqp_framework_decpp_sources
1072  }
1073
1074  config("angle_deqp_framework_xexml_config") {
1075    include_dirs = [ "$deqp_path/framework/xexml" ]
1076  }
1077
1078  angle_deqp_source_set("angle_deqp_framework_xexml") {
1079    public_configs += [
1080      ":angle_deqp_support",
1081      ":angle_deqp_framework_decpp_config",
1082      ":angle_deqp_framework_delibs_config",
1083      "//build/config/compiler:exceptions",
1084      "//build/config/compiler:no_chromium_code",
1085    ]
1086
1087    public_deps = [
1088      ":angle_deqp_framework_debase",
1089      ":angle_deqp_framework_decpp",
1090      ":angle_deqp_framework_delibs",
1091    ]
1092    sources = deqp_framework_xexml_sources
1093  }
1094
1095  config("angle_deqp_libtester_config") {
1096    defines = [ "ANGLE_DEQP_LIBTESTER_IMPLEMENTATION" ]
1097
1098    if (is_clang) {
1099      # TODO(jmadill): Remove this once we fix dEQP.
1100      cflags_cc = [
1101        "-Wno-delete-non-virtual-dtor",
1102        "-Wno-deprecated",
1103
1104        # Supresses self assign warning in setLumSat
1105        # Can be removed if dEQP or clang are fixed
1106        "-Wno-self-assign",
1107      ]
1108    }
1109  }
1110
1111  config("angle_deqp_framework_delibs_config") {
1112    include_dirs = [
1113      "$deqp_path/framework/delibs/debase",
1114      "$deqp_path/framework/delibs/depool",
1115      "$deqp_path/framework/delibs/dethread",
1116      "$deqp_path/framework/delibs/deutil",
1117      "$deqp_path/framework/delibs/destream",
1118    ]
1119  }
1120
1121  angle_deqp_source_set("angle_deqp_framework_delibs") {
1122    sources = deqp_framework_delibs_sources
1123
1124    if (is_win) {
1125      sources += deqp_framework_delibs_sources_win
1126    }
1127    if (is_linux || is_chromeos || is_android || is_apple) {
1128      sources += deqp_framework_delibs_sources_unix
1129    }
1130
1131    public_configs = [
1132      ":angle_deqp_framework_delibs_config",
1133      ":angle_deqp_support",
1134    ]
1135
1136    public_deps = [ ":angle_deqp_framework_debase" ]
1137  }
1138
1139  config("angle_deqp_framework_common_config") {
1140    include_dirs = [
1141      "$deqp_path/framework/common",
1142      "$deqp_path/framework/randomshaders",
1143      "$deqp_path/framework/referencerenderer",
1144    ]
1145  }
1146
1147  angle_deqp_source_set("angle_deqp_framework_common") {
1148    sources = deqp_framework_common_sources
1149    public_configs = [ ":angle_deqp_framework_common_config" ]
1150    public_deps = [
1151      ":angle_deqp_framework_decpp",
1152      ":angle_deqp_framework_qphelper",
1153      ":angle_deqp_framework_xexml",
1154    ]
1155  }
1156
1157  config("angle_deqp_framework_opengl_config") {
1158    include_dirs = [
1159      "$deqp_path/framework/opengl",
1160      "$deqp_path/framework/opengl/simplereference",
1161      "$deqp_path/framework/opengl/wrapper",
1162    ]
1163  }
1164
1165  angle_deqp_source_set("angle_deqp_framework_opengl") {
1166    sources = deqp_framework_opengl_sources
1167    public_configs = [ ":angle_deqp_framework_opengl_config" ]
1168    public_deps = [ ":angle_deqp_framework_common" ]
1169  }
1170
1171  config("angle_deqp_framework_egl_config") {
1172    include_dirs = [
1173      "$deqp_path/framework/egl",
1174      "$deqp_path/framework/egl/wrapper",
1175    ]
1176  }
1177
1178  angle_deqp_source_set("angle_deqp_framework_egl") {
1179    sources = deqp_framework_egl_sources
1180    public_configs = [ ":angle_deqp_framework_egl_config" ]
1181    public_deps = [ ":angle_deqp_framework_opengl" ]
1182  }
1183
1184  config("angle_deqp_framework_qphelper_config") {
1185    include_dirs = [ "$deqp_path/framework/qphelper" ]
1186  }
1187
1188  angle_deqp_source_set("angle_deqp_framework_qphelper") {
1189    sources = deqp_framework_qphelper_sources
1190    public_deps = [
1191      ":angle_deqp_framework_delibs",
1192      "${angle_libpng_dir}:libpng",
1193    ]
1194    public_configs = [ ":angle_deqp_framework_qphelper_config" ]
1195  }
1196
1197  config("angle_deqp_glshared_config") {
1198    include_dirs = [ "$deqp_path/modules/glshared" ]
1199  }
1200
1201  angle_deqp_source_set("angle_deqp_glshared") {
1202    sources = deqp_glshared_sources
1203    public_deps = [ ":angle_deqp_framework_opengl" ]
1204    public_configs = [ ":angle_deqp_glshared_config" ]
1205  }
1206
1207  angle_deqp_source_set("angle_deqp_libtester") {
1208    if (is_ios) {
1209      # shared libraries are hidden inside ios_framework_bundle, but we include headers from them
1210      check_includes = false
1211    }
1212    public_deps = [
1213      ":angle_deqp_framework_common",
1214      ":angle_deqp_framework_egl",
1215      ":angle_deqp_glshared",
1216      "$angle_root:angle_common",
1217      "$angle_root/util:angle_util",
1218    ]
1219
1220    data_deps = [
1221      "${angle_root}:libEGL",
1222      "${angle_root}:libGLESv2",
1223    ]
1224
1225    configs += [ "${angle_root}:library_name_config" ]
1226    public_configs += [
1227      ":angle_deqp_libtester_config",
1228      "${angle_root}:libANGLE_config",
1229    ]
1230    sources = deqp_libtester_sources
1231    if (is_android) {
1232      libs = [ "log" ]
1233    }
1234  }
1235
1236  set_defaults("angle_deqp_gtest") {
1237    deps = []
1238    sources = []
1239    data = []
1240    data_deps = []
1241  }
1242
1243  template("angle_deqp_gtest") {
1244    _api = target_name
1245
1246    config_name = "angle_deqp_${_api}_config"
1247    config(config_name) {
1248      defines = invoker.defines
1249    }
1250
1251    shared_library_name = "angle_deqp_lib${_api}"
1252    angle_shared_library(shared_library_name) {
1253      forward_variables_from(invoker,
1254                             [
1255                               "sources",
1256                               "deps",
1257                               "data",
1258                               "data_deps",
1259                             ])
1260
1261      testonly = true
1262
1263      deps += [
1264        ":angle_deqp_libtester",
1265        "$angle_root/util:angle_test_utils",
1266        "$angle_root/util:angle_util",
1267      ]
1268
1269      suppressed_configs += deqp_undefine_configs
1270      public_configs += [ ":$config_name" ]
1271
1272      sources += [
1273        "deqp_support/angle_deqp_libtester.h",
1274        "deqp_support/angle_deqp_libtester_main.cpp",
1275        "deqp_support/tcuANGLEPlatform.cpp",
1276        "deqp_support/tcuANGLEPlatform.h",
1277      ]
1278
1279      if ((is_mac || is_ios) && !is_component_build) {
1280        ldflags = [
1281          "-install_name",
1282          "@rpath/lib${shared_library_name}.dylib",
1283        ]
1284      }
1285    }
1286
1287    if (!build_with_chromium) {
1288      angle_executable("angle_deqp_${_api}_no_gtest") {
1289        testonly = true
1290        sources = [ "deqp_support/angle_deqp_tests_main.cpp" ]
1291        deps = [ ":$shared_library_name" ]
1292      }
1293    }
1294
1295    angle_test("angle_deqp_${_api}_tests") {
1296      deps = [
1297        ":${shared_library_name}",
1298        "$angle_root:angle_common",
1299        "$angle_root/util:angle_util",
1300      ]
1301
1302      # Must be included outside of the source set for the define
1303      sources = [
1304        "angle_deqp_tests_main.cpp",
1305        "deqp_support/angle_deqp_gtest.cpp",
1306      ]
1307
1308      expectations_file = "deqp_${_api}_test_expectations.txt"
1309      if (defined(invoker.expectations_file)) {
1310        expectations_file = invoker.expectations_file
1311      }
1312      data = [
1313        "deqp_support/${expectations_file}",
1314        "${invoker.mustpass_dir}/${invoker.mustpass_name}",
1315      ]
1316    }
1317  }
1318
1319  _android_mustpass = "$deqp_path/android/cts/master"
1320  _aosp_mustpass =
1321      "$deqp_path/external/openglcts/data/mustpass/gles/aosp_mustpass/master"
1322  _khronos_mustpass =
1323      "$deqp_path/external/openglcts/data/mustpass/gles/khronos_mustpass/master"
1324
1325  angle_deqp_source_set("angle_deqp_gles2_common") {
1326    sources = deqp_gles2_sources
1327    public_deps = [
1328      ":angle_deqp_framework_egl",
1329      ":angle_deqp_glshared",
1330    ]
1331  }
1332
1333  angle_deqp_source_set("angle_deqp_gles3_common") {
1334    sources = deqp_gles3_sources
1335    public_deps = [
1336      ":angle_deqp_framework_egl",
1337      ":angle_deqp_glshared",
1338    ]
1339  }
1340
1341  angle_deqp_source_set("angle_deqp_gles31_common") {
1342    sources = deqp_gles31_sources
1343    public_deps = [
1344      ":angle_deqp_framework_egl",
1345      ":angle_deqp_glshared",
1346    ]
1347  }
1348
1349  template("angle_deqp_core_gtest") {
1350    _api = target_name
1351    angle_deqp_gtest(target_name) {
1352      forward_variables_from(invoker, "*")
1353
1354      mustpass_name = "${_api}-master.txt"
1355
1356      deps += angle_deqp_data_copy_targets
1357
1358      data = []
1359      if (_api == "gles2") {
1360        data = angle_deqp_data_gles2
1361      } else if (_api == "gles3") {
1362        data = angle_deqp_data_gles3
1363      } else if (_api == "gles31") {
1364        data = angle_deqp_data_gles31
1365      } else {
1366        # Make sure we include something so that angle_deqp_libtester_main.cpp can find something.
1367        data = [ "$root_gen_dir/vk_gl_cts_data/data/gles2/shaders/misc.test" ]
1368      }
1369    }
1370  }
1371
1372  angle_deqp_core_gtest("gles2") {
1373    defines = [ "ANGLE_DEQP_GLES2_TESTS" ]
1374    deps = [ ":angle_deqp_gles2_common" ]
1375    mustpass_dir = _aosp_mustpass
1376  }
1377
1378  angle_deqp_core_gtest("gles3") {
1379    defines = [ "ANGLE_DEQP_GLES3_TESTS" ]
1380    deps = [ ":angle_deqp_gles3_common" ]
1381    mustpass_dir = _aosp_mustpass
1382  }
1383
1384  angle_deqp_core_gtest("gles31") {
1385    defines = [ "ANGLE_DEQP_GLES31_TESTS" ]
1386    deps = [ ":angle_deqp_gles31_common" ]
1387    mustpass_dir = _aosp_mustpass
1388  }
1389
1390  angle_deqp_core_gtest("egl") {
1391    defines = [ "ANGLE_DEQP_EGL_TESTS" ]
1392    sources = deqp_egl_sources
1393    mustpass_dir = _android_mustpass
1394  }
1395
1396  # The CTS also includes a set of "KHR" tests that are separate from the main body of dEQP tests.
1397
1398  config("angle_deqp_khr_common_config") {
1399    include_dirs = [
1400      "$deqp_path/external/openglcts/modules/common",
1401      "$deqp_path/external/openglcts/modules/gl",
1402      "$deqp_path/external/openglcts/modules/gles2",
1403      "$deqp_path/external/openglcts/modules/gles3",
1404      "$deqp_path/external/openglcts/modules/gles31",
1405      "$deqp_path/external/openglcts/modules/gles32",
1406      "$deqp_path/external/openglcts/modules/glesext",
1407    ]
1408    if (is_clang) {
1409      cflags = [ "-Wno-header-hygiene" ]  # using namespace directive in global
1410                                          # context in header
1411    }
1412  }
1413
1414  angle_deqp_source_set("angle_deqp_khr_common") {
1415    sources = deqp_khr_common_sources + deqp_khr_test_module_headers +
1416              deqp_khr_gl_sources + deqp_khr_gles2_sources +
1417              deqp_khr_gles3_sources + deqp_khr_gles31_sources +
1418              deqp_khr_gles32_sources + deqp_khr_glesext_sources +
1419              [ "deqp_support/glcTestPackageEntry_override.cpp" ]
1420    public_deps = [
1421      ":angle_deqp_framework_egl",
1422      ":angle_deqp_glshared",
1423      "${angle_glslang_dir}:glslang_lib_sources",
1424      "${angle_spirv_tools_dir}:spvtools_val",
1425    ]
1426    public_configs = [ ":angle_deqp_khr_common_config" ]
1427
1428    # This is a bit of a hack so one test can capture memory limits.
1429    include_dirs = [ "$deqp_path/external/vulkancts/framework/vulkan" ]
1430  }
1431
1432  template("angle_deqp_khr_gtest") {
1433    angle_deqp_gtest(target_name) {
1434      forward_variables_from(invoker, "*")
1435      deps = [ ":angle_deqp_khr_common" ]
1436      deps += angle_deqp_data_copy_targets
1437      data = angle_deqp_external_openglcts_data_gles3
1438      mustpass_dir = _khronos_mustpass
1439    }
1440  }
1441
1442  angle_deqp_khr_gtest("khr_gles2") {
1443    defines = [ "ANGLE_DEQP_KHR_GLES2_TESTS" ]
1444    mustpass_name = "gles2-khr-master.txt"
1445  }
1446
1447  angle_deqp_khr_gtest("khr_gles3") {
1448    defines = [ "ANGLE_DEQP_KHR_GLES3_TESTS" ]
1449    mustpass_name = "gles3-khr-master.txt"
1450  }
1451
1452  angle_deqp_khr_gtest("khr_gles31") {
1453    defines = [ "ANGLE_DEQP_KHR_GLES31_TESTS" ]
1454    mustpass_name = "gles31-khr-master.txt"
1455  }
1456
1457  angle_deqp_khr_gtest("khr_gles32") {
1458    defines = [ "ANGLE_DEQP_KHR_GLES32_TESTS" ]
1459    mustpass_name = "gles32-khr-master.txt"
1460  }
1461
1462  template("angle_deqp_rotate_gtest") {
1463    split_target = string_split(target_name, "_")
1464    _api = split_target[0]
1465    _rotate = split_target[1]
1466    angle_deqp_gtest(target_name) {
1467      forward_variables_from(invoker, "*")
1468
1469      if (_rotate == "rotate90") {
1470        mustpass_suffix = "rotate-landscape"
1471      } else if (_rotate == "rotate180") {
1472        mustpass_suffix = "rotate-reverse-portrait"
1473      } else if (_rotate == "rotate270") {
1474        mustpass_suffix = "rotate-reverse-landscape"
1475      } else {
1476        assert(false)
1477      }
1478
1479      mustpass_name = "${_api}-${mustpass_suffix}.txt"
1480
1481      deps += angle_deqp_data_copy_targets
1482
1483      data = []
1484      if (_api == "gles3") {
1485        data = angle_deqp_data_gles3
1486      } else if (_api == "gles31") {
1487        data = angle_deqp_data_gles31
1488      } else {
1489        assert(false)
1490      }
1491    }
1492  }
1493
1494  angle_deqp_rotate_gtest("gles3_rotate90") {
1495    defines = [ "ANGLE_DEQP_GLES3_ROTATE90_TESTS" ]
1496    deps = [ ":angle_deqp_gles3_common" ]
1497    mustpass_dir = _aosp_mustpass
1498    expectations_file = "deqp_gles3_rotate_test_expectations.txt"
1499  }
1500
1501  angle_deqp_rotate_gtest("gles3_rotate180") {
1502    defines = [ "ANGLE_DEQP_GLES3_ROTATE180_TESTS" ]
1503    deps = [ ":angle_deqp_gles3_common" ]
1504    mustpass_dir = _aosp_mustpass
1505    expectations_file = "deqp_gles3_rotate_test_expectations.txt"
1506  }
1507
1508  angle_deqp_rotate_gtest("gles3_rotate270") {
1509    defines = [ "ANGLE_DEQP_GLES3_ROTATE270_TESTS" ]
1510    deps = [ ":angle_deqp_gles3_common" ]
1511    mustpass_dir = _aosp_mustpass
1512    expectations_file = "deqp_gles3_rotate_test_expectations.txt"
1513  }
1514
1515  angle_deqp_rotate_gtest("gles31_rotate90") {
1516    defines = [ "ANGLE_DEQP_GLES31_ROTATE90_TESTS" ]
1517    deps = [ ":angle_deqp_gles31_common" ]
1518    mustpass_dir = _aosp_mustpass
1519    expectations_file = "deqp_gles31_rotate_test_expectations.txt"
1520  }
1521
1522  angle_deqp_rotate_gtest("gles31_rotate180") {
1523    defines = [ "ANGLE_DEQP_GLES31_ROTATE180_TESTS" ]
1524    deps = [ ":angle_deqp_gles31_common" ]
1525    mustpass_dir = _aosp_mustpass
1526    expectations_file = "deqp_gles31_rotate_test_expectations.txt"
1527  }
1528
1529  angle_deqp_rotate_gtest("gles31_rotate270") {
1530    defines = [ "ANGLE_DEQP_GLES31_ROTATE270_TESTS" ]
1531    deps = [ ":angle_deqp_gles31_common" ]
1532    mustpass_dir = _aosp_mustpass
1533    expectations_file = "deqp_gles31_rotate_test_expectations.txt"
1534  }
1535}
1536
1537group("angle_tests") {
1538  testonly = true
1539  deps = [
1540    ":angle_end2end_tests",
1541    ":angle_perftests",
1542    ":angle_system_info_test",
1543    ":angle_unittests",
1544    "capture_replay_tests",
1545  ]
1546  if (!is_fuchsia) {
1547    deps += [
1548      ":angle_white_box_perftests",
1549      ":angle_white_box_tests",
1550    ]
1551  }
1552  if (build_angle_deqp_tests && !is_fuchsia) {
1553    deps += [
1554      ":angle_deqp_egl_tests",
1555      ":angle_deqp_gles2_tests",
1556      ":angle_deqp_gles31_tests",
1557      ":angle_deqp_gles3_tests",
1558    ]
1559    if (!build_with_chromium) {
1560      deps += [
1561        ":angle_deqp_egl_no_gtest",
1562        ":angle_deqp_gles2_no_gtest",
1563        ":angle_deqp_gles31_no_gtest",
1564        ":angle_deqp_gles3_no_gtest",
1565      ]
1566    }
1567  }
1568  if (build_angle_gles1_conform_tests) {
1569    deps += [
1570      ":angle_gles1_conformance_tests",
1571      ":angle_gles1_covegl_no_gtest",
1572      ":angle_gles1_primtest_tests",
1573    ]
1574    if (!is_win && !is_apple) {
1575      deps += [ ":angle_gles1_covgl_tests" ]
1576    }
1577  }
1578}
1579