# 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 } googletest_deps = [ "//testing/gmock", "//testing/gtest", "//third_party/googletest:gmock", "//third_party/googletest:gtest", ] if (build_with_chromium) { googletest_deps += [ "//base/test:test_support" ] } else { group("all") { testonly = true deps = [ "//src/tests:angle_end2end_tests", "//src/tests:angle_perftests", "//src/tests:angle_unittests", ] if (!is_fuchsia) { deps += [ "//src/tests:angle_white_box_perftests", "//src/tests:angle_white_box_tests", ] } if (build_angle_deqp_tests && !is_fuchsia) { 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" ] } } } # Helper template for including "main" files in Chromium. template("angle_tests_main") { source_set(target_name) { testonly = true public_deps = googletest_deps deps = [ "${angle_root}:includes" ] main = invoker.main if (build_with_chromium) { sources = [ "//gpu/$main.cc" ] } else { sources = [ "$main.cpp" ] } } } # Should fix the naming here once we migrate away from Chromium "main" files. angle_tests_main("angle_unittests_main") { main = "angle_unittest_main" } angle_tests_main("angle_end2end_tests_main") { main = "angle_end2end_tests_main" } angle_tests_main("angle_perftests_main") { main = "angle_perftests_main" } angle_test("angle_unittests_helper") { sources = angle_unittests_helper_sources deps = [ "${angle_root}:angle_common" ] } 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", ] } config("angle_test_expectations_config") { include_dirs = [ "${angle_root}:angle_common" ] } angle_static_library("angle_test_expectations") { public_configs += [ ":angle_test_expectations_config" ] public_deps = [ "${angle_root}:angle_common", "${angle_root}:angle_gpu_info_util", "${angle_root}:angle_util", ] sources = test_expectations_sources if (is_mac) { sources += test_expectations_sources_mac libs = [ "Cocoa.framework" ] } } angle_test("angle_unittests") { sources = angle_unittests_sources if (angle_enable_hlsl) { sources += angle_unittests_hlsl_sources defines = [ "ANGLE_ENABLE_HLSL" ] } deps = googletest_deps + [ "${angle_root}:libANGLE", ":angle_test_expectations", "${angle_root}:preprocessor", "${angle_root}:translator", "${angle_root}:libfeature_support", ":angle_unittests_main", ] if (!is_android && !is_fuchsia) { # SystemUtils.RunApp, the only unittest using a helper binary, is not supported on these # platforms yet. data_deps = [ ":angle_unittests_helper" ] } } if (is_win || is_linux || is_mac || is_android || is_fuchsia) { import("angle_end2end_tests.gni") angle_test("angle_end2end_tests") { include_dirs = [ "." ] sources = angle_end2end_tests_sources libs = [] if (is_mac) { sources += angle_end2end_tests_mac_sources libs += [ "CoreFoundation.framework", "IOSurface.framework", ] } if (is_win) { sources += angle_end2end_tests_win_sources } if (use_x11) { sources += angle_end2end_tests_x11_sources } if (angle_enable_vulkan) { sources += angle_end2end_tests_vulkan_sources } configs += [ "${angle_root}:libANGLE_config", "${angle_root}:library_name_config", ] deps = [ ":angle_end2end_tests_main", ":angle_test_expectations", "${angle_root}:angle_gpu_info_util", "${angle_root}:angle_image_util", "${angle_root}:angle_util", "${angle_root}:angle_util_loader_headers", ] data_deps = [ "${angle_root}:libEGL", "${angle_root}:libGLESv1_CM", "${angle_root}:libGLESv2", ] if (is_android) { use_native_activity = true } if (angle_enable_vulkan) { deps += [ "${angle_root}:angle_vulkan" ] } } } if (is_win || is_linux || is_mac || is_android) { import("angle_white_box_tests.gni") angle_test("angle_white_box_tests") { include_dirs = [ "." ] sources = angle_white_box_tests_sources if (is_win) { sources += angle_white_box_tests_win_sources } if (angle_enable_vulkan) { sources += angle_white_box_tests_vulkan_sources } configs += [ "${angle_root}:libANGLE_config", "${angle_root}:library_name_config", ] deps = [ ":angle_end2end_tests_main", "${angle_root}:angle_util_static", "${angle_root}:libANGLE", "${angle_root}:libEGL_static", "${angle_root}:libGLESv2_static", "${angle_root}:preprocessor", "${angle_root}:translator", ] if (is_android) { use_native_activity = true } } } if (is_win || is_linux || is_android || is_mac) { 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 deps = [ ":angle_perftests_main", "${angle_jsoncpp_dir}:jsoncpp", "${angle_root}:angle_util_static", "${angle_root}:libANGLE", "${angle_root}:libEGL_static", "${angle_root}:libGLESv2_static", ] if (is_win) { sources += angle_white_box_perf_tests_win_sources } if (angle_enable_vulkan) { sources += angle_white_box_perf_tests_vulkan_sources deps += [ "${angle_glslang_dir}:glslang_sources" ] } configs += [ "${angle_jsoncpp_dir}:jsoncpp_config", "${angle_root}:libANGLE_config", "${angle_root}:library_name_config", ] if (is_android) { use_native_activity = true } } } if (is_win || is_linux || is_android || is_mac || is_fuchsia) { import("angle_perftests.gni") # This test suite is designed to run against a generic GL implementation. angle_test("angle_perftests") { include_dirs = [ "." ] sources = angle_perf_tests_sources deps = [ ":angle_perftests_main", "${angle_jsoncpp_dir}:jsoncpp", "${angle_root}:angle_common", "${angle_root}:angle_gpu_info_util", "${angle_root}:angle_system_utils", "${angle_root}:angle_util", "${angle_root}:angle_util_loader_headers", ] data_deps = [ "${angle_root}:libEGL", "${angle_root}:libGLESv2", ] configs += [ "${angle_jsoncpp_dir}:jsoncpp_config", "${angle_root}:libANGLE_config", "${angle_root}:library_name_config", ] if (is_android) { use_native_activity = true } if (is_win || is_linux) { 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) { data_deps += [ "${angle_root}/third_party/glmark2:glmark2_glx" ] } } } ###----------------------------------------------------- ### 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/include", "$gles1_conform_root/platform", ] defines = [ "COMMON", "CONFORM_ALTERNATE_MAIN", "NULLWS", ] 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", ] } } # This source set is a bit special so we don't use angle_source_set. source_set("angle_gles1_conformance_no_gtest") { configs += [ ":angle_gles1_conform_support", "$angle_root:internal_config", ] public_configs = [ "$angle_root:angle_static", "$angle_root:angle_util_config", "$angle_root:gl_prototypes", ] testonly = true public_deps = [ "$angle_root:angle_common", "$angle_root:angle_util_static", "$angle_root:libEGL_static", "$angle_root:libGLESv1_CM_static", "$angle_root:libGLESv2_static", "$angle_root:preprocessor", "$angle_root:translator", ] 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", ] } angle_test("angle_gles1_conformance_tests") { deps = [ ":angle_end2end_tests_main", ":angle_gles1_conformance_no_gtest", ] include_dirs = [ "." ] 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}:libANGLE_config", "${angle_root}:library_name_config", "${angle_root}:angle_backend_config", ] if (is_android) { use_native_activity = true } } } ###----------------------------------------------------- ### dEQP tests ###----------------------------------------------------- if (build_angle_deqp_tests && !is_fuchsia) { import("deqp.gni") angle_tests_main("angle_deqp_tests_main") { main = "angle_deqp_tests_main" } 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 "/wd4838", # conversion requires a narrowing conversion "/wd4996", # deprecated ] } if (is_android) { include_dirs += [ "$deqp_path/framework/platform/android" ] } 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", ] if (is_clang) { # TODO(jmadill): Remove this once we fix dEQP. cflags_c = [ "-Wno-unused-local-typedef" ] cflags_cc = [ "-Wno-string-conversion", # implicit conversion turns string literal # into bool "-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) { # 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", "${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 } template("angle_deqp_source_set") { angle_source_set(target_name) { forward_variables_from(invoker, "*") suppressed_configs += deqp_undefine_configs } } 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_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_android || is_mac) { 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", ] } 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") { public_deps = [ ":angle_deqp_framework_common", ":angle_deqp_framework_egl", ":angle_deqp_glshared", "${angle_root}:angle_common", "${angle_root}:angle_util", "${angle_root}:libEGL", "${angle_root}:libGLESv2", ] configs += [ "${angle_root}:library_name_config" ] public_configs += [ ":angle_deqp_libtester_config" ] sources = deqp_libtester_sources if (is_android) { sources += deqp_libtester_sources_android libs = [ "log" ] } } angle_source_set("angle_deqp_gtest_support") { testonly = true public_deps = [ ":angle_deqp_tests_main", ":angle_test_expectations", "${angle_root}:angle_common", "${angle_root}:angle_util", ] libs = [] } set_defaults("angle_deqp_gtest") { deps = [] sources = [] data = [] } 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", ]) deps += [ ":angle_deqp_libtester", "$angle_root: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") { sources = [ "deqp_support/angle_deqp_tests_main.cpp" ] deps = [ ":$shared_library_name" ] } } angle_test("angle_deqp_${_api}_tests") { 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}_test_expectations.txt", "${invoker.mustpass_dir}/${invoker.mustpass_name}", ] if (is_android) { use_native_activity = true } } } _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" template("angle_deqp_core_gtest") { _api = target_name angle_deqp_gtest(target_name) { forward_variables_from(invoker, "*") defines += [ "ANGLE_DEQP_DATA_DIR=\"data\"" ] mustpass_name = "${_api}-master.txt" data = [ "$deqp_path/data/" ] } } angle_deqp_core_gtest("gles2") { defines = [ "ANGLE_DEQP_GLES2_TESTS" ] sources = deqp_gles2_sources mustpass_dir = _aosp_mustpass } angle_deqp_core_gtest("gles3") { defines = [ "ANGLE_DEQP_GLES3_TESTS" ] sources = deqp_gles3_sources mustpass_dir = _aosp_mustpass } angle_deqp_core_gtest("gles31") { defines = [ "ANGLE_DEQP_GLES31_TESTS" ] sources = deqp_gles31_sources 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", ] 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" ] } # The KHR dEQP tests expect a root prefix of "gl_cts" for some reason. # This means we need an extra copy step to make them happy. copy("angle_deqp_khr_data") { sources = [ "$deqp_path/external/openglcts/data/gles3/arrays.test", "$deqp_path/external/openglcts/data/gles3/declarations.test", "$deqp_path/external/openglcts/data/gles3/literal_parsing.test", "$deqp_path/external/openglcts/data/gles3/name_hiding.test", "$deqp_path/external/openglcts/data/gles3/preprocessor.test", "$deqp_path/external/openglcts/data/gles3/switch.test", ] outputs = [ "$root_out_dir/$angle_data_dir/gl_cts/data/gles3/{{source_file_part}}", ] } template("angle_deqp_khr_gtest") { angle_deqp_gtest(target_name) { forward_variables_from(invoker, "*") deps = [ ":angle_deqp_khr_common", ":angle_deqp_khr_data", ] defines += [ "ANGLE_DEQP_DATA_DIR=\"$angle_data_dir\"" ] mustpass_dir = _khronos_mustpass data = [ "$root_out_dir/$angle_data_dir/gl_cts/" ] } } 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" } }