# Copyright 2014 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("//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" } } }