| # 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" |
| } |
| } |
| } |