# This file defines a template for adding a unittest binary.
#
# It's a thin wrapper around GN's built-in executable() target type and
# accepts the same parameters, and in addition this paramater:
#
#   has_custom_main (optional)
#       [bool] If set, link against gtest instead of UnitTestMain; for tests
#              that define their own main() function.
#
# Example use:
#
#   unittest("FormatTest") {
#     sources = [ ... ]
#     ...
#   }

template("unittest") {
  executable(target_name) {
    has_custom_main = false  # Default value.

    # Foward everything (has_custom_main if set; configs, sources, deps, ...).
    forward_variables_from(invoker, "*")
    assert(!defined(invoker.output_dir), "cannot set unittest output_dir")
    assert(!defined(invoker.testonly), "cannot set unittest testonly")

    # Common settings for all unit tests.
    # Unit test binaries shouldn't go right in out/gn/bin, for two reasons:
    # 1. That's where production binaries go.
    # 2. The CMake build doesn't put the unit tests of all projects (clang,
    #    lld,...) in one directory, so it's not guaranteed that there won't
    #    be name collisions between test binaries from separate projects.
    # Each lit suite takes an foo_obj_root parameter and puts temporary files
    # for lit tests at foo_obj_root/test and looks for unit test binaries
    # below foo_obj_root/unittests. As long as the BUILD.gn files processing
    # the lit.site.cfg.py.in files match the output dir here, it doesn't
    # matter all that much where the unit test binaries go, with the weak
    # constraints that test binaries of different projects should go in
    # different folders, and that it's not too difficult to manually
    # run the unit test binary if necessary. Using target_out_dir here
    # means that //clang/unittests/Format gets its binary in
    # out/gn/obj/clang/unittests/Format/FormatTests, which seems fine.
    #
    # If you change output_dir here, look through
    # `git grep target_out_dir '*/unittests/*'` and update those too.
    output_dir = target_out_dir

    if (has_custom_main) {
      deps += [ "//llvm/utils/unittest:gtest" ]
    } else {
      deps += [ "//llvm/utils/unittest/UnitTestMain" ]
    }
    testonly = true
  }
}

set_defaults("unittest") {
  configs = shared_binary_target_configs
}
