llvm/llvm/utils/gn/secondary/compiler-rt/test/lsan/BUILD.gn

import("//compiler-rt/target.gni")
import("//compiler-rt/test/test.gni")
import("//llvm/lib/Target/targets.gni")
import("//llvm/utils/gn/build/toolchain/compiler.gni")
import("//llvm/utils/gn/build/write_cmake_config.gni")
import("//llvm/version.gni")

write_cmake_config("asan_mode_cfg") {
  input = "lit.site.cfg.py.in"
  output = "$target_gen_dir/${crt_current_target_arch}AsanConfig/lit.site.cfg.py"
  values = [
    "LSAN_LIT_SOURCE_DIR=" + rebase_path("."),
    "LSAN_TEST_CONFIG_SUFFIX=$crt_current_target_suffix",
    "LSAN_TEST_TARGET_CFLAGS=$target_flags_string",
    # TODO(lgrey): Support standalone mode
    "LSAN_LIT_TEST_MODE=AddressSanitizer",
    "LSAN_TEST_TARGET_ARCH=$crt_current_target_arch",
    "COMPILER_RT_BINARY_DIR=" + rebase_path("$root_gen_dir/compiler-rt"),
    "LIT_SITE_CFG_IN_HEADER=## Autogenerated from $input, do not edit",
  ]
}

if (current_toolchain != host_toolchain) {
  group("lsan_toolchain") {
    deps = [
      ":asan_mode_cfg",
      "//compiler-rt/include($host_toolchain)",
      "//compiler-rt/lib/asan",
      "//compiler-rt/lib/lsan:common_sources",
      "//compiler-rt/lib/profile",
      "//compiler-rt/test:lit_common_configured",
      "//llvm/tools/llvm-readobj($host_toolchain)",
      "//llvm/tools/llvm-symbolizer($host_toolchain)",
      "//llvm/utils/FileCheck($host_toolchain)",
      "//llvm/utils/count($host_toolchain)",
      "//llvm/utils/llvm-lit($host_toolchain)",
      "//llvm/utils/not($host_toolchain)",
    ]
  }
}

supported_toolchains = []
if (host_os == "linux" || host_os == "mac") {
  supported_toolchains += [ "//llvm/utils/gn/build/toolchain:stage2_unix" ]
}

group("lsan") {
  deps = []
  foreach(toolchain, supported_toolchains) {
    deps += [ ":lsan_toolchain($toolchain)" ]
  }
}

if (supported_toolchains != []) {
  action("check-lsan") {
    script = "$root_build_dir/bin/llvm-lit"
    args = [ "-sv" ]
    foreach(toolchain, supported_toolchains) {
      test_dir = rebase_path(
              get_label_info(":lit_site_cfg($toolchain)", "target_gen_dir"),
              root_build_dir)
      args += [ 
        test_dir + "/${crt_current_target_arch}AsanConfig",
      ]
    }
    outputs = [ "$target_gen_dir/run-lit" ]  # Non-existing, so that ninja runs
                                             # it each time.

    # Since check-lsan is always dirty, //:default doesn't depend on it so
    # that it's not part of the default ninja target.  Hence, check-lsan
    # shouldn't have any deps except :lsan. so that the default target is
    # sure to build all the deps.
    deps = [ ":lsan" ]
    testonly = true

    pool = "//:console"
  }
}