import("//compiler-rt/target.gni") import("//compiler-rt/test/test.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("lit_site_cfg") { input = "lit.site.cfg.py.in" output = "$target_gen_dir/lit.site.cfg.py" values = [ "LIT_SITE_CFG_IN_HEADER=## Autogenerated from $input, do not edit", "HWASAN_TEST_CONFIG_SUFFIX=$crt_current_target_suffix", "HWASAN_TEST_TARGET_CFLAGS=$target_flags_string", "HWASAN_TEST_TARGET_ARCH=$crt_current_target_arch", "COMPILER_RT_BINARY_DIR=" + rebase_path("$root_gen_dir/compiler-rt"), "HWASAN_LIT_SOURCE_DIR=" + rebase_path("."), ] if (current_os == "android") { values += [ "HWASAN_ANDROID_FILES_TO_PUSH=[\"" + rebase_path( "$crt_current_out_dir/libclang_rt.hwasan$crt_current_target_suffix.so") + "\", \"" + rebase_path( "$root_out_dir/bin/llvm-symbolizer") + "\"]" ] } else { values += [ "HWASAN_ANDROID_FILES_TO_PUSH=[]" ] } } if (current_toolchain != host_toolchain) { group("hwasan_toolchain") { deps = [ ":lit_site_cfg", "//compiler-rt/include($host_toolchain)", "//compiler-rt/lib/cfi:blacklist($host_toolchain)", "//compiler-rt/lib/hwasan:hwasan_shared", "//compiler-rt/test:lit_common_configured", "//llvm/utils/FileCheck($host_toolchain)", "//llvm/utils/llvm-lit($host_toolchain)", "//llvm/utils/not($host_toolchain)", ] # FIXME: Make the host use the stage2 llvm-symbolizer as well, for # consistency. Currently lit.common.cfg sets up the sanitizer runtime to # look for llvm-symbolizer in llvm_tools_dir, and also looks there for # other tools which are built with the host toolchain. if (current_os == host_os && current_cpu == host_cpu) { deps += [ "//llvm/tools/llvm-symbolizer($host_toolchain)" ] } else { deps += [ "//llvm/tools/llvm-symbolizer" ] } } } supported_toolchains = [] if (host_os == "linux" && host_cpu == "x64") { supported_toolchains += [ "//llvm/utils/gn/build/toolchain:stage2_unix" ] } if (android_ndk_path != "") { supported_toolchains += [ "//llvm/utils/gn/build/toolchain:stage2_android_aarch64" ] } group("hwasan") { deps = [] foreach(toolchain, supported_toolchains) { deps += [ ":hwasan_toolchain($toolchain)" ] } } if (supported_toolchains != []) { action("check-hwasan") { script = "$root_build_dir/bin/llvm-lit" if (host_os == "win") { script += ".py" } args = [ "-sv" ] foreach(toolchain, supported_toolchains) { args += [ rebase_path( get_label_info(":lit_site_cfg($toolchain)", "target_gen_dir"), root_build_dir) ] } outputs = [ "$target_gen_dir/run-lit" ] # Non-existing, so that ninja runs # it each time. # Since check-hwasan is always dirty, //:default doesn't depend on it so that # it's not part of the default ninja target. Hence, check-hwasan shouldn't # have any deps except :hwasan. so that the default target is sure to build # all the deps. deps = [ ":hwasan" ] testonly = true pool = "//:console" } }