# Copyright 2014 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import("//build/symlink.gni")
# There are three machines involved with building and running tests:
# * the build host, where GN, ninja, and the build tools run
# * the test host, where the swarming task runs
# * the test target, where the test collateral runs
#
# image_diff runs on the test host.
#
# Normally all three machines can be built for using the same toolchain, but
# cross-compilation is an important exception. A few of these are:
# * Linux build host + Windows test host + Windows test target
# * Linux build host + Linux test host + Android test target
#
# Since the concept of a 'test host' toolchain is very rarely needed, GN does
# not provide it. Instead, determine it here.
if (target_os == "win" && host_os != "win") {
# When targeting Windows from not Windows, use the test target toolchain.
imagediff_toolchain = default_toolchain
} else if (target_os != host_os) {
# In common cross-compilation scenarios, the build host matches the test host.
# TODO: In chrome/android-on-mac cross builds, image_diff would still have to
# be built for Linux and this line is wrong.
imagediff_toolchain = host_toolchain
} else {
# When not cross-compiling, use the test target toolchain.
imagediff_toolchain = default_toolchain
}
# If the current toolchain is the test host toolchain, build the tool.
if (current_toolchain == imagediff_toolchain) {
executable("imagediff") {
output_name = "image_diff" # Different than dir name for historical
# reasons.
sources = [
"image_diff.cc",
"image_diff_png.cc",
"image_diff_png.h",
]
configs += [ "//build/config/compiler:wexit_time_destructors" ]
deps = [
"//base",
"//build/win:default_exe_manifest",
"//third_party/libpng",
"//third_party/zlib",
]
}
# Otherwise, if the current toolchain is the test target toolchain, make a
# symlink to the test host toolchain output so the tests can find it.
#
# Note that Windows does not follow links when searching for DLLs, so
# image_diff.exe from component builds won't run via symlink. Fortunately,
# Windows builds use the default_toolchain and so avoid making the link.
} else if (current_toolchain == default_toolchain &&
default_toolchain != imagediff_toolchain) {
binary_symlink("imagediff") {
binary_label = ":$target_name($imagediff_toolchain)"
binary_output_name = "image_diff"
# For Windows builds, the test host and test target are both Windows and so
# binary_symlink needs to use the Windows binary suffix.
if (target_os == "win") {
binary_output_name += ".exe"
}
}
}