xref: /llvm-project/llvm/utils/gn/secondary/compiler-rt/test/asan/BUILD.gn (revision c24a39b726e9116eec124654cb24937e3bfb57c7)
1import("//compiler-rt/target.gni")
2import("//compiler-rt/test/test.gni")
3import("//llvm/lib/Target/targets.gni")
4import("//llvm/utils/gn/build/toolchain/compiler.gni")
5import("//llvm/utils/gn/build/write_cmake_config.gni")
6import("//llvm/version.gni")
7
8write_cmake_config("lit_site_cfg") {
9  input = "lit.site.cfg.py.in"
10  output = "$target_gen_dir/lit.site.cfg.py"
11
12  values = [
13    "ASAN_LIT_SOURCE_DIR=" + rebase_path("."),
14    "ASAN_TEST_CONFIG_SUFFIX=$crt_current_target_suffix",
15    "ASAN_TEST_TARGET_CFLAGS=$target_flags_string",
16    "ASAN_TEST_TARGET_CC=",
17    "ASAN_TEST_BITS=64",
18    "ASAN_TEST_APPLE_PLATFORM=",
19    "ASAN_TEST_MIN_DEPLOYMENT_TARGET_FLAG=",
20    "ASAN_TEST_TARGET_ARCH=$crt_current_target_arch",
21    "COMPILER_RT_ARM_THUMB=",
22    "COMPILER_RT_BINARY_DIR=" + rebase_path("$root_gen_dir/compiler-rt"),
23    "LIT_SITE_CFG_IN_HEADER=## Autogenerated from $input, do not edit",
24  ]
25  if (host_os == "mac") {
26    values += [ "ASAN_TEST_DYNAMIC=1" ]
27  } else {
28    values += [ "ASAN_TEST_DYNAMIC=0" ]
29  }
30}
31
32if (current_toolchain != host_toolchain) {
33  group("asan_toolchain") {
34    deps = [
35      ":lit_site_cfg",
36      "//compiler-rt/include($host_toolchain)",
37      "//compiler-rt/lib/asan",
38      "//compiler-rt/lib/asan:ignorelist($host_toolchain)",
39      "//compiler-rt/lib/profile",
40      "//compiler-rt/test:lit_common_configured",
41      "//llvm/tools/llvm-nm($host_toolchain)",
42      "//llvm/tools/llvm-objdump($host_toolchain)",
43      "//llvm/tools/llvm-readobj($host_toolchain)",
44      "//llvm/tools/llvm-size($host_toolchain)",
45      "//llvm/tools/llvm-symbolizer($host_toolchain)",
46      "//llvm/tools/sancov($host_toolchain)",
47      "//llvm/utils/FileCheck($host_toolchain)",
48      "//llvm/utils/count($host_toolchain)",
49      "//llvm/utils/llvm-lit($host_toolchain)",
50      "//llvm/utils/not($host_toolchain)",
51      "//llvm/utils/split-file($host_toolchain)",
52    ]
53  }
54}
55
56supported_toolchains = []
57if (host_os == "linux" || host_os == "mac") {
58  supported_toolchains += [ "//llvm/utils/gn/build/toolchain:stage2_unix" ]
59} else if (host_os == "win") {
60  supported_toolchains += [ "//llvm/utils/gn/build/toolchain:stage2_win_x64" ]
61}
62
63group("asan") {
64  deps = []
65  foreach(toolchain, supported_toolchains) {
66    deps += [ ":asan_toolchain($toolchain)" ]
67  }
68}
69
70if (supported_toolchains != []) {
71  action("check-asan") {
72    script = "$root_build_dir/bin/llvm-lit"
73    if (host_os == "win") {
74      script += ".py"
75    }
76    args = [ "-sv" ]
77    foreach(toolchain, supported_toolchains) {
78      args += [ rebase_path(
79              get_label_info(":lit_site_cfg($toolchain)", "target_gen_dir"),
80              root_build_dir) ]
81    }
82    outputs = [ "$target_gen_dir/run-lit" ]  # Non-existing, so that ninja runs
83                                             # it each time.
84
85    # Since check-asan is always dirty, //:default doesn't depend on it so
86    # that it's not part of the default ninja target.  Hence, check-asan
87    # shouldn't have any deps except :asan. so that the default target is
88    # sure to build all the deps.
89    deps = [ ":asan" ]
90    testonly = true
91
92    pool = "//:console"
93  }
94}
95