Build with a different gtest harness when in Chromium

Running test in a Chromium build requires using their gtest and gmock
targets as well as a harness that is in //base. Since we want to run
Dawn tests on the Chromium GPU bots, we need to support two
configurations both building tests standalone and in Chromium.

BUG=chromium:870747

Change-Id: I862e62a607e193a27562ece0f1f6d46d8728e446
Reviewed-on: https://dawn-review.googlesource.com/c/2080
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Reviewed-by: Stephen White <senorblanco@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
This commit is contained in:
Corentin Wallez 2018-10-31 10:49:21 +00:00 committed by Commit Bot service account
parent be948aa8e0
commit e92ad5bb89
2 changed files with 77 additions and 34 deletions

View File

@ -14,6 +14,7 @@
import("scripts/dawn_overrides_with_defaults.gni")
import("scripts/dawn_features.gni")
import("//build_overrides/build.gni")
import("//testing/test.gni")
@ -750,13 +751,11 @@ test("dawn_unittests") {
":libdawn_native_sources",
":libdawn_wire",
":mock_dawn_gen",
"third_party:gmock",
"third_party:gtest",
"third_party:gmock_and_gtest",
]
sources = get_target_outputs(":mock_dawn_gen")
sources += [
"src/tests/UnittestsMain.cpp",
"src/tests/unittests/BitSetIteratorTests.cpp",
"src/tests/unittests/CommandAllocatorTests.cpp",
"src/tests/unittests/EnumClassBitmasksTests.cpp",
@ -791,6 +790,14 @@ test("dawn_unittests") {
if (dawn_enable_d3d12) {
sources += [ "src/tests/unittests/d3d12/CopySplitTests.cpp" ]
}
# When building inside Chromium, use their gtest main function because it is
# needed to run in swarming correctly.
if (build_with_chromium) {
sources += [ "//gpu/dawn_unittests_main.cc" ]
} else {
sources += [ "src/tests/UnittestsMain.cpp" ]
}
}
test("dawn_end2end_tests") {
@ -803,13 +810,12 @@ test("dawn_end2end_tests") {
":libdawn_native",
":libdawn_wire",
"third_party:glfw",
"third_party:gtest",
"third_party:gmock_and_gtest",
]
sources = [
"src/tests/DawnTest.cpp",
"src/tests/DawnTest.h",
"src/tests/End2EndTestsMain.cpp",
"src/tests/end2end/BasicTests.cpp",
"src/tests/end2end/BindGroupTests.cpp",
"src/tests/end2end/BlendStateTests.cpp",
@ -828,6 +834,14 @@ test("dawn_end2end_tests") {
"src/tests/end2end/TextureViewTests.cpp",
"src/tests/end2end/ViewportOrientationTests.cpp",
]
# When building inside Chromium, use their gtest main function because it is
# needed to run in swarming correctly.
if (build_with_chromium) {
sources += [ "//gpu/dawn_end2end_tests_main.cc" ]
} else {
sources += [ "src/tests/End2EndTestsMain.cpp" ]
}
}
###############################################################################

87
third_party/BUILD.gn vendored
View File

@ -14,6 +14,7 @@
import("../scripts/dawn_overrides_with_defaults.gni")
import("../scripts/dawn_features.gni")
import("//build_overrides/build.gni")
is_msvc = is_win && !is_clang
@ -107,41 +108,69 @@ source_set("vulkan_headers") {
}
###############################################################################
# Gtest Gmock - build targets when outside of Chrome
# TODO(cwallez@chromium.org): Adapt them to build with Chromium's harness
# Gtest Gmock - Handle building inside and outside of Chromium.
###############################################################################
googletest_dir = dawn_googletest_dir
# When building outside of Chromium we need to define our own targets for GTest
# and GMock. However when compiling inside of Chromium we need to reuse the
# existing targets, both because Chromium has a special harness for swarming
# and because otherwise the "gn check" fails.
config("gtest_config") {
include_dirs = [
"${googletest_dir}/googletest",
"${googletest_dir}/googletest/include",
]
}
if (!build_with_chromium) {
# When we aren't in Chromium we define out own targets based on the location
# of the googletest repo.
googletest_dir = dawn_googletest_dir
static_library("gtest") {
testonly = true
sources = [
"${googletest_dir}/googletest/src/gtest-all.cc",
]
public_configs = [ ":gtest_config" ]
}
config("gtest_config") {
include_dirs = [
"${googletest_dir}/googletest",
"${googletest_dir}/googletest/include",
]
}
config("gmock_config") {
include_dirs = [
"${googletest_dir}/googlemock",
"${googletest_dir}/googlemock/include",
"${googletest_dir}/googletest/include",
]
}
static_library("gtest") {
testonly = true
sources = [
"${googletest_dir}/googletest/src/gtest-all.cc",
]
public_configs = [ ":gtest_config" ]
}
static_library("gmock") {
testonly = true
sources = [
"${googletest_dir}/googlemock/src/gmock-all.cc",
]
public_configs = [ ":gmock_config" ]
config("gmock_config") {
include_dirs = [
"${googletest_dir}/googlemock",
"${googletest_dir}/googlemock/include",
"${googletest_dir}/googletest/include",
]
}
static_library("gmock") {
testonly = true
sources = [
"${googletest_dir}/googlemock/src/gmock-all.cc",
]
public_configs = [ ":gmock_config" ]
}
group("gmock_and_gtest") {
testonly = true
public_deps = [
":gmock",
":gtest",
]
}
} else {
# When we are in Chromium we reuse its targets, and also add some deps that
# are needed to launch the test in swarming mode.
group("gmock_and_gtest") {
testonly = true
public_deps = [
"//base",
"//base/test:test_support",
"//testing/gmock",
"//testing/gtest",
]
}
}
###############################################################################