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